@reltio/remotes 1.4.1619 → 1.4.1621

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 (106) 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/1664.js +1 -1
  8. package/1707.js +1 -1
  9. package/1790.js +1 -1
  10. package/1840.js +1 -1
  11. package/1925.js +1 -1
  12. package/2049.js +1 -1
  13. package/2066.js +1 -1
  14. package/2201.js +1 -1
  15. package/2400.js +1 -1
  16. package/2404.js +1 -1
  17. package/2463.js +1 -1
  18. package/2641.js +1 -1
  19. package/3096.js +1 -1
  20. package/3348.js +1 -1
  21. package/3358.js +1 -1
  22. package/3373.js +1 -1
  23. package/3381.js +1 -1
  24. package/3383.js +1 -1
  25. package/3463.js +1 -1
  26. package/3469.js +1 -1
  27. package/3538.js +1 -1
  28. package/356.js +1 -1
  29. package/3727.js +1 -1
  30. package/3727.js.map +1 -1
  31. package/3875.js +1 -1
  32. package/3902.js +1 -1
  33. package/3926.js +1 -1
  34. package/415.js +1 -1
  35. package/4212.js +1 -1
  36. package/4390.js +1 -1
  37. package/4481.js +1 -1
  38. package/4703.js +1 -1
  39. package/4780.js +1 -1
  40. package/4806.js +1 -1
  41. package/4838.js +1 -1
  42. package/50.js +1 -1
  43. package/5034.js +1 -1
  44. package/5039.js +1 -1
  45. package/5039.js.map +1 -1
  46. package/5053.js +1 -1
  47. package/5108.js +1 -1
  48. package/5163.js +1 -1
  49. package/5617.js +1 -1
  50. package/6020.js +1 -1
  51. package/6173.js +2 -0
  52. package/6173.js.map +1 -0
  53. package/6228.js +1 -1
  54. package/6280.js +76 -0
  55. package/{2966.js.LICENSE.txt → 6280.js.LICENSE.txt} +0 -10
  56. package/6280.js.map +1 -0
  57. package/6287.js +1 -1
  58. package/6531.js +2 -0
  59. package/6531.js.map +1 -0
  60. package/6606.js +1 -1
  61. package/673.js +1 -1
  62. package/673.js.map +1 -1
  63. package/6799.js +1 -1
  64. package/6844.js +1 -1
  65. package/6853.js +1 -1
  66. package/6860.js +1 -1
  67. package/6903.js +1 -1
  68. package/7340.js +1 -1
  69. package/735.js +1 -1
  70. package/7422.js +1 -1
  71. package/7626.js +1 -1
  72. package/764.js +1 -1
  73. package/7896.js +1 -1
  74. package/8168.js +56 -0
  75. package/8168.js.LICENSE.txt +9 -0
  76. package/8168.js.map +1 -0
  77. package/820.js +1 -1
  78. package/8207.js +1 -1
  79. package/8322.js +1 -1
  80. package/8565.js +1 -1
  81. package/8741.js +1 -1
  82. package/9016.js +1 -1
  83. package/{3424.js → 9028.js} +2 -2
  84. package/9028.js.map +1 -0
  85. package/9283.js +1 -1
  86. package/9309.js +1 -1
  87. package/9328.js +1 -1
  88. package/9387.js +1 -1
  89. package/9719.js +1 -1
  90. package/9736.js +1 -1
  91. package/9861.js +1 -1
  92. package/987.js +1 -1
  93. package/99.js +1 -1
  94. package/9960.js +1 -1
  95. package/main.js +1 -1
  96. package/main.js.map +1 -1
  97. package/package.json +1 -1
  98. package/remoteEntry.js +1 -1
  99. package/remoteEntry.js.map +1 -1
  100. package/1488.js +0 -2
  101. package/1488.js.map +0 -1
  102. package/281.js +0 -2
  103. package/281.js.map +0 -1
  104. package/2966.js +0 -129
  105. package/2966.js.map +0 -1
  106. package/3424.js.map +0 -1
package/5039.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"5039.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AvatarWithFallback/AvatarWithFallback.tsx","webpack://@reltio/remotes/../components/src/components/BasicViewContent/styles.ts","webpack://@reltio/remotes/../components/src/components/BasicViewContent/BasicViewContent.tsx","webpack://@reltio/remotes/../components/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../components/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../components/src/icons/EmptySearchResults.tsx","webpack://@reltio/remotes/../components/src/icons/SelectAttributes.tsx","webpack://@reltio/remotes/../components/src/icons/NoData.tsx","webpack://@reltio/remotes/../components/src/icons/Error.tsx","webpack://@reltio/remotes/../components/src/components/HideOnShrink/HideOnShrink.tsx","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenuItemRender/styles.ts","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenuItemRender/SettingsMenuItemRender.tsx","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenu.tsx","webpack://@reltio/remotes/../components/src/components/SourceIcon/SourceIcon.tsx","webpack://@reltio/remotes/../components/src/components/VerticalDivider/VerticalDivider.js","webpack://@reltio/remotes/../components/src/components/charts/HOCs/withPercents.tsx","webpack://@reltio/remotes/../components/src/components/charts/hooks/useClickableStyle.ts","webpack://@reltio/remotes/../components/src/hooks/useActions.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ReloadFacetContext/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/types/DQDateRangeValue.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/dateRange.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DQDashboardStateContext/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/contexts/PermissionsProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/usePermissionsRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/theme/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DVFContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ChartsDataProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useEntityCount.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/ChartDataType.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/ViewType.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/RdmLookupState.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/defaultConfig.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/advancedFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/charts.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/NoDataLabels.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/mlDq.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DataLevelContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributes.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/DetailedAttributeType.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributeFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributeDetails.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartsDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/InfoDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/ChartDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/ChartDataTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/TooltipWithSquares/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/TooltipWithSquares/TooltipWithSquares.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/fillRate.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartData.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/rawFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useSearchRedirect.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/AnomalyDataKey.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/CustomLegend.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/ChartLegends.tsx","webpack://@reltio/remotes/../dq-dashboard/src/constants/ValidationMetric.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useExportParams.ts","webpack://@reltio/remotes/../dq-dashboard/src/icons/ExportResult.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPopupMenu/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPopupMenu/DQDashboardPopupMenu.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useExportData.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/EmptyStateVariants.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/DQDashboardError.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemContent/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemContent/DQLayoutItemContent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemHeader/DQLayoutItemHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemView/DQLayoutItemView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/PeriodChip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/PeriodChip/PeriodChip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/Bar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/StackedHorizontalBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useMlDqDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/positiveDynamic.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/negativeDynamic.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/ChartInfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/TimeSeriesInfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/barCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/getLineChartSettings.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/LineChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/AnomalyDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/uniquenessAnalysis.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/UniquenessAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/UniquenessAnalysisTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/dvf.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/includedInMatching.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/rdm.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/reference.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/required.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/AttributeTypeDetailIcon.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailChip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailChip/AttributeTypeDetailChip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetails/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetails/AttributeTypeDetails.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/HeaderInfo.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/boolean.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/date.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/float.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/integer.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/ssn.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/string.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/AttributeTypeIcon.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/AttributeTypeSummary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/EntityTypeSummary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/Summary/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/Summary/Summary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/DQDashboardErrorView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/DQDashboardErrorView/DQDashboardErrorView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/tableCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/niceOne.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/settingsIcon.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/notSupportedIcon.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/VVFChartNodata.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/hooks/useNoDataDvfType.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/hooks/useDvfs.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/OverflowingHandler.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/TableCellTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/LabelCellRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/NumberCellValueRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/TableWithBars.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomTableWithBarsChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomTableWithBarsChart/CustomTableWithBarsChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/TotalInfo.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/ViolatedValidationFuncChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useInvalidProfiles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/ViolatedValidationFuncTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FrequencyAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/XAxisLabel/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/XAxisLabel/XAxisLabel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/getBarChartSettings.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/BarTooltip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/BarTooltip/BarTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/InfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBackgroundOnHover.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/LengthStatisticsChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/SourceLabelRenderer/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/SourceLabelRenderer/SourceLabelRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CrosswalkAnalysisChart/CrosswalkAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ValueDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/MonthDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/DayOfWeekDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/DayOfMonthDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/PatternAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/StackedBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/ConsolidationPercentage.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/YAxisTickRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/ConsolidationRateChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/rdmTranscode.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/RDMTranscodeChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/RDMTranscodeChart/RDMTranscodeChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useRDMChartDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/ViewsFactory.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayoutItem/DQDashboardLayoutItem.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayout/DQDashboardLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Warning/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Warning/Warning.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/AttributeLevelLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DataLevelBreadcrumbs/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DataLevelBreadcrumbs/DataLevelBreadcrumbs.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/ContentSlider.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DataLevelSwitcher/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DataLevelSwitcher/DataLevelSwitcher.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useAttrTypeDetails.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailsIcons/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailsIcons/AttributeTypeDetailsIcons.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/FillRateLine/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/FillRateLine/FillRateLine.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/TreeLines/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/TreeLines/TreeLines.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/AttributeListItem.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/Option.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/AttributesFilters.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/DQDashboardAttributesList.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useFillRateRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardHeader/DQDashboardHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoContent/DQDashboardNoContent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/EntityLevelLayout/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/EntityLevelLayout/EntityLevelLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Selector/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Selector/Selector.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/EntityTypeSelector/EntityTypeSelector.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/LoadingComponent/icons/Loading.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/LoadingComponent/LoadingComponent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/UpdateTimeHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/SearchByOVSwitcher/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/SearchByOVSwitcher/SearchByOVSwitcher.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DQDashboardPerspectiveView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useEntityTypes.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDvfConfigLink.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDVF.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDebounceFunction.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/constants.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/index.tsx","webpack://@reltio/remotes/./src/dq-dashboard.ts"],"sourcesContent":["import Avatar from '@mui/material/Avatar';\nimport classnames from 'classnames';\nimport React, {useEffect, useState} from 'react';\n\nenum AvatarStates {\n ICON_MODE,\n TEXT_MODE,\n ERROR_MODE\n}\ntype Props = {\n className?: string;\n icon?: string;\n avatarText?: string;\n variant?: 'circular' | 'rounded' | 'square';\n rootClasses?: {\n iconRoot?: string;\n textRoot?: string;\n };\n};\nconst AvatarWithFallback = ({className, icon, avatarText, rootClasses, ...otherProps}: Props) => {\n const [state, setState] = useState<AvatarStates>(null);\n useEffect(() => {\n if (icon) {\n setState(AvatarStates.ICON_MODE);\n } else {\n setState(AvatarStates.TEXT_MODE);\n }\n }, [icon, avatarText]);\n const onImageLoadFail = () => {\n setState(AvatarStates.ERROR_MODE);\n };\n\n switch (state) {\n case AvatarStates.ICON_MODE:\n return (\n <Avatar\n className={classnames(className, rootClasses?.iconRoot)}\n src={icon}\n onError={onImageLoadFail}\n {...otherProps}\n />\n );\n case AvatarStates.TEXT_MODE:\n case AvatarStates.ERROR_MODE:\n return (\n <Avatar className={classnames(className, rootClasses?.textRoot)} {...otherProps}>\n {avatarText}\n </Avatar>\n );\n default:\n return null;\n }\n};\n\nexport default AvatarWithFallback;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n 'basic-view-content': {\n flex: '1 1 auto',\n padding: '0 24px 24px',\n '&:first-child': {\n paddingTop: '24px'\n }\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = React.ComponentPropsWithoutRef<'div'>;\n\nconst BasicViewContent = ({children, className, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles['basic-view-content'], className)} {...otherProps}>\n {children}\n </div>\n );\n};\n\nexport default BasicViewContent;\n","import {makeStyles} from '@mui/styles';\n\nconst maxWidth = 500;\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flex: '1 1 auto',\n flexWrap: 'nowrap',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '10px',\n overflow: 'auto',\n height: '100%',\n minHeight: '350px',\n boxSizing: 'border-box',\n '&$root_small': {\n minHeight: '160px'\n },\n '& $text': {\n color: theme.palette.text.primary,\n fontSize: '20px',\n fontWeight: 500,\n lineHeight: '24px',\n letterSpacing: '0.25px',\n textAlign: 'center'\n },\n '& $secondaryText': {\n color: theme.palette.text.secondary,\n fontSize: '15px',\n fontWeight: 300,\n lineHeight: '18px',\n letterSpacing: '0.11px',\n textAlign: 'center',\n paddingTop: '3px'\n }\n },\n root_small: {},\n embedded: {\n flexShrink: 0,\n width: '190px',\n height: '190px',\n padding: '8px'\n },\n full: {\n width: '256px',\n height: '256px'\n },\n textBox: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n maxWidth: maxWidth,\n marginTop: '16px'\n },\n text: {},\n secondaryText: {},\n button: {\n minHeight: 36,\n minWidth: 64,\n maxWidth: maxWidth,\n padding: '10px 16px',\n borderRadius: '2px',\n boxShadow:\n '0 0 2px 0 rgba(0,0,0,0.12), 0 2px 2px 0 rgba(0,0,0,0.24), 0 0 8px 0 rgba(0,0,0,0.12), 0 8px 8px 0 rgba(0,0,0,0.24)',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px',\n marginTop: '24px'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {identity} from 'ramda';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport EmptySearchResultsIcon from '../../icons/EmptySearchResults';\nimport SelectAttributesIcon from '../../icons/SelectAttributes';\nimport NoData from '../../icons/NoData';\nimport Error from '../../icons/Error';\nimport {useStyles} from './styles';\n\nexport enum EMPTY_STATE_VARIANTS {\n full = 'full',\n embedded = 'embedded',\n small = 'small'\n}\n\nexport const EMPTY_STATE_ICONS = {\n SEARCH_RESULTS: EmptySearchResultsIcon,\n SELECT_ATTRIBUTES: SelectAttributesIcon,\n NO_DATA: NoData,\n ERROR: Error\n};\n\ntype Props = {\n variant?: EMPTY_STATE_VARIANTS;\n LogoRenderer?: React.ElementType;\n text: string;\n secondaryText?: string;\n buttonTitle?: string;\n access?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n};\n\nconst EmptyState = ({\n variant = EMPTY_STATE_VARIANTS.full,\n LogoRenderer = EMPTY_STATE_ICONS.SEARCH_RESULTS,\n text,\n secondaryText,\n buttonTitle,\n onClick = identity,\n access\n}: Props) => {\n const styles = useStyles();\n const showButton = access && buttonTitle;\n\n return (\n <div className={classnames(styles.root, styles[`root_${variant}`])}>\n <LogoRenderer className={styles[`${variant}`]} />\n <div className={styles.textBox}>\n <Typography variant=\"h5\" classes={{h5: styles.text}}>\n {text}\n </Typography>\n {secondaryText && (\n <Typography variant=\"subtitle1\" classes={{subtitle1: styles.secondaryText}}>\n {secondaryText}\n </Typography>\n )}\n </div>\n {showButton && (\n <Button className={styles.button} variant=\"contained\" color=\"primary\" onClick={onClick}>\n {buttonTitle}\n </Button>\n )}\n </div>\n );\n};\n\nexport default EmptyState;\n","import React from 'react';\n\nconst SvgEmptySearchResults: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={256}\n height={256}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <radialGradient\n cx=\"50%\"\n cy=\"100%\"\n fx=\"50%\"\n fy=\"100%\"\n r=\"81.681%\"\n gradientTransform=\"matrix(.98998 0 0 .612 .005 .388)\"\n id=\"EmptySearchResults_svg__c\"\n >\n <stop stopColor=\"#00BFFF\" stopOpacity={0.5} offset=\"0%\" />\n <stop stopColor=\"#9EE8FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <radialGradient\n cx=\"50%\"\n cy=\"111.651%\"\n fx=\"50%\"\n fy=\"111.651%\"\n r=\"87.693%\"\n gradientTransform=\"matrix(0 -.97693 .7263 0 -.31 1.605)\"\n id=\"EmptySearchResults_svg__f\"\n >\n <stop stopColor=\"#91F8E5\" stopOpacity={0.6} offset=\"0%\" />\n <stop stopColor=\"#14F7FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <radialGradient\n cx=\"50%\"\n cy=\"103.659%\"\n fx=\"50%\"\n fy=\"103.659%\"\n r=\"90.207%\"\n gradientTransform=\"matrix(0 -1 2.23905 0 -1.821 1.537)\"\n id=\"EmptySearchResults_svg__g\"\n >\n <stop stopColor=\"#FFF\" offset=\"0%\" />\n <stop stopColor=\"#73FAFF\" stopOpacity={0.21} offset=\"59.38%\" />\n <stop stopColor=\"#14F7FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <linearGradient x1=\"50%\" y1=\"170.771%\" x2=\"50%\" y2=\"10.303%\" id=\"EmptySearchResults_svg__e\">\n <stop stopColor=\"#91F8E5\" offset=\"0%\" />\n <stop stopColor=\"#99FCFF\" stopOpacity={0} offset=\"100%\" />\n </linearGradient>\n <filter\n x=\"-25.9%\"\n y=\"-26.2%\"\n width=\"151.8%\"\n height=\"152.3%\"\n filterUnits=\"objectBoundingBox\"\n id=\"EmptySearchResults_svg__d\"\n >\n <feGaussianBlur stdDeviation={15} in=\"SourceGraphic\" />\n </filter>\n <circle id=\"EmptySearchResults_svg__a\" cx={128} cy={128} r={128} />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"EmptySearchResults_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#EmptySearchResults_svg__a\" />\n </mask>\n <use fillOpacity={0.2} fill=\"#A792CD\" xlinkHref=\"#EmptySearchResults_svg__a\" />\n <g mask=\"url(#EmptySearchResults_svg__b)\">\n <g transform=\"translate(56 34)\">\n <g opacity={0.9} strokeWidth={1} fill=\"#FFF\">\n <path d=\"M0 6.99C0 3.13 3.137 0 7 0h247.067c3.866 0 7 3.144 7 6.99v169.353c0 3.86-3.137 6.99-7 6.99H7c-3.866 0-7-3.143-7-6.99V6.99z\" />\n <path\n d=\"M13 25.99c0-3.86 3.137-6.99 7-6.99h247.067c3.866 0 7 3.144 7 6.99v169.353c0 3.86-3.137 6.99-7 6.99H20c-3.866 0-7-3.143-7-6.99V25.99z\"\n opacity={0.4}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 45.833)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <path\n d=\"M10.334 1.091c5.707 0 10.334 4.627 10.334 10.334v.067c0 5.707-4.627 10.333-10.334 10.333S0 17.2 0 11.492v-.067C0 5.718 4.627 1.091 10.334 1.091z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M35.365.861h69.768a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048h126.164a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869H73.89a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <rect\n fill=\"#645F6D\"\n opacity={0.5}\n x={21.756}\n y={17.46}\n width={87.022}\n height={12.004}\n rx={6.002}\n />\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 87.302)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <rect fill=\"#E3EBF4\" x={0} y={1.091} width={20.668} height={20.734} rx={10.334} />\n <path\n d=\"M35.365.861h82.647a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048H174.58a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869h113.119a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 128.77)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <path\n d=\"M10.334 1.091c5.707 0 10.334 4.627 10.334 10.334v.067c0 5.707-4.627 10.333-10.334 10.333S0 17.2 0 11.492v-.067C0 5.718 4.627 1.091 10.334 1.091z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M35.365.861h110.929a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048h92.443a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869H73.89a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n </g>\n </g>\n <g mask=\"url(#EmptySearchResults_svg__b)\">\n <path\n fill=\"#446275\"\n d=\"M72.246 84.033l8.66 5-35.5 61.488-8.66-5-12.556-24.729-51.307-29.622 20.431-35.388 50.648 29.242z\"\n />\n <path\n d=\"M62.906 120.21l-80.091-46.24 10.5-18.188 50.647 29.242 28.284-.99 8.66 5-18 31.176z\"\n fillOpacity={0.2}\n fill=\"#FFF\"\n />\n <path\n d=\"M27.566 75.558L3.877 109.065l-5.013-2.895 26.045-32.146 2.657 1.534zm9.467 5.466L13.345 114.53l-5.014-2.895L34.377 79.49l2.656 1.534zm8.158 4.71l-22.32 34.297-5.013-2.895L43.903 84.99l1.288.744z\"\n fill=\"#527585\"\n />\n <path\n d=\"M11.524 90.544l13.385-16.52 2.657 1.534-12.174 17.22-3.868-2.234zm9.467 5.467L34.377 79.49l2.656 1.534-12.174 17.22-3.868-2.233zm9.527 5.5L43.903 84.99l1.288.744-11.47 17.626-3.203-1.85z\"\n fill=\"#76A2B5\"\n opacity={0.6}\n />\n <path\n d=\"M.355 59.848l-23.689 33.507-5.013-2.895 26.045-32.146 2.657 1.534zm9.468 5.466L-13.866 98.82l-5.013-2.895L7.166 63.78l2.657 1.534zm8.158 4.71L-4.34 104.32l-5.014-2.895L16.692 69.28l1.289.744z\"\n fillOpacity={0.1}\n fill=\"#000\"\n />\n <g>\n <path\n fill=\"url(#EmptySearchResults_svg__c)\"\n opacity={0.993}\n filter=\"url(#EmptySearchResults_svg__d)\"\n d=\"M.63 0h173.74L123 172H52z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__e)\"\n opacity={0.3}\n d=\"M4 9h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__f)\"\n opacity={0.3}\n d=\"M4 2h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__g)\"\n d=\"M4 9h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path fill=\"#FFF\" opacity={0.196} d=\"M212.363 205.344l-1 1.732L60.418 124.52l4.977-8.62z\" />\n </g>\n <path fill=\"#76A2B5\" d=\"M73.112 84.533l-35.5 61.488-.866-.5 35.5-61.488z\" />\n <path fill=\"#F3F3F3\" d=\"M80.906 89.033l-35.5 61.488-.866-.5 35.5-61.488z\" />\n <path fill=\"#538196\" d=\"M55.112 115.71l-17.5 30.311-.866-.5 17.5-30.31z\" />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgEmptySearchResults;\n","import React from 'react';\n\nconst SvgSelectAttributes: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={256} height={256} viewBox=\"0 0 256 256\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx={128} cy={128} r={128} fill=\"#0072CE\" fillOpacity={0.1} />\n <mask\n id=\"SelectAttributes_svg__a\"\n style={{\n maskType: 'alpha'\n }}\n maskUnits=\"userSpaceOnUse\"\n x={0}\n y={0}\n width={256}\n height={256}\n >\n <circle cx={128} cy={128} r={128} fill=\"#fff\" />\n </mask>\n <g mask=\"url(#SelectAttributes_svg__a)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M-16 9h256v247H-16V9z\"\n fill=\"url(#SelectAttributes_svg__paint0_linear_0_19219)\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M187.761 56.865l58.639 58.639v148.871H93.383L52 225.083V56.865h135.761z\"\n fill=\"url(#SelectAttributes_svg__paint1_linear_0_19219)\"\n />\n <path\n opacity={0.06}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M47 58h202a7 7 0 017 7v157a7 7 0 01-7 7H47a7 7 0 01-7-7V65a7 7 0 017-7z\"\n fill=\"#000\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M50 56h201a5 5 0 015 5v157a5 5 0 01-5 5H50a5 5 0 01-5-5V61a5 5 0 015-5z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 72.635a3 3 0 013-3H150a3 3 0 110 6h-41.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 84.635a3 3 0 013-3h64.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 163a3 3 0 013-3H150a3 3 0 110 6h-41.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 175a3 3 0 013-3h64.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 193a3 3 0 013-3H190a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 205a3 3 0 013-3h74.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138.376 103a3 3 0 013-3H223a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138 115a3 3 0 013-3h64.205a3 3 0 110 6H141a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <circle cx={67} cy={79} r={9} fill=\"#B6C7DB\" />\n <circle cx={67} cy={79} r={9} fill=\"#B6C7DB\" />\n <circle cx={120} cy={106} r={6} fill=\"#B6C7DB\" />\n <circle cx={120} cy={136} r={6} fill=\"#B6C7DB\" />\n <circle cx={67} cy={169} r={9} fill=\"#B6C7DB\" />\n <circle cx={67} cy={199} r={9} fill=\"#B6C7DB\" />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138.376 133a3 3 0 013-3H223a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138 145a3 3 0 013-3h74.205a3 3 0 110 6H141a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M92.514 108v-8h-2V140.365h11.178v-2h-9.178V110h9.178v-2h-9.178z\"\n fill=\"#2B98F0\"\n />\n <path\n opacity={0.54}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M95.071 77l-3.535 3.535L88 77h7.071z\"\n fill=\"#000\"\n />\n <path\n opacity={0.6}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M50 22h186a6 6 0 016 6v18a6 6 0 01-6 6H50a6 6 0 01-6-6V28a6 6 0 016-6z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58 37a6 6 0 016-6h70a6 6 0 110 12H64a6 6 0 01-6-6zM148 37a6 6 0 016-6h10a6 6 0 110 12h-10a6 6 0 01-6-6z\"\n fill=\"#979797\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"SelectAttributes_svg__paint0_linear_0_19219\"\n x1={-16}\n y1={9}\n x2={-16}\n y2={256}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FAFAFA\" stopOpacity={0.01} />\n <stop offset={1} stopColor=\"#F4F4F4\" />\n </linearGradient>\n <linearGradient\n id=\"SelectAttributes_svg__paint1_linear_0_19219\"\n x1={266.117}\n y1={181.111}\n x2={154.882}\n y2={77.681}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity={0.01} />\n <stop offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport default SvgSelectAttributes;\n","import React from 'react';\n\nconst SvgNoData: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={256}\n height={256}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <linearGradient x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\" id=\"NoData_svg__b\">\n <stop stopColor=\"#FAFAFA\" stopOpacity={0} offset=\"0%\" />\n <stop stopColor=\"#F4F4F4\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"69.573%\" y1=\"86.747%\" x2=\"38.144%\" y2=\"33.403%\" id=\"NoData_svg__d\">\n <stop stopColor=\"#000\" stopOpacity={0} offset=\"0%\" />\n <stop stopColor=\"#000\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\" id=\"NoData_svg__e\">\n <stop stopColor=\"#EEFBFF\" offset=\"0%\" />\n <stop stopColor=\"#0072CE\" offset=\"100%\" />\n </linearGradient>\n <filter\n x=\"-7.7%\"\n y=\"-7.5%\"\n width=\"115.3%\"\n height=\"115%\"\n filterUnits=\"objectBoundingBox\"\n id=\"NoData_svg__f\"\n >\n <feOffset dx={0} dy={2} in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n <feGaussianBlur stdDeviation={2} in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" />\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n />\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <circle id=\"NoData_svg__a\" cx={128} cy={128} r={128} />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"NoData_svg__c\" fill=\"#fff\">\n <use xlinkHref=\"#NoData_svg__a\" />\n </mask>\n <use fillOpacity={0.1} fill=\"#0072CE\" xlinkHref=\"#NoData_svg__a\" />\n <path fill=\"url(#NoData_svg__b)\" mask=\"url(#NoData_svg__c)\" d=\"M0 9h256v247H0z\" />\n <g mask=\"url(#NoData_svg__c)\">\n <g transform=\"translate(29 37)\">\n <g opacity={0.9} strokeWidth={1} fill=\"#FFF\">\n <path fillOpacity={0.8} opacity={0.5} d=\"M14.565 8h228.144v176.476H14.565z\" />\n <path d=\"M0 8.01C0 3.586 3.576 0 7.997 0h223.838a7.997 7.997 0 017.997 8.01v152.401c0 4.424-3.577 8.01-7.997 8.01H7.997A7.997 7.997 0 010 160.411V8.01z\" />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 42.105)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <path\n d=\"M9.493 1.003a9.493 9.493 0 019.494 9.493v.06a9.493 9.493 0 01-18.987 0v-.06a9.493 9.493 0 019.493-9.493z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M32.488.791h64.093a3.509 3.509 0 110 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h115.902a2.506 2.506 0 010 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846H67.88a1.504 1.504 0 110 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <rect\n fill=\"#645F6D\"\n opacity={0.5}\n x={19.986}\n y={16.04}\n width={79.944}\n height={11.028}\n rx={5.514}\n />\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 80.2)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <rect fill=\"#E3EBF4\" x={0} y={1.003} width={18.987} height={19.048} rx={9.493} />\n <path\n d=\"M32.488.791h75.925a3.509 3.509 0 010 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h128.893a2.506 2.506 0 110 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846h103.918a1.504 1.504 0 010 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 118.296)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <path\n d=\"M9.493 1.003a9.493 9.493 0 019.494 9.493v.06a9.493 9.493 0 01-18.987 0v-.06a9.493 9.493 0 019.493-9.493z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M32.488.791h101.906a3.509 3.509 0 010 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h84.924a2.506 2.506 0 010 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846H67.88a1.504 1.504 0 110 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n </g>\n </g>\n <g mask=\"url(#NoData_svg__c)\">\n <path\n d=\"M154.445 45.134v154.072H36.625V45.134h.811C35.508 62.52 41.07 80.609 54.12 93.944c22.74 23.235 59.61 23.235 82.352 0 13.05-13.335 18.612-31.424 16.683-48.81h1.29z\"\n fill=\"url(#NoData_svg__d)\"\n opacity={0.1}\n transform=\"rotate(-30 291.014 34.548)\"\n />\n <path\n d=\"M27.473 93.234c17.964 18.355 47.09 18.355 65.054 0s17.964-48.113 0-66.468c-17.964-18.355-47.09-18.355-65.054 0s-17.964 48.113 0 66.468z\"\n fill=\"url(#NoData_svg__e)\"\n opacity={0.2}\n transform=\"translate(70 86)\"\n />\n <g filter=\"url(#NoData_svg__f)\" strokeWidth={1} fill=\"none\" transform=\"translate(70 86)\">\n <path\n d=\"M59.697 0c32.97 0 59.697 26.746 59.697 59.738 0 15.185-5.662 29.047-14.988 39.587l51.204 51.24a89.336 89.336 0 01-10.097 9.392l-51.38-51.416c-9.73 6.888-21.61 10.936-34.436 10.936C26.727 119.477 0 92.73 0 59.738 0 26.746 26.727 0 59.697 0zm0 17.756c-23.17 0-41.953 18.796-41.953 41.982s18.783 41.982 41.953 41.982 41.953-18.796 41.953-41.982-18.783-41.982-41.953-41.982z\"\n fill=\"#B5C8C9\"\n />\n <path\n d=\"M21.508 105.656C8.365 94.698 0 78.196 0 59.738 0 26.746 26.727 0 59.697 0c18.444 0 34.935 8.37 45.885 21.523l-9.794 9.8c-8.408-10.68-21.45-17.537-36.091-17.537-25.361 0-45.92 20.573-45.92 45.952 0 14.652 6.852 27.702 17.525 36.117l-9.794 9.8z\"\n fillOpacity={0.4}\n fill=\"#FFF\"\n />\n </g>\n <path\n d=\"M97.473 179.234c17.964 18.355 47.09 18.355 65.054 0s17.964-48.113 0-66.468c-17.964-18.355-47.09-18.355-65.054 0s-17.964 48.113 0 66.468z\"\n fill=\"#D9F5FF\"\n opacity={0.4}\n style={{\n mixBlendMode: 'soft-light'\n }}\n />\n <path\n d=\"M123.885 158.736c0-3.929.444-7.03 1.332-9.304.888-2.274 2.328-4.245 4.32-5.914 1.99-1.668 3.504-3.195 4.54-4.581 1.037-1.386 1.555-2.913 1.555-4.581 0-4.064-1.75-6.095-5.248-6.095-1.614 0-2.92.592-3.915 1.776-.996 1.184-1.52 2.785-1.574 4.803H111.25c.054-5.382 1.75-9.573 5.086-12.574 3.337-3 8.02-4.5 14.047-4.5 6.001 0 10.65 1.386 13.946 4.157 3.297 2.772 4.945 6.714 4.945 11.827 0 2.234-.444 4.265-1.332 6.095-.888 1.83-2.315 3.7-4.279 5.61l-4.642 4.32c-1.318 1.265-2.233 2.563-2.745 3.895-.51 1.332-.793 3.02-.847 5.066h-11.545zm-1.655 12.27c0-1.99.72-3.625 2.16-4.904 1.44-1.278 3.236-1.917 5.389-1.917 2.152 0 3.949.64 5.388 1.917 1.44 1.279 2.16 2.913 2.16 4.905 0 1.991-.72 3.626-2.16 4.904-1.44 1.278-3.236 1.917-5.388 1.917-2.153 0-3.95-.639-5.389-1.917-1.44-1.278-2.16-2.913-2.16-4.904z\"\n fillOpacity={0.87}\n fill=\"#000\"\n style={{\n mixBlendMode: 'overlay'\n }}\n />\n <path\n d=\"M123.885 158.736c0-3.929.444-7.03 1.332-9.304.888-2.274 2.328-4.245 4.32-5.914 1.99-1.668 3.504-3.195 4.54-4.581 1.037-1.386 1.555-2.913 1.555-4.581 0-4.064-1.75-6.095-5.248-6.095-1.614 0-2.92.592-3.915 1.776-.996 1.184-1.52 2.785-1.574 4.803H111.25c.054-5.382 1.75-9.573 5.086-12.574 3.337-3 8.02-4.5 14.047-4.5 6.001 0 10.65 1.386 13.946 4.157 3.297 2.772 4.945 6.714 4.945 11.827 0 2.234-.444 4.265-1.332 6.095-.888 1.83-2.315 3.7-4.279 5.61l-4.642 4.32c-1.318 1.265-2.233 2.563-2.745 3.895-.51 1.332-.793 3.02-.847 5.066h-11.545zm-1.655 12.27c0-1.99.72-3.625 2.16-4.904 1.44-1.278 3.236-1.917 5.389-1.917 2.152 0 3.949.64 5.388 1.917 1.44 1.279 2.16 2.913 2.16 4.905 0 1.991-.72 3.626-2.16 4.904-1.44 1.278-3.236 1.917-5.388 1.917-2.153 0-3.95-.639-5.389-1.917-1.44-1.278-2.16-2.913-2.16-4.904z\"\n fillOpacity={0.38}\n fill=\"#3C74B4\"\n />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgNoData;\n","import React from 'react';\n\nconst SvgError: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={88} height={88} viewBox=\"0 0 88 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask\n id=\"Error_svg__a\"\n style={{\n maskType: 'alpha'\n }}\n maskUnits=\"userSpaceOnUse\"\n x={0}\n y={0}\n width={88}\n height={88}\n >\n <path d=\"M44 88c24.3 0 44-19.7 44-44S68.3 0 44 0 0 19.7 0 44s19.7 44 44 44z\" fill=\"#fff\" />\n </mask>\n <g mask=\"url(#Error_svg__a)\">\n <path\n d=\"M44 88c24.3 0 44-19.7 44-44S68.3 0 44 0 0 19.7 0 44s19.7 44 44 44z\"\n fill=\"#CAC4D5\"\n fillOpacity={0.3}\n />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.987 6.73l49.449 6.072a.687.687 0 01.596.767l-7.845 63.888a.688.688 0 01-.766.6L7.214 71.4a.688.688 0 01-.599-.763l.408-3.326L19.987 6.73z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.267 25.921l45.86-19.466a.687.687 0 01.9.366l25.15 59.251a.61.61 0 01-.386.84L22.34 82.765a.719.719 0 01-.887-.445l-20.185-56.4z\"\n fill=\"#fff\"\n />\n <path\n d=\"M65.631 9.23H11.017a.688.688 0 00-.687.687v64.37c0 .38.307.687.687.687h54.614c.38 0 .688-.308.688-.687V9.917a.688.688 0 00-.688-.688z\"\n fill=\"#F9F9F9\"\n />\n <path\n opacity={0.1}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 34.95l3.105-1.666 7.31-4.025 8.852 3.472 7.89-5.223 8.036-2.628 8.113 5.193 3.352-10.255v16.967H14.935l-.05-1.835z\"\n fill=\"#9C6CF0\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 32.331l3.105-3.761 7.31 4.31 8.852 1.656 7.89-2.205 8.036 1.827 8.113-12.643 3.352.742V36.36H14.935l-.05-4.029z\"\n fill=\"#FA82AA\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 34.946l3.105.432 7.31 1.01 8.852-5.117 7.89 3.675 8.036 1.839 8.113-1.839 3.352.811v1.028H14.935l-.05-1.839z\"\n fill=\"#4DBEE9\"\n />\n <path\n opacity={0.1}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M61.543 35.288l-.05 1.497H14.885v-5.239l3.352-.276 8.114 4.697 8.036-.679 7.889.82 8.852-.616 7.31-1.601 3.105 1.397z\"\n fill=\"#4DBEE9\"\n />\n <path d=\"M21.036 40.178h-5.09a.636.636 0 000 1.272h5.09a.636.636 0 100-1.272z\" fill=\"#ACACAC\" />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM25.914 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM39.91 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM21.248 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.273 1.273 0 01-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM35.245 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM30.58 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM44.577 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.273 1.273 0 01-2.545 0V57.144c0-.702.57-1.272 1.273-1.272z\"\n fill=\"#BDBDBD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 65.628c.703 0 1.273.57 1.273 1.272v2.121a1.272 1.272 0 11-2.545 0v-2.12c0-.703.57-1.273 1.272-1.273zM25.914 62.658c.702 0 1.272.57 1.272 1.273v5.09a1.272 1.272 0 11-2.545 0v-5.09c0-.703.57-1.273 1.273-1.273zM39.91 65.628c.703 0 1.273.57 1.273 1.272v2.121a1.272 1.272 0 11-2.545 0v-2.12c0-.703.57-1.273 1.273-1.273zM21.248 66.477c.702 0 1.272.57 1.272 1.272v1.273a1.273 1.273 0 01-2.545 0v-1.273c0-.703.57-1.272 1.273-1.272z\"\n fill=\"#4DBEE9\"\n />\n <path\n d=\"M36.518 65.628a1.272 1.272 0 00-2.545 0v3.393a1.272 1.272 0 102.545 0v-3.393zM31.852 62.234a1.272 1.272 0 10-2.545 0v6.787a1.272 1.272 0 102.545 0v-6.787z\"\n fill=\"#4DBEE9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M44.577 60.962c.702 0 1.272.57 1.272 1.272v6.787a1.273 1.273 0 01-2.545 0v-6.787c0-.702.57-1.272 1.273-1.272z\"\n fill=\"#4DBEE9\"\n />\n <path d=\"M18.915 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#9C6CF0\" />\n <path\n opacity={0.5}\n d=\"M34.185 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\"\n fill=\"#4DBEE9\"\n />\n <path\n opacity={0.3}\n d=\"M49.454 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\"\n fill=\"#4DBEE9\"\n />\n <path opacity={0.8} d=\"M26.55 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#FB6597\" />\n <path d=\"M41.82 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#4DBEE9\" />\n <path opacity={0.2} d=\"M57.09 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#4DBEE9\" />\n <path\n opacity={0.5}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849zM31.851 19.818h4.666a.424.424 0 010 .849h-4.666a.424.424 0 110-.849zM47.121 19.818h4.666a.424.424 0 010 .849h-4.666a.424.424 0 010-.849zM24.217 19.818h4.665a.424.424 0 010 .849h-4.665a.424.424 0 010-.849zM39.486 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849zM54.756 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849z\"\n fill=\"#ACACAC\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.946 43.571h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 010-1.273zM15.946 46.116h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 010-1.273zM15.946 48.661h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 110-1.273zM23.58 43.571h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 010-1.273zM23.58 46.116h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 010-1.273zM23.58 48.661h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 110-1.273zM49.454 43.571h11.028a.636.636 0 010 1.273H49.454a.636.636 0 010-1.273zM49.454 46.116h11.028a.636.636 0 010 1.273H49.454a.636.636 0 010-1.273zM49.454 48.661h11.028a.636.636 0 010 1.273H49.454a.636.636 0 110-1.273zM31.215 43.571h15.27a.636.636 0 110 1.273h-15.27a.636.636 0 010-1.273zM31.215 46.116h15.27a.636.636 0 010 1.273h-15.27a.636.636 0 010-1.273zM31.215 48.661h15.27a.636.636 0 010 1.273h-15.27a.636.636 0 010-1.273zM15.946 51.206h5.09a.636.636 0 110 1.272h-5.09a.636.636 0 110-1.272zM23.58 51.206h5.09a.636.636 0 110 1.272h-5.09a.636.636 0 110-1.272zM49.454 51.206h11.028a.636.636 0 010 1.272H49.454a.636.636 0 110-1.272zM31.215 51.206h15.27a.636.636 0 110 1.272h-15.27a.636.636 0 010-1.272z\"\n fill=\"#E9E9E9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M49.878 55.872h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 110-1.273z\"\n fill=\"#ACACAC\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M49.878 59.69h11.029a.636.636 0 010 1.272H49.878a.636.636 0 110-1.273zM49.878 62.234h11.029a.636.636 0 010 1.273H49.878a.636.636 0 010-1.273zM49.878 64.78h11.029a.636.636 0 010 1.272H49.878a.636.636 0 010-1.273z\"\n fill=\"#E9E9E9\"\n />\n <path d=\"M54.968 67.324h-5.09a.636.636 0 000 1.273h5.09a.636.636 0 000-1.273z\" fill=\"#E9E9E9\" />\n <g filter=\"url(#Error_svg__filter0_d)\">\n <path\n d=\"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\"\n fill=\"#000\"\n />\n </g>\n <path\n d=\"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.15}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 34.719c12.34 0 22.344 10.003 22.344 22.343S69.746 79.406 57.406 79.406c-12.34 0-22.343-10.003-22.343-22.344 0-12.34 10.003-22.343 22.343-22.343zm-.172 2.406c-10.916 0-19.765 8.85-19.765 19.766 0 10.916 8.85 19.765 19.765 19.765C68.151 76.656 77 67.806 77 56.891c0-10.917-8.85-19.766-19.766-19.766z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 38.844c10.062 0 18.219 8.157 18.219 18.218 0 10.062-8.157 18.22-18.219 18.22-10.062 0-18.218-8.158-18.218-18.22 0-10.061 8.156-18.218 18.218-18.218zm0 2.043c-8.933 0-16.175 7.242-16.175 16.175 0 8.934 7.242 16.176 16.175 16.176 8.934 0 16.176-7.242 16.176-16.175 0-8.934-7.242-16.176-16.176-16.176z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 26.469C74.303 26.469 88 40.166 88 57.062c0 16.897-13.697 30.594-30.594 30.594-16.896 0-30.593-13.697-30.593-30.594 0-16.896 13.697-30.593 30.593-30.593zm-.172 3.437c-14.903 0-26.984 12.082-26.984 26.985 0 14.903 12.081 26.984 26.984 26.984 14.903 0 26.985-12.081 26.985-26.984 0-14.903-12.082-26.985-26.985-26.985z\"\n fill=\"#F25252\"\n />\n <path\n d=\"M57.406 71.844c8.164 0 14.782-6.618 14.782-14.781 0-8.164-6.618-14.782-14.782-14.782-8.163 0-14.781 6.618-14.781 14.782 0 8.163 6.618 14.78 14.781 14.78z\"\n fill=\"#FF6A6A\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.298 46.448L75.18 63.331l-9.114 12.078h-2.029l-7.582-7.582 1.006-3.178.837-18.2z\"\n fill=\"url(#Error_svg__paint0_linear)\"\n />\n <g filter=\"url(#Error_svg__filter1_d)\">\n <path d=\"M57.406 68.063a1.719 1.719 0 100-3.438 1.719 1.719 0 000 3.438z\" fill=\"#000\" />\n </g>\n <path d=\"M57.406 68.063a1.719 1.719 0 100-3.438 1.719 1.719 0 000 3.438z\" fill=\"#fff\" />\n <g filter=\"url(#Error_svg__filter2_d)\">\n <path\n d=\"M57.406 46.063c.95 0 1.719.769 1.719 1.718v12.375a1.719 1.719 0 11-3.438 0V47.781c0-.949.77-1.718 1.72-1.718z\"\n fill=\"#000\"\n />\n </g>\n <path\n d=\"M57.406 46.063c.95 0 1.719.769 1.719 1.718v12.375a1.719 1.719 0 11-3.438 0V47.781c0-.949.77-1.718 1.72-1.718z\"\n fill=\"#fff\"\n />\n </g>\n <defs>\n <filter\n id=\"Error_svg__filter0_d\"\n x={36.219}\n y={37.875}\n width={42.375}\n height={42.375}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <filter\n id=\"Error_svg__filter1_d\"\n x={51.688}\n y={62.625}\n width={11.438}\n height={11.438}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <filter\n id=\"Error_svg__filter2_d\"\n x={51.688}\n y={44.063}\n width={11.438}\n height={23.813}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <linearGradient\n id=\"Error_svg__paint0_linear\"\n x1={68.438}\n y1={71.571}\n x2={60.119}\n y2={58.801}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity={0} />\n <stop offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport default SvgError;\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\ntype Props = {\n children: React.ReactNode;\n widthToHide: number;\n};\n\nconst HideOnShrink = ({widthToHide, children}: Props) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nexport default HideOnShrink;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n menuItem: {\n height: '32px'\n },\n menuText: {\n color: theme.palette.text.primary,\n fontSize: '13px',\n lineHeight: '15px'\n },\n checkbox: {\n padding: 0,\n marginRight: '15px'\n }\n}));\n","import React, {forwardRef} from 'react';\nimport {identity} from 'ramda';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {DropDownMenuItem} from '../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n item: DropDownMenuItem;\n onMenuClose?: (e) => void;\n};\n\nconst SettingsMenuItemRenderer = forwardRef(({item, onMenuClose = identity}: Props, ref: React.Ref<HTMLLIElement>) => {\n const styles = useStyles();\n const {text, onClick, id, selected} = item;\n const handleClick = (e) => {\n onMenuClose(e);\n onClick(e);\n };\n\n return (\n <MenuItem\n classes={{root: styles.menuItem}}\n onClick={handleClick}\n ref={ref}\n data-modal\n data-reltio-id={`reltio-settings-menu-item${id}`}\n >\n <Checkbox checked={selected} className={styles.checkbox} color=\"primary\" />\n <Typography classes={{root: styles.menuText}}>{text}</Typography>\n </MenuItem>\n );\n});\n\nSettingsMenuItemRenderer.displayName = 'SettingsMenuItemRenderer';\n\nexport default SettingsMenuItemRenderer;\n","import React from 'react';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport i18n from 'ui-i18n';\nimport {DropDownMenuItem} from '../../types';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport DropDownMenuButton from '../DropDownMenuButton/DropDownMenuButton';\nimport SettingsMenuItemRenderer from './SettingsMenuItemRender/SettingsMenuItemRender';\n\ntype Props = {\n items: Array<DropDownMenuItem>;\n menuId: string;\n};\n\nconst SettingsMenu = ({items, menuId}: Props) => {\n return (\n <DropDownMenuButton\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n icon: SettingsIcon,\n tooltipTitle: i18n.text('Settings'),\n size: 'L'\n }}\n menuId={menuId}\n menuItems={items}\n MenuItemRenderer={SettingsMenuItemRenderer}\n />\n );\n};\n\nexport default SettingsMenu;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {findSourceSystemByUri, getAbsoluteImageUrl, getSourceSystemLabel, Source} from '@reltio/mdm-sdk';\nimport AvatarWithFallback from '../AvatarWithFallback/AvatarWithFallback';\n\ntype Props = {\n sourceType: string;\n className?: string;\n classes?: {\n iconRoot?: string;\n textRoot?: string;\n };\n};\nconst SOURCE_URL = 'https://s3.amazonaws.com/reltio.images/api';\nconst SourceIcon = ({sourceType, className, classes}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const {uri, icon}: Source = findSourceSystemByUri(metadata, sourceType) || {};\n const avatarText = uri ? getSourceSystemLabel(metadata, uri)[0] : '';\n const sourceIcon = icon ? getAbsoluteImageUrl(SOURCE_URL, icon) : null;\n\n return (\n <AvatarWithFallback\n className={className}\n avatarText={avatarText}\n icon={sourceIcon}\n variant=\"square\"\n rootClasses={classes}\n />\n );\n};\n\nexport default SourceIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst VerticalDivider = ({height, margin}) => (\n <div\n style={{\n width: '1px',\n height: `${height}px`,\n borderLeft: '1px solid rgba(0,0,0,0.38)',\n margin: `0 ${margin}px`,\n flexShrink: '0'\n }}\n />\n);\n\nVerticalDivider.propTypes = {\n height: PropTypes.number,\n margin: PropTypes.number\n};\n\nexport default VerticalDivider;\n","import React, {useMemo} from 'react';\nimport {countPercents} from '@reltio/mdm-sdk';\nimport {pluck} from 'ramda';\nimport {ChartData} from '../types';\n\ntype PropsWithChartData = {\n data: ChartData[];\n};\n\nexport const enrichDataWithPercents = (data: ChartData[]): ChartData[] => {\n const percents = countPercents(pluck('value', data), 1);\n return data.map((item, i) => ({...item, percent: percents[i]}));\n};\n\nconst withPercents = <T extends PropsWithChartData>(Component: React.ComponentType<T>) => {\n const WithPercents = ({data, ...otherProps}: T) => {\n const dataWithPercents = useMemo(() => data && enrichDataWithPercents(data), [data]);\n return <Component data={dataWithPercents} {...(otherProps as T)} />;\n };\n\n WithPercents.displayName = 'WithPercents';\n\n return WithPercents;\n};\n\nexport default withPercents;\n","import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles({\n clickable: {\n cursor: 'pointer'\n }\n});\n\nexport const useClickableStyle = (clickable) => {\n const styles = useStyles();\n return clickable ? styles.clickable : undefined;\n};\n","import {useMemo} from 'react';\nimport {pipe} from 'ramda';\n\ntype UseActions = ({\n actions,\n dispatch\n}: {\n actions: {\n [key: string]: <T>(payload: T) => {type: string; payload: T};\n };\n dispatch: <T>({type, payload}: {type: string; payload: T}) => void;\n}) => {\n [key in keyof typeof actions]: <T>(payload: T) => void;\n};\n\nexport const useActions: UseActions = ({actions, dispatch}) =>\n useMemo(\n () =>\n Object.entries(actions).reduce((acc, [actionName, actionCreator]) => {\n return {...acc, [actionName]: pipe(actionCreator, dispatch)};\n }, {}),\n [dispatch, actions]\n );\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import React from 'react';\nimport {AttributeType, SearchFilter} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type ReltioGridLayoutOptions = {\n cols: number;\n rowHeight: number;\n margin: [number, number];\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type FiltersRowData = {\n attribute: AttributeSelectorItem;\n filter: string;\n id: number;\n values: SearchFilter['values'];\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n\nexport type PerspectivesSettings = Record<string, PerspectiveSettingItem>;\n\nexport type PerspectiveSettingItem = {\n active?: number;\n width?: number;\n};\n\nexport type RightPanelTab = {\n content?: React.ReactElement;\n title?: React.ReactElement;\n buttonProps?: {\n id: number;\n icon: React.FC;\n tooltipTitle: string;\n showForDisabled?: boolean;\n };\n headerProps?:\n | {content: React.ReactElement}\n | {mainTitle: string; secondTitle?: string; rightContent?: React.ReactElement};\n hidden?: boolean;\n};\n","import React, {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {assoc, assocPath, propOr} from 'ramda';\nimport {nanoid} from 'nanoid';\n\nimport {RequestStates} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\ntype RefreshSignals = Partial<Record<DQDataLevel, number>>;\ntype UpdateTime = {[actionId: string]: number};\ntype UpdateTimes = Partial<Record<DQDataLevel, UpdateTime>>;\ntype RequestsUpdateTimeContextType = {\n updateTime: ({dataLevel, actionId}: {dataLevel: DQDataLevel; actionId: string}) => void;\n updateTimes: UpdateTimes;\n resetUpdateTimes: (dataLevel: DQDataLevel) => void;\n};\nconst ReloadFacetSignalContext = createContext<RefreshSignals>(null);\nconst ReloadFacetActionContext = createContext<(dataLevel: DQDataLevel) => void>(null);\nconst RequestsUpdateTimeContext = createContext<RequestsUpdateTimeContextType>(null);\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const ReloadFacetProvider = ({children}: Props) => {\n const [refreshSignals, setRefreshSignals] = useState<RefreshSignals>({});\n const [updateTimes, setUpdateTimes] = useState<UpdateTimes>({});\n\n const resetUpdateTimes = useCallback(\n (dataLevel?: DQDataLevel) => (dataLevel ? setUpdateTimes(assoc(dataLevel, {})) : setUpdateTimes({})),\n []\n );\n const refreshAll = useCallback(\n (dataLevel: DQDataLevel) => {\n setRefreshSignals((signals) => {\n const nextSignal = propOr(0, dataLevel, signals) + 1;\n return assoc(dataLevel, nextSignal, signals);\n });\n },\n [setRefreshSignals]\n );\n\n const updateTime = ({dataLevel, actionId}) => {\n const time = Date.now();\n setUpdateTimes(assocPath([dataLevel, actionId], time));\n };\n return (\n <ReloadFacetActionContext.Provider value={refreshAll}>\n <ReloadFacetSignalContext.Provider value={refreshSignals}>\n <RequestsUpdateTimeContext.Provider value={{updateTime, updateTimes, resetUpdateTimes}}>\n {children}\n </RequestsUpdateTimeContext.Provider>\n </ReloadFacetSignalContext.Provider>\n </ReloadFacetActionContext.Provider>\n );\n};\n\nexport const useReloadAllFacets = () => {\n const refreshAll = useContext(ReloadFacetActionContext);\n\n if (refreshAll === undefined) {\n throw new Error('useReloadAllFacets must be used within a ReloadFacetProvider');\n }\n\n return refreshAll;\n};\n\ntype useReloadFacetProps = {\n state: RequestStates;\n reload: () => void;\n dataLevel?: DQDataLevel;\n};\n\nexport const useReloadFacet = ({state, reload, dataLevel}: useReloadFacetProps) => {\n const refreshSignals = useContext(ReloadFacetSignalContext);\n\n if (refreshSignals === undefined) {\n throw new Error('useReloadFacet must be used within a ReloadFacetProvider');\n }\n\n const refreshSignal = refreshSignals[dataLevel];\n useEffect(() => {\n if (state === RequestStates.LOADED || state === RequestStates.ERROR) {\n reload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refreshSignal]);\n};\n\nexport const useRefreshAction = ({action, dataLevel}: {action: () => void; dataLevel: DQDataLevel}) => {\n const {updateTime} = useContext(RequestsUpdateTimeContext);\n\n const actionId = useMemo(() => nanoid(), []);\n return useCallback(() => {\n updateTime({actionId, dataLevel});\n action();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [action, dataLevel]);\n};\n\nexport const useUpdateTime = (dataLevel: DQDataLevel) => {\n const {updateTimes, resetUpdateTimes} = useContext(RequestsUpdateTimeContext);\n\n return {\n updateTime: Math.min(...(Object.values(updateTimes[dataLevel] || {}) as number[])),\n resetUpdateTimes\n };\n};\n","import {omit} from 'ramda';\n\nimport {DateRangeValue} from '@reltio/mdm-sdk';\n\nexport type DQDateRangeValue = Exclude<DateRangeValue, DateRangeValue.LAST_DAY>;\nexport const DQDateRangeValue = omit(['LAST_DAY'], {...DateRangeValue});\n","import moment from 'moment';\nimport {DatePeriod, DateRangeValue, getDateRangeByValue} from '@reltio/mdm-sdk';\n\ntype GetDQDateRangeByValue = (value: DatePeriod | [number, number]) => [number, number];\nexport const getDQDateRangeByValue: GetDQDateRangeByValue = (value) => {\n const currentDate = moment();\n\n switch (value) {\n case DateRangeValue.LAST_WEEK:\n return [moment(currentDate).subtract(6, 'days').valueOf(), currentDate.valueOf()];\n default:\n return getDateRangeByValue(value);\n }\n};\n","import {ascend, assoc, defaultTo, map, path, pipe, prop, sortWith, includes, propEq, __, isEmpty} from 'ramda';\n\nimport {TEntityType, TenantPermission, Permission} from '@reltio/mdm-sdk';\n\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {getDQDateRangeByValue} from '../../services/dateRange';\n\nexport const sortEntityTypesWithCount = ({entityTypes, getEntityCount}) =>\n pipe(\n map((entityType: TEntityType) => assoc('entityCount', getEntityCount(entityType.uri))(entityType)),\n sortWith([\n ({entityCount: a}: {entityCount: number}, {entityCount: b}: {entityCount: number}) =>\n a === b || (a > 0 && b > 0) ? 0 : a === 0 ? 1 : -1,\n ascend(prop('label'))\n ])\n )(entityTypes);\n\nexport const getFirstEntityTypeUri = path([0, 'uri']);\n\nexport const dateRangeValues: DQDateRangeValue[] = Object.values(DQDateRangeValue);\n\nexport const getValuesDateRange = pipe(\n getDQDateRangeByValue,\n defaultTo([]),\n map((value) => value && new Date(value))\n);\n\nexport const checkPermissions = ({\n roles,\n tenantPermissions,\n entityTypeUri\n}: {\n roles: string[];\n tenantPermissions: TenantPermission[];\n entityTypeUri: string;\n}) => {\n const canReadWithoutFilter = ({filter, access}: Permission) => {\n return access && includes('READ', access) && !filter;\n };\n const getPermissionsForRoles = (permissions: Permission[], roles: string[]) =>\n (permissions || []).filter(pipe(prop('role'), includes(__, roles)));\n const getPermissionByUri = (uri: string) => tenantPermissions.find(propEq('uri', uri))?.permissions;\n const configurationLevelPermission = getPermissionsForRoles(getPermissionByUri('configuration'), roles);\n const entityLevelPermission = getPermissionsForRoles(getPermissionByUri(entityTypeUri), roles);\n if (!isEmpty(configurationLevelPermission)) {\n return configurationLevelPermission.some(canReadWithoutFilter);\n }\n if (!isEmpty(entityLevelPermission)) {\n return entityLevelPermission.some(canReadWithoutFilter);\n }\n return true;\n};\n","import React, {createContext, useContext, useReducer} from 'react';\nimport {dissoc} from 'ramda';\n\nimport {createStandardAction, useActions} from '@reltio/components';\nimport {DatePeriod, TEntityType} from '@reltio/mdm-sdk';\n\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\ntype ActionContext = {\n setEntityType: (entityType: TEntityType) => void;\n setDetailedAttributeType: (attributeType: DetailedAttributeType) => void;\n changeZoom?: (zoom: [string, string]) => void;\n changePeriod?: (period: DatePeriod) => void;\n changeSearchByOv?: (searchByOv: boolean) => void;\n addExportLoadingId?: (loadingId: string) => void;\n deleteExportLoadingId?: (loadingId: string) => void;\n};\n\ntype StateContext = {\n entityType?: TEntityType;\n detailedAttributeType?: DetailedAttributeType;\n zoom?: [string, string];\n period?: DatePeriod;\n dateRange?: DatePeriod;\n searchByOv?: boolean;\n exportLoadingIds?: Record<string, boolean>;\n};\n\ntype Props = {\n children: React.ReactElement;\n};\n\nconst DQDashboardStateContext = createContext<StateContext>(null);\nconst DQDashboardDispatchContext = createContext<ActionContext>(null);\n\nconst SET_ENTITY_TYPE = 'SET_SELECTED_ENTITY_TYPE';\nconst SET_ATTRIBUTE_TYPE = 'SET_SELECTED_ATTRIBUTE_TYPE';\nconst CHANGE_PERIOD = 'CHANGE_PERIOD';\nconst CHANGE_ZOOM = 'CHANGE_ZOOM';\nconst CHANGE_OV_STATE = 'CHANGE_OV_STATE';\nconst ADD_EXPORT_LOADING_ID = 'ADD_EXPORT_LOADING_ID';\nconst DELETE_EXPORT_LOADING_ID = 'DELETE_EXPORT_LOADING_ID';\n\nconst actions = {\n setEntityType: createStandardAction(SET_ENTITY_TYPE),\n setDetailedAttributeType: createStandardAction(SET_ATTRIBUTE_TYPE),\n changeZoom: createStandardAction(CHANGE_ZOOM),\n changePeriod: createStandardAction(CHANGE_PERIOD),\n changeSearchByOv: createStandardAction(CHANGE_OV_STATE),\n addExportLoadingId: createStandardAction(ADD_EXPORT_LOADING_ID),\n deleteExportLoadingId: createStandardAction(DELETE_EXPORT_LOADING_ID)\n};\nconst getValidZoom = (zoom: [string, string]) => (new Date(zoom[0]) > new Date(zoom[1]) ? [zoom[1], zoom[0]] : zoom);\nconst dqDashboardStateReducer = (state: StateContext, action: ReturnType<ReturnType<typeof createStandardAction>>) => {\n switch (action.type) {\n case SET_ATTRIBUTE_TYPE:\n return {...state, detailedAttributeType: action.payload};\n case SET_ENTITY_TYPE:\n return {...state, entityType: action.payload};\n case CHANGE_PERIOD:\n return {\n ...state,\n period: action.payload,\n dateRange: action.payload,\n ...(action.payload ? {zoom: null} : {})\n };\n case CHANGE_ZOOM:\n return {\n ...state,\n ...(action.payload\n ? {\n zoom: getValidZoom(action.payload),\n dateRange: [\n new Date(getValidZoom(action.payload)[0]),\n new Date(getValidZoom(action.payload)[1])\n ]\n }\n : {})\n };\n case CHANGE_OV_STATE:\n return {\n ...state,\n searchByOv: action.payload\n };\n case ADD_EXPORT_LOADING_ID:\n return {\n ...state,\n exportLoadingIds: {\n ...state.exportLoadingIds,\n [action.payload]: true\n }\n };\n case DELETE_EXPORT_LOADING_ID:\n return {\n ...state,\n exportLoadingIds: dissoc(action.payload, state.exportLoadingIds)\n };\n }\n};\n\nexport const DQDashboardStateProvider = ({children}: Props) => {\n const [state, dispatch] = useReducer(dqDashboardStateReducer, {detailedAttributeType: null});\n const dqDashboardStateActions = useActions({actions, dispatch});\n\n return (\n <DQDashboardStateContext.Provider value={state as StateContext}>\n <DQDashboardDispatchContext.Provider value={dqDashboardStateActions as ActionContext}>\n {children}\n </DQDashboardDispatchContext.Provider>\n </DQDashboardStateContext.Provider>\n );\n};\n\nexport const useDQDashboardState = () => {\n const viewStateContext = useContext<StateContext>(DQDashboardStateContext);\n if (viewStateContext === undefined) {\n throw new Error('useViewState must be used within a DQDashboardStateProvider');\n }\n return viewStateContext;\n};\n\nexport const useDQDashboardStateActions = () => {\n const viewStateActions = useContext<ActionContext>(DQDashboardDispatchContext);\n if (viewStateActions === undefined) {\n throw new Error('useDQDashboardStateActions must be used within a DQDashboardStateProvider');\n }\n return viewStateActions;\n};\n","import {RequestStates} from '@reltio/components';\nimport React, {useContext, useMemo} from 'react';\nimport {isEmpty} from 'ramda';\nimport {usePermissionsRequest} from '../../hooks/usePermissionsRequest';\nimport {checkPermissions} from '../../components/DQDashboardPerspectiveView/helpers';\nimport {useDQDashboardState} from '../DQDashboardStateContext';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\n\ntype Props = {children: React.ReactNode; config: DQDashboardPerspectiveConfig};\n\nexport const PermissionsContext = React.createContext<{\n isTimeSeriesAvailable: boolean;\n hasRestrictions: boolean;\n canGetDQStatistic: boolean;\n showErrorBands: boolean;\n permissionsLoadingState: RequestStates;\n showExportButton: boolean;\n}>(null);\n\nexport const PermissionsProvider = ({children, config}: Props) => {\n const {permissions: tenantPermissions, requestState: permissionsLoadingState} = usePermissionsRequest();\n const entityTypeUri = useDQDashboardState()?.entityType?.uri;\n const roles = useSelector(mdmModule.selectors.getUserRoles);\n const canGetDQStatistic = useSelector(mdmModule.selectors.getCanUserGetDQStatistic);\n const noMetaDataRestrictions = useMemo(\n () =>\n permissionsLoadingState === RequestStates.LOADED &&\n checkPermissions({roles, tenantPermissions, entityTypeUri}),\n [tenantPermissions, permissionsLoadingState, roles, entityTypeUri]\n );\n const hasRestrictions = !isEmpty(tenantPermissions);\n const {showTimeSeries = true, showErrorBands = false, showExportButton = false} = config;\n return (\n <PermissionsContext.Provider\n value={{\n isTimeSeriesAvailable: showTimeSeries && noMetaDataRestrictions,\n hasRestrictions,\n canGetDQStatistic,\n permissionsLoadingState,\n showErrorBands,\n showExportButton\n }}\n >\n {children}\n </PermissionsContext.Provider>\n );\n};\n\nexport const usePermissionsContext = () => useContext(PermissionsContext);\n","import {useState, useCallback, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {getTenantPermissions, TenantPermission} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nexport const usePermissionsRequest = () => {\n const [permissions, setPermissions] = useState<TenantPermission[]>(null);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const safePromise = useSafePromise();\n const apiPath: string = useSelector(mdmModule.selectors.getApiPath);\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n\n const onRequestFinished = (permissions) => {\n setPermissions(permissions);\n setRequestState(RequestStates.LOADED);\n };\n\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setPermissions(null);\n };\n\n const loadPermissions = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n safePromise(getTenantPermissions({tenant, apiPath})).then(onRequestFinished).catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiPath, tenant]);\n useEffect(() => {\n loadPermissions();\n }, [loadPermissions]);\n\n return useMemo(\n () => ({\n permissions,\n requestState,\n reload: loadPermissions\n }),\n [permissions, requestState]\n );\n};\n","import {theme as defaultTheme} from '@reltio/mdm-sdk';\n\nexport const theme = {\n ...defaultTheme,\n tooltip: {\n borderRadius: '4px',\n backgroundColor: 'rgba(96, 96, 96, 0.9)',\n maxWidth: '300px'\n }\n};\n","import React from 'react';\n\nimport {DataValidationFunction} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\n\ntype ContextType = {\n dvfs?: {\n data: DataValidationFunction[];\n state: RequestStates;\n reload: () => Promise<void>;\n errorCode?: number;\n };\n dvfConfigLink?: string;\n};\n\nexport const DVFContext = React.createContext<ContextType>(null);\n\nDVFContext.displayName = 'DVFContext';\n","import React, {useContext, useState} from 'react';\n\nimport {ChartsDataWithState} from '../../types/ChartsDataWithState';\n\ntype Props = {children: React.ReactNode};\n\nexport const ChartsDataContext = React.createContext<{\n chartsData: ChartsDataWithState | Record<string, never>;\n changeChartsData: (chartsData: ChartsDataWithState) => void;\n }>(null);\n\nexport const ChartsDataProvider = ({children}: Props) => {\n const [chartsData, setChartsData] = useState<ChartsDataWithState | Record<string, never>>({});\n const changeChartsData = (chartsData: ChartsDataWithState) => setChartsData(chartsData);\n return <ChartsDataContext.Provider value={{chartsData, changeChartsData}}>{children}</ChartsDataContext.Provider>;\n};\n\nexport const useChartsDataContext = () => useContext(ChartsDataContext);\n","import {pluck} from 'ramda';\nimport {useCallback, useEffect, useMemo, useState} from 'react';\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {\n buildFilterQueryString,\n FilterOptions,\n generateValuableQueryString,\n getFacets,\n getLastUriPart,\n TEntityType\n} from '@reltio/mdm-sdk';\n\nexport const useEntityCount = (entityTypes: TEntityType[]) => {\n const [entitiesCountMap, setEntitiesCountMap] = useState(null);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const safePromise = useSafePromise();\n\n const onRequestFinished = ({type: entitiesCountMap}) => {\n setEntitiesCountMap(entitiesCountMap);\n setRequestState(RequestStates.LOADED);\n };\n\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setEntitiesCountMap(null);\n };\n\n const getEntityCount = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n const filter = buildFilterQueryString()([\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: pluck('uri', entityTypes)\n }\n ]);\n\n safePromise(\n getFacets({\n query: generateValuableQueryString({activeness: 'active', filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n })\n )\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypes]);\n useEffect(() => {\n getEntityCount();\n }, [getEntityCount]);\n\n return useMemo(\n () => ({\n getEntityCount: (entityTypeUri: string) =>\n Number(entitiesCountMap?.[getLastUriPart(entityTypeUri)] || null),\n state: requestState\n }),\n [entitiesCountMap, requestState]\n );\n};\n","export enum ChartDataType {\n STRING = 'string',\n FLOAT = 'float',\n INTEGER = 'integer',\n BOOLEAN = 'boolean',\n DATE = 'date',\n SSN = 'SSN',\n UNKNOWN = 'unknown'\n}\n","import {DQMetric} from '@reltio/mdm-sdk';\n\nenum CustomViewType {\n UNSUPPORTED = 'unsupported',\n SUMMARY = 'summary',\n MONTH_DISTRIBUTION = 'monthDistribution',\n DAY_OF_WEEK_DISTRIBUTION = 'dayOfWeekDistribution',\n DAY_OF_MONTH_DISTRIBUTION = 'dayOfMonthDistribution',\n RDM_TRANSCODE = 'rdmTranscode'\n}\n\nexport type ViewType = DQMetric | CustomViewType;\nexport const ViewType = {...DQMetric, ...CustomViewType};\n","export enum RDMLookupState {\n RDM_LOOKUP_EXIST = 'rdmLookupExist',\n RDM_LOOKUP_NOT_EXIST = 'rdmLookupNotExist'\n}\n","import i18n from 'ui-i18n';\n\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {LayoutsByAttributeType, ViewsByDataLevel} from '../types/DQDashboardPerspectiveConfig';\nimport {ChartDataType} from './ChartDataType';\nimport {ViewType} from './ViewType';\nimport {RDMLookupState} from '../constants/RdmLookupState';\n\nexport const defaultViewsByDataLevel: ViewsByDataLevel = {\n [DQDataLevel.ATTRIBUTE_TYPE]: [\n {\n id: 'FillRateView',\n type: ViewType.FILL_RATE,\n title: i18n.text('Fill rate')\n },\n {\n id: 'UniquenessAnalysisView',\n type: ViewType.UNIQUENESS,\n title: i18n.text('Uniqueness analysis')\n },\n {\n id: 'SummaryView',\n type: ViewType.SUMMARY,\n title: i18n.text('Summary')\n },\n {\n id: 'ValidationView',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data')\n },\n {\n id: 'FrequencyAnalysis',\n type: ViewType.FREQUENCY,\n title: i18n.text('Frequency analysis')\n },\n {\n id: 'LengthStatistics',\n type: ViewType.LENGTH_STATISTIC,\n title: i18n.text('Length statistics')\n },\n {\n id: 'PatternAnalysis',\n type: ViewType.PATTERN,\n title: i18n.text('Pattern analysis')\n },\n {\n id: 'CrosswalkAnalysis',\n type: ViewType.CROSSWALK_ANALYSIS,\n title: i18n.text('Source system analysis')\n },\n {\n id: 'ValueDistribution',\n type: ViewType.VALUE_DISTRIBUTION,\n title: i18n.text('Value distribution')\n },\n {\n id: 'UnsupportedDataType',\n type: ViewType.UNSUPPORTED,\n title: i18n.text('Unsupported Data Type')\n },\n {\n id: 'FillRateViewTimeSeries',\n type: ViewType.FILL_RATE,\n title: i18n.text('Fill rate over time'),\n options: {\n timeSeries: true\n }\n },\n {\n id: 'UniquenessAnalysisViewTimeSeries',\n type: ViewType.UNIQUENESS,\n title: i18n.text('Uniqueness analysis over time'),\n options: {\n timeSeries: true\n }\n },\n {\n id: 'ValidationViewTimeSeries',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data over time'),\n options: {\n timeSeries: true\n }\n }\n ],\n [DQDataLevel.ENTITY_TYPE]: [\n {\n id: 'SummaryView',\n type: ViewType.SUMMARY,\n title: i18n.text('Summary')\n },\n {\n id: 'ValidationView',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data')\n },\n {\n id: 'ConsolidationRate',\n type: ViewType.CONSOLIDATION_RATE,\n title: i18n.text('Consolidation rate')\n },\n {\n id: 'RDMTranscode',\n type: ViewType.RDM_TRANSCODE,\n title: i18n.text('RDM value mapping status')\n }\n ]\n};\n\nexport const defaultLayoutsByDataLevel = {\n [DQDataLevel.ATTRIBUTE_TYPE]: {\n today: {\n default: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'LengthStatistics'}\n ],\n [ChartDataType.SSN]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 3, height: 19, id: 'PatternAnalysis'}\n ],\n [ChartDataType.BOOLEAN]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'FrequencyAnalysis'},\n {x: 0, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'}\n ],\n [ChartDataType.DATE]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n [ChartDataType.INTEGER]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n [ChartDataType.FLOAT]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ]\n },\n timeRange: {\n default: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'LengthStatistics'}\n ],\n SSN: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 3, height: 14, id: 'PatternAnalysis'}\n ],\n boolean: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'FrequencyAnalysis'},\n {x: 3, y: 30, width: 3, height: 12, id: 'CrosswalkAnalysis'}\n ],\n date: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n integer: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n float: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ]\n }\n } as LayoutsByAttributeType,\n [DQDataLevel.ENTITY_TYPE]: {\n [RDMLookupState.RDM_LOOKUP_EXIST]: [\n {x: 0, y: 0, width: 4, height: 7, id: 'SummaryView'},\n {x: 4, y: 0, width: 2, height: 7, id: 'RDMTranscode'},\n {x: 0, y: 7, width: 6, height: 18, id: 'ConsolidationRate'},\n {x: 0, y: 25, width: 6, height: 12, id: 'ValidationView'}\n ],\n [RDMLookupState.RDM_LOOKUP_NOT_EXIST]: [\n {x: 0, y: 0, width: 6, height: 7, id: 'SummaryView'},\n {x: 0, y: 7, width: 6, height: 18, id: 'ConsolidationRate'},\n {x: 0, y: 25, width: 6, height: 12, id: 'ValidationView'}\n ]\n }\n};\n","import {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {FacetFilter} from '../types/FacetFilter';\nimport {SearchStateAttributesGroup, SearchOperator} from '@reltio/mdm-sdk';\n\nexport const getAdvancedSearchFilter = (\n entityTypeUri: string,\n filters?: FacetFilter[],\n detailedAttributeType?: DetailedAttributeType\n): SearchStateAttributesGroup => ({\n attributes: (filters || []).map(({filter, fieldName, values = [], uri}, index: number) => ({\n data: {\n uri: uri || detailedAttributeType?.uri,\n entityTypeUri,\n fieldName\n },\n filter,\n id: `attribute_${index}`,\n operator: SearchOperator.and,\n values\n })),\n entityTypes: [entityTypeUri],\n id: 'group',\n operator: SearchOperator.or\n});\n","import {\n all,\n any,\n assoc,\n concat,\n curry,\n defaultTo,\n equals,\n evolve,\n filter,\n isEmpty,\n isNil,\n map,\n mergeLeft,\n pipe,\n pluck,\n prop,\n propEq,\n uniq,\n uniqBy,\n when\n} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {\n DataTypes,\n DQDataLevel,\n DQMetric,\n formatDataTypeValue,\n getSourceSystemLabel,\n isDateType,\n mapFilterValue,\n Metadata,\n parseTimestamp,\n SearchState,\n TimeSeriesStatisticValues,\n ReltioGridLayoutItem\n} from '@reltio/mdm-sdk';\n\nimport {ChartDataType} from '../constants/ChartDataType';\nimport {defaultLayoutsByDataLevel, defaultViewsByDataLevel} from '../constants/defaultConfig';\nimport {ViewType} from '../constants/ViewType';\nimport {getAdvancedSearchFilter} from './advancedFilters';\n\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {LayoutsByAttributeType, ViewsByDataLevel} from '../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {FacetFilter} from '../types/FacetFilter';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\n\nexport const MIN_CHART_BAR_SIZE = 3;\n\nexport const localizeChartValues = map((chartData: ChartData) => ({\n ...chartData,\n localizedValue: i18n.number(chartData.value)\n}));\n\nexport const getPercentLabel = (percent: number) => (isNil(percent) ? '' : `${percent}%`);\n\nexport const isEmptyData = (data: ChartData[]) => isEmpty(data) || !data.find(({value}) => value > 0);\n\nexport const facetFiltersToSearchState = curry(\n (detailedAttributeType: DetailedAttributeType, entityTypeUri: string, filters: FacetFilter[]): SearchState => ({\n advanced: [\n getAdvancedSearchFilter(\n entityTypeUri,\n filters.map(\n when(\n () => isDateType(detailedAttributeType?.type),\n evolve({values: map(mapFilterValue(parseTimestamp))})\n )\n ),\n detailedAttributeType\n )\n ],\n version: '2.0'\n })\n);\n\nexport const getSearchState =\n (getFilter) =>\n ({\n detailedAttributeType,\n entityTypeUri\n }: {\n detailedAttributeType: DetailedAttributeType;\n entityTypeUri: string;\n }): ((value: string) => SearchState) =>\n pipe(\n getFilter({\n fieldName: detailedAttributeType?.fieldName,\n entityTypeUri\n }),\n facetFiltersToSearchState(detailedAttributeType, entityTypeUri)\n );\n\nexport const convertDateLabelsInChartData = (data: ChartData[], attributeType: string) =>\n data.map((dataItem) => ({\n ...dataItem,\n label: formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(dataItem.label))\n }));\n\nexport const getChartDataTypeByAttributeType = (type: string) => {\n switch (type) {\n case DataTypes.TYPE_BLOB:\n case DataTypes.TYPE_BLOG_URL:\n case DataTypes.TYPE_CIK_ID:\n case DataTypes.TYPE_ENTITY_ID:\n case DataTypes.TYPE_IMAGE_URL:\n case DataTypes.TYPE_STRING:\n case DataTypes.TYPE_TEXT:\n case DataTypes.TYPE_URL:\n return ChartDataType.STRING;\n case DataTypes.TYPE_COUNT:\n case DataTypes.TYPE_DOLLAR:\n case DataTypes.TYPE_INT:\n case DataTypes.TYPE_LONG:\n return ChartDataType.INTEGER;\n case DataTypes.TYPE_FLOAT:\n case DataTypes.TYPE_DOUBLE:\n case DataTypes.TYPE_NUMBER:\n return ChartDataType.FLOAT;\n case DataTypes.TYPE_BOOLEAN:\n case DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED:\n return ChartDataType.BOOLEAN;\n case DataTypes.TYPE_ACTIVENESS_DATE:\n case DataTypes.TYPE_DATE:\n case DataTypes.TYPE_LOCAL_DATE:\n case DataTypes.TYPE_TIMESTAMP:\n return ChartDataType.DATE;\n case DataTypes.TYPE_SSN:\n return ChartDataType.SSN;\n default:\n return ChartDataType.UNKNOWN;\n }\n};\n\nconst getViewsByDataType = (chartDataType: ChartDataType) => {\n switch (chartDataType) {\n case ChartDataType.INTEGER:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.FLOAT:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.BOOLEAN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY\n ];\n case ChartDataType.STRING:\n return [\n ViewType.LENGTH_STATISTIC,\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS\n ];\n case ChartDataType.DATE:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.SSN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.PATTERN\n ];\n case ChartDataType.UNKNOWN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.LENGTH_STATISTIC\n ];\n default:\n return [];\n }\n};\n\nconst getValidViews = ({\n views: allViews,\n supportedViews,\n layout\n}: {\n views: DQDashboardView[];\n supportedViews: ViewType[];\n layout: ReltioGridLayoutItem[];\n}): DQDashboardView[] => {\n return layout.reduce((views, layoutItem) => {\n const viewType = prop('type', allViews.find(propEq('id', layoutItem.id)));\n const viewIndex = allViews.findIndex(propEq('id', layoutItem.id));\n if (viewIndex !== -1)\n return !supportedViews.includes(viewType)\n ? views.concat(assoc('type', ViewType.UNSUPPORTED, allViews[viewIndex]))\n : views.concat(allViews[viewIndex]);\n else\n return views.concat({\n id: layoutItem.id,\n type: ViewType.UNSUPPORTED,\n title: i18n.text('Unsupported')\n });\n }, []);\n};\n\nexport const getEntityLevelViews = (\n views: Partial<ViewsByDataLevel>,\n layout: ReltioGridLayoutItem[]\n): DQDashboardView[] => {\n const allViews = uniqBy(\n prop('id'),\n concat(views?.[DQDataLevel.ENTITY_TYPE] || [], defaultViewsByDataLevel[DQDataLevel.ENTITY_TYPE] || [])\n );\n const supportedViews = [\n ViewType.SUMMARY,\n ViewType.CONSOLIDATION_RATE,\n ViewType.DATA_VALIDATION,\n ViewType.RDM_TRANSCODE\n ];\n return getValidViews({views: allViews, supportedViews, layout});\n};\n\nexport const getAttributeLevelViews = (\n views: Partial<ViewsByDataLevel>,\n attributeType: string,\n layout: ReltioGridLayoutItem[]\n): DQDashboardView[] => {\n const allViews = uniqBy(\n prop('id'),\n concat(views?.[DQDataLevel.ATTRIBUTE_TYPE] || [], defaultViewsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE] || [])\n );\n const chartDataType = getChartDataTypeByAttributeType(attributeType);\n const supportedViews = getViewsByDataType(chartDataType);\n return getValidViews({views: allViews, supportedViews, layout});\n};\n\nexport const getMetricsFromViews: (views: DQDashboardView[]) => DQMetric[] = pipe(\n defaultTo([]),\n pluck('type'),\n filter((metric: DQMetric) => Object.values(DQMetric).includes(metric)),\n uniq\n);\n\nexport const getLayoutByAttributeType = (\n layouts: LayoutsByAttributeType,\n type: string,\n timeRangeAvailable: boolean\n) => {\n const chartDataType = getChartDataTypeByAttributeType(type);\n const customLayouts = (timeRangeAvailable && layouts?.timeRange) || layouts?.today;\n const defaultLayouts =\n (timeRangeAvailable && defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]['timeRange']) ||\n defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]['today'];\n const mergedLayoutsByType = mergeLeft(customLayouts, defaultLayouts);\n return mergedLayoutsByType[chartDataType] || mergedLayoutsByType['default'] || [];\n};\n\nexport const getBarWidthStyle = ({percent, value}: ChartData) => ({\n width: `${percent}%`,\n ...(value > 0 && {minWidth: `${MIN_CHART_BAR_SIZE}px`})\n});\n\nexport const getMaxPercentFromChartData = pipe(pluck('percent'), (percents: number[]) => Math.max(...percents));\nexport const enrichChartDataWithSourceLabel = curry((metadata: Metadata, chartData: ChartData[]) =>\n chartData.map((data) => assoc('label', getSourceSystemLabel(metadata, data.group) || data.label, data))\n);\nexport const getEntityTypeSummarySearchState =\n ({entityTypeUri}: GetSearchStateProps) =>\n () =>\n facetFiltersToSearchState(undefined, entityTypeUri, []);\n\nexport const formatPercent = (percent: number | string): number => +(Number(percent) * 100).toFixed(1);\n\nexport const transformTimeSeriesChartData = curry((metric: DQMetric, chartData: TimeSeriesStatisticValues[]) =>\n chartData.map((data) => {\n return {\n ...data,\n [metric]: typeof data[metric] === 'number' ? formatPercent(data[metric]) : null\n };\n })\n);\n\nexport const getChartState = (states: RequestStates[]) => {\n if (all(equals(RequestStates.LOADED), states)) return RequestStates.LOADED;\n if (any(equals(RequestStates.ERROR), states)) return RequestStates.ERROR;\n if (any(equals(RequestStates.LOADING), states)) return RequestStates.LOADING;\n return RequestStates.INIT;\n};\n","export const NO_DATA_AVAILABLE = 'No data available';\nexport const NO_PROFILES = 'There are 0 profiles';\n","import moment from 'moment';\nimport {\n append,\n assoc,\n curry,\n defaultTo,\n find,\n map,\n pick,\n pipe,\n pluck,\n prop,\n propEq,\n propOr,\n reject,\n sortBy,\n uniq,\n values,\n cond,\n all,\n equals,\n always,\n isEmpty,\n T,\n keys,\n omit,\n F,\n either\n} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {ChartData, enrichDataWithPercents} from '@reltio/components';\nimport {\n DatePeriod,\n DateRangeValue,\n DQMetric,\n FillRateState,\n getDateRangeByDatePeriod,\n getRangeOptionLabel,\n isDateRangeValue,\n TimeSeriesAnomalyValues,\n TimeSeriesData,\n TimeSeriesStatisticValues,\n UniquenessAnalysisState,\n DataValidationFunction\n} from '@reltio/mdm-sdk';\n\nimport {getDQDateRangeByValue} from '../services/dateRange';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {LineChartData} from '../types/LineChartData';\nimport {formatPercent} from './charts';\nimport {NO_DATA_AVAILABLE, NO_PROFILES} from '../constants/NoDataLabels';\n\nexport const getLabelByTimeRange = (period: DatePeriod): string =>\n isDateRangeValue(period as DQDateRangeValue)\n ? getRangeOptionLabel(period as DQDateRangeValue)\n : (period as [Date, Date]).map((date) => i18n.date(moment(date))).join(' \\u2013 ');\n\nexport const getStatisticData = <T>(\n getData: (chartsData: TimeSeriesStatisticValues) => T\n): ((chartsData: TimeSeriesData) => LineChartData[]) =>\n pipe(\n propOr([], 'statisticData'),\n defaultTo([]),\n map(({time, values}) => ({\n group: time?._max_date,\n label: i18n.date(time?._max_date, 'MMM D'),\n ...getData(values)\n })),\n sortBy(prop('group'))\n );\nconst prependZeroIfNeeds = (number: number) => (number < 10 ? `0${number}` : `${number}`);\n\nexport const getAnomalyData = <T>(\n getData: (chartsData: TimeSeriesAnomalyValues) => T\n): ((chartsData: TimeSeriesData) => LineChartData[]) =>\n pipe(\n propOr([], 'anomalyData'),\n map(({time, values: dataValues}) => ({\n group: time?._max_date,\n label: i18n.date(time?._max_date, 'MMM D'),\n anomaly: pipe(getData, pick(['lower', 'upper']), values, map(formatPercent))(dataValues)\n })),\n sortBy(prop('group'))\n );\n\nexport const getTimeSeriesData =\n <T>(getData: (chartsData: TimeSeriesStatisticValues | TimeSeriesAnomalyValues) => T) =>\n (chartsData: TimeSeriesData) => {\n const timeSeriesData = getStatisticData(getData)(chartsData);\n const anomalyData = getAnomalyData(getData)(chartsData);\n return pipe(\n pluck('group'),\n uniq,\n map((group) => ({\n ...find(propEq('group', group), timeSeriesData),\n ...find(propEq('group', group), anomalyData)\n }))\n )([...timeSeriesData, ...anomalyData]);\n };\nexport const getTimeRangeDates = (period: DatePeriod) => {\n const [startTimestamp, endTimeStamp] = getDateRangeByDatePeriod(period, getDQDateRangeByValue);\n const startDate = new Date(startTimestamp);\n const endDate = new Date(endTimeStamp);\n return {\n startDate: `${startDate.getFullYear()}-${prependZeroIfNeeds(startDate.getMonth() + 1)}-${prependZeroIfNeeds(\n startDate.getDate()\n )}`,\n endDate: `${endDate.getFullYear()}-${prependZeroIfNeeds(endDate.getMonth() + 1)}-${prependZeroIfNeeds(\n endDate.getDate()\n )}`\n };\n};\n\nexport const checkIsTimeSeries = (config: DQDashboardView) => !!config?.options?.timeSeries;\n\nexport const getChartTooltipDateTitle = (payload: Record<string, string | number>, dataKeys: string[]) =>\n pipe(\n pick(dataKeys),\n cond([\n [pipe(either(pipe(keys, all(equals('noData'))), isEmpty)), always(i18n.text(NO_DATA_AVAILABLE))],\n [allValuesEqualZero, always(i18n.text(NO_PROFILES))],\n [T, always(i18n.date(payload.group, 'MMM D, YYYY'))]\n ])\n )(payload);\n\nexport const hasTimeRange = (period: DatePeriod) => period !== DateRangeValue.LAST_DAY;\n\nconst getStateFromMetric = (metric: DQMetric) => {\n switch (metric) {\n case DQMetric.FILL_RATE:\n return FillRateState.EXISTS;\n case DQMetric.UNIQUENESS:\n return UniquenessAnalysisState.UNIQUE;\n }\n};\n\nconst getTodayData = (metric: DQMetric, todayChartData: ChartData[]) => {\n if (metric === DQMetric.DATA_VALIDATION)\n return todayChartData.reduce(\n (todayData, currentData) => assoc(currentData.group, currentData.value, todayData),\n {\n group: moment().format('YYYY-MM-DD'),\n label: i18n.date(moment(), 'MMM D')\n }\n );\n else {\n const todayChartDataWithPercent = enrichDataWithPercents(todayChartData);\n const todayOption = getStateFromMetric(metric);\n const todayData = {\n group: moment().format('YYYY-MM-DD'),\n label: i18n.date(moment(), 'MMM D'),\n [metric]: todayChartDataWithPercent.find(propEq('group', todayOption))?.percent\n };\n return todayChartData.reduce((todayDataForTimeSeries, dataItem) => {\n todayDataForTimeSeries[dataItem.group] = dataItem.value;\n return todayDataForTimeSeries;\n }, todayData);\n }\n};\n\nexport const enrichTimeSeriesDataWithTodayData = curry(\n (period: DatePeriod, todayChartData: ChartData[], metric: DQMetric, timeSeriesData: LineChartData[]) => {\n const {endDate} = getTimeRangeDates(period);\n const today = moment().format('YYYY-MM-DD');\n return endDate === today\n ? pipe(reject(propEq('group', today)), append(getTodayData(metric, todayChartData)))(timeSeriesData)\n : timeSeriesData;\n }\n);\n\nexport const getPeriodValue = (zoom: [string, string], period: DatePeriod): DatePeriod =>\n zoom ? [new Date(zoom[0]), new Date(zoom[1])] : period;\n\nexport const filterValidDVFs = curry((dvfs: DataValidationFunction, chartData: LineChartData[]) => {\n const activeDVFUris = map(prop('uri'), dvfs);\n return map(pick([...activeDVFUris, 'group', 'label', 'noData']), chartData);\n});\n\nexport const isNoProfiles = (data: LineChartData, lineKeys: string[], areaKeys: string[] = []) =>\n pipe(\n omit([...lineKeys, ...areaKeys, 'group', 'label']),\n values,\n cond([\n [isEmpty, F],\n [all(equals(0)), T],\n [T, F]\n ])\n )(data);\n\nexport const isNoDataAvailable = (data: LineChartData, lineKeys: string[], areaKeys: string[] = []) =>\n pipe(omit([...lineKeys, ...areaKeys, 'group', 'label']), keys, isEmpty)(data);\n\nexport const allValuesEqualZero = pipe(values, all(equals(0)));\n","import React from 'react';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nexport const DataLevelContext = React.createContext<DQDataLevel>(null);\n\nDataLevelContext.displayName = 'DataLevelContext';\n","import {propEq, allPass} from 'ramda';\nimport {\n getLabel,\n AttributeType,\n DataTypes,\n DataValidationFunction,\n getAttributeTypesTree,\n Metadata,\n TEntityType,\n StatusVF,\n AttributeNode\n} from '@reltio/mdm-sdk';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\n\ntype IsContainActiveVF = (dvf: DataValidationFunction[], attributeTypeUri: string) => boolean;\nexport const isContainActiveVF: IsContainActiveVF = (dvf, attributeTypeUri) =>\n (dvf || []).some(allPass([propEq('attribute', attributeTypeUri), propEq('status', StatusVF.ACTIVE)]));\n\nexport const isFloatingType = (type: string): boolean =>\n [DataTypes.TYPE_FLOAT, DataTypes.TYPE_DOUBLE, DataTypes.TYPE_NUMBER].includes(type as DataTypes);\nexport const getDVFsForAttribute = (dvfs: DataValidationFunction[], attributeTypeUri: string) =>\n (dvfs || []).filter(propEq('attribute', attributeTypeUri));\n\nexport const countEntityTypeAttributes = (metadata: Metadata, entityType: TEntityType) => {\n const attributes = getAttributeTypesTree(metadata, entityType) || [];\n const collectAttributes = (attributes: AttributeType[]) => {\n return attributes.reduce((attributesCollection: AttributeType[], attribute: AttributeNode) => {\n const children = attribute?.children;\n return children?.length\n ? [...attributesCollection, attribute, ...collectAttributes(children)]\n : [...attributesCollection, attribute];\n }, []);\n };\n return collectAttributes(attributes).length;\n};\n\nexport const getAttributeLabel = (detailedAttributeType: DetailedAttributeType) =>\n getLabel(detailedAttributeType.label || detailedAttributeType.name);\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport enum AttrTypeDetailsType {\n INCLUDED_IN_MATCHING = 'includedInMatching',\n CONTAIN_VF = 'containVF',\n REQUIRED = 'required',\n REFERENCE = 'reference',\n RDM_LOOKUP = 'RDMLookup'\n}\n\nexport type AttrTypeDetails = Record<AttrTypeDetailsType, boolean>;\n\nexport type DetailedAttributeType = AttributeType & {\n children?: DetailedAttributeType[];\n fieldName?: string;\n isAttributeReference?: boolean;\n details?: AttrTypeDetails;\n};\n\nexport type AttributeItemType = {\n attributeItem: DetailedAttributeType;\n level: number;\n};\n","import {ChartData} from '@reltio/components';\nimport {FillRateState} from '@reltio/mdm-sdk';\nimport {curry, propEq} from 'ramda';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {FilterOption} from '../types/FilterOption';\n\nconst filterAttributeByName = (item: DetailedAttributeType, filterText: string) =>\n (item.label || item.name)?.toLowerCase().includes(filterText.toLowerCase());\n\nexport const filterAttributeByDetails = curry((filterOptions: FilterOption[], item: DetailedAttributeType) =>\n filterOptions.some((detail) => item.details[detail.value])\n);\n\nexport const filterAttributeTreeByDetails = curry((filterOptions: FilterOption[], item: DetailedAttributeType) => {\n if (filterOptions.length === 0) return true;\n return (\n filterAttributeByDetails(filterOptions, item) ||\n item.children?.some((child) => filterAttributeTreeByDetails(filterOptions, child))\n );\n});\n\nexport const filterAttributeByNotEmpty = curry(\n (fillRates: Record<string, ChartData[]>, item: DetailedAttributeType) => {\n const fillRate = fillRates[item.fieldName];\n return fillRate?.find(propEq('group', FillRateState.EXISTS))?.value;\n }\n);\n\nexport const filterAttributesTypesByName = curry((filterText: string, array: DetailedAttributeType[]) => {\n return array.reduce((resultArray, currentItem) => {\n const isCurrentItemMatch = filterAttributeByName(currentItem, filterText);\n const children = isCurrentItemMatch\n ? currentItem.children || []\n : filterAttributesTypesByName(filterText, currentItem.children || []);\n if (isCurrentItemMatch || children.length)\n resultArray.push(Object.assign({}, currentItem, children.length && {children}));\n return resultArray;\n }, []);\n});\n","import {chain, curry, pipe, prop, propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n Metadata,\n TEntityType,\n getAttributeTypesTree,\n attributeUriToSearchUri,\n isReference,\n DataValidationFunction,\n isRDMLookupAttrType,\n FillRateState,\n DQChartsData\n} from '@reltio/mdm-sdk';\nimport {isContainActiveVF} from './attributes';\nimport {\n AttributeItemType,\n DetailedAttributeType,\n AttrTypeDetails,\n AttrTypeDetailsType\n} from '../types/DetailedAttributeType';\n\nimport {filterAttributesTypesByName} from './attributeFilters';\nimport {ChartData} from '@reltio/components';\n\ntype GetAttrTypeDetailsParams = {\n attrTypeItem: DetailedAttributeType;\n dvf: DataValidationFunction[];\n matchAttributes: string[];\n};\n\nexport const getAttrTypeDetails = ({\n attrTypeItem,\n dvf = [],\n matchAttributes = []\n}: GetAttrTypeDetailsParams): AttrTypeDetails => {\n const {uri, required, isAttributeReference} = attrTypeItem;\n\n return {\n [AttrTypeDetailsType.INCLUDED_IN_MATCHING]: matchAttributes.includes(uri),\n [AttrTypeDetailsType.CONTAIN_VF]: isContainActiveVF(dvf, uri),\n [AttrTypeDetailsType.REQUIRED]: !!required,\n [AttrTypeDetailsType.REFERENCE]: isAttributeReference,\n [AttrTypeDetailsType.RDM_LOOKUP]: isRDMLookupAttrType(attrTypeItem)\n };\n};\n\nexport const getDetailLabel = (attributeDetailType: string): string => {\n const detailLabels = {\n [AttrTypeDetailsType.INCLUDED_IN_MATCHING]: i18n.text('Included in match rule'),\n [AttrTypeDetailsType.CONTAIN_VF]: i18n.text('Has validation functions'),\n [AttrTypeDetailsType.REQUIRED]: i18n.text('Required'),\n [AttrTypeDetailsType.REFERENCE]: i18n.text('Reference attribute'),\n [AttrTypeDetailsType.RDM_LOOKUP]: i18n.text('RDM')\n };\n\n return detailLabels[attributeDetailType] || attributeDetailType;\n};\n\nconst buildItems = curry(\n (items: DetailedAttributeType[], parents = [], isAttributeReference = false, level = 0): AttributeItemType[] =>\n pipe(\n chain((item: DetailedAttributeType) => {\n const childrenItems = item.children\n ? buildItems(\n item.children,\n parents.concat({name: item.name, label: item.label}),\n isAttributeReference || isReference(item),\n level + 1\n )\n : [];\n\n return [\n {\n attributeItem: {\n ...item,\n fieldName: attributeUriToSearchUri(item.uri, parents),\n isAttributeReference: isReference(item) || isAttributeReference\n },\n level\n },\n ...childrenItems\n ];\n })\n )(items)\n);\n\ntype CollectAttributeItemsFn = (\n filterText: string\n) => (metadata: Metadata, entityType: TEntityType) => AttributeItemType[];\n\nexport const collectFilteredAttributeItems: CollectAttributeItemsFn = (filterText: string) =>\n pipe(getAttributeTypesTree, filterAttributesTypesByName(filterText), buildItems);\n\nexport const checkIsDataQualitativeForSummary = (data: DQChartsData) => data?.fillRate?.[FillRateState.MISSING] === 0;\n\nexport const checkIsDataQualitativeForAttributeList = (data: ChartData[]) =>\n data?.find(propEq('group', FillRateState.MISSING))?.value === 0;\n\nexport const isReferenceChild = prop('isAttributeReference');\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {omit, pathOr, pipe, keys, path, length, ifElse, has} from 'ramda';\nimport {RequestStates} from '@reltio/components';\nimport {\n getDQChartsData,\n DQChartsData,\n TEntityType,\n getLastUriPart,\n FilterOptions,\n buildFilterQueryString,\n generateValuableQueryString,\n getFacets,\n ActivityFilters,\n DQDataLevel,\n DQMetric\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {useRefreshAction} from '../contexts/ReloadFacetContext';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\n\nexport type UseChartsDataRequestProps = {\n entityType: TEntityType;\n detailedAttributeType?: DetailedAttributeType;\n dataLevel: DQDataLevel;\n metrics?: DQMetric[];\n};\n\nexport const useChartsDataRequest = ({\n entityType,\n detailedAttributeType,\n dataLevel,\n metrics\n}: UseChartsDataRequestProps) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [chartsData, setChartsData] = useState<DQChartsData>({});\n const attributeFieldName = detailedAttributeType?.fieldName;\n const entityTypeUri = entityType?.uri;\n const safePromise = useSafePromise();\n const {searchByOv} = useDQDashboardState();\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setChartsData({});\n };\n\n const onRequestFinished = (data: DQChartsData) => {\n setChartsData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const loadChartsData = useCallback(async () => {\n if (!entityTypeUri) return;\n setRequestState(RequestStates.LOADING);\n setChartsData({});\n\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n const filter = buildFilterQueryString()([\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: [entityTypeUri]\n }\n ]);\n\n const getActiveProfiles = getFacets({\n query: generateValuableQueryString({activeness: ActivityFilters.ACTIVE_ONLY, filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n });\n\n const getInactiveProfiles = getFacets({\n query: generateValuableQueryString({activeness: ActivityFilters.INACTIVE_ONLY, filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n });\n const getDqChartsData = getDQChartsData({\n entityTypeUri,\n dataLevel,\n metrics,\n searchByOv\n });\n\n safePromise(Promise.all([getActiveProfiles, getInactiveProfiles, getDqChartsData]))\n .then(([activeProfiles, inactiveProfiles, dqChartsData]) => {\n if (has('error', dqChartsData)) {\n onError(dqChartsData);\n } else {\n const sourceSystems = pipe(\n path(['consolidationRate', 'totalCrosswalksBySource']),\n omit(['ReltioCleanser']),\n keys,\n length\n )(dqChartsData);\n onRequestFinished({\n ...dqChartsData,\n summary: {\n inactiveProfiles: inactiveProfiles.type?.[getLastUriPart(entityTypeUri)],\n activeProfiles: activeProfiles.type?.[getLastUriPart(entityTypeUri)],\n sourceSystems\n }\n });\n }\n })\n .catch(onError);\n } else {\n if (!attributeFieldName) return;\n safePromise(\n getDQChartsData({\n entityTypeUri,\n attributes: [attributeFieldName],\n dataLevel,\n metrics,\n searchByOv\n })\n )\n .then(\n pipe(\n pathOr({}, ['statistic', attributeFieldName]),\n ifElse(has('error'), onError, onRequestFinished)\n )\n )\n .catch(onError);\n }\n }, [\n setRequestState,\n setChartsData,\n safePromise,\n attributeFieldName,\n entityTypeUri,\n dataLevel,\n metrics,\n searchByOv\n ]);\n\n const refreshAction = useRefreshAction({\n action: loadChartsData,\n dataLevel\n });\n\n useEffect(() => {\n refreshAction();\n }, [refreshAction]);\n\n const chartsDataResult = useMemo(\n () => ({data: chartsData, state: requestState, reload: refreshAction}),\n [chartsData, requestState, refreshAction]\n );\n\n return chartsDataResult;\n};\n","import {makeStyles} from '@mui/styles';\n\ntype Props = {\n color?: string;\n};\n\nexport const useStyles = makeStyles({\n label: {\n whiteSpace: 'nowrap',\n paddingRight: '9px'\n },\n infoDataLabel: {\n fontWeight: 700\n },\n chartDataLabel: {\n color: 'rgba(255, 255, 255, 0.75)'\n },\n anomalyTitle: ({color}: Props) => ({\n width: '10px',\n height: '10px',\n backgroundColor: color,\n opacity: 0.12\n }),\n anomalyTitleBackground: {\n width: '10px',\n height: '10px',\n backgroundColor: '#fff',\n position: 'absolute',\n top: 0,\n left: 0\n },\n anomalyTitleWrapper: {\n width: '10px',\n height: '10px',\n position: 'relative',\n display: 'inline-block',\n marginRight: '-3px'\n },\n anomalyValue: {\n paddingLeft: '16px'\n },\n row: {\n padding: '2px 0'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\nconst InfoDataRenderer = ({label, value}: Props) => {\n const styles = useStyles({});\n\n return (\n <>\n {label && <span className={classnames(styles.label, styles.infoDataLabel)}>{label}</span>}\n {value}\n </>\n );\n};\n\nexport default InfoDataRenderer;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\nconst ChartDataRenderer = ({label, value}: Props) => {\n const styles = useStyles({});\n\n return (\n <>\n {label && <span className={classnames(styles.label, styles.chartDataLabel)}>{label}</span>}\n {value}\n </>\n );\n};\n\nexport default ChartDataRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipWrapper: {\n fontSize: '10px',\n fontWeight: 400,\n lineHeight: '12px',\n color: '#FFFFFF'\n },\n title: {\n padding: '2px 0'\n },\n row: {\n padding: '2px 0'\n }\n});\n","import React from 'react';\nimport ChartDataRenderer from './data-renderers/ChartDataRenderer';\nimport {useStyles} from './styles';\n\ntype Data = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\ntype Props = {\n data: Data[];\n title?: string;\n DataRenderer?: React.ComponentType<Data>;\n children?: React.ReactNode;\n};\n\nconst ChartDataTooltip = ({data, title, DataRenderer = ChartDataRenderer, children}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={styles.tooltipWrapper}>\n {title && <div className={styles.title}>{title}</div>}\n {data.map((data, index) => (\n <div key={index} className={styles.row}>\n <DataRenderer {...data} />\n </div>\n ))}\n {children}\n </div>\n );\n};\n\nexport default ChartDataTooltip;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n fillRateSquare: {\n height: '8px',\n width: '8px',\n display: 'inline-block',\n marginRight: '5px',\n verticalAlign: 'middle'\n }\n});\n","import React from 'react';\nimport {isNil} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\n\nimport {getPercentLabel} from '../../../services/charts';\n\nimport ChartDataTooltip from '../ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: ChartData[];\n getColor: (group: string) => string;\n title?: string;\n};\n\nconst getValueLabel = ({value, percent}: {value: number; percent?: number}) =>\n isNil(percent) ? i18n.number(value) : `(${i18n.number(value)})`;\n\nconst TooltipWithSquares = ({data, title, getColor}: Props) => {\n const styles = useStyles();\n\n const tooltipData = data.map(({label, percent, value, group}) => ({\n label: (\n <span>\n <div className={styles.fillRateSquare} style={{background: getColor(group)}}></div>\n {label}\n </span>\n ),\n value: `${getPercentLabel(percent)} ${getValueLabel({value, percent})}`\n }));\n\n return <ChartDataTooltip title={title} data={tooltipData} />;\n};\n\nexport default TooltipWithSquares;\n","import {always, converge, curry, identity, pipe, propOr, map, reduce, sortBy, toPairs, when, assoc} from 'ramda';\nimport {\n getChartItemColor,\n FillRateState,\n DQChartsData,\n FillRateData,\n FilterOptions,\n TimeSeriesAnomalyValues,\n TimeSeriesAnomalyValue,\n TimeSeriesStatisticValues\n} from '@reltio/mdm-sdk';\nimport {ChartData} from '@reltio/components';\nimport {getSearchState, localizeChartValues, isEmptyData} from './charts';\nimport i18n from 'ui-i18n';\n\nconst FillRateChartColors = {\n [FillRateState.MISSING]: '#CE5C00',\n [FillRateState.EXISTS]: '#C4CE00'\n};\n\nexport const getFillRateColorByState = (state: FillRateState) => FillRateChartColors[state] || getChartItemColor(state);\n\nexport const getFillRateColors: (chartsData: ChartData[]) => string[] = map(({group}) =>\n getFillRateColorByState(group)\n);\n\nexport const getLabelFromState = (state: FillRateState) => {\n const FillRateStateLabels = {\n [FillRateState.MISSING]: i18n.text('Missing'),\n [FillRateState.EXISTS]: i18n.text('Exists')\n };\n\n return FillRateStateLabels[state] || state;\n};\n\nconst getFillRateStateIndexFromData = (data: ChartData) =>\n Object.values(FillRateState).indexOf(data.group as FillRateState);\n\ntype FormatFillRateDataFn = (fillRateData: FillRateData) => ChartData[];\nexport const formatFillRateData = pipe(\n Object.entries,\n map(([state, value]) => ({label: getLabelFromState(state), group: state, value})),\n sortBy(getFillRateStateIndexFromData),\n localizeChartValues\n) as FormatFillRateDataFn;\n\ntype FillRateStatistic = {\n statistic: Record<string, DQChartsData>;\n};\nexport const formatFillRatesData: (fillRates: FillRateStatistic) => Record<string, ChartData[]> = pipe(\n propOr({}, 'statistic'),\n toPairs,\n reduce((result, [key, value]) => {\n if (value?.fillRate) return assoc(key, formatFillRateData(value.fillRate), result);\n return result;\n }, {})\n);\n\ntype GetFillRateDataFn = (\n chartsData: DQChartsData | TimeSeriesAnomalyValues | TimeSeriesStatisticValues\n) => FillRateData | TimeSeriesAnomalyValue;\nexport const getFillRateData: GetFillRateDataFn = propOr({}, 'fillRate');\n\ntype GetFillRateChartDataFn = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n colors: string[];\n};\nexport const getFillRateChartData: GetFillRateChartDataFn = pipe(\n getFillRateData,\n formatFillRateData,\n when(isEmptyData, always([])),\n converge(\n (chartData: ChartData, colors: string[]) => ({\n chartData,\n colors\n }),\n [identity, getFillRateColors]\n )\n);\n\nconst getFillRateFilter = curry(({fieldName}: {fieldName: string}, state: FillRateState) => [\n {\n filter: state === FillRateState.EXISTS ? FilterOptions.EXISTS : FilterOptions.MISSING_VALUE,\n fieldName\n }\n]);\nexport const getFillRateSearchState = getSearchState(getFillRateFilter);\n","import {useMemo} from 'react';\n\nimport {DQChartsData} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../contexts/ChartsDataProvider';\n\nexport const useChartData = <T>(getChartData: (chartsData: DQChartsData) => T) => {\n const {\n chartsData: {data: chartsData, state, reload}\n } = useChartsDataContext();\n const data = useMemo(() => getChartData(chartsData), [chartsData, getChartData]);\n return useMemo(() => ({data, state, reload}), [data, state, reload]);\n};\n","import {AdditionalFilterOptionsValues, FilterOptions, SearchState} from '@reltio/mdm-sdk';\nimport {getAdvancedSearchFilter} from './advancedFilters';\n\nexport const RawFilterFields = {\n DAY_OF_WEEK: 'day_of_week',\n DAY_OF_MONTH: 'day_of_month',\n MONTH: 'month',\n LENGTH: 'length',\n CROSSWALK_SOURCES: 'crosswalk_sources',\n PATTERN: 'pattern'\n};\n\ntype GetRawFilterSearchState = {\n keyword: string;\n entityTypeUri: string;\n};\nconst getRawFilterSearchState = ({keyword, entityTypeUri}: GetRawFilterSearchState): SearchState => ({\n keyword: {\n value: keyword,\n isRawFilter: true\n },\n advanced: [getAdvancedSearchFilter(entityTypeUri)],\n version: '2.0'\n});\ntype GetRangeRawFilterSearchState = {\n fieldName: string;\n startRange: string;\n endRange: string;\n entityTypeUri: string;\n};\n\nexport const getExcludedEntityTypesRawFilter = (entityTypesUris: string[] = []) =>\n entityTypesUris.length > 0\n ? `(${AdditionalFilterOptionsValues.NOT_LIST_EQUALS}(type, ${entityTypesUris.join(',')}))`\n : '';\n\nexport const getRangeRawFilterSearchState = ({\n fieldName,\n startRange,\n endRange,\n entityTypeUri\n}: GetRangeRawFilterSearchState): SearchState =>\n getRawFilterSearchState({\n keyword: `${FilterOptions.IN_RANGE}(${fieldName}, ${startRange}, ${endRange})`,\n entityTypeUri\n });\n\ntype GetEqualsRawFilterSearchState = {\n fieldName: string;\n value: string;\n entityTypeUri: string;\n};\nexport const getEqualsRawFilterSearchState = ({\n fieldName,\n value,\n entityTypeUri\n}: GetEqualsRawFilterSearchState): SearchState =>\n getRawFilterSearchState({\n keyword: `${FilterOptions.EQUALS}(${fieldName}, ${value})`,\n entityTypeUri\n });\n","import {assoc, curry, pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport mdmModule, {ui, search} from '@reltio/mdm-module';\nimport {ActivityFilter, getDescendantEntityTypes, Metadata, SearchState} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {getExcludedEntityTypesRawFilter} from '../services/rawFilters';\nimport type {GetSearchStateProps} from '../types/GetSearchStateProps';\n\nconst excludeDescendantEntityTypes = curry((metadata: Metadata, entityTypeUri: string, searchState: SearchState) => {\n const descendantEntityTypes: string[] = getDescendantEntityTypes(metadata, entityTypeUri);\n const entityTypesFilter = getExcludedEntityTypesRawFilter(descendantEntityTypes);\n const currentRawFilter = searchState?.keyword?.value;\n if (entityTypesFilter) {\n const newRawFilter = currentRawFilter ? `(${currentRawFilter}) and ${entityTypesFilter}` : entityTypesFilter;\n return assoc(\n 'keyword',\n {\n value: newRawFilter,\n isRawFilter: true\n },\n searchState\n );\n } else return searchState;\n});\nconst addOVOption = curry((ovOption: boolean, searchState: SearchState) =>\n assoc('searchOptions', {searchByOv: ovOption, ovOnly: ovOption}, searchState)\n);\ntype GetSearchStateFn = (props: GetSearchStateProps) => (group: string, activityFilter?: ActivityFilter) => SearchState;\nexport const useSearchRedirect = (\n getSearchState: GetSearchStateFn\n): ((group: string, activityFilter?: ActivityFilter) => void) => {\n const dispatch = useDispatch();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const {detailedAttributeType, entityType, searchByOv} = useDQDashboardState();\n const globalFilter = useSelector(mdmModule.selectors.getGlobalFilter);\n return (group, activityFilter = ActivityFilter.ACTIVE_ONLY) => {\n dispatch(search.actions.activityFilterUpdated(activityFilter));\n dispatch(search.actions.globalFilterUpdated({...globalFilter, isMuted: true, query: null}));\n pipe(\n getSearchState({detailedAttributeType, entityTypeUri: entityType.uri}),\n excludeDescendantEntityTypes(metadata, entityType.uri),\n addOVOption(searchByOv),\n ui.actions.openSearch,\n dispatch\n )(group);\n };\n};\n","const ANOMALY_DATA_KEY = 'anomaly';\n\nexport default ANOMALY_DATA_KEY;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n legendLabel: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n legendValue: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n legendHorizontal: {\n width: '100%',\n display: 'flex',\n justifyContent: 'left',\n margin: 'auto',\n flexWrap: 'wrap',\n flexDirection: 'row',\n marginBottom: 2\n },\n legendVertical: {\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n margin: 'auto',\n flexWrap: 'wrap',\n flexDirection: 'column',\n marginBottom: 2\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n height: 19\n },\n itemColor: {\n width: 12,\n height: 12,\n marginRight: 9,\n flexShrink: 0\n }\n});\n","import React from 'react';\nimport {LegendPayload, LegendProps} from 'recharts';\nimport classnames from 'classnames';\n\nimport ANOMALY_DATA_KEY from '../../constants/AnomalyDataKey';\n\nimport {useStyles} from './styles';\n\nconst CustomLegend = ({payload, layout}: LegendProps) => {\n const styles = useStyles();\n return (\n <div\n className={classnames({\n [styles.legendHorizontal]: layout === 'horizontal',\n [styles.legendVertical]: layout === 'vertical'\n })}\n >\n {payload.map((item: LegendPayload & {dataKey: string}) => (\n <div key={item.dataKey} className={styles.item}>\n <div\n style={{background: item.color, opacity: item.dataKey === ANOMALY_DATA_KEY ? 0.24 : 1}}\n className={styles.itemColor}\n />\n <span className={styles.legendLabel}> {item.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\nexport default CustomLegend;\n","import React from 'react';\nimport {Legend, LegendProps} from 'recharts';\n\nimport {ChartData, withPercents} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {getPercentLabel} from '../../services/charts';\n\nimport CustomLegend from './CustomLegend';\n\nimport {useStyles} from './styles';\n\ntype StackedHorizontalBarData = ChartData & {dataReltioId?: string};\n\ntype Props = LegendProps & {\n data: StackedHorizontalBarData[];\n colors: string[];\n};\n\nconst ChartLegends = ({data, colors, ...legendProps}: Props) => {\n const styles = useStyles();\n return (\n <Legend\n layout=\"vertical\"\n align=\"left\"\n verticalAlign=\"top\"\n wrapperStyle={{\n display: 'flex',\n overflowY: 'auto',\n maxHeight: '100%',\n maxWidth: '100%',\n marginTop: '13px'\n }}\n content={<CustomLegend />}\n payload={(data || []).map(({group, label, value, percent}, index) => ({\n id: group,\n type: 'square',\n color: colors[index],\n value: (\n <>\n <span className={styles.legendLabel}>{label}</span>\n <span className={styles.legendValue}>\n {`${getPercentLabel(percent)} (${formatNumberAsMetric(value, 999)})`}\n </span>\n </>\n )\n }))}\n {...legendProps}\n />\n );\n};\n\nexport default withPercents(ChartLegends);\n","export const VIOLATED_PROFILES_METRIC = 'violatedProfiles';\n","import moment from 'moment';\nimport {useContext} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport mdmModule from '@reltio/mdm-module';\nimport {DQMetric, DataTypes, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {checkIsTimeSeries, getTimeRangeDates} from '../services/mlDq';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {VIOLATED_PROFILES_METRIC} from '../constants/ValidationMetric';\n\ntype Props = {\n config: DQDashboardView;\n};\n\nconst DIVIDER = '_';\n\nexport const useExportDQParams = ({config}: Props) => {\n const exportDQPath: string = useSelector(mdmModule.selectors.getExportDQPath);\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const {entityType, detailedAttributeType, dateRange} = useDQDashboardState();\n const attributeFieldName = detailedAttributeType?.fieldName.replace('attributes.', '');\n const attributeType = detailedAttributeType?.fieldName;\n const attributeDataType = detailedAttributeType?.type as DataTypes;\n const dataLevel = useContext(DataLevelContext);\n const {startDate, endDate} = getTimeRangeDates(dateRange);\n const isTimeseries = checkIsTimeSeries(config);\n const period = checkIsTimeSeries(config) ? startDate.concat('_', endDate) : moment().utc().format();\n const getFileName = () =>\n tenant.concat(\n DIVIDER,\n entityType.label || getLastUriPart(entityType.uri),\n `${attributeFieldName ? DIVIDER.concat(attributeFieldName) : ''}`,\n DIVIDER,\n config.type,\n DIVIDER,\n period,\n '.csv'\n );\n const metrics =\n config.type === 'dataValidationFunctions' && isTimeseries\n ? VIOLATED_PROFILES_METRIC\n : (config.type as DQMetric);\n\n return {\n tenant,\n entityType: getLastUriPart(entityType.uri),\n attributeType,\n exportDQPath,\n dataLevel,\n metrics: [metrics],\n period: [startDate, endDate],\n isTimeseries,\n getFileName,\n dataType: attributeDataType\n };\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n width: \"24\"\n}, props), React.createElement(\"g\", null, React.createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0z\"\n})), React.createElement(\"g\", null, React.createElement(\"path\", {\n fillOpacity: \".54\",\n d: \"M5 20h14v-2H5v2zM19 9h-4V3H9v6H5l7 7 7-7z\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n menuButton: {\n position: 'absolute',\n right: '10px'\n }\n});\n","import {has} from 'ramda';\nimport React, {useContext} from 'react';\n\nimport i18n from 'ui-i18n';\nimport {DashboardPopupMenu} from '@reltio/dashboard';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useExportData} from '../../hooks/useExportData';\nimport ExportResultIcon from '../../icons/ExportResult.svg';\nimport {DQDashboardView} from '../../types/DQDashboardView';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n exportLoadingId: string;\n};\n\nconst DQDashboardPopupMenu = ({config, exportLoadingId}: Props) => {\n const styles = useStyles();\n const dataLevel = useContext(DataLevelContext);\n const {addExportLoadingId} = useDQDashboardStateActions();\n const {exportLoadingIds} = useDQDashboardState();\n const exportData = useExportData(config);\n const handleDownloadClick = () => {\n addExportLoadingId(exportLoadingId);\n exportData(exportLoadingId);\n };\n const menuItems = [\n {\n id: 'download',\n title: i18n.text('Download'),\n icon: <ExportResultIcon />,\n active: true,\n action: handleDownloadClick,\n disabled: has(exportLoadingId, exportLoadingIds)\n }\n ];\n return (\n <div className={styles.menuButton} data-reltio-id={`reltio-dq-dashboard-export-${dataLevel}-${config.type}`}>\n <DashboardPopupMenu items={menuItems} />\n </div>\n );\n};\n\nexport default DQDashboardPopupMenu;\n","import {useSafePromise} from '@reltio/components';\nimport {exportDQ} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardStateActions} from '../contexts/DQDashboardStateContext';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {useExportDQParams} from './useExportParams';\n\nexport const useExportData = (config: DQDashboardView) => {\n const safePromise = useSafePromise();\n const exportParams = useExportDQParams({config});\n const {deleteExportLoadingId} = useDQDashboardStateActions();\n return (exportId: string) =>\n safePromise(exportDQ(exportParams))\n .then((res) => res.arrayBuffer())\n .then((arrayBuffer) => {\n const blob = new Blob([arrayBuffer], {type: 'csv'});\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = exportParams.getFileName();\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n })\n .catch(console.error)\n .finally(() => deleteExportLoadingId(exportId));\n};\n","export enum EmptyStateVariants {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large'\n}\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: ({height}: {height: number}) => ({\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'rgba(0, 0, 0, 0.54)',\n margin: '0 auto',\n paddingBottom: height > 239 ? '30px' : 0,\n boxSizing: 'border-box'\n }),\n small: {\n '& $icon': {\n maxHeight: '88px'\n },\n '& $message': {\n fontSize: '12px'\n },\n '& $title': {\n fontSize: '13px',\n fontWeight: 400,\n marginBottom: 0\n },\n '& $refreshButton': {\n marginTop: '2px',\n padding: 0\n }\n },\n medium: {\n '& $icon': {\n maxHeight: '190px',\n marginBottom: '24px'\n }\n },\n large: {\n '& $icon': {\n height: '256px',\n width: '256px',\n marginBottom: '24px'\n }\n },\n icon: ({height}: {height: number}) => ({\n paddingTop: 0,\n marginBottom: height > 170 ? '16px' : '4px'\n }),\n message: {\n padding: '0 24px',\n fontSize: '14px',\n textAlign: 'center',\n whiteSpace: 'pre-wrap'\n },\n title: {\n padding: '0 24px',\n fontSize: '20px',\n textAlign: 'center',\n color: 'rgba(0,0,0,0.87)',\n fontWeight: 500,\n marginBottom: '8px'\n },\n refreshButton: {\n color: theme.palette.primary.main,\n marginTop: '12px',\n padding: '6px 8px'\n },\n refreshIcon: {\n width: '24px',\n height: '24px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport ReplayIcon from '@mui/icons-material/Replay';\nimport {ErrorData} from '../../types/ErrorData';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n errorData?: ErrorData;\n onRefresh?: () => void;\n height?: number;\n variant?: EmptyStateVariants;\n};\n\nconst defaultIcon = EMPTY_STATE_ICONS.ERROR;\n\nconst DQDashboardError = ({onRefresh, height, errorData = {}, variant = EmptyStateVariants.SMALL}: Props) => {\n const {Icon = defaultIcon, message, title} = errorData;\n const styles = useStyles({height});\n return (\n <div className={classnames(styles.container, styles[`${variant}`])}>\n <Icon className={styles.icon} />\n {title && <Typography className={styles.title}>{title}</Typography>}\n {message && <Typography className={styles.message}>{message}</Typography>}\n {!!onRefresh && (\n <Button\n className={styles.refreshButton}\n startIcon={<ReplayIcon color=\"primary\" className={styles.refreshIcon} />}\n onClick={onRefresh}\n data-reltio-id=\"reltio-dq-dashboard-chart-refresh-button\"\n >\n <Typography variant=\"button\">{i18n.text('Refresh')}</Typography>\n </Button>\n )}\n </div>\n );\n};\n\nexport default DQDashboardError;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n }\n}));\n","import classnames from 'classnames';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport i18n from 'ui-i18n';\nimport {BasicViewContent, ErrorBoundary, EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {useStyles} from './styles';\n\ntype ChildrenProps<T> = {data: T[]; width: number; height: number};\n\ntype Props<T> = {\n loadingState: RequestStates;\n children: (props: ChildrenProps<T>) => React.ReactNode;\n onRefresh: () => void;\n data: T[];\n className?: string;\n errorData?: {\n icon?: JSX.Element;\n message?: React.ReactNode;\n title?: React.ReactNode;\n };\n};\n\nconst DQLayoutItemContent = <T extends unknown>({loadingState, onRefresh, children, data, className}: Props<T>) => {\n const styles = useStyles();\n const renderContent = ({width, height}: {width: number; height: number}) => {\n switch (loadingState) {\n case RequestStates.LOADED:\n if (!data || data.length === 0) {\n return (\n <DQDashboardError\n height={height}\n errorData={{\n Icon: EMPTY_STATE_ICONS.NO_DATA,\n message: i18n.text(\n 'Go ahead and load some data. We’ll put it on the scales and let you know here if it measures up.'\n ),\n title: i18n.text('Give us something to go on!')\n }}\n variant={EmptyStateVariants.SMALL}\n />\n );\n }\n return (\n <ErrorBoundary\n error={\n <DQDashboardError\n errorData={{message: i18n.text('Something went wrong')}}\n height={height}\n variant={EmptyStateVariants.SMALL}\n />\n }\n >\n {children({data, width, height})}\n </ErrorBoundary>\n );\n case RequestStates.LOADING:\n return <DashboardLinearLoader />;\n case RequestStates.ERROR:\n return (\n <DQDashboardError\n errorData={{\n Icon: EMPTY_STATE_ICONS.ERROR,\n message: i18n.text('No need to fret - just refresh and it will work itself out.'),\n title: i18n.text('Oops! We ran into a problem.')\n }}\n height={height}\n onRefresh={onRefresh}\n variant={EmptyStateVariants.SMALL}\n />\n );\n default:\n return <div>Loading...</div>;\n }\n };\n\n return (\n <BasicViewContent className={classnames(styles.viewContent, className)}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {renderContent}\n </ReactResizeDetector>\n </BasicViewContent>\n );\n};\n\nexport default DQLayoutItemContent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0px 16px'\n },\n title: {\n fontSize: '16px',\n marginRight: '5px',\n lineHeight: '24px'\n },\n infoIcon: {\n position: 'relative'\n }\n}));\n","import React, {useContext} from 'react';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\n\nimport {BasicViewHeader, SmallIconButtonWithTooltip, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n infoTooltipTitle?: React.ReactElement | string;\n children?: React.ReactNode;\n};\n\nconst DQLayoutItemHeader = ({title, infoTooltipTitle, children}: Props) => {\n const hasInfoIcon = !!infoTooltipTitle;\n const hasChildren = !!children;\n const styles = useStyles(hasChildren);\n const isAttributeLevel = useContext(DataLevelContext) === DQDataLevel.ATTRIBUTE_TYPE;\n return (\n <BasicViewHeader\n title={title}\n className={styles.root}\n classes={{\n title: styles.title\n }}\n >\n {hasInfoIcon && (\n <SmallIconButtonWithTooltip\n icon={InfoIcon}\n size=\"XXS\"\n tooltipTitle={infoTooltipTitle}\n className={styles.infoIcon}\n tooltipPlacement=\"top-start\"\n />\n )}\n {hasChildren && (\n <HideOnShrink widthToHide={250}>\n {isAttributeLevel && <VerticalDivider height={24} margin={16} />}\n {children}\n </HideOnShrink>\n )}\n </BasicViewHeader>\n );\n};\n\nexport default DQLayoutItemHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n view: {\n flex: 1,\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n}));\n","import React, {useContext} from 'react';\nimport {BasicView} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n children: React.ReactNode;\n};\n\nconst DQLayoutItemView = ({config, children}: Props) => {\n const styles = useStyles();\n const {type} = config;\n const dataLevel = useContext(DataLevelContext);\n const {period} = useDQDashboardState();\n const dataReltioId = hasTimeRange(period)\n ? `reltio-dq-dashboard-chart-time-series-${type}-${dataLevel}`\n : `reltio-dq-dashboard-chart-${type}-${dataLevel}`;\n\n return (\n <BasicView className={styles.view} data-reltio-id={dataReltioId}>\n {children}\n </BasicView>\n );\n};\n\nexport default DQLayoutItemView;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n height: '18px',\n padding: '3px 8px',\n background: 'rgba(43, 152, 240, 0.12)',\n border: '0.6px solid #2B98F0',\n borderRadius: '2px'\n },\n label: {\n fontSize: '8px',\n padding: 0\n },\n disabled: {\n background: 'rgba(153, 153, 153, 0.12)',\n border: '0.6px solid #999999'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@mui/material/Chip';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {getLabelByTimeRange} from '../../services/mlDq';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = ChipProps & {\n disabled?: boolean;\n};\n\nconst PeriodChip = ({disabled = false, ...chipProps}: Props) => {\n const styles = useStyles();\n const {dateRange} = useDQDashboardState();\n const label = disabled ? i18n.text('Today') : getLabelByTimeRange(dateRange);\n\n return (\n <Chip\n classes={{\n root: classnames(styles.root, styles.disabled),\n label: styles.label\n }}\n label={label}\n {...chipProps}\n />\n );\n};\n\nexport default PeriodChip;\n","import {makeStyles} from '@mui/styles';\n\nconst BarAxis = {\n content: '\"\"',\n position: 'absolute',\n background: 'rgba(0, 0, 0, 0.38)',\n width: '1px',\n height: '4px',\n bottom: '-4px',\n left: 0\n};\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n stackedBar: {\n width: '100%',\n display: 'flex',\n flexWrap: 'nowrap',\n marginTop: '13px',\n position: 'relative',\n '&:before': BarAxis,\n '&:after': {\n ...BarAxis,\n right: 0,\n left: 'initial'\n }\n },\n bar: {\n height: '24px',\n flexGrow: 1,\n position: 'relative',\n width: '50%',\n transition: 'width 0.7s',\n '&:hover': {\n '&:after': {\n content: '\"\"',\n background: 'rgba(0, 0, 0, 0.1)'\n }\n },\n '&:after': {\n position: 'absolute',\n top: '-3px',\n bottom: '-4px',\n left: '-3px',\n right: '-3px',\n transition: 'background 0.3s',\n zIndex: 1,\n pointerEvents: 'none'\n }\n },\n inactivePart: {\n background: '#EFEFEF'\n },\n tooltipTitle: {\n fontSize: '11px'\n },\n tooltipFillRate: {\n marginTop: '4px'\n },\n tooltip: {\n background: '#fff',\n filter: 'drop-shadow(0px 4px 5px rgba(0, 0, 0, 0.14)) drop-shadow(0px 1px 10px rgba(0, 0, 0, 0.12)) drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.2))',\n padding: '5px 8px'\n },\n legendWrapper: {\n position: 'relative',\n flexGrow: 1\n },\n legendLabel: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n legendValue: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n clickable: {\n cursor: 'pointer'\n },\n rangeWrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: '4px'\n },\n rangeValue: {\n color: 'rgba(0, 0, 0, 0.54)',\n fontSize: '12px'\n },\n popper: {\n paddingTop: '6px'\n }\n});\n","import React, {forwardRef} from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst Bar = forwardRef(\n ({className, ...props}: React.HTMLAttributes<HTMLDivElement>, ref: React.RefObject<HTMLDivElement>) => {\n const styles = useStyles();\n return <div className={classnames(styles.bar, className)} {...props} ref={ref} />;\n }\n);\nBar.displayName = 'Bar';\n\nexport default Bar;\n","import classnames from 'classnames';\nimport {nanoid} from 'nanoid';\nimport {has, pipe, pluck, sum} from 'ramda';\nimport React, {useContext, useMemo} from 'react';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport i18n from 'ui-i18n';\n\nimport {ChartData, RequestStates, withPercents} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {getBarWidthStyle, getPercentLabel} from '../../services/charts';\nimport {hasTimeRange} from '../../services/mlDq';\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {ChartDataTooltip} from '../../components/ChartDataTooltip';\nimport ChartLegends from '../../components/ChartLegends/ChartLegends';\nimport DQDashboardPopupMenu from '../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\nimport DQLayoutItemContent from '../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../components/PeriodChip/PeriodChip';\nimport Bar from './Bar';\nimport {useStyles} from './styles';\n\nconst getTooltipData = ({label, value, percent}: ChartData) => [\n {\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }\n];\n\ntype StackedHorizontalBarData = ChartData & {dataReltioId?: string};\n\ntype Props = {\n classes?: Partial<Record<'bar' | 'stackedBar' | 'legendWrapper', string>>;\n colors: string[];\n config: DQDashboardView;\n data: StackedHorizontalBarData[];\n infoTooltipTitle?: React.ReactElement | string;\n onItemClick?: (group: string) => void;\n onRefresh: () => void;\n state: RequestStates;\n};\n\nconst StackedHorizontalBarChart = ({\n classes = {},\n colors,\n config,\n data,\n infoTooltipTitle,\n onItemClick,\n onRefresh,\n state\n}: Props) => {\n const styles = useStyles();\n const onBarClick = onItemClick && ((group: string) => onItemClick(group));\n const clickable = !!onItemClick;\n const maxValue = pipe(pluck('percent'), sum)(data);\n const {title} = config;\n const {period, exportLoadingIds} = useDQDashboardState();\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n const dataLevel = useContext(DataLevelContext);\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && dataLevel === DQDataLevel.ATTRIBUTE_TYPE && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent loadingState={state} onRefresh={onRefresh} data={data}>\n {({data}) => (\n <div className={styles.root}>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <div className={classnames(styles.stackedBar, classes.stackedBar)}>\n {data.map((chartData: StackedHorizontalBarData, index: number) => (\n <Tooltip\n title={<ChartDataTooltip data={getTooltipData(chartData)} />}\n followCursor={true}\n key={chartData.label}\n classes={{popper: styles.popper}}\n >\n <Bar\n className={classnames(classes.bar, clickable && styles.clickable)}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n onClick={() => onBarClick && onBarClick(chartData.group)}\n data-reltio-id={chartData.dataReltioId}\n />\n </Tooltip>\n ))}\n </div>\n <div className={styles.rangeWrapper}>\n <span className={styles.rangeValue}>0</span>\n <span className={styles.rangeValue}>{i18n.number(maxValue)}</span>\n </div>\n <div className={classnames(styles.legendWrapper, classes.legendWrapper)}>\n <ChartLegends data={data} colors={colors} />\n </div>\n </div>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default withPercents(StackedHorizontalBarChart);\n","import React from 'react';\n\nimport {getFillRateChartData, getFillRateSearchState} from '../../../services/fillRate';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\n\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nconst FillRateChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const {data, state, reload} = useChartData(getFillRateChartData);\n const {chartData, colors} = data;\n const searchProfiles = useSearchRedirect(getFillRateSearchState);\n\n return (\n <StackedHorizontalBarChart\n data={chartData}\n colors={colors}\n onItemClick={searchProfiles}\n config={config}\n state={state}\n onRefresh={reload}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default FillRateChart;\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {last, head, path, pathOr, pipe, applySpec, any, includes, __} from 'ramda';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {\n DatePeriod,\n DQDataLevel,\n TimeSeriesMetric,\n getMlDqData,\n TimeSeriesData,\n TimeSeriesStatisticData,\n DQMetric\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {getTimeRangeDates} from '../services/mlDq';\nimport {useRefreshAction} from '../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../contexts/PermissionsProvider';\n\ntype useMlDqDataRequestProps = {\n entityTypeUri: string;\n attributeFieldName: string;\n period?: DatePeriod;\n dataLevel?: DQDataLevel;\n metrics?: TimeSeriesMetric[];\n};\n\nconst needRefreshData = (period: DatePeriod, data: TimeSeriesStatisticData[]) => {\n const currentRange = data\n ? {\n startDate: pipe(last, path(['time', '_max_date']))(data),\n endDate: pipe(head, path(['time', '_min_date']))(data)\n }\n : null;\n\n if (currentRange) {\n const currentStartTime = new Date(currentRange.startDate);\n const currentEndTime = new Date(currentRange.endDate);\n const {startDate, endDate} = getTimeRangeDates(period);\n const startTime = new Date(startDate);\n const endTime = new Date(endDate);\n if (startTime >= currentStartTime && endTime <= currentEndTime) return false;\n }\n\n return true;\n};\n\nconst ANOMALY_METRICS = [DQMetric.FILL_RATE, DQMetric.UNIQUENESS];\n\nexport const useMlDqDataRequest = ({\n entityTypeUri,\n attributeFieldName,\n period = DQDateRangeValue.LAST_WEEK,\n dataLevel = DQDataLevel.ATTRIBUTE_TYPE,\n metrics\n}: useMlDqDataRequestProps) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [timeSeriesData, setTimeSeriesData] = useState<TimeSeriesData>(null);\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const mlDqPath: string = useSelector(mdmModule.selectors.getMlDqPath);\n const safePromise = useSafePromise();\n const oldRequestDependencies = useRef<string>();\n const needRequestErrorBandsData =\n usePermissionsContext().showErrorBands && any(includes(__, ANOMALY_METRICS), metrics);\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setTimeSeriesData(null);\n };\n\n const onRequestFinished = (data: TimeSeriesData) => {\n setTimeSeriesData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const memoizedRequestDependencies = [attributeFieldName, entityTypeUri, dataLevel, metrics, tenant].toString();\n\n const loadChartsData = useCallback(() => {\n if (!entityTypeUri) return;\n setRequestState(RequestStates.LOADING);\n setTimeSeriesData(null);\n\n const {startDate, endDate} = getTimeRangeDates(period);\n safePromise(\n getMlDqData({\n mlDqPath,\n tenant,\n entityTypeUri,\n attribute: attributeFieldName,\n dataLevel,\n metrics,\n startDate,\n endDate,\n ...(needRequestErrorBandsData && {anomaly: 'prophet'})\n })\n )\n .then(\n pipe(\n applySpec({\n statisticData: pipe(pathOr({}, ['data', attributeFieldName, 'timeSeries'])),\n anomalyData: pipe(pathOr({}, ['dataAnomaly', attributeFieldName, 'timeSeries']))\n }),\n onRequestFinished\n )\n )\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [memoizedRequestDependencies, period]);\n\n const refreshAction = useRefreshAction({\n action: loadChartsData,\n dataLevel\n });\n\n useEffect(() => {\n const needRefresh = needRefreshData(period, timeSeriesData?.statisticData);\n (needRefresh || memoizedRequestDependencies !== oldRequestDependencies?.current) && refreshAction();\n oldRequestDependencies.current = memoizedRequestDependencies;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refreshAction]);\n\n return useMemo(\n () => ({data: timeSeriesData, state: requestState, reload: refreshAction}),\n [timeSeriesData, requestState, refreshAction]\n );\n};\n","import {flatten, pipe, props, map, isNil, propEq, reject, curry, slice, findIndex, assocPath, last, path} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\nimport {getTimeRangeDates, isNoDataAvailable, isNoProfiles} from '../../services/mlDq';\nimport {LineChartData} from '../../types/LineChartData';\n\nconst getValuesFromChartData = curry((keys: string[], data: LineChartData[]) =>\n pipe(map(props(keys)), flatten, reject(isNil))(data)\n);\n\nexport const getMaxValueFromLineChartData = (keys: string[], data: LineChartData[]) =>\n pipe(getValuesFromChartData(keys), (values: number[]) => Math.max(...values))(data);\n\nexport const getMinValueFromLineChartData = (keys: string[], data: LineChartData[]) =>\n pipe(getValuesFromChartData(keys), (values: number[]) => Math.min(...values))(data);\n\nconst roundPercent = (percent: number) => Math.round(percent * 100) / 100;\n\nconst getOneLinePercentEdgeData = (data: number) => {\n if (data === 0 || data === 100)\n return {\n minYAxisValue: 0,\n maxYAxisValue: 100\n };\n const minYAxisValue = data > 50 ? roundPercent(2 * data - 100) : 0;\n const maxYAxisValue = data > 50 ? 100 : roundPercent(2 * data);\n return {\n minYAxisValue,\n maxYAxisValue\n };\n};\n\nexport const getUpdatedEdgeData = ({\n minLineChartData,\n maxLineChartData,\n isPercent\n}: {\n minLineChartData: number;\n maxLineChartData: number;\n isPercent: boolean;\n}) => {\n if (minLineChartData === maxLineChartData) {\n return isPercent\n ? getOneLinePercentEdgeData(minLineChartData)\n : {\n minYAxisValue: 'minData',\n maxYAxisValue: 'maxData'\n };\n }\n const gap = (maxLineChartData - minLineChartData) / 6;\n const updatedMinData = roundPercent(minLineChartData - gap);\n const updatedMaxData = roundPercent(maxLineChartData + gap);\n return {\n minYAxisValue: updatedMinData > 0 ? updatedMinData : 0,\n maxYAxisValue: isPercent && updatedMaxData > 100 ? 100 : updatedMaxData\n };\n};\n\nconst isLineChartDataEmpty = (data: LineChartData, keys: string[]) =>\n keys.every((key) => isNil(data[key]) || isNaN(+data[key]));\n\nexport const getEmptyAreas = (chartData: LineChartData[], keys: string[]) => {\n const getDateByIndex = (index: number) => path([index, 'group'], chartData);\n const extendArea = (areas: Record<'start' | 'end', number>[], index: number) => {\n const lastArea = last(areas);\n const endDate = getDateByIndex(index === chartData.length - 1 ? index : index + 1);\n\n return (lastArea && getDateByIndex(index) !== lastArea.end) || areas?.length === 0\n ? areas.concat({\n start: getDateByIndex(index === 0 ? index : index - 1),\n end: endDate\n })\n : assocPath([areas.length - 1, 'end'], endDate, areas);\n };\n\n return chartData.reduce((emptyAreas, data, index) => {\n return isLineChartDataEmpty(data, keys) ? extendArea(emptyAreas, index) : emptyAreas;\n }, []);\n};\n\nexport const XAxisTickFormatter = (value: number) => i18n.date(value, 'MMM D');\n\nexport const getZoomedData = (data: LineChartData[], dateRange: DatePeriod): LineChartData[] => {\n if (data.length === 1) return data;\n const {startDate, endDate} = getTimeRangeDates(dateRange);\n const indexStart = findIndex(propEq('group', startDate), data);\n const indexEnd = findIndex(propEq('group', endDate), data) + 1;\n return data && dateRange ? slice(indexStart, indexEnd, data) : data;\n};\n\nexport const getSeparateLines = (data: LineChartData[], lineKeys: string[], areaKeys: string[]) =>\n data.reduce((acc, currentValue, currentIndex, dataArray) => {\n if (currentIndex + 1 === dataArray.length) return acc;\n if (\n isNoDataAvailable(currentValue, lineKeys, areaKeys) &&\n isNoProfiles(dataArray[currentIndex + 1], lineKeys, areaKeys)\n ) {\n return [...acc, currentValue.group];\n }\n if (\n isNoProfiles(currentValue, lineKeys, areaKeys) &&\n isNoDataAvailable(dataArray[currentIndex + 1], lineKeys, areaKeys)\n ) {\n return [...acc, currentValue.group];\n }\n return acc;\n }, []);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M10 16.667A6.676 6.676 0 013.333 10 6.676 6.676 0 0110 3.333 6.675 6.675 0 0116.667 10 6.675 6.675 0 0110 16.667zm0 1.666c4.6 0 8.333-3.733 8.333-8.333S14.6 1.667 10 1.667A8.336 8.336 0 001.667 10c0 4.6 3.733 8.333 8.333 8.333zM9.167 10v3.333h1.666V10h2.5L10 6.667 6.667 10h2.5z\",\n fill: \"#7BAB52\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M10 3.333A6.676 6.676 0 0116.667 10 6.675 6.675 0 0110 16.667 6.675 6.675 0 013.333 10 6.676 6.676 0 0110 3.333zm0-1.666A8.336 8.336 0 001.667 10c0 4.6 3.733 8.333 8.333 8.333S18.333 14.6 18.333 10 14.6 1.667 10 1.667zM10.833 10V6.667H9.167V10h-2.5L10 13.333 13.333 10h-2.5z\",\n fill: \"#FF1744\"\n})));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n infoPanel: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\n margin: '0 0 2px',\n padding: '6px 12px 6px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n lineHeight: '20px'\n },\n info: {\n color: theme.palette.text.primary,\n fontSize: '14px'\n },\n dynamicInfo: {\n display: 'flex',\n alignItems: 'center'\n },\n dynamicInfoPositive: {\n color: '#5C922E'\n },\n dynamicInfoNegative: {\n color: '#FF1744'\n },\n dynamicIcon: {\n paddingRight: '4px'\n },\n\n percent: {\n fontWeight: 700,\n paddingRight: '4px'\n },\n\n period: {\n fontWeight: 'bold'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\n\nimport PositiveDynamicIcon from './positiveDynamic.svg';\nimport NegativeDynamicIcon from './negativeDynamic.svg';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n label: React.ReactNode;\n info: React.ReactNode;\n dynamicPercent?: number;\n};\n\nexport const ChartInfoPanel = ({label, info, dynamicPercent}: Props) => {\n const styles = useStyles();\n\n const isPositiveDynamic = dynamicPercent > 0;\n return (\n <div className={styles.infoPanel}>\n {label}\n <span className={styles.info}>{info}</span>\n {!!dynamicPercent && (\n <span\n className={classnames(styles.dynamicInfo, {\n [styles.dynamicInfoPositive]: isPositiveDynamic,\n [styles.dynamicInfoNegative]: !isPositiveDynamic\n })}\n >\n {isPositiveDynamic ? (\n <PositiveDynamicIcon className={styles.dynamicIcon} />\n ) : (\n <NegativeDynamicIcon className={styles.dynamicIcon} />\n )}\n {Math.abs(dynamicPercent).toFixed(2)}%\n </span>\n )}\n </div>\n );\n};\n\nexport default ChartInfoPanel;\n","import React, {useMemo} from 'react';\nimport {last, pipe, pluck, slice, reject, isNil} from 'ramda';\nimport moment from 'moment';\n\nimport i18n from 'ui-i18n';\nimport {DatePeriod, formatNumberAsMetric, getDateRangeByValue} from '@reltio/mdm-sdk';\n\nimport {TimeSeriesChartData} from '../../types/TimeSeriesChartData';\nimport {getZoomedData} from '../LineChart/helpers';\nimport {isNoDataAvailable, isNoProfiles} from '../../services/mlDq';\nimport {NO_DATA_AVAILABLE, NO_PROFILES} from '../../constants/NoDataLabels';\n\nimport ChartInfoPanel from './ChartInfoPanel';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dateRange: DatePeriod;\n infoLabel: string;\n dataKey: string;\n chartData: TimeSeriesChartData[];\n percentKey: string;\n areaKeys: string[];\n};\n\nconst getDynamicPercent = (chartData: TimeSeriesChartData[], percentKey: string): number => {\n const filteredData = pipe(pluck(percentKey), reject(isNil))(chartData);\n if (filteredData.length < 2) return 0;\n return pipe(\n slice(-2, Infinity),\n ([prevPercent, lastPercent]) => lastPercent - prevPercent,\n (percent: number) => Math.round(percent * 10000) / 10000\n )(filteredData);\n};\n\nconst TimeSeriesInfoPanel = ({dateRange, infoLabel, percentKey, dataKey, chartData, areaKeys}: Props) => {\n const styles = useStyles();\n\n const zoomedData = useMemo(() => getZoomedData(chartData, dateRange), [chartData, dateRange]);\n const lastChartData = last(zoomedData);\n const data = lastChartData?.[dataKey];\n const percent = lastChartData?.[percentKey];\n const dynamicPercent = !isNil(percent) && percentKey && getDynamicPercent(zoomedData, percentKey);\n const lastDateOfPeriod = getDateRangeByValue(dateRange)[1];\n const dateLabel = moment().isSame(lastDateOfPeriod, 'day') ? i18n.text('Today') : i18n.date(lastDateOfPeriod);\n const noPercentLabel = isNoDataAvailable(lastChartData, [percentKey], areaKeys)\n ? i18n.text(NO_DATA_AVAILABLE)\n : isNoProfiles(lastChartData, [percentKey], areaKeys)\n ? i18n.text(NO_PROFILES)\n : '';\n const label = (\n <>\n <span className={styles.period}>{dateLabel}:</span>\n {!isNil(percent) ? infoLabel : noPercentLabel}\n </>\n );\n const info = !isNil(percent) && (\n <>\n <span className={styles.percent}>{percent}%</span>({formatNumberAsMetric(data, 999)})\n </>\n );\n\n return <ChartInfoPanel label={label} info={info} dynamicPercent={dynamicPercent} />;\n};\n\nexport default TimeSeriesInfoPanel;\n","import {\n always,\n applySpec,\n ascend,\n assoc,\n cond,\n curry,\n filter,\n head,\n identity,\n map,\n pathOr,\n pipe,\n prop,\n propOr,\n split,\n converge,\n concat,\n propEq,\n omit,\n sort,\n descend\n} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n DQChartsData,\n ConsolidationRateData,\n FilterOptions,\n isDateType,\n formatNumberAsMetric,\n Metadata,\n formatDataTypeValue\n} from '@reltio/mdm-sdk';\nimport {InfoPanelData} from '../types/InfoPanelData';\nimport {getSearchState, localizeChartValues} from './charts';\nimport {isFloatingType} from './attributes';\nimport {getEqualsRawFilterSearchState, getRangeRawFilterSearchState, RawFilterFields} from './rawFilters';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\nimport {enrichChartDataWithSourceLabel} from '../services/charts';\n\nenum DAYS_OF_WEEK {\n sun,\n mon,\n tue,\n wed,\n thu,\n fri,\n sat\n}\n\nenum MONTHS {\n jan,\n feb,\n mar,\n apr,\n may,\n jun,\n jul,\n aug,\n sep,\n oct,\n nov,\n dec\n}\n\ntype GetFormattedDataForBarChartFn = (chartType: string) => (chartsData: DQChartsData) => ChartData[];\nconst getFormattedDataForBarChart: GetFormattedDataForBarChartFn = (chartType: string) =>\n pipe(\n pathOr({}, [chartType, 'data']),\n Object.entries,\n map(([item, value]) => ({label: item, group: item, value})),\n localizeChartValues\n );\n\nconst RELTIO_PROFILES = 'Reltio profiles';\nconst SOURCE_PROFILES = 'Source profiles';\n\nexport const getConsolidationRateChartData = pipe(\n pathOr({}, ['consolidationRate']),\n converge(concat, [\n pipe(prop('totalCrosswalksBySource'), omit(['ReltioCleanser']), (data) => [\n {...data, label: SOURCE_PROFILES, group: SOURCE_PROFILES}\n ]),\n pipe(prop('totalEntities'), (value) => [\n assoc(RELTIO_PROFILES, value, {label: RELTIO_PROFILES, group: RELTIO_PROFILES})\n ])\n ])\n);\n\nexport const getConsolidationRateTableData = (metadata: Metadata) =>\n pipe(\n pathOr({}, ['consolidationRate']),\n (consolidationRate: ConsolidationRateData) => {\n return Object.keys(consolidationRate?.totalCrosswalksBySource || []).reduce((data, crosswalk) => {\n return crosswalk !== 'ReltioCleanser'\n ? data.concat({\n label: crosswalk,\n group: crosswalk,\n value: consolidationRate.totalCrosswalksBySource[crosswalk]\n })\n : data;\n }, []);\n },\n enrichChartDataWithSourceLabel(metadata),\n sort(descend(prop('value')))\n );\n\nenum InfoPanelProperties {\n AVERAGE = 'avg',\n MININMUN = 'min',\n MAXIMUM = 'max',\n MEDIAN = 'median',\n NUMBER_OF_SOURCES = 'numberOfSources',\n MIN_NUMBER_OF_PROFILES = 'minNumberOfProfiles',\n MAX_NUMBER_OF_PROFILES = 'maxNumberOfProfiles',\n AVG_NUMBER_OF_PROFILES = 'avgNumberOfProfiles'\n}\n\nconst getLabelForInfoPanel = (propName: string, chartType: string) => {\n const Properties = {\n lengthStatistics: {\n [InfoPanelProperties.MEDIAN]: i18n.text('Median'),\n [InfoPanelProperties.AVERAGE]: i18n.text('Average'),\n [InfoPanelProperties.MININMUN]: i18n.text('Minimum'),\n [InfoPanelProperties.MAXIMUM]: i18n.text('Maximum')\n },\n valueDistribution: {\n [InfoPanelProperties.MEDIAN]: i18n.text('Median'),\n [InfoPanelProperties.AVERAGE]: i18n.text('Average'),\n [InfoPanelProperties.MININMUN]: i18n.text('Minimum'),\n [InfoPanelProperties.MAXIMUM]: i18n.text('Maximum')\n },\n crosswalkAnalysis: {\n [InfoPanelProperties.NUMBER_OF_SOURCES]: i18n.text('No. of source systems'),\n [InfoPanelProperties.AVG_NUMBER_OF_PROFILES]: i18n.text('Avg no. of profiles'),\n [InfoPanelProperties.MIN_NUMBER_OF_PROFILES]: i18n.text('Min no. of profiles'),\n [InfoPanelProperties.MAX_NUMBER_OF_PROFILES]: i18n.text('Max no. of profiles')\n }\n };\n\n return pathOr(null, [chartType, propName], Properties);\n};\n\ntype GetInfoPanelDataForBarChartFn = (chartType: string) => (chartsData: DQChartsData) => InfoPanelData[];\nconst getInfoPanelDataForBarChart: GetInfoPanelDataForBarChartFn = (chartType: string) =>\n pipe(\n propOr({}, chartType),\n Object.entries,\n map(([name, value]) => ({label: getLabelForInfoPanel(name, chartType), value})),\n filter(({label}) => label),\n localizeChartValues\n );\n\nconst getDataForBarChart = (chartType: string) => (chartsData: DQChartsData) => ({\n chartData: getFormattedDataForBarChart(chartType)(chartsData),\n infoPanelData: getInfoPanelDataForBarChart(chartType)(chartsData)\n});\n\nconst addIntervalBrackets = (label: string, attributeType: string, isLastItem: boolean) =>\n isFloatingType(attributeType) ? `[${label}${isLastItem ? ']' : ')'}` : label;\n\nconst getChartValueLabel = (value: number, attributeType: string) =>\n isDateType(attributeType)\n ? formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(value))\n : i18n.number(value);\n\nexport const convertDataWithInterval = curry(\n (\n attributeType: string,\n data: {chartData: ChartData[]; infoPanelData: InfoPanelData[]}\n ): {chartData: ChartData[]; infoPanelData: InfoPanelData[]} => {\n const getStartRangeFromChartData = pipe(prop('group'), split(' '), head, Number);\n const chartDataWithRange = data.chartData.sort(ascend(getStartRangeFromChartData)).map((dataItem, index) => {\n const [startRange, endRange = startRange] = dataItem.group.split(' ').map(Number);\n const isLastItem = index === data.chartData.length - 1;\n const label =\n startRange !== endRange\n ? addIntervalBrackets(\n `${getChartValueLabel(startRange, attributeType)} - ${getChartValueLabel(\n endRange,\n attributeType\n )}`,\n attributeType,\n isLastItem\n )\n : getChartValueLabel(startRange, attributeType);\n return {\n ...dataItem,\n label,\n group: [startRange, endRange, isLastItem ? 'last' : ''].toString()\n };\n });\n\n const infoPanelDataWithConvertedValue = data.infoPanelData.map((dataItem) => {\n const value = isDateType(attributeType)\n ? formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(dataItem.value))\n : formatNumberAsMetric(dataItem.value, 999);\n const localizedValue = isDateType(attributeType) ? value : dataItem.localizedValue;\n return {...dataItem, value, localizedValue};\n });\n return {infoPanelData: infoPanelDataWithConvertedValue, chartData: chartDataWithRange};\n }\n);\n\ntype GetChartDataWithInfoPanelData = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n infoPanelData: InfoPanelData[];\n};\nexport const getLengthChartData: GetChartDataWithInfoPanelData = pipe(\n getDataForBarChart('lengthStatistics'),\n convertDataWithInterval('')\n);\n\nexport const getCrosswalkAnalysisData = (metadata: Metadata): GetChartDataWithInfoPanelData =>\n pipe(\n getDataForBarChart('crosswalkAnalysis'),\n applySpec({\n chartData: pipe(prop('chartData'), enrichChartDataWithSourceLabel(metadata)),\n infoPanelData: pipe(\n prop('infoPanelData'),\n map((dataItem: InfoPanelData) => assoc('value', formatNumberAsMetric(dataItem.value, 999), dataItem))\n )\n })\n );\n\nexport const getValueDistributionData = (attributeType: string): GetChartDataWithInfoPanelData =>\n pipe(getDataForBarChart('valueDistribution'), convertDataWithInterval(attributeType));\nexport const getMonthDistributionData = getDataForBarChart('monthDistribution');\nexport const getDayOfWeekDistributionData = getDataForBarChart('dayOfWeekDistribution');\nexport const getDayOfMonthDistributionData = getDataForBarChart('dayOfMonthDistribution');\n\nexport const getDayOfweekDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, dayOfWeek: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.DAY_OF_WEEK}`,\n value: DAYS_OF_WEEK[dayOfWeek.toLowerCase()],\n entityTypeUri\n })\n);\n\nexport const getMonthDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, month: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.MONTH}`,\n value: MONTHS[month.toLowerCase()],\n entityTypeUri\n })\n);\n\nexport const getDayOfMonthDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, dayOfMonth: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.DAY_OF_MONTH}`,\n value: dayOfMonth,\n entityTypeUri\n })\n);\n\nexport const getLengthStatisticsSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, group: string) => {\n const [startRange, endRange] = group.split(',');\n return startRange === endRange\n ? getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.LENGTH}`,\n value: startRange,\n entityTypeUri\n })\n : getRangeRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.LENGTH}`,\n startRange,\n endRange,\n entityTypeUri\n });\n }\n);\n\nexport const getCrosswalkAnalysisSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, source: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.CROSSWALK_SOURCES}`,\n value: source,\n entityTypeUri\n })\n);\n\nconst getValueDistributionFilterForDate = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [timestampStart, timestampEnd] = group.split(',');\n return [\n {\n filter: FilterOptions.WITHIN,\n values: [[timestampStart, timestampEnd]],\n fieldName\n }\n ];\n});\n\nconst getValueDistributionFilterForNumber = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [startRange, endRange] = group.split(',');\n return [\n startRange === endRange\n ? {\n filter: FilterOptions.EQUALS,\n values: [[startRange]],\n fieldName\n }\n : {\n filter: FilterOptions.IN_RANGE,\n values: [[startRange, endRange]],\n fieldName\n }\n ];\n});\n\nconst getValueDistributionFilterForFloat = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [startRange, endRange, lastItem] = group.split(',');\n\n const isSingleValue = startRange === endRange;\n\n const filter: {\n filter: string;\n values: string[][] | string[];\n fieldName: string;\n }[] = isSingleValue\n ? [\n {\n filter: FilterOptions.EQUALS,\n values: [[startRange]],\n fieldName\n }\n ]\n : [\n {\n filter: FilterOptions.IN_RANGE,\n values: [[startRange, endRange]],\n fieldName\n }\n ];\n !lastItem &&\n !isSingleValue &&\n filter.push({\n filter: FilterOptions.NOT_EQUALS,\n values: [[endRange]],\n fieldName\n });\n return filter;\n});\n\nexport const getValueDistributionSearchState = cond([\n [isDateType, always(getSearchState(getValueDistributionFilterForDate))],\n [isFloatingType, always(getSearchState(getValueDistributionFilterForFloat))],\n [identity, always(getSearchState(getValueDistributionFilterForNumber))]\n]);\n\nconst getConsolidationRateFilter = curry((_, source: string) =>\n source === RELTIO_PROFILES\n ? []\n : [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'sourceSystems',\n values: [[source]]\n }\n ]\n);\n\nexport const getConsolidationRateSearchState = getSearchState(getConsolidationRateFilter);\n\nexport const getBarOpacity = curry((selectedBar: {group: string; key: string}, key: string) => {\n return !selectedBar || propEq('key', key, selectedBar) || key === RELTIO_PROFILES ? 1 : 0.12;\n});\n\nexport const tickFormatter = (value: number) => {\n return value > 999 ? i18n.number(value, '0,0.0a').toUpperCase() : Math.round(value * 1000) / 1000;\n};\n","import {\n CartesianGridProps,\n LineProps,\n TooltipProps,\n XAxisProps,\n YAxisProps,\n ReferenceLineProps,\n LabelProps,\n AreaProps,\n LegendProps\n} from 'recharts';\nimport {tickFormatter} from '../../services/barCharts';\nimport {\n getMaxValueFromLineChartData,\n getMinValueFromLineChartData,\n getUpdatedEdgeData,\n XAxisTickFormatter\n} from './helpers';\n\ntype LineChartSettings = {\n xAxis: XAxisProps;\n yAxis: YAxisProps;\n cartesianGrid: CartesianGridProps;\n tooltip: TooltipProps;\n line: LineProps;\n referenceLine: ReferenceLineProps;\n labelForY: LabelProps;\n area: Partial<AreaProps>;\n legend: Partial<LegendProps>;\n};\n\nconst getLineChartSettings = ({lineKeys, data, isPercent}): LineChartSettings => {\n const minLineChartData = getMinValueFromLineChartData(lineKeys, data);\n const maxLineChartData = getMaxValueFromLineChartData(lineKeys, data);\n const {minYAxisValue, maxYAxisValue} = getUpdatedEdgeData({minLineChartData, maxLineChartData, isPercent});\n\n return {\n xAxis: {\n type: 'category',\n dataKey: 'group',\n tick: {\n fill: '#000',\n fontSize: '12px',\n tickMargin: '18px',\n style: {\n userSelect: 'none'\n }\n },\n angle: 0,\n textAnchor: 'middle',\n stroke: '#666',\n tickLine: false,\n dy: 8,\n tickFormatter: XAxisTickFormatter,\n interval: 'preserveStartEnd',\n scale: 'point'\n },\n yAxis: {\n dataKey: '',\n type: 'number',\n tick: {\n fill: '#000',\n fontSize: '12px',\n width: undefined,\n style: {\n userSelect: 'none'\n }\n },\n stroke: '#666',\n tickFormatter: tickFormatter,\n tickCount: 5,\n width: 59,\n tickLine: false,\n domain: [minYAxisValue, maxYAxisValue]\n },\n cartesianGrid: {\n strokeDasharray: '3 3',\n stroke: '#666',\n strokeOpacity: '0.4'\n },\n tooltip: {\n cursor: {\n fill: '#000',\n opacity: '0.1'\n }\n },\n line: {\n type: 'linear',\n dataKey: 'value',\n strokeWidth: 3,\n dot: null,\n activeDot: {stroke: 'white', strokeWidth: 2, r: 5}\n },\n referenceLine: {\n strokeDasharray: '3 3',\n stroke: '#000',\n isFront: true\n },\n labelForY: {\n angle: 270,\n position: 'left',\n offset: -3,\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)',\n userSelect: 'none'\n }\n },\n area: {\n activeDot: false,\n fillOpacity: '0.24',\n stroke: 'none'\n },\n legend: {\n verticalAlign: 'bottom',\n align: 'left'\n }\n };\n};\n\nexport default getLineChartSettings;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React, {useCallback, useState, useMemo} from 'react';\nimport {\n CartesianGrid,\n Line,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n TooltipProps,\n ReferenceLine,\n ReferenceArea,\n Area,\n ComposedChart,\n Legend\n} from 'recharts';\nimport {either, pluck, isNil} from 'ramda';\n\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\nimport {LineChartData} from '../../types/LineChartData';\nimport getLineChartSettings from './getLineChartSettings';\nimport {getZoomedData, getEmptyAreas, getSeparateLines} from './helpers';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\n\nimport CustomLegend from '../ChartLegends/CustomLegend';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n data: LineChartData[];\n width: number;\n height: number;\n lineKeys: string[];\n areaKeys?: string[];\n dateRange: DatePeriod;\n getTooltip?: (payload: TooltipProps) => React.ReactNode;\n getColor?: (key: string) => string;\n yAxisLabel?: string;\n isPercent?: boolean;\n changeZoom?: (zoom: [string, string]) => void;\n};\n\nconst DEFAULT_LINE_COLOR = '#00439D';\ntype MouseEventProps = {\n activeLabel: string;\n activePayload: {value: number}[];\n isTooltipActive: boolean;\n};\n\nconst LineChart = ({\n data,\n width,\n height,\n getTooltip: getTooltipProp,\n getColor,\n lineKeys,\n areaKeys,\n yAxisLabel,\n isPercent = true,\n dateRange,\n changeZoom\n}: Props) => {\n const styles = useStyles();\n const {showErrorBands} = usePermissionsContext();\n const {cartesianGrid, tooltip, xAxis, yAxis, line, referenceLine, labelForY, area, legend} = getLineChartSettings({\n lineKeys,\n data,\n isPercent\n });\n const getTooltip = useCallback(\n (tooltipProps: TooltipProps) => <div className={styles.tooltipWrapper}>{getTooltipProp(tooltipProps)}</div>,\n [getTooltipProp]\n );\n const [selectedDots, setSelectedDots] = useState<{\n group: string;\n values: number[];\n }>();\n const [zoomAreaStart, setZoomAreaStart] = useState<string>(null);\n const [zoomAreaEnd, setZoomAreaEnd] = useState<string>(null);\n\n const handleMouseDown = (mouseEvent: MouseEventProps) => {\n mouseEvent?.activeLabel && setZoomAreaStart(mouseEvent.activeLabel);\n };\n const handleMouseMove = (mouseEvent: MouseEventProps) => {\n if (mouseEvent.isTooltipActive && mouseEvent.activePayload) {\n setSelectedDots({\n group: mouseEvent.activeLabel,\n values: pluck('value', mouseEvent.activePayload)\n });\n } else setSelectedDots(undefined);\n zoomAreaStart && setZoomAreaEnd(mouseEvent.activeLabel);\n };\n const handleMouseLeave = () => {\n setSelectedDots(undefined);\n setZoomAreaEnd(null);\n setZoomAreaStart(null);\n };\n const handleMouseUp = () => {\n zoomAreaEnd && changeZoom([zoomAreaStart, zoomAreaEnd]);\n setZoomAreaEnd(null);\n setZoomAreaStart(null);\n };\n const zoomedData = useMemo(() => getZoomedData(data, dateRange), [data, dateRange]);\n const emptyAreas = useMemo(() => getEmptyAreas(zoomedData, lineKeys), [zoomedData, lineKeys]);\n const separateLines = useMemo(\n () => getSeparateLines(zoomedData, lineKeys, areaKeys),\n [zoomedData, lineKeys, areaKeys]\n );\n const hasZoomArea = zoomAreaStart && zoomAreaEnd;\n\n return (\n <ComposedChart\n width={width}\n height={height}\n data={zoomedData}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n margin={{\n top: 12,\n right: 20\n }}\n >\n {selectedDots && <ReferenceLine {...referenceLine} x={selectedDots.group} />}\n {selectedDots &&\n selectedDots.values.filter((value) => !Array.isArray(value)).every(either(isNaN, isNil)) &&\n !hasZoomArea &&\n emptyAreas.map((emptyArea, index) => (\n <ReferenceArea x1={emptyArea.start} x2={emptyArea.end} key={index} />\n ))}\n {hasZoomArea && <ReferenceArea x1={zoomAreaStart} x2={zoomAreaEnd} strokeOpacity={0.3} />}\n <CartesianGrid {...cartesianGrid} />\n <XAxis {...xAxis} />\n <YAxis {...yAxis} label={{...labelForY, value: yAxisLabel}} />\n {lineKeys.map((key: string) => (\n <Line\n {...line}\n name={i18n.text('Actual')}\n key={key}\n dataKey={key}\n stroke={getColor ? getColor(key) : DEFAULT_LINE_COLOR}\n />\n ))}\n {separateLines &&\n separateLines.map((separateLine) => (\n <ReferenceLine {...referenceLine} x={separateLine} key={separateLine} strokeDasharray=\"12 4\" />\n ))}\n {areaKeys &&\n areaKeys.map((key: string) => (\n <Area\n {...area}\n name={i18n.text('Error band')}\n dataKey={key}\n key={key}\n fill={getColor ? getColor(key) : DEFAULT_LINE_COLOR}\n />\n ))}\n <ChartTooltip {...tooltip} content={getTooltip} cursor={null} filterNull={false} />\n {areaKeys && showErrorBands && <Legend {...legend} content={<CustomLegend />} />}\n </ComposedChart>\n );\n};\n\nexport default LineChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {getPercentLabel} from '../../../services/charts';\n\nimport ChartDataRenderer from './ChartDataRenderer';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: [number, number];\n color: string;\n};\n\nconst AnomalyDataRenderer = ({data, color}: Props) => {\n const styles = useStyles({color});\n const renderData = [\n {\n label: (\n <div className={styles.anomalyTitleWrapper}>\n <div className={styles.anomalyTitleBackground}></div>\n <div className={styles.anomalyTitle}></div>\n </div>\n ),\n value: i18n.text('Error Band')\n },\n {label: <span className={styles.anomalyValue}>{i18n.text('Low')}</span>, value: `${getPercentLabel(data[0])}`},\n {label: <span className={styles.anomalyValue}>{i18n.text('High')}</span>, value: `${getPercentLabel(data[1])}`}\n ];\n return (\n <>\n {renderData.map((data, index) => (\n <div key={index} className={styles.row}>\n <ChartDataRenderer {...data} />\n </div>\n ))}\n </>\n );\n};\nexport default AnomalyDataRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n monoFontCell: {\n fontFamily: '\"Roboto Mono\", monospace'\n },\n timeSeriesContent: {\n padding: '0 12px 10px'\n }\n});\n","import {assoc, map, pick, pipe, when, always, has} from 'ramda';\nimport React, {useCallback, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel, DQMetric, FillRateState, TimeSeriesMetric} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {getChartState, getPercentLabel, transformTimeSeriesChartData} from '../../../services/charts';\nimport {\n formatFillRateData,\n getFillRateChartData,\n getFillRateColorByState,\n getFillRateData\n} from '../../../services/fillRate';\nimport {\n hasTimeRange,\n allValuesEqualZero,\n enrichTimeSeriesDataWithTodayData,\n getChartTooltipDateTitle,\n getTimeSeriesData\n} from '../../../services/mlDq';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nimport {LineChartData} from '../../../types/LineChartData';\nimport ANOMALY_DATA_KEY from '../../../constants/AnomalyDataKey';\n\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport AnomalyDataRenderer from '../../../components/ChartDataTooltip/data-renderers/AnomalyDataRenderer';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from '../styles';\n\nconst INFO_PANEL_HEIGHT = 36;\n\nconst tooltipKeys = [FillRateState.EXISTS, FillRateState.MISSING];\nconst metrics = [DQMetric.FILL_RATE as TimeSeriesMetric];\n\nconst getColor = () => getFillRateColorByState(FillRateState.EXISTS);\nconst getTooltip = ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const percent = currentPayload.fillRate;\n const percents = {\n [FillRateState.EXISTS]: percent,\n [FillRateState.MISSING]: +(100 - percent).toFixed(2)\n };\n\n const data: ChartData[] = pipe(\n pick(tooltipKeys),\n when(allValuesEqualZero, always({})),\n formatFillRateData,\n map((data: ChartData) => assoc('percent', percents[data.group], data)),\n map(({label, percent, value}) => ({\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }))\n )(currentPayload);\n const title = getChartTooltipDateTitle(currentPayload, tooltipKeys);\n return (\n <ChartDataTooltip data={data} title={title}>\n {currentPayload.anomaly?.length > 0 && (\n <AnomalyDataRenderer data={currentPayload.anomaly} color={getColor()} />\n )}\n </ChartDataTooltip>\n );\n }\n};\n\nconst FillRateTimeSeriesChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const styles = useStyles();\n const {entityType, detailedAttributeType, period, dateRange, exportLoadingIds} = useDQDashboardState();\n const {changeZoom} = useDQDashboardStateActions();\n\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType.fieldName;\n const {\n data: mlDqData,\n state: mlDqState,\n reload: mlDqReload\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n\n useReloadFacet({\n state: mlDqState,\n reload: mlDqReload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n const {data: todayData, state: todayState, reload: todayReload} = useChartData(getFillRateChartData);\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getFillRateData),\n transformTimeSeriesChartData(DQMetric.FILL_RATE),\n enrichTimeSeriesDataWithTodayData(period, todayData.chartData, DQMetric.FILL_RATE)\n )(mlDqData),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mlDqData, todayData]\n );\n const reloadFunction = useCallback(() => {\n mlDqState === RequestStates.ERROR && mlDqReload();\n todayState === RequestStates.ERROR && todayReload();\n }, [mlDqState, mlDqReload, todayState, todayReload]);\n const {title} = config;\n const infoLabel = `${i18n.text('% of profiles with complete values')}:`;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && mlDqState === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, mlDqState]\n );\n\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([mlDqState, todayState])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateRange={dateRange}\n chartData={data}\n percentKey={DQMetric.FILL_RATE}\n dataKey={FillRateState.EXISTS}\n areaKeys={[ANOMALY_DATA_KEY]}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n lineKeys={metrics}\n areaKeys={[ANOMALY_DATA_KEY]}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of profiles')}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default FillRateTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport FillRateChartToday from './FillRateChart';\nimport FillRateTimeSeriesChart from './FillRateTimeSeriesChart';\n\nconst FillRateChart = ({config}: ViewProps) => {\n const isTimeSeries = checkIsTimeSeries(config);\n const {showErrorBands} = usePermissionsContext();\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Fill rate')}\n data={[\n {\n label: `${i18n.text('Exists')}:`,\n value: i18n.text('Profiles with data')\n },\n {\n label: `${i18n.text('Missing')}:`,\n value: i18n.text('Profiles without data')\n },\n ...(isTimeSeries && showErrorBands\n ? [\n {\n value: i18n.text(\n 'Anomaly detection is the process of analyzing company data to\\nfind data points that don\\'t align with standard data patterns. The \"Error Band\" depicts the expected range.'\n )\n }\n ]\n : [])\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n return (\n <>\n {isTimeSeries ? (\n <FillRateTimeSeriesChart config={config} infoTooltipTitle={infoTooltipTitle} />\n ) : (\n <FillRateChartToday config={config} infoTooltipTitle={infoTooltipTitle} />\n )}\n </>\n );\n};\n\nexport default FillRateChart;\n","import {always, converge, identity, pipe, propOr, map, sortBy, when} from 'ramda';\nimport {\n getChartItemColor,\n DQChartsData,\n UniquenessAnalysisState,\n UniquenessData,\n TimeSeriesAnomalyValue,\n TimeSeriesStatisticValues,\n TimeSeriesAnomalyValues\n} from '@reltio/mdm-sdk';\nimport {ChartData} from '@reltio/components';\nimport {localizeChartValues, isEmptyData} from '../services/charts';\nimport i18n from 'ui-i18n';\n\nconst UniquenessChartColors = {\n [UniquenessAnalysisState.UNIQUE]: '#4BAFFF',\n [UniquenessAnalysisState.NOT_UNIQUE]: '#C34980'\n};\n\nexport const getUniquenessColorByState = (state: UniquenessAnalysisState) =>\n UniquenessChartColors[state] || getChartItemColor(state);\n\nexport const getUniquenessColors: (chartsData: ChartData[]) => string[] = map(({group}) =>\n getUniquenessColorByState(group)\n);\n\nconst getLabelFromState = (state: UniquenessAnalysisState) => {\n const UniquenessAnalysisStateLabels = {\n [UniquenessAnalysisState.UNIQUE]: i18n.text('Unique'),\n [UniquenessAnalysisState.NOT_UNIQUE]: i18n.text('Not unique')\n };\n\n return UniquenessAnalysisStateLabels[state] || state;\n};\n\nconst getUniquenessStateIndexFromData = (data: ChartData) =>\n Object.values(UniquenessAnalysisState).indexOf(data.group as UniquenessAnalysisState);\n\ntype FormatUniquenessAnalysisDataFn = (uniquenessAnalysisData: UniquenessData) => ChartData[];\nexport const formatUniquenessAnalysisData: FormatUniquenessAnalysisDataFn = pipe(\n Object.entries,\n map(([state, value]) => ({label: getLabelFromState(state), group: state, value})),\n sortBy(getUniquenessStateIndexFromData),\n localizeChartValues\n);\n\ntype GetUniquenessDataFn = (\n chartsData: DQChartsData | TimeSeriesAnomalyValues | TimeSeriesStatisticValues\n) => UniquenessData | TimeSeriesAnomalyValue;\nexport const getUniquenessData: GetUniquenessDataFn = propOr({}, 'uniqueness');\n\ntype GetUniquenessChartDataFn = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n colors: string[];\n};\nexport const getUniquenessChartData: GetUniquenessChartDataFn = pipe(\n getUniquenessData,\n formatUniquenessAnalysisData,\n when(isEmptyData, always([])),\n converge(\n (chartData: ChartData, colors: string[]) => ({\n chartData,\n colors\n }),\n [identity, getUniquenessColors]\n )\n);\n","import React from 'react';\n\nimport {getUniquenessChartData} from '../../../services/uniquenessAnalysis';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nconst UniquenessAnalysisChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const {data, state, reload} = useChartData(getUniquenessChartData);\n const {chartData, colors} = data;\n\n return (\n <StackedHorizontalBarChart\n data={chartData}\n colors={colors}\n config={config}\n state={state}\n onRefresh={reload}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default UniquenessAnalysisChart;\n","import {assoc, map, pick, pipe, when, always, has} from 'ramda';\nimport React, {useCallback, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, TimeSeriesMetric, UniquenessAnalysisState} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {getChartState, getPercentLabel, transformTimeSeriesChartData} from '../../../services/charts';\nimport {\n hasTimeRange,\n allValuesEqualZero,\n enrichTimeSeriesDataWithTodayData,\n getChartTooltipDateTitle,\n getTimeSeriesData\n} from '../../../services/mlDq';\nimport {\n formatUniquenessAnalysisData,\n getUniquenessChartData,\n getUniquenessColorByState,\n getUniquenessData\n} from '../../../services/uniquenessAnalysis';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {LineChartData} from '../../../types/LineChartData';\nimport ANOMALY_DATA_KEY from '../../../constants/AnomalyDataKey';\n\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport AnomalyDataRenderer from '../../../components/ChartDataTooltip/data-renderers/AnomalyDataRenderer';\n\nimport {useStyles} from '../styles';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nconst INFO_PANEL_HEIGHT = 36;\n\nconst tooltipKeys = [UniquenessAnalysisState.UNIQUE, UniquenessAnalysisState.NOT_UNIQUE];\nconst metrics = [DQMetric.UNIQUENESS as TimeSeriesMetric];\n\nconst getColor = () => getUniquenessColorByState(UniquenessAnalysisState.UNIQUE);\nconst getTooltip = ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const percent = currentPayload.uniqueness;\n const percents = {\n [UniquenessAnalysisState.UNIQUE]: percent,\n [UniquenessAnalysisState.NOT_UNIQUE]: +(100 - percent).toFixed(2)\n };\n\n const data: ChartData[] = pipe(\n pick(tooltipKeys),\n when(allValuesEqualZero, always({})),\n formatUniquenessAnalysisData,\n map((data) => assoc('percent', percents[data.group], data)),\n map(({label, percent, value}) => ({\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }))\n )(currentPayload);\n const title = getChartTooltipDateTitle(currentPayload, tooltipKeys);\n return (\n <ChartDataTooltip data={data} title={title}>\n {currentPayload.anomaly?.length > 0 && (\n <AnomalyDataRenderer data={currentPayload.anomaly} color={getColor()} />\n )}\n </ChartDataTooltip>\n );\n }\n};\n\nconst UniquenessAnalysisTimeSeriesChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const styles = useStyles();\n const {entityType, detailedAttributeType, period, dateRange, exportLoadingIds} = useDQDashboardState();\n const {changeZoom} = useDQDashboardStateActions();\n\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType.fieldName;\n const {\n data: dataMlDq,\n state: stateMlDq,\n reload: reloadMlDq\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n\n useReloadFacet({\n state: stateMlDq,\n reload: reloadMlDq,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n\n const {data: dataToday, state: stateToday, reload: reloadToday} = useChartData(getUniquenessChartData);\n\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getUniquenessData),\n transformTimeSeriesChartData(DQMetric.UNIQUENESS),\n enrichTimeSeriesDataWithTodayData(period, dataToday.chartData, DQMetric.UNIQUENESS)\n )(dataMlDq),\n [dataMlDq, dataToday]\n );\n const reloadFunction = useCallback(() => {\n stateMlDq === RequestStates.ERROR && reloadMlDq();\n stateToday === RequestStates.ERROR && reloadToday();\n }, [stateMlDq, reloadMlDq, stateToday, reloadToday]);\n const {title} = config;\n const infoLabel = `${i18n.text('% of unique distinct values')}:`;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && stateMlDq === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, showExportButton, stateMlDq]\n );\n\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([stateMlDq, stateToday])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateRange={dateRange}\n chartData={data}\n percentKey={DQMetric.UNIQUENESS}\n dataKey={UniquenessAnalysisState.UNIQUE}\n areaKeys={[ANOMALY_DATA_KEY]}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n lineKeys={metrics}\n areaKeys={[ANOMALY_DATA_KEY]}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of distinct values')}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default UniquenessAnalysisTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\n\nimport UniquenessAnalysisChartToday from './UniquenessAnalysisChart';\nimport UniquenessAnalysisTimeSeriesChart from './UniquenessAnalysisTimeSeriesChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst UniquenessAnalysisChart = ({config}: ViewProps) => {\n const isTimeSeries = checkIsTimeSeries(config);\n const {showErrorBands} = usePermissionsContext();\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Uniqueness analysis')}\n data={[\n {\n label: `${i18n.text('Unique')}:`,\n value: i18n.text('Number of values that only appear once and have no duplicates')\n },\n {\n label: `${i18n.text('Not unique')}:`,\n value: i18n.text('Number of values that have at least one duplicate in the list')\n },\n ...(isTimeSeries && showErrorBands\n ? [\n {\n value: i18n.text(\n 'Anomaly detection is the process of analyzing company data to\\nfind data points that don\\'t align with standard data patterns. The \"Error Band\" depicts the expected range.'\n )\n }\n ]\n : [])\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n return (\n <>\n {isTimeSeries ? (\n <UniquenessAnalysisTimeSeriesChart infoTooltipTitle={infoTooltipTitle} config={config} />\n ) : (\n <UniquenessAnalysisChartToday config={config} infoTooltipTitle={infoTooltipTitle} />\n )}\n </>\n );\n};\n\nexport default UniquenessAnalysisChart;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#6663F6\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.4 14.4h2.411c.016-.205.047-.405.093-.6H8.4v-1.2h3.012c.137-.215.296-.416.472-.6H8.4v-1.2h6v.011a3.896 3.896 0 011.8.287V8.4c0-.66-.54-1.2-1.2-1.2H7.8c-.66 0-1.2.54-1.2 1.2v7.8c0 .66.54 1.2 1.2 1.2h4.083a3.892 3.892 0 01-.979-1.8H8.4v-1.2zm6-4.2h-6V9h6v1.2zm2.58 5.934L18.852 18l-.852.852-1.872-1.872a2.66 2.66 0 01-1.434.42A2.695 2.695 0 0112 14.7c0-1.494 1.206-2.7 2.7-2.7 1.494 0 2.7 1.206 2.7 2.7 0 .528-.156 1.014-.42 1.434zm-2.28.066a1.5 1.5 0 10-.001-3.001A1.5 1.5 0 0014.7 16.2z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#1DACF5\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.4 9.6H9.3L12 6.9l2.7 2.7h-2.1v3.846l-3.6 3.6-.846-.846 3.246-3.246V9.6zm4.446 6.6l-.846.846L12.954 15l.846-.846 2.046 2.046z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#7F22FD\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.4 9v1.2h1.2V9H8.4zm0 2.4v1.2h1.2v-1.2H8.4zm0 2.4V15h1.2v-1.2H8.4zM10.8 9v1.2h4.8V9h-4.8zm0 2.4v1.2h4.8v-1.2h-4.8zm0 2.4V15h4.8v-1.2h-4.8zm6-6v8.4H7.2V7.8h9.6zm1.2 9V6.6H6V17.4h12v-.6z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#4B31E9\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.8 15.6h1.8V15a.6.6 0 01.6-.6h2.4a.6.6 0 01.6.6v2.4a.6.6 0 01-.6.6h-2.4a.6.6 0 01-.6-.6v-.6h-3V9.6H8.4a.6.6 0 01-.6-.6V6.6a.6.6 0 01.6-.6H12a.6.6 0 01.6.6V9a.6.6 0 01-.6.6h-1.2v1.8h1.8v-.6a.6.6 0 01.6-.6h2.4a.6.6 0 01.6.6v2.4a.6.6 0 01-.6.6h-2.4a.6.6 0 01-.6-.6v-.6h-1.8v3z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#80D2FC\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 6c-3.312 0-6 2.688-6 6s2.688 6 6 6 6-2.688 6-6-2.688-6-6-6zm-.6 4.96V9h1.2v1.96l1.698-.98.6 1.04L13.2 12l1.698.98-.6 1.04-1.698-.98V15h-1.2v-1.96l-1.698.98-.6-1.04L10.8 12l-1.698-.98.6-1.04 1.698.98zM7.2 12c0 2.646 2.154 4.8 4.8 4.8s4.8-2.154 4.8-4.8-2.154-4.8-4.8-4.8A4.806 4.806 0 007.2 12z\",\n fill: \"#fff\"\n})));","import {makeStyles} from '@mui/styles';\n\nexport type IconSize = {\n width: number;\n height: number;\n};\nexport const useStyles = makeStyles({\n icon: ({width, height}: IconSize) => ({\n width,\n height\n }),\n loading: {\n '& circle': {\n fill: '#AAAAAA'\n }\n },\n badQuality: {\n '& circle': {\n fill: '#FF1744'\n }\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {IconProps} from '@mui/material/Icon';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport DVFIcon from './icons/dvf.svg';\nimport IncludedInMatchingIcon from './icons/includedInMatching.svg';\nimport RDMIcon from './icons/rdm.svg';\nimport ReferenceIcon from './icons/reference.svg';\nimport RequiredIcon from './icons/required.svg';\n\nimport {useStyles, IconSize} from './styles';\n\nexport const AttributeTypeDetailIconSizes = {\n SMALL: {\n width: 22,\n height: 22\n },\n NORMAL: {\n width: 24,\n height: 24\n }\n};\n\nexport enum AttributeTypeDetailIconVariant {\n LOADING = 'loading',\n BAD_QUALITY = 'badQuality',\n NORMAL = 'normal'\n}\n\ntype Props = IconProps & {\n detailType: AttrTypeDetailsType;\n size?: IconSize;\n variant?: AttributeTypeDetailIconVariant;\n};\n\nexport const AttributeTypeDetailIcon = ({\n detailType,\n size = AttributeTypeDetailIconSizes.NORMAL,\n variant = AttributeTypeDetailIconVariant.NORMAL\n}: Props) => {\n const styles = useStyles(size);\n const className = classnames(styles.icon, styles[variant]);\n switch (detailType) {\n case AttrTypeDetailsType.RDM_LOOKUP:\n return <RDMIcon className={className} />;\n case AttrTypeDetailsType.CONTAIN_VF:\n return <DVFIcon className={className} />;\n case AttrTypeDetailsType.INCLUDED_IN_MATCHING:\n return <IncludedInMatchingIcon className={className} />;\n case AttrTypeDetailsType.REFERENCE:\n return <ReferenceIcon className={className} />;\n case AttrTypeDetailsType.REQUIRED:\n return <RequiredIcon className={className} />;\n default:\n return null;\n }\n};\n","import {makeStyles} from '@mui/styles';\n\nconst margin = 4;\nexport const useStyles = makeStyles({\n root: {\n height: '24px',\n maxWidth: `calc(100% - ${margin * 2}px)`,\n margin: `0 ${margin}px ${margin}px 0`,\n borderRadius: '12px',\n backgroundColor: 'rgb(224, 224, 224)'\n },\n label: {\n fontSize: '12px',\n paddingLeft: '8px',\n paddingRight: '9px'\n },\n badQuality: {\n backgroundColor: 'rgba(255, 23, 68, 0.12)'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@mui/material/Chip';\n\nimport {RequestStates} from '@reltio/components';\n\nimport {getDetailLabel, checkIsDataQualitativeForSummary} from '../../services/attributeDetails';\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\n\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\n\nimport {useStyles} from './styles';\n\ntype Props = ChipProps & {\n detailType: AttrTypeDetailsType;\n};\n\nconst AttributeTypeDetailChip = ({detailType, classes, ...chipProps}: Props) => {\n const styles = useStyles();\n const {\n chartsData: {data, state}\n } = useChartsDataContext();\n let iconVariant = AttributeTypeDetailIconVariant.NORMAL;\n const isDataLoading = state === RequestStates.LOADING;\n const isDataQualitative = checkIsDataQualitativeForSummary(data);\n if (detailType === AttrTypeDetailsType.REQUIRED) {\n if (isDataLoading) {\n iconVariant = AttributeTypeDetailIconVariant.LOADING;\n }\n if (!isDataLoading && !isDataQualitative) {\n iconVariant = AttributeTypeDetailIconVariant.BAD_QUALITY;\n }\n }\n\n return (\n <Chip\n classes={{\n root: classnames(styles.root, {\n [styles.badQuality]:\n detailType === AttrTypeDetailsType.REQUIRED &&\n !isDataLoading &&\n state !== RequestStates.INIT &&\n !isDataQualitative\n }),\n label: styles.label,\n ...classes\n }}\n label={getDetailLabel(detailType)}\n icon={<AttributeTypeDetailIcon detailType={detailType} variant={iconVariant} />}\n {...chipProps}\n />\n );\n};\n\nexport default AttributeTypeDetailChip;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n flexGrow: 1\n },\n rootTimeRange: {\n marginLeft: '40px'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {ChipProps} from '@mui/material/Chip';\n\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport AttributeTypeDetailChip from '../AttributeTypeDetailChip/AttributeTypeDetailChip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n details: AttrTypeDetails;\n chipClasses?: ChipProps['classes'];\n};\n\nconst AttributeTypeDetails = ({details, chipClasses = {}}: Props) => {\n const styles = useStyles();\n const {period} = useDQDashboardState();\n\n return (\n <div className={classnames(styles.root, {[styles.rootTimeRange]: hasTimeRange(period)})}>\n {Object.entries(details || {})\n .filter(([, value]) => value)\n .map(([detailType]) => (\n <AttributeTypeDetailChip\n key={detailType}\n detailType={detailType as AttrTypeDetailsType}\n classes={chipClasses}\n />\n ))}\n </div>\n );\n};\n\nexport default AttributeTypeDetails;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n paddingBottom: '16px'\n },\n info: {\n display: 'flex',\n flexDirection: 'column',\n '&:not(:last-child)': {\n borderRight: '1px solid rgba(0,0,0,0.12)'\n }\n },\n entitySummary: {\n '&:not(:last-child)': {\n paddingRight: '48px',\n marginRight: '16px'\n }\n },\n attributeTypeSummary: {\n '&:not(:last-child)': {\n paddingRight: '24px',\n marginRight: '24px'\n }\n },\n infoTitle: {\n color: 'rgba(0,0,0,0.54)',\n fontSize: '12px',\n lineHeight: '16px'\n },\n infoContent: {\n fontSize: '30px',\n lineHeight: '35px',\n padding: '4px 0 0',\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypeIconWrapper: {\n width: '32px',\n height: '33px',\n background: 'rgba(0, 0, 0, 0.05)',\n borderRadius: '4px',\n position: 'relative',\n marginRight: '12px',\n flexShrink: 0,\n '& svg': {\n position: 'absolute',\n transform: 'translate(-50%, -50%)',\n top: '50%',\n left: '50%'\n }\n },\n totalLoading: {\n padding: '4px 8px'\n },\n clickable: {\n color: '#000066',\n cursor: 'pointer'\n },\n summaryWrapper: {\n display: 'flex'\n }\n});\n","import classnames from 'classnames';\nimport React from 'react';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n dataReltioId?: string;\n};\n\nexport const HeaderInfo = ({title, children, className, onClick, dataReltioId}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.info, className)} onClick={onClick} data-reltio-id={dataReltioId}>\n <div className={styles.infoTitle}>{title}</div>\n <div className={styles.infoContent}>{children}</div>\n </div>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg1279746712a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"15\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M11.667 4H5C2.793 4 1 5.793 1 8s1.793 4 4 4h6.667c2.206 0 4-1.793 4-4s-1.794-4-4-4zm0 6.667H5a2.666 2.666 0 110-5.334h6.667a2.666 2.666 0 110 5.334zm0-4.667c-1.107 0-2 .893-2 2s.893 2 2 2c1.106 0 2-.893 2-2s-.894-2-2-2z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1279746712a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg208732808a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"1\",\n width: \"14\",\n height: \"14\"\n}, React.createElement(\"path\", {\n d: \"M7.992 1.333A6.663 6.663 0 001.332 8c0 3.68 2.98 6.667 6.66 6.667A6.67 6.67 0 0014.665 8a6.67 6.67 0 00-6.673-6.667zm.007 12A5.332 5.332 0 012.665 8 5.332 5.332 0 018 2.667 5.332 5.332 0 0113.332 8a5.332 5.332 0 01-5.333 5.333zm.333-8.666h-1v4l3.5 2.1.5-.82-3-1.78v-3.5z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg208732808a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg1638934380a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"4\",\n width: \"13\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.948 10.02V12h-.88v-1.98h-.88V12h-.88v-1.98h-.77v-.825h.77v-2.2h-.77V6.17h.77V4.3h.88v1.87h.88V4.3h.88v1.87h.77v.825h-.77v2.2h.77v.825h-.77zm-.88-3.025h-.88v2.2h.88v-2.2zM7.947 12v-1.1h1.1V12h-1.1zM13.65 10.02V12h-.88v-1.98h-.88V12h-.88v-1.98h-.77v-.825h.77v-2.2h-.77V6.17h.77V4.3h.88v1.87h.88V4.3h.88v1.87h.77v.825h-.77v2.2h.77v.825h-.77zm-.88-3.025h-.88v2.2h.88v-2.2z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1638934380a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M2.11 12v-.825h1.331V5.169L2 5.741v-.89L3.331 4.3h1.045v6.875h1.089V12H2.11zM5.968 11.032l1.65-2.508c.242-.367.403-.62.484-.759.08-.147.136-.29.165-.429.03-.14.044-.341.044-.605v-.77a.778.778 0 00-.253-.583c-.169-.161-.389-.242-.66-.242h-1.21V4.3h1.1c.638 0 1.126.158 1.463.473.345.308.517.774.517 1.397v.462c0 .367-.018.645-.055.836-.037.19-.103.37-.198.539-.088.169-.264.455-.528.858l-1.518 2.299h2.519V12h-3.52v-.968zM13.544 10.262c0 .609-.147 1.052-.44 1.331-.293.271-.77.407-1.43.407h-1.298v-.825h1.397c.279 0 .484-.062.616-.187.132-.132.198-.337.198-.616V9.239c0-.242-.073-.433-.22-.572-.147-.147-.341-.22-.583-.22h-1.067v-.825h.957a.797.797 0 00.572-.22.768.768 0 00.231-.583v-.902c0-.279-.066-.48-.198-.605-.125-.125-.326-.187-.605-.187h-1.298V4.3h1.166c.623 0 1.093.14 1.408.418.323.271.484.704.484 1.298v.693c0 .565-.202.99-.605 1.276.477.264.715.715.715 1.353v.924z\",\n fill: \"#000\",\n fillOpacity: \".541\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg924767730a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"13\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.463 10.13c0 .623-.173 1.093-.517 1.408-.338.308-.825.462-1.463.462H2.03v-.836h1.562c.271 0 .491-.08.66-.242a.778.778 0 00.253-.583V9.195c0-.22-.059-.396-.176-.528-.11-.14-.279-.209-.506-.209h-.22c-.543 0-.972-.158-1.287-.473-.316-.323-.473-.788-.473-1.397V6.17c0-.623.168-1.089.506-1.397.344-.315.836-.473 1.474-.473h1.463v.836H3.714c-.272 0-.492.08-.66.242a.778.778 0 00-.253.583v.836c0 .227.073.418.22.572.146.147.337.22.572.22h.22c.52 0 .924.15 1.21.451.293.3.44.755.44 1.364v.726zM9.136 10.13c0 .623-.173 1.093-.517 1.408-.338.308-.825.462-1.463.462H5.704v-.836h1.562c.27 0 .49-.08.66-.242a.778.778 0 00.253-.583V9.195c0-.22-.06-.396-.176-.528-.11-.14-.28-.209-.506-.209h-.22c-.543 0-.972-.158-1.287-.473-.316-.323-.473-.788-.473-1.397V6.17c0-.623.168-1.089.506-1.397.344-.315.836-.473 1.474-.473H8.96v.836H7.387c-.272 0-.492.08-.66.242a.778.778 0 00-.253.583v.836c0 .227.073.418.22.572.146.147.337.22.572.22h.22c.52 0 .924.15 1.21.451.293.3.44.755.44 1.364v.726zM12.255 12l-1.683-6.886V12H9.68V4.3h1.562l1.694 6.886V4.3h.89V12h-1.572z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg924767730a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg3578961193a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"14\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.345 12l-.418-1.947H2.782L2.353 12h-.979l1.86-7.7h1.264L6.324 12h-.979zM3.85 5.026l-.89 4.202H4.75L3.85 5.026zM10.494 10.262c0 .63-.146 1.078-.44 1.342-.286.264-.763.396-1.43.396h-2.09V4.3h1.958c.653 0 1.13.132 1.43.396.308.264.462.704.462 1.32v.627c0 .565-.202.99-.605 1.276.477.264.715.715.715 1.353v.99zM9.427 5.917c0-.279-.066-.48-.198-.605-.125-.125-.326-.187-.605-.187H7.491v2.431h1.133a.797.797 0 00.572-.22.768.768 0 00.231-.583v-.836zm.11 3.256c0-.242-.073-.433-.22-.572-.147-.147-.34-.22-.583-.22H7.491v2.794h1.232c.279 0 .484-.062.616-.187.132-.132.198-.337.198-.616V9.173zM13.119 12c-.638 0-1.13-.154-1.474-.462-.337-.315-.506-.785-.506-1.408V6.17c0-.623.169-1.089.506-1.397.345-.315.836-.473 1.474-.473h1.342v.836h-1.452c-.271 0-.491.08-.66.242a.778.778 0 00-.253.583v4.378c0 .227.084.422.253.583.169.161.389.242.66.242h1.452V12h-1.342z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg3578961193a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport type IconSize = {\n width: number;\n height: number;\n};\nexport const useStyles = makeStyles({\n icon: ({width, height}: IconSize) => ({\n width,\n height\n })\n});\n","import React from 'react';\nimport BooleanIcon from './icons/boolean.svg';\nimport DateIcon from './icons/date.svg';\nimport FloatIcon from './icons/float.svg';\nimport IntegerIcon from './icons/integer.svg';\nimport SSNIcon from './icons/ssn.svg';\nimport StringIcon from './icons/string.svg';\nimport {getChartDataTypeByAttributeType} from '../../services/charts';\nimport {ChartDataType} from '../../constants/ChartDataType';\n\nimport {useStyles, IconSize} from './styles';\n\ntype Props = {\n type: string;\n size?: IconSize;\n};\n\nexport const AttributeTypeIconSizes = {\n SMALL: {\n width: 16,\n height: 16\n },\n NORMAL: {\n width: 24,\n height: 24\n }\n};\n\nconst AttributeTypeIcon = ({type, size = AttributeTypeIconSizes.SMALL}: Props) => {\n const styles = useStyles(size);\n const chartDataType = getChartDataTypeByAttributeType(type);\n switch (chartDataType) {\n case ChartDataType.STRING:\n return <StringIcon className={styles.icon} />;\n case ChartDataType.FLOAT:\n return <FloatIcon className={styles.icon} />;\n case ChartDataType.INTEGER:\n return <IntegerIcon className={styles.icon} />;\n case ChartDataType.BOOLEAN:\n return <BooleanIcon className={styles.icon} />;\n case ChartDataType.DATE:\n return <DateIcon className={styles.icon} />;\n case ChartDataType.SSN:\n return <SSNIcon className={styles.icon} />;\n default:\n return <StringIcon className={styles.icon} />;\n }\n};\n\nexport default AttributeTypeIcon;\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Tooltip from '@mui/material/Tooltip';\nimport classnames from 'classnames';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {useEntityCount} from '../../hooks/useEntityCount';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport AttributeTypeDetails from '../AttributeTypeDetails/AttributeTypeDetails';\nimport {HeaderInfo} from './HeaderInfo';\nimport AttributeTypeIcon, {AttributeTypeIconSizes} from '../AttributeTypeIcon/AttributeTypeIcon';\nimport ChartDataTooltip from '../ChartDataTooltip/ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\nexport type AttributeTypeSummaryProps = {\n detailedAttributeType: DetailedAttributeType;\n};\n\nconst AttributeTypeSummary = ({detailedAttributeType}: AttributeTypeSummaryProps) => {\n const styles = useStyles();\n const {entityType, period} = useDQDashboardState();\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const total = useEntityCount(entityTypesArray).getEntityCount(entityType.uri);\n const renderDataTypeInfo = (type: string) => {\n return (\n <>\n <div className={styles.attributeTypeIconWrapper}>\n <AttributeTypeIcon type={type} size={AttributeTypeIconSizes.NORMAL} />\n </div>\n {i18n.text(type)}\n </>\n );\n };\n\n const recordsInfo = total ? i18n.number(total) : <CircularProgress size={24} className={styles.totalLoading} />;\n\n return (\n <div className={classnames({[styles.summaryWrapper]: hasTimeRange(period)})}>\n <div className={styles.header}>\n <HeaderInfo title={i18n.text('Active profiles')} className={styles.attributeTypeSummary}>\n <Tooltip\n title={\n <ChartDataTooltip\n data={[\n {\n label: i18n.text('Entities with exists attribute'),\n value: i18n.number(total)\n }\n ]}\n />\n }\n >\n <div>{recordsInfo}</div>\n </Tooltip>\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Data type')} className={styles.attributeTypeSummary}>\n {renderDataTypeInfo(detailedAttributeType.type)}\n </HeaderInfo>\n </div>\n <AttributeTypeDetails details={detailedAttributeType.details} />\n </div>\n );\n};\n\nexport default AttributeTypeSummary;\n","import classnames from 'classnames';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport i18n from 'ui-i18n';\nimport {RequestStates} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Metadata, TEntityType} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {countEntityTypeAttributes} from '../../services/attributes';\nimport {getEntityTypeSummarySearchState} from '../../services/charts';\n\nimport {HeaderInfo} from './HeaderInfo';\n\nimport {useStyles} from './styles';\n\nexport type EntityTypeSummaryProps = {\n entityType: TEntityType;\n};\n\nconst EntityTypeSummary = ({entityType}: EntityTypeSummaryProps) => {\n const {\n chartsData: {data, state}\n } = useChartsDataContext();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attributeTypesCount = countEntityTypeAttributes(metadata, entityType);\n const {activeProfiles = 0, inactiveProfiles = 0, sourceSystems = 0} = data?.summary || {};\n const getValue = (value: number) =>\n state === RequestStates.LOADING ? (\n <CircularProgress size={24} className={styles.totalLoading} />\n ) : (\n i18n.number(value)\n );\n const styles = useStyles();\n const searchProfiles = useSearchRedirect(getEntityTypeSummarySearchState);\n\n return (\n <div className={styles.header}>\n <HeaderInfo\n title={i18n.text('Active profiles')}\n className={classnames(styles.entitySummary, styles.clickable)}\n onClick={() => searchProfiles(ActivityFilter.ACTIVE_ONLY, ActivityFilter.ACTIVE_ONLY)}\n dataReltioId=\"reltio-dq-dashboard-entitylevel-summary-activeProfiles\"\n >\n {getValue(activeProfiles)}\n </HeaderInfo>\n <HeaderInfo\n title={i18n.text('Inactive profiles')}\n className={classnames(styles.entitySummary, styles.clickable)}\n onClick={() => searchProfiles(ActivityFilter.INACTIVE_ONLY, ActivityFilter.INACTIVE_ONLY)}\n dataReltioId=\"reltio-dq-dashboard-entitylevel-summary-inactiveProfiles\"\n >\n {getValue(inactiveProfiles)}\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Attributes')} className={styles.entitySummary}>\n {i18n.number(attributeTypesCount)}\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Source systems')} className={styles.entitySummary}>\n {getValue(sourceSystems)}\n </HeaderInfo>\n </div>\n );\n};\n\nexport default EntityTypeSummary;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n content: {\n padding: '0 16px',\n marginTop: '4px'\n }\n});\n","import React, {useContext} from 'react';\n\nimport {getLabel, DQDataLevel} from '@reltio/mdm-sdk';\nimport {BasicViewContent} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../types/ViewProps';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\n\nimport AttributeTypeSummary from '../../components/Summary/AttributeTypeSummary';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../components/DQLayoutItemView/DQLayoutItemView';\nimport EntityTypeSummary from '../../components/Summary/EntityTypeSummary';\n\nimport {useStyles} from './styles';\n\nconst Summary = ({config}: ViewProps) => {\n const styles = useStyles();\n const {detailedAttributeType, entityType} = useDQDashboardState();\n const dataLevel = useContext(DataLevelContext);\n const isAttributeTypeLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const title = isAttributeTypeLevel\n ? getLabel(detailedAttributeType.label)\n : `${i18n.text('Entity')}: ${getLabel(entityType.label)}`;\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} />\n <BasicViewContent className={styles.content}>\n {isAttributeTypeLevel ? (\n <AttributeTypeSummary detailedAttributeType={detailedAttributeType} />\n ) : (\n <EntityTypeSummary entityType={entityType} />\n )}\n </BasicViewContent>\n </DQLayoutItemView>\n );\n};\n\nexport default Summary;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n }\n});\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {BasicViewContent} from '@reltio/components';\nimport {DashboardLayoutItemView} from '@reltio/dashboard';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport {ViewProps} from '../../types/ViewProps';\nimport DQDashboardError from '../../components/DQDashboardError/DQDashboardError';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\nimport {ErrorData} from '../../types/ErrorData';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {useStyles} from './styles';\n\ntype Props = ViewProps & {\n errorData: ErrorData;\n titleChildren?: React.ReactNode;\n infoTooltipTitle?: React.ReactElement | string;\n onRefresh?: () => void;\n};\n\nconst DefaultIcon = EMPTY_STATE_ICONS.ERROR;\n\nconst DQDashboardErrorView = ({config, errorData, titleChildren, infoTooltipTitle, onRefresh}: Props) => {\n const {id, title: viewTitle} = config;\n const styles = useStyles();\n return (\n <DashboardLayoutItemView id={id}>\n <DQLayoutItemHeader title={viewTitle} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n </DQLayoutItemHeader>\n <BasicViewContent className={styles.viewContent}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n <DQDashboardError\n errorData={{Icon: DefaultIcon, ...errorData}}\n onRefresh={onRefresh}\n variant={EmptyStateVariants.SMALL}\n />\n </ReactResizeDetector>\n </BasicViewContent>\n </DashboardLayoutItemView>\n );\n};\n\nexport default DQDashboardErrorView;\n","import {always, cond, curry, identity, join, map, pipe, propOr, propEq, slice} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n getAttributeTypesHierarchyByUri,\n isDateType,\n isTimestampBasedType,\n DataValidationFunction,\n DQChartsData,\n FilterOptions,\n Metadata,\n SearchState,\n AttributeType,\n isBooleanType,\n parseBoolean\n} from '@reltio/mdm-sdk';\nimport {getSearchState, localizeChartValues, facetFiltersToSearchState} from './charts';\nimport {getEqualsRawFilterSearchState, RawFilterFields} from './rawFilters';\nimport {getAttributeLabel} from './attributes';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\n\ntype GetFormattedDataForTableChartFn = (chartType: string) => (chartsData: DQChartsData) => ChartData[];\nconst getFormattedDataForTableChart: GetFormattedDataForTableChartFn = (chartType: string) =>\n pipe(\n propOr({}, chartType),\n Object.entries,\n map(([item, value]) => ({label: item, group: item, value})),\n localizeChartValues\n );\n\nexport const valueComparator =\n ({sortDirection, sortField}: {sortDirection: 'asc' | 'desc'; sortField: string}) =>\n (a: ChartData, b: ChartData) => {\n if (sortDirection === 'asc') {\n return a[sortField] > b[sortField] ? 1 : -1;\n } else return a[sortField] < b[sortField] ? 1 : -1;\n };\n\nconst filterExistedDVF = (dvfs: DataValidationFunction[], chartData: ChartData[]) =>\n chartData.filter((chartDataItem: ChartData) => dvfs.find(propEq('uri', chartDataItem.group)));\n\nexport const findDVFByUri = (dvfs: DataValidationFunction[], uri: string) => dvfs.find(propEq('uri', uri));\n\nconst enrichDVFDataWithFunctionLabel = curry((dvfs: DataValidationFunction[], chartData: ChartData[]) =>\n pipe(\n filterExistedDVF,\n map((chartDataItem: ChartData) => {\n const functionName = findDVFByUri(dvfs, chartDataItem.group)?.name;\n return {...chartDataItem, label: functionName};\n })\n )(dvfs, chartData)\n);\n\nconst getAttributeTypeLabelFromHierarhy: (attributeHierarhy: AttributeType[]) => string = pipe(\n map(getAttributeLabel),\n slice(1, Infinity),\n join(' / ')\n);\n\nconst enrichEntityLevelDVFData = curry((dvfs: DataValidationFunction[], metadata: Metadata, chartData: ChartData[]) =>\n pipe(\n filterExistedDVF,\n map((chartDataItem: ChartData) => {\n const {name, attribute: attributeUri} = findDVFByUri(dvfs, chartDataItem.group);\n const attributeTypesHierarhy = getAttributeTypesHierarchyByUri(metadata, attributeUri);\n return {\n ...chartDataItem,\n label: name,\n attributeLabel: getAttributeTypeLabelFromHierarhy(attributeTypesHierarhy)\n };\n })\n )(dvfs, chartData)\n);\n\ntype GetValidationChartDataFn = (chartsData: DQChartsData) => ChartData[];\nexport const getValidationChartData = (dvfs: DataValidationFunction[]): GetValidationChartDataFn =>\n pipe(getFormattedDataForTableChart('dataValidationFunctions'), enrichDVFDataWithFunctionLabel(dvfs));\n\nexport const getEntityLevelValidationChartData = (\n dvfs: DataValidationFunction[],\n metadata: Metadata\n): GetValidationChartDataFn =>\n pipe(getFormattedDataForTableChart('dataValidationFunctions'), enrichEntityLevelDVFData(dvfs, metadata));\nexport const getFrequencyChartData = getFormattedDataForTableChart('frequency');\nexport const getPatternAnalisysData = getFormattedDataForTableChart('pattern');\n\nconst getDVFAnalyticAttribtuteUri = (entityTypeUri: string, attributeName: string) =>\n `${entityTypeUri}/analyticsAttributes/AttributeValidations/analyticsAttributes/${attributeName}`;\nconst getValidationFilter = ({name, uri}: DataValidationFunction, entityTypeUri: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [[name]],\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionName',\n uri: getDVFAnalyticAttribtuteUri(entityTypeUri, 'FunctionName')\n },\n {\n filter: FilterOptions.EQUALS,\n values: [[uri]],\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionURI',\n uri: getDVFAnalyticAttribtuteUri(entityTypeUri, 'FunctionURI')\n }\n];\n\nconst getFrequencyAnalysisStateForTimestamp = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, attributeValue: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}`,\n value: attributeValue,\n entityTypeUri\n })\n);\nconst getFrequencyAnalysisFilterForDate = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.ON,\n values: [attributeValue],\n fieldName\n }\n]);\nconst getFrequencyAnalysisFilter = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [[attributeValue]],\n fieldName\n }\n]);\nconst getFrequencyAnalysisFilterForBoolean = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [parseBoolean(attributeValue)],\n fieldName\n }\n]);\n\nexport const getFrequencyAnalysisSearchState = ({detailedAttributeType, entityTypeUri}: GetSearchStateProps) =>\n cond([\n [isTimestampBasedType, always(getFrequencyAnalysisStateForTimestamp)],\n [isDateType, always(getSearchState(getFrequencyAnalysisFilterForDate))],\n [isBooleanType, always(getSearchState(getFrequencyAnalysisFilterForBoolean))],\n [identity, always(getSearchState(getFrequencyAnalysisFilter))]\n ])(detailedAttributeType.type)({detailedAttributeType, entityTypeUri});\n\nexport const getValidationSearchState =\n (dvfs: DataValidationFunction[]) =>\n ({entityTypeUri}: GetSearchStateProps): ((dvfUri: string) => SearchState) =>\n (dvfUri) => {\n const dvf = findDVFByUri(dvfs, dvfUri);\n return pipe(getValidationFilter, facetFiltersToSearchState(null, entityTypeUri))(dvf, entityTypeUri);\n };\n\nexport const getPatternAnalysisSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, pattern: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.PATTERN}`,\n value: `\"${pattern}\"`,\n entityTypeUri\n })\n);\nexport const getRowsCounterLabel = (chartData: ChartData[]) =>\n `(${chartData.length >= 100 ? i18n.text('top') + ' 100' : chartData.length})`;\n","import i18n from 'ui-i18n';\nimport {always, either, isEmpty, isNil, propOr, when} from 'ramda';\n\nimport {DatePeriod, DQDataLevel, TimeSeriesStatisticValues, getDvfColor} from '@reltio/mdm-sdk';\n\nimport {LineChartData} from '../../../types/LineChartData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {hasTimeRange} from '../../../services/mlDq';\n\nexport const NO_DATA_FIELD = 'noData';\n\nconst getEntityLevelColumnsOptions = ({functionsCount, period}: {functionsCount: number; period: DatePeriod}) => [\n {\n id: 'attributeLabel',\n label: i18n.text('Attribute'),\n width: 0.23,\n sortable: true\n },\n {\n id: 'label',\n label: i18n.text('Validation function'),\n secondLabel: `(${functionsCount})`,\n width: 0.37,\n sortable: true\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.4,\n sortable: true,\n ...(hasTimeRange(period) ? {getBarColor: getDvfColor} : {})\n }\n];\n\nconst getAttributeLevelColumnsOptions = ({functionsCount, period}: {functionsCount: number; period: DatePeriod}) => [\n {\n id: 'label',\n label: i18n.text('Validation function'),\n secondLabel: `(${functionsCount})`,\n width: 0.4,\n sortable: true\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.6,\n sortable: true,\n ...(hasTimeRange(period) ? {getBarColor: getDvfColor} : {})\n }\n];\n\nexport const getColumnsOptions = (dataLevel: DQDataLevel, chartData: TableChartData[], period: DatePeriod) => {\n return (dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? getAttributeLevelColumnsOptions : getEntityLevelColumnsOptions)({\n functionsCount: chartData.length,\n period\n });\n};\n\nexport const getViolatedValidationData = (timeSeriesData: TimeSeriesStatisticValues): LineChartData => {\n const {data} = propOr({}, 'violatedProfiles', timeSeriesData);\n return when(either(isNil, isEmpty), always({[NO_DATA_FIELD]: null}))(data);\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg1830866123a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1830866123a)\"\n}, React.createElement(\"g\", {\n opacity: \".9\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#fff\"\n}, React.createElement(\"path\", {\n d: \"M12.375 18.688a7 7 0 017-7h75.742a7 7 0 017 7v49.02a7 7 0 01-7 7H19.375a7 7 0 01-7-7v-49.02z\"\n}), React.createElement(\"path\", {\n opacity: \".4\",\n d: \"M16.844 22.813a7 7 0 017-7h75.741a7 7 0 017 7v49.02a7 7 0 01-7 7H23.844a7 7 0 01-7-7v-49.02z\"\n})), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"29.318\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.854 31.381a3.562 3.562 0 013.552-3.563 3.562 3.562 0 013.552 3.563 3.562 3.562 0 01-3.552 3.564 3.562 3.562 0 01-3.552-3.564z\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 29.052c0-.726.588-1.313 1.313-1.313h23.983a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 33.553c0-.518.42-.938.938-.938h43.37a.938.938 0 010 1.876h-43.37a.938.938 0 01-.938-.938z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 36.554c0-.31.252-.563.563-.563h13.993a.563.563 0 110 1.126H31.26a.563.563 0 01-.563-.563z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"rect\", {\n opacity: \".5\",\n x: \"19.854\",\n y: \"17.689\",\n width: \"29.914\",\n height: \"4.126\",\n rx: \"2.063\",\n fill: \"#645F6D\"\n}), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"43.573\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"rect\", {\n x: \"19.854\",\n y: \"42.072\",\n width: \"7.105\",\n height: \"7.127\",\n rx: \"3.552\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 43.306c0-.725.588-1.313 1.313-1.313h28.41a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 47.808c0-.518.42-.938.938-.938h48.23a.938.938 0 110 1.876h-48.23a.938.938 0 01-.938-.938z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 50.809c0-.31.252-.563.563-.563h38.884a.563.563 0 110 1.125H31.26a.563.563 0 01-.563-.562z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"57.828\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.854 59.891a3.562 3.562 0 013.552-3.564 3.562 3.562 0 013.552 3.564 3.562 3.562 0 01-3.552 3.564 3.562 3.562 0 01-3.552-3.564z\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 57.561c0-.725.588-1.313 1.313-1.313h38.132a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 62.063c0-.518.42-.938.938-.938h31.778a.938.938 0 110 1.875H31.635a.938.938 0 01-.938-.937z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 65.064c0-.311.252-.563.563-.563h13.993a.563.563 0 110 1.125H31.26a.563.563 0 01-.563-.562z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 3.094h88V88H0V3.094z\",\n fill: \"url(#paint0_linear_3200_4362)\"\n}), React.createElement(\"path\", {\n d: \"M79.893 76.85H21.308v14.184h58.585V76.85z\",\n fill: \"#F5C056\"\n}), React.createElement(\"path\", {\n d: \"M79.893 76.85H74.6v14.184h5.293V76.85z\",\n fill: \"#E99B00\"\n}), React.createElement(\"path\", {\n d: \"M48.73 76.893H26.283v14.184H48.73V76.893z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.894 57.829c-1.687-4.26 13.113-4.043 11.413 0-1.353 3.218-1.353 7.53 0 12.934H44.894C46 64.93 46 60.618 44.894 57.83z\",\n fill: \"#FFD264\"\n}), React.createElement(\"path\", {\n d: \"M61.253 70.383H39.949v2.663h21.304v-2.663z\",\n fill: \"#FFD264\"\n}), React.createElement(\"path\", {\n d: \"M47.938 70.383h-4.185v2.663h4.185v-2.663z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n d: \"M64.676 73.046h-28.15v3.804h28.15v-3.804z\",\n fill: \"#795D1A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M35.764 16.363v5.325H15.602v.143c0 13.634 8.992 24.714 20.162 24.961v2.994c-14-.986-25.108-15.488-25.108-33.233v-.19h25.108z\",\n fill: \"#FFCB64\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.677 16.363v5.325h20.161v.143c0 13.634-8.991 24.714-20.161 24.961v2.994c13.999-.986 25.107-15.488 25.107-33.233v-.19H64.677z\",\n fill: \"#ED985C\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M56.307 57.829c-1.353 3.218-1.353 7.53 0 12.934h-5.706V54.715c3.278.026 6.556 1.091 5.706 3.114z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.676 73.046v3.804H50.601v-3.804h14.075z\",\n fill: \"#4F350B\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M61.253 70.383v2.663H50.6v-2.663h10.652z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M74.933 10.656a102.429 102.429 0 01.01 2.663h-1.897l-.38 3.044h2.193c-1.138 25.55-13.019 45.65-24.448 45.65-11.43 0-23.311-20.1-24.449-45.65h2.194l-.38-3.044h-1.898a91.212 91.212 0 01.01-2.663h49.045z\",\n fill: \"#FFCE66\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.937 10.656c.006.569.01 1.14.01 1.712v.952h-.044l-.241 3.043h.294c.126 24.948 1.435 39.335 3.123 45.65-8.89-3.2-15.661-20.403-16.308-45.65h1.465l-.241-3.044h-1.271a158.252 158.252 0 01.006-2.663h13.207z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.284 16.363h-3.91l.422-3.044h3.581a81.301 81.301 0 00-.01-2.663h4.566a102.429 102.429 0 01.01 2.663h-1.897l-.38 3.044h2.193c-1.138 25.55-13.019 45.65-24.448 45.65-.414 0-.828-.026-1.241-.078 11.92-1.382 19.899-20.946 21.114-45.572zm.083-5.707h-44.48 44.48z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n opacity: \".519\",\n d: \"M72.665 13.32h-44.51v3.043h44.51v-3.044z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n d: \"M48.318 73.046h-5.706v3.804h5.706v-3.804z\",\n fill: \"#96691F\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M65.526 10.656h4.235L58.973 35.935h-4.235l10.788-25.279z\",\n fill: \"url(#paint1_linear_3200_4362)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_3200_4362)\"\n}, React.createElement(\"path\", {\n d: \"M56.909 56.472c5.993 0 10.85-4.858 10.85-10.85 0-5.994-4.857-10.852-10.85-10.852-5.993 0-10.852 4.858-10.852 10.851 0 5.993 4.859 10.851 10.852 10.851z\",\n fill: \"#000\"\n})), React.createElement(\"path\", {\n d: \"M56.909 56.472c5.993 0 10.85-4.858 10.85-10.85 0-5.994-4.857-10.852-10.85-10.852-5.993 0-10.852 4.858-10.852 10.851 0 5.993 4.859 10.851 10.852 10.851z\",\n fill: \"#DD612C\"\n}), React.createElement(\"path\", {\n d: \"M56.909 54.302a8.681 8.681 0 100-17.362 8.681 8.681 0 000 17.362z\",\n fill: \"#FFCE66\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M56.909 36.94a8.685 8.685 0 018.347 6.291c-5.74.351-10.312 5.02-10.51 10.8a8.699 8.699 0 01-6.008-5.47A11.212 11.212 0 0054.9 37.174a8.684 8.684 0 012.008-.234z\",\n fill: \"#FFF18C\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.202 10.656l10.862 25.341H54.83L43.646 10.705l4.556-.049z\",\n fill: \"#F83D3D\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_3200_4362\",\n x1: \"0\",\n y1: \"3.094\",\n x2: \"0\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_3200_4362\",\n x1: \"62.25\",\n y1: \"10.656\",\n x2: \"62.25\",\n y2: \"35.935\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#B93131\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#831616\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_3200_4362\",\n x: \"40.057\",\n y: \"30.77\",\n width: \"33.702\",\n height: \"33.703\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"3\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.0335613 0 0 0 0 0.334579 0 0 0 0 0.412601 0 0 0 0.5 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_3200_4362\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_3200_4362\",\n result: \"shape\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg355575424a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg355575424a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.5 3.094h88V88h-88V3.094z\",\n fill: \"url(#paint0_linear_3488_11934)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.543 19.547L84.7 39.704V90.88H32.1L17.875 77.372V19.547h46.668z\",\n fill: \"url(#paint1_linear_3488_11934)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.156 19.938h69.438A2.406 2.406 0 0188 22.343v53.968a2.406 2.406 0 01-2.406 2.407H16.156a2.406 2.406 0 01-2.406-2.406v-53.97a2.406 2.406 0 012.406-2.405z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 19.25H86.28c.95 0 1.719.77 1.719 1.719v53.968c0 .95-.77 1.72-1.719 1.72H17.187c-.949 0-1.718-.77-1.718-1.72V20.97c0-.95.77-1.719 1.719-1.719z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 24.968c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 29.093c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 010 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 56.031c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 60.156c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 010 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 66.344c0-.57.462-1.031 1.031-1.031h28.059a1.031 1.031 0 010 2.062H37.254c-.57 0-1.031-.462-1.031-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 70.469c0-.57.462-1.031 1.031-1.031h25.508a1.031 1.031 0 010 2.062H37.125c-.57 0-1.031-.462-1.031-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 35.406c0-.57.461-1.031 1.03-1.031h28.06a1.031 1.031 0 110 2.063h-28.06c-.569 0-1.03-.462-1.03-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 39.531c0-.57.461-1.031 1.03-1.031H70.54a1.031 1.031 0 010 2.063H48.47c-.57 0-1.032-.462-1.032-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"36.438\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"46.75\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"58.094\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"68.406\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 45.719c0-.57.461-1.032 1.03-1.032h28.06a1.031 1.031 0 110 2.063h-28.06c-.569 0-1.03-.462-1.03-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 49.844c0-.57.461-1.032 1.03-1.032h25.509a1.031 1.031 0 010 2.063H48.469c-.57 0-1.032-.462-1.032-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.802 37.125v-2.75h-.688V48.251h3.843v-.688h-3.155v-9.75h3.155v-.688h-3.155z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.68 26.469l-1.215 1.215-1.215-1.215h2.43z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 7.563h63.937c1.14 0 2.063.923 2.063 2.062v6.188c0 1.139-.924 2.062-2.063 2.062H17.187a2.062 2.062 0 01-2.062-2.063V9.625c0-1.14.923-2.063 2.063-2.063z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.938 12.719c0-1.14.923-2.063 2.062-2.063h24.063a2.063 2.063 0 010 4.125H22a2.062 2.062 0 01-2.063-2.062zM50.875 12.719c0-1.14.923-2.063 2.063-2.063h3.437a2.063 2.063 0 010 4.125h-3.438a2.062 2.062 0 01-2.062-2.062z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n d: \"M37.687 66.48l8.942 8.309v.958l19.925 19.702 31.064-.552 7.006-25.47-34.487-34.144-11.2.567c-3.238-1.86-5.34-3.02-6.306-3.48-.54-.258-.383 5.565-2.755 7.725-1.243 1.133-3.462 4.104-6.657 8.914l-5.532 17.47z\",\n fill: \"url(#paint2_linear_3488_11934)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_3488_11934)\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n}, React.createElement(\"path\", {\n d: \"M67.338 33.427a22.7 22.7 0 013.043 1.642l-.913 4.312a18.719 18.719 0 014.236 4.554l4.28-.699a23.425 23.425 0 012.392 6.47l-3.639 2.443c.262 2.058.2 4.18-.216 6.285l3.466 2.572a24.254 24.254 0 01-2.838 6.375l-4.231-.855a19.61 19.61 0 01-4.526 4.366l.62 4.34a23.426 23.426 0 01-6.409 2.551l-2.345-3.649a18.72 18.72 0 01-6.219-.1l-2.593 3.564a22.7 22.7 0 01-6.224-2.757l.912-4.304a18.715 18.715 0 01-4.281-4.567l-4.285.7a23.424 23.424 0 01-2.4-6.438l3.633-2.44a19.607 19.607 0 01.21-6.384l-3.465-2.57a24.263 24.263 0 012.823-6.34l4.229.855a19.605 19.605 0 014.604-4.429l-.618-4.332c2-1.154 4.155-2.005 6.39-2.524l2.347 3.652a18.713 18.713 0 016.259.125l2.588-3.557c1.069.296 2.128.675 3.17 1.14zM60.075 49.74c-2.804-1.248-6.112.064-7.388 2.93-1.276 2.867-.038 6.203 2.766 7.452 2.804 1.248 6.112-.064 7.388-2.93 1.276-2.867.038-6.203-2.766-7.452z\",\n fill: \"#6B93AC\"\n}), React.createElement(\"path\", {\n d: \"M67.338 33.427a22.7 22.7 0 013.043 1.642l-.913 4.312c.779.597 1.503 1.25 2.168 1.95l-10.07 9.392a5.444 5.444 0 00-1.491-.983c-2.804-1.248-6.112.064-7.388 2.93a5.7 5.7 0 00.626 5.749l-10.071 9.39c-.502-.585-.965-1.2-1.39-1.84l-4.284.7a23.424 23.424 0 01-2.4-6.437l3.633-2.44a19.607 19.607 0 01.21-6.384l-3.465-2.57a24.263 24.263 0 012.823-6.34l4.229.855a19.605 19.605 0 014.604-4.429l-.618-4.332c2-1.154 4.155-2.005 6.39-2.524l2.347 3.652a18.713 18.713 0 016.259.125l2.588-3.557c1.069.296 2.128.675 3.17 1.14z\",\n fill: \"#7CA6BF\"\n}), React.createElement(\"path\", {\n d: \"M62.886 42.644c6.409 2.854 9.24 10.479 6.322 17.03-2.917 6.553-10.478 9.552-16.887 6.698-6.409-2.853-9.24-10.478-6.322-17.03 2.917-6.553 10.478-9.551 16.887-6.698zm-1.32 2.966c-4.808-2.14-10.478.109-12.666 5.023-2.188 4.914-.065 10.633 4.742 12.773 4.806 2.14 10.477-.108 12.665-5.023 2.188-4.914.065-10.633-4.742-12.773z\",\n fill: \"#AAC4D5\"\n}), React.createElement(\"path\", {\n d: \"M62.886 42.644a12.424 12.424 0 014.22 3.075l-2.366 2.207a9.317 9.317 0 00-3.175-2.316c-4.807-2.14-10.477.109-12.665 5.023-1.635 3.673-.863 7.795 1.638 10.536l-2.367 2.208c-3.325-3.656-4.35-9.145-2.172-14.035 2.917-6.553 10.478-9.551 16.887-6.698z\",\n fill: \"#CBDDE9\"\n}))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_3488_11934\",\n x1: \"-5.5\",\n y1: \"3.094\",\n x2: \"-5.5\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_3488_11934\",\n x1: \"91.478\",\n y1: \"62.257\",\n x2: \"53.241\",\n y2: \"26.703\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_3488_11934\",\n x1: \"86.975\",\n y1: \"77.519\",\n x2: \"49.809\",\n y2: \"46.968\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#90A4AE\",\n stopOpacity: \"0\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopOpacity: \".75\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_3488_11934\",\n x: \"32.168\",\n y: \"30.067\",\n width: \"53.209\",\n height: \"53.716\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dx: \"1\",\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_3488_11934\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_3488_11934\",\n result: \"shape\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg1954152798a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1954152798a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.5 3.094h88V88h-88V3.094z\",\n fill: \"url(#paint0_linear_4523_4542)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.543 19.547L84.7 39.704V90.88H32.1L17.875 77.372V19.547h46.668z\",\n fill: \"url(#paint1_linear_4523_4542)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.156 19.938h69.438A2.406 2.406 0 0188 22.343v53.968a2.406 2.406 0 01-2.406 2.407H16.156a2.406 2.406 0 01-2.406-2.406v-53.97a2.406 2.406 0 012.406-2.405z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 19.25H86.28c.95 0 1.719.77 1.719 1.719v53.968c0 .95-.77 1.72-1.719 1.72H17.187c-.949 0-1.718-.77-1.718-1.72V20.97c0-.95.77-1.719 1.719-1.719z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 24.968c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 29.093c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 110 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 56.031c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 60.156c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 110 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 66.344c0-.57.462-1.031 1.031-1.031h28.059a1.031 1.031 0 010 2.063H37.254c-.57-.001-1.031-.463-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 70.469c0-.57.462-1.031 1.031-1.031h25.508a1.031 1.031 0 010 2.063H37.125c-.57-.001-1.031-.463-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 35.406c0-.57.461-1.031 1.03-1.031h28.06a1.031 1.031 0 010 2.063h-28.06c-.569 0-1.03-.462-1.03-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 39.531c0-.57.461-1.031 1.03-1.031H70.54a1.031 1.031 0 010 2.063H48.47c-.57 0-1.032-.462-1.032-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"36.438\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"46.75\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"58.094\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"68.406\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 45.719c0-.57.461-1.032 1.03-1.032h28.06a1.031 1.031 0 010 2.063h-28.06c-.569 0-1.03-.462-1.03-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 49.844c0-.57.461-1.032 1.03-1.032h25.509a1.031 1.031 0 010 2.063H48.469c-.57 0-1.032-.462-1.032-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.802 37.125v-2.75h-.688V48.251h3.843v-.688h-3.155v-9.75h3.155v-.688h-3.155z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.68 26.469l-1.215 1.215-1.215-1.215h2.43z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 7.563h63.937c1.14 0 2.063.923 2.063 2.062v6.188c0 1.139-.924 2.062-2.063 2.062H17.187a2.062 2.062 0 01-2.062-2.063V9.625c0-1.14.923-2.063 2.063-2.063z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.938 12.719c0-1.14.923-2.063 2.062-2.063h24.063a2.062 2.062 0 010 4.125H22a2.062 2.062 0 01-2.063-2.062zM50.875 12.719c0-1.14.923-2.063 2.063-2.063h3.437a2.062 2.062 0 110 4.125h-3.438a2.062 2.062 0 01-2.062-2.062z\",\n fill: \"#979797\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_4523_4542)\"\n}, React.createElement(\"path\", {\n d: \"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\",\n fill: \"#000\"\n})), React.createElement(\"path\", {\n d: \"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".15\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 34.719c12.34 0 22.344 10.003 22.344 22.343S69.746 79.406 57.406 79.406c-12.34 0-22.343-10.003-22.343-22.344 0-12.34 10.003-22.343 22.343-22.343zm-.172 2.406c-10.916 0-19.765 8.85-19.765 19.766 0 10.916 8.85 19.765 19.765 19.765C68.151 76.656 77 67.806 77 56.891c0-10.917-8.85-19.766-19.766-19.766z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".3\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 38.844c10.062 0 18.219 8.157 18.219 18.218 0 10.062-8.157 18.22-18.219 18.22-10.062 0-18.218-8.158-18.218-18.22 0-10.061 8.156-18.218 18.218-18.218zm0 2.043c-8.933 0-16.175 7.242-16.175 16.175 0 8.934 7.242 16.176 16.175 16.176 8.934 0 16.176-7.242 16.176-16.175 0-8.934-7.242-16.176-16.176-16.176z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 26.469C74.303 26.469 88 40.166 88 57.062c0 16.897-13.697 30.594-30.594 30.594-16.896 0-30.593-13.697-30.593-30.594 0-16.896 13.697-30.593 30.593-30.593zm-.172 3.437c-14.903 0-26.984 12.082-26.984 26.985 0 14.903 12.081 26.984 26.984 26.984 14.903 0 26.985-12.081 26.985-26.984 0-14.903-12.082-26.985-26.985-26.985z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n d: \"M57.406 71.844c8.164 0 14.782-6.618 14.782-14.781 0-8.164-6.618-14.782-14.782-14.782-8.163 0-14.781 6.618-14.781 14.782 0 8.163 6.618 14.78 14.781 14.78z\",\n fill: \"#61A3F1\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.298 46.448L75.18 63.33 66.066 75.41h-2.029l-7.582-7.582 1.006-3.178.837-18.201z\",\n fill: \"url(#paint2_linear_4523_4542)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter1_d_4523_4542)\"\n}, React.createElement(\"circle\", {\n cx: \"57.406\",\n cy: \"47.781\",\n r: \"1.719\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter2_d_4523_4542)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M55.688 53.969a1.719 1.719 0 113.438 0v12.375a1.719 1.719 0 11-3.438 0V53.969z\",\n fill: \"#fff\"\n}))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_4523_4542\",\n x1: \"-5.5\",\n y1: \"3.094\",\n x2: \"-5.5\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_4523_4542\",\n x1: \"91.478\",\n y1: \"62.257\",\n x2: \"53.241\",\n y2: \"26.703\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_4523_4542\",\n x1: \"77.079\",\n y1: \"63.788\",\n x2: \"62.929\",\n y2: \"54.707\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_4523_4542\",\n x: \"36.219\",\n y: \"37.875\",\n width: \"42.375\",\n height: \"42.375\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter1_d_4523_4542\",\n x: \"51.688\",\n y: \"44.063\",\n width: \"11.438\",\n height: \"11.438\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter2_d_4523_4542\",\n x: \"51.688\",\n y: \"50.25\",\n width: \"11.438\",\n height: \"23.813\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n title: {\n whiteSpace: 'nowrap',\n height: '24px',\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n titleCount: {\n fontSize: '14px',\n overflow: 'hidden',\n lineHeight: '20px',\n textOverflow: 'ellipsis'\n },\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n },\n countProfiles: {\n color: theme.palette.text.primary,\n fontWeight: 700\n },\n chartInfoPanel: {\n padding: '0 12px'\n }\n}));\n","import React, {ReactElement} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport Link from '@mui/material/Link';\nimport i18n from 'ui-i18n';\nimport {BasicViewContent, EMPTY_STATE_ICONS} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\nimport NiceOneIcon from '../icons/niceOne.svg';\nimport SettingsIcon from '../icons/settingsIcon.svg';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport NotSupportedIcon from '../icons/notSupportedIcon.svg';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport DQDashboardError from '../../../components/DQDashboardError/DQDashboardError';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {useStyles} from './styles';\n\nexport enum VVFNoDataChartType {\n DVF_NOT_SUPPORTED = 'dvfNotSupported',\n DVF_NOT_CONFIGURE = 'dvfNotConfigured',\n DATA_VALID = 'dataValid',\n PERMISSION_DENIED = 'permissionDenied'\n}\ntype Props = {\n chartType?: VVFNoDataChartType;\n dataLevel: DQDataLevel;\n title: string;\n infoTooltipTitle?: ReactElement | string;\n titleChildren?: React.ReactNode;\n dvfConfigLink: string;\n config: DQDashboardView;\n};\n\nconst VVFChartNoData = ({\n chartType,\n dataLevel,\n title: chartTitle,\n infoTooltipTitle,\n titleChildren,\n dvfConfigLink,\n config\n}: Props) => {\n const styles = useStyles();\n let icon, message, title;\n const dataSourceLabel =\n dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? i18n.text('attribute type') : i18n.text('entity type');\n switch (chartType) {\n case VVFNoDataChartType.DVF_NOT_SUPPORTED: {\n icon = NotSupportedIcon;\n title = i18n.text('Data validation functions are not supported for\\nReference attributes at this time.');\n break;\n }\n case VVFNoDataChartType.DVF_NOT_CONFIGURE: {\n icon = SettingsIcon;\n message = i18n.text('If we spot any validation issues, we’ll display them here.');\n title = (\n <>\n <Link\n href={dvfConfigLink}\n target=\"_blank\"\n component={dvfConfigLink ? 'a' : 'span'}\n color={dvfConfigLink ? 'primary' : 'inherit'}\n underline={dvfConfigLink ? 'hover' : 'none'}\n data-reltio-id=\"reltio-dq-dashboard-define-dvf-link\"\n >\n {`${i18n.text('Define some data validation functions')} `}\n </Link>\n {i18n.text('for this ${dataSourceLabel} (or ask your Tenant Admin).', {dataSourceLabel})}\n </>\n );\n break;\n }\n case VVFNoDataChartType.DATA_VALID: {\n icon = NiceOneIcon;\n message = i18n.text(\n 'We didn’t spot any validation issues for this ${dataSourceLabel}.\\nYou can kick back and enjoy a cold one.',\n {dataSourceLabel}\n );\n title = i18n.text('Nice one!');\n break;\n }\n case VVFNoDataChartType.PERMISSION_DENIED: {\n icon = EMPTY_STATE_ICONS.ERROR;\n message = i18n.text('Please contact your Tenant Admin to change permissions');\n title = i18n.text('You don’t currently have permission to view this chart');\n }\n }\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={chartTitle} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n </DQLayoutItemHeader>\n <BasicViewContent className={styles.viewContent}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleHeight>\n {({height = 0}) => (\n <DQDashboardError\n height={height}\n errorData={{\n Icon: icon,\n title,\n message\n }}\n />\n )}\n </ReactResizeDetector>\n </BasicViewContent>\n </DQLayoutItemView>\n );\n};\n\nexport default VVFChartNoData;\n","import {useContext, useCallback} from 'react';\n\nimport {RequestStates} from '@reltio/components';\nimport {ApiErrorCode, DataValidationFunction, DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../../../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {isReferenceChild} from '../../../../services/attributeDetails';\n\nimport {VVFNoDataChartType} from '../VVFChartNodata';\n\ntype Props = {\n dvfs: DataValidationFunction[];\n errorCode: ApiErrorCode;\n state: RequestStates;\n};\n\nexport const useNoDataDvfType = ({dvfs: activeDvfs, errorCode, state: dvfsState}: Props) => {\n const dataLevel = useContext(DataLevelContext);\n const {detailedAttributeType} = useDQDashboardState();\n\n const getNoDataStatus = useCallback(\n (chartDataState: RequestStates, hasData: boolean) => {\n const chartState =\n dvfsState === RequestStates.LOADED && chartDataState === RequestStates.LOADED\n ? RequestStates.LOADED\n : dvfsState === RequestStates.ERROR || chartDataState === RequestStates.ERROR\n ? RequestStates.ERROR\n : RequestStates.LOADING;\n\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const isPermissionDenied = errorCode === ApiErrorCode.ACCESS_DENIED;\n const isDVFNotSupported = isAttributeDataLevel && isReferenceChild(detailedAttributeType);\n const isDVFNotConfigured =\n errorCode === ApiErrorCode.DVF_NOT_CONFIGURED ||\n (activeDvfs?.length === 0 && chartState !== RequestStates.ERROR && dvfsState === RequestStates.LOADED);\n const isDataValid = chartState === RequestStates.LOADED && activeDvfs?.length > 0 && !hasData;\n\n const getNoDataType = () => {\n if (isDVFNotSupported) return VVFNoDataChartType.DVF_NOT_SUPPORTED;\n if (isDVFNotConfigured) return VVFNoDataChartType.DVF_NOT_CONFIGURE;\n if (isDataValid) return VVFNoDataChartType.DATA_VALID;\n if (isPermissionDenied) return VVFNoDataChartType.PERMISSION_DENIED;\n };\n\n return {\n type: getNoDataType(),\n chartState\n };\n },\n [activeDvfs, errorCode, dvfsState, dataLevel, detailedAttributeType]\n );\n\n return getNoDataStatus;\n};\n","import {useContext, useMemo} from 'react';\nimport {propEq} from 'ramda';\n\nimport {DataValidationFunction, DQDataLevel, StatusVF} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../../../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {DVFContext} from '../../../../contexts/DVFContext';\nimport {getDVFsForAttribute} from '../../../../services/attributes';\n\ntype Props = {\n onlyActive?: boolean;\n};\n\nexport const useDvfs = ({onlyActive = true}: Props) => {\n const {dvfs, dvfConfigLink} = useContext(DVFContext);\n const dataLevel = useContext(DataLevelContext);\n const {detailedAttributeType} = useDQDashboardState();\n\n const {data: dvfsData, state, reload, errorCode} = dvfs;\n\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const currentDvfs: DataValidationFunction[] = useMemo(\n () => (isAttributeDataLevel ? getDVFsForAttribute(dvfsData, detailedAttributeType?.uri) : dvfsData) || [],\n [isAttributeDataLevel, dvfsData, detailedAttributeType?.uri]\n );\n const resultDvfs = useMemo(\n () => (onlyActive ? currentDvfs.filter(propEq('status', StatusVF.ACTIVE)) : currentDvfs),\n [currentDvfs, onlyActive]\n );\n\n return {\n dvfs: resultDvfs,\n dvfConfigLink,\n state,\n reload,\n errorCode\n };\n};\n","import {pipe, split, is} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {TableChartData} from '../../types/TableChartData';\n\nexport const getLabelAndMaxValue = pipe(split('|'), ([label, maxValue]) => ({label, maxValue}));\nexport const getValueByColumnId = (id: string, rowValue: TableChartData) =>\n is(Number, rowValue[id]) ? i18n.number(rowValue[id]) : rowValue[id];\n","import React, {useRef} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\ntype Props = {\n children: React.ReactElement;\n handler: (isOverflow: boolean) => void;\n handleWidth?: boolean;\n};\nconst OverflowingHandler = ({children, handler, handleWidth = true}: Props) => {\n const checkOverflow = (el: HTMLElement) => el && el.children[0].clientWidth < el.children[0].scrollWidth;\n const resizeHandler = () => handler(checkOverflow(childrenRef.current));\n const childrenRef = useRef();\n return (\n <ReactResizeDetector handleWidth={handleWidth} onResize={resizeHandler}>\n <div style={{overflow: 'hidden'}} ref={childrenRef}>\n {children}\n </div>\n </ReactResizeDetector>\n );\n};\nexport default OverflowingHandler;\n","import {makeStyles} from '@mui/styles';\n\nconst NUMBER_CELL_WIDTH = 90;\nconst SORT_ICON_WIDTH = 22;\nconst BAR_PADDING_WIDHT = 32;\nconst textOverflow = {\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n content: '\"\"',\n height: '100%',\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px'\n};\nconst BarAxis = {\n background: 'rgba(0, 0, 0, 0.38)',\n bottom: 0,\n content: '\"\"',\n height: '3px',\n left: 0,\n position: 'absolute',\n width: '1px'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n attribute: {\n '&:after': textOverflow,\n alignItems: 'center',\n color: theme.palette.text.primary,\n display: 'flex',\n fontSize: '13px',\n fontWeight: 'normal',\n height: '100%',\n lineHeight: '15px',\n overflow: 'hidden',\n padding: '0 16px',\n whiteSpace: 'pre'\n },\n headCell: {\n '&>div': {\n display: 'flex',\n flexDirection: (isFirstColumn) => (isFirstColumn ? 'row' : 'row-revers'),\n flexGrow: 1,\n justifyContent: 'flex-start',\n marginLeft: (isFirstColumn) => !isFirstColumn && '-26px',\n paddingLeft: '16px',\n paddingRight: (isFirstColumn) => isFirstColumn && '0'\n },\n '&>div>span': {\n flexGrow: 1,\n justifyContent: (isFirstColumn) => (isFirstColumn ? 'flex-start' : 'flex-end'),\n marginLeft: '0!important',\n width: '100%'\n },\n height: '100%',\n lineHeight: '47px'\n },\n headCellWithRange: {\n '&>div': {\n display: 'flex',\n flexDirection: 'row-revers',\n flexGrow: 1,\n justifyContent: 'flex-start',\n padding: '0 10px 0 16px'\n },\n '&>div>span': {\n flexGrow: 1,\n justifyContent: 'flex-start!important',\n width: '100%'\n },\n height: '100%',\n lineHeight: '47px'\n },\n headLabel: {\n color: theme.palette.text.primary,\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: '47px',\n overflow: 'hidden',\n position: 'relative',\n whiteSpace: 'nowrap',\n '&.overflowed:after': textOverflow\n },\n labelWrapper: {\n maxWidth: `${NUMBER_CELL_WIDTH}px`,\n '&.sortable': {\n maxWidth: `${NUMBER_CELL_WIDTH - SORT_ICON_WIDTH}px`\n }\n },\n rangeLabel: {\n '&:first-child': {\n flexGrow: 1\n },\n color: theme.palette.text.secondary,\n fontSize: '12px'\n },\n rangeWrapper: {\n '&:after': {\n ...BarAxis,\n left: 'initial',\n right: 0\n },\n '&:before': BarAxis,\n alignItems: 'flex-end',\n display: 'flex',\n flexGrow: 1,\n lineHeight: '24px',\n marginLeft: '32px',\n maxWidth: `calc(100% - ${NUMBER_CELL_WIDTH + BAR_PADDING_WIDHT}px)`,\n position: 'relative',\n '&.sortable': {\n height: '100%',\n maxWidth: `calc(100% - ${BAR_PADDING_WIDHT + NUMBER_CELL_WIDTH + SORT_ICON_WIDTH}px)`\n }\n },\n tooltipTitle: {\n color: 'rgba(255, 255, 255, 0.6)'\n },\n tooltipValue: {\n whiteSpace: 'pre-wrap'\n },\n popper: {\n paddingTop: '6px'\n }\n}));\n\nexport const useNumberCellStyles = makeStyles((theme) => ({\n bar: ({barColor}: {barColor: string}) => ({\n borderRadius: '0 !important',\n minHeight: '16px !important',\n position: 'initial !important' as 'initial',\n background: barColor || theme.palette.secondary.main\n }),\n colorBarContainer: {\n '&>div': {\n opacity: 1\n },\n boxSizing: 'border-box',\n height: '100%',\n padding: '5px 0 6px',\n position: 'relative',\n width: '100%'\n },\n numberContainer: {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n padding: '0 10px 0 16px'\n },\n number: {\n color: theme.palette.text.primary,\n flexShrink: 0,\n fontSize: '13px',\n fontWeight: 'normal',\n lineHeight: '15px',\n marginRight: '32px',\n overflow: 'hidden',\n textAlign: 'right',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: `${NUMBER_CELL_WIDTH}px`\n },\n popper: {\n paddingTop: '6px'\n }\n}));\n","import classnames from 'classnames';\nimport React, {useState} from 'react';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {getLabelAndMaxValue} from '../helpers';\nimport OverflowingHandler from './OverflowingHandler';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport {useStyles} from './styles';\n\ntype HeadCellRendererProps = {\n headCellData: {\n label: string;\n sortable?: boolean;\n };\n headIndex?: number;\n};\n\nconst HeadCellRenderer = ({headCellData, headIndex, ...otherProps}: HeadCellRendererProps) => {\n const isFirstColumn = headIndex === 0;\n const styles = useStyles(isFirstColumn);\n const {label, maxValue} = getLabelAndMaxValue(headCellData.label);\n const formattedMaxValue = formatNumberAsMetric(Number(maxValue), 999);\n const hasRange = !!maxValue;\n const [isOverflowing, setIsOverflowing] = useState<boolean>(false);\n const labelElement = (\n <OverflowingHandler handler={setIsOverflowing}>\n <Tooltip title={isOverflowing ? label : ''}>\n <div className={classnames(styles.headLabel, {overflowed: isOverflowing})}>{label}</div>\n </Tooltip>\n </OverflowingHandler>\n );\n\n return (\n <div className={classnames({[styles.headCell]: !hasRange, [styles.headCellWithRange]: hasRange})}>\n <DefaultHeadCellRenderer\n {...otherProps}\n headCellData={{\n ...headCellData,\n label: hasRange ? (\n <>\n <div\n className={classnames(styles.rangeWrapper, {\n sortable: headCellData.sortable\n })}\n >\n <span className={styles.rangeLabel}>0</span>\n <span className={styles.rangeLabel}>{formattedMaxValue}</span>\n </div>\n <div\n className={classnames({\n [styles.labelWrapper]: !headCellData.sortable,\n sortable: headCellData.sortable\n })}\n >\n {labelElement}\n </div>\n </>\n ) : (\n labelElement\n )\n }}\n />\n </div>\n );\n};\n\nexport default HeadCellRenderer;\n","import React from 'react';\n\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {getValueByColumnId} from '../helpers';\n\nimport ChartDataTooltip from '../../ChartDataTooltip/ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n columnsHeaders: TableColumnHeader[];\n chartData: TableChartData;\n};\n\nconst TableCellTooltip = ({columnsHeaders, chartData}: Props) => {\n const styles = useStyles();\n return (\n <ChartDataTooltip\n data={columnsHeaders.map(({label, id}) => ({\n label: <span className={styles.tooltipValue}>{label}</span>,\n value: getValueByColumnId(id, chartData)\n }))}\n />\n );\n};\nexport default TableCellTooltip;\n","import classnames from 'classnames';\nimport React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport {useClickableStyle, withTableContext} from '@reltio/components';\nimport {utils} from '@reltio/mdm-sdk';\n\nimport {TableChartData} from '../../../types/TableChartData';\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\n\nimport TableCellTooltip from './TableCellTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value?: string;\n rowValue?: TableChartData;\n onClick?: () => void;\n columnData: {\n cellClassName?: string;\n labelRenderer?: React.ComponentType<{chartData: TableChartData; variant?: string}>;\n variant?: string;\n };\n columnsHeaders: TableColumnHeader[];\n};\n\nexport const LabelCellRenderer = ({value = '', columnData, rowValue: chartData, columnsHeaders, onClick}: Props) => {\n const {cellClassName, variant, labelRenderer: LabelRenderer} = columnData;\n const styles = useStyles();\n const clickable = useClickableStyle(onClick);\n const hasCustomRenderer = !!LabelRenderer;\n\n return (\n <Tooltip\n title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}\n followCursor={true}\n classes={{popper: styles.popper}}\n >\n <div className={classnames(styles.attribute, clickable, cellClassName)} onClick={onClick}>\n {hasCustomRenderer ? (\n <LabelRenderer variant={variant} chartData={chartData} />\n ) : (\n utils.strings.removeLineBreaks(value)\n )}\n </div>\n </Tooltip>\n );\n};\n\nexport default withTableContext(({onItemClick, columnsHeaders}, {rowValue: {group}}) => {\n return {\n onClick:\n onItemClick &&\n (() => {\n onItemClick(group);\n }),\n columnsHeaders\n };\n})(LabelCellRenderer);\n","import classnames from 'classnames';\nimport {isNil} from 'ramda';\nimport React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport {ChartData, ColorBar, useClickableStyle, withTableContext} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\n\nimport TableCellTooltip from './TableCellTooltip';\n\nimport {useNumberCellStyles} from './styles';\n\ntype Props = {\n value: number;\n columnData: {\n maxValue?: number;\n getBarColor?: (group: string) => string;\n };\n rowValue?: ChartData;\n onClick?: () => void;\n columnsHeaders: TableColumnHeader[];\n};\n\nexport const NumberCellValueRenderer = ({\n value,\n columnData: {maxValue, getBarColor},\n rowValue: chartData,\n columnsHeaders,\n onClick\n}: Props) => {\n const styles = useNumberCellStyles({barColor: getBarColor && getBarColor(chartData.group)});\n const clickable = useClickableStyle(onClick);\n const formattedValue = value === 0 ? '0' : formatNumberAsMetric(value, 999);\n return (\n <Tooltip\n title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}\n followCursor={true}\n classes={{popper: styles.popper}}\n >\n <div className={classnames(styles.numberContainer, clickable)} onClick={onClick}>\n <Typography className={styles.number}>{formattedValue}</Typography>\n {!isNil(maxValue) && (\n <div className={styles.colorBarContainer}>\n <ColorBar width={value} maxWidth={maxValue} className={styles.bar} />\n </div>\n )}\n </div>\n </Tooltip>\n );\n};\n\nexport default withTableContext(({onItemClick, columnsHeaders}, {rowValue: {group}}) => {\n return {\n onClick:\n onItemClick &&\n (() => {\n onItemClick(group);\n }),\n columnsHeaders\n };\n})(NumberCellValueRenderer);\n","import {makeStyles} from '@mui/styles';\n\ntype Dimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const useStyles = makeStyles({\n tableContainer: ({width}: Dimensions) => ({\n width: width,\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n '& .hoveredRow': {\n background: 'transparent'\n },\n '& .hoveredRow:after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none'\n }\n }),\n cellBorder: {\n borderLeft: 'none',\n borderRight: 'none!important'\n }\n});\n","import React, {useMemo} from 'react';\nimport {omit, pick, pluck} from 'ramda';\nimport {BasicTable} from '@reltio/components';\nimport HeadCellRenderer from './cell-renderers/HeadCellRenderer';\nimport LabelCellRenderer from './cell-renderers/LabelCellRenderer';\nimport NumberCellValueRenderer from './cell-renderers/NumberCellValueRenderer';\nimport {TableChartData} from '../../types/TableChartData';\n\nimport {useStyles} from './styles';\n\nexport type ColumnsOptions = {\n id: string;\n label: string;\n width?: number;\n secondLabel?: string;\n sortable?: boolean;\n resizable?: boolean;\n cellClassName?: string;\n labelRenderer?: React.ComponentType<{chartData: TableChartData}>;\n getBarColor?: (group: string) => string;\n variant?: string;\n};\n\ntype Props = {\n data: TableChartData[];\n width: number;\n height: number;\n onItemClick?: (group: string) => void;\n columnsOptions: ColumnsOptions[];\n basicTableRef?: React.MutableRefObject<any> | null;\n dataReltioId?: string;\n};\n\nconst ROW_HEIGHT = 28;\n\nconst getExtendedLabel = (label: string, secondLabel: string) => (secondLabel ? `${label} ${secondLabel}` : label);\n\nconst TableWithBars = ({\n width,\n height,\n data,\n columnsOptions,\n basicTableRef,\n onItemClick,\n dataReltioId,\n ...otherProps\n}: Props) => {\n const styles = useStyles({width, height});\n\n const tableClasses = useMemo(() => ({cellBorder: styles.cellBorder}), [styles]);\n const maxValue = useMemo(() => Math.max(...pluck('value', data)), [data]);\n\n const headData = useMemo(\n () =>\n columnsOptions.map((columnOptions) => ({\n resizable: false,\n sortable: false,\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: LabelCellRenderer,\n label: getExtendedLabel(columnOptions.label, columnOptions.secondLabel),\n initialWidth: width * columnOptions.width,\n ...(columnOptions.id === 'value'\n ? {\n label: getExtendedLabel(columnOptions.label, columnOptions.secondLabel).concat(\n `|${maxValue}`\n ),\n maxValue,\n rowCellValueRenderer: NumberCellValueRenderer\n }\n : {}),\n ...omit(['label', 'width'], columnOptions)\n })),\n [columnsOptions, maxValue, width]\n );\n\n const columnsHeaders = useMemo(() => columnsOptions.map(pick(['id', 'label'])), [columnsOptions]);\n\n const context = useMemo(\n () => ({\n onItemClick,\n columnsHeaders\n }),\n [onItemClick, columnsHeaders]\n );\n\n return (\n <div className={styles.tableContainer} data-reltio-id={dataReltioId}>\n <BasicTable\n columnsData={headData}\n rowsData={data}\n headRowHeight={48}\n getRowCellHeight={() => ROW_HEIGHT}\n classes={tableClasses}\n defaultColumnWidth={100}\n defaultColumnMinWidth={100}\n ref={basicTableRef}\n context={context}\n hoverStateEnabled\n {...otherProps}\n />\n </div>\n );\n};\n\nexport default TableWithBars;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n layoutItemContent: {\n padding: '0 0 10px',\n display: 'flex',\n flexDirection: 'column'\n }\n}));\n","import React, {ReactElement, useCallback, useMemo, useState} from 'react';\nimport {nanoid} from 'nanoid';\nimport {has} from 'ramda';\n\nimport {RequestStates, toggleSortOrder, withPercents} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {hasTimeRange} from '../../../services/mlDq';\nimport {valueComparator as defaultComparator} from '../../../services/tableCharts';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {ErrorData} from '../../../types/ErrorData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\n\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n data: TableChartData[];\n columnsOptions: ColumnsOptions[];\n title: string;\n state: RequestStates;\n onRefresh: () => void;\n infoTooltipTitle?: ReactElement | string;\n customComparator?: ({\n sortDirection,\n sortField\n }: {\n sortDirection: 'asc' | 'desc';\n sortField: string;\n }) => (a: TableChartData, b: TableChartData) => number;\n onItemClick?: (group: string) => void;\n contentChildren?: React.ReactNode;\n noDataComponentData?: ErrorData;\n dataLevel?: DQDataLevel;\n};\n\nconst CustomTableWithBarsChart = ({\n config,\n data,\n title,\n columnsOptions,\n infoTooltipTitle,\n customComparator,\n onItemClick,\n contentChildren,\n state,\n onRefresh,\n dataLevel = DQDataLevel.ATTRIBUTE_TYPE\n}: Props) => {\n const styles = useStyles();\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc');\n const [sortField, setSortField] = useState<string>('value');\n const comparator = useCallback(\n (a: TableChartData, b: TableChartData) =>\n customComparator\n ? customComparator({sortDirection, sortField})(a, b)\n : defaultComparator({sortDirection, sortField})(a, b),\n [sortDirection, sortField, customComparator]\n );\n const handleSort = (field: string) => {\n setSortDirection(() => (sortField === field ? toggleSortOrder(sortDirection) : sortDirection));\n setSortField(field);\n };\n const sortedData = useMemo(() => [...data.sort(comparator)], [comparator, data]);\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n\n const {period, exportLoadingIds} = useDQDashboardState();\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && dataLevel === DQDataLevel.ATTRIBUTE_TYPE && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n className={styles.layoutItemContent}\n data={sortedData}\n loadingState={state}\n onRefresh={onRefresh}\n >\n {({data, width = 0, height = 0}) => {\n return (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n {contentChildren}\n <TableWithBars\n {...{\n data,\n width,\n height,\n columnsOptions,\n sorting: {\n field: sortField,\n order: sortDirection\n },\n onSort: handleSort,\n onItemClick\n }}\n />\n </>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default withPercents(CustomTableWithBarsChart);\n","import {isNil} from 'ramda';\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport i18n from 'ui-i18n';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n isDataValid: boolean;\n totalProfiles: number;\n invalidProfiles: number;\n};\nexport const TotalInfo = ({isDataValid, totalProfiles, invalidProfiles}: Props) => {\n const styles = useStyles();\n\n const getTotalInfo = () => {\n if (isDataValid) {\n return i18n.text('0 profiles');\n }\n\n return !isNil(invalidProfiles) ? (\n <>\n <span className={styles.countProfiles}>{formatNumberAsMetric(invalidProfiles)}</span>\n {` (${Math.round((invalidProfiles / totalProfiles) * 100)}% ${i18n.text(\n 'out of'\n )} ${formatNumberAsMetric(totalProfiles)})`}\n </>\n ) : null;\n };\n const totalInfo = getTotalInfo();\n return totalInfo && <Typography className={styles.titleCount}>{totalInfo}</Typography>;\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pluck} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport mdmModule from '@reltio/mdm-module';\nimport {ApiErrorCode, DQDataLevel, Metadata} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\n\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useEntityCount} from '../../../hooks/useEntityCount';\nimport {useInvalidProfiles} from '../../../hooks/useInvalidProfiles';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {\n getValidationChartData,\n getEntityLevelValidationChartData,\n getValidationSearchState,\n valueComparator\n} from '../../../services/tableCharts';\nimport {getColumnsOptions} from './helpers';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\nimport {useDvfs} from './hooks/useDvfs';\n\nimport CustomTableWithBarsChart from '../CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport ChartInfoPanel from '../../../components/ChartInfoPanel/ChartInfoPanel';\nimport {TotalInfo} from './TotalInfo';\n\nimport {useStyles} from './styles';\n\nconst ViolatedValidationFuncChart = (props: ViewProps) => {\n const styles = useStyles();\n const {config} = props;\n\n const dvfData = useDvfs({});\n const {dvfs, dvfConfigLink, errorCode: dvfErrorCode, reload: dvfsReload, state: dvfsState} = dvfData;\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const dataLevel = useContext(DataLevelContext);\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const {period, entityType} = useDQDashboardState();\n const entityTypeUri = entityType.uri;\n\n const {\n data: chartData,\n state,\n reload\n } = useChartData(\n isAttributeDataLevel ? getValidationChartData(dvfs) : getEntityLevelValidationChartData(dvfs, metadata)\n );\n const hasData = !!chartData.length;\n const {type: noDataType, chartState} = getNoDataStatus(state, hasData);\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const dvfUris = useMemo(() => pluck('uri', dvfs), [dvfs]);\n const invalidProfiles = useInvalidProfiles({entityTypeUri, dvfUris});\n const {getEntityCount} = useEntityCount(entityTypesArray);\n const totalProfiles = getEntityCount(entityTypeUri);\n const searchProfiles = useSearchRedirect(getValidationSearchState(dvfs));\n\n const isLoadingError = chartState === RequestStates.ERROR && dvfErrorCode !== ApiErrorCode.DVF_NOT_CONFIGURED;\n\n const totalInfo = !isLoadingError &&\n noDataType !== VVFNoDataChartType.DVF_NOT_CONFIGURE &&\n chartState !== RequestStates.LOADING && (\n <TotalInfo\n isDataValid={VVFNoDataChartType.DATA_VALID === noDataType}\n totalProfiles={totalProfiles}\n invalidProfiles={invalidProfiles}\n />\n );\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Profiles with invalid data')}\n data={[{value: i18n.text('Shows the number of profiles that violate active validation functions')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const contentChildren = (\n <div className={styles.chartInfoPanel}>\n <ChartInfoPanel label={`${i18n.text('Profiles with invalid data')}:`} info={totalInfo} />\n </div>\n );\n\n const columnsOptions = getColumnsOptions(dataLevel, chartData, period);\n\n const reloadFunction = useCallback(() => {\n dvfsState === RequestStates.ERROR && dvfsReload();\n state === RequestStates.ERROR && reload();\n }, [dvfsState, dvfsReload, state, reload]);\n\n return noDataType ? (\n <VVFChartNoData\n config={config}\n chartType={noDataType}\n title={i18n.text(config.title)}\n infoTooltipTitle={infoTooltipTitle}\n dvfConfigLink={dvfConfigLink}\n dataLevel={dataLevel}\n />\n ) : (\n <CustomTableWithBarsChart\n config={config}\n title={i18n.text(config.title)}\n data={chartData}\n onItemClick={searchProfiles}\n state={chartState}\n onRefresh={reloadFunction}\n customComparator={valueComparator}\n infoTooltipTitle={infoTooltipTitle}\n columnsOptions={columnsOptions}\n contentChildren={contentChildren}\n dataLevel={dataLevel}\n />\n );\n};\n\nexport default ViolatedValidationFuncChart;\n","import {useEffect, useState} from 'react';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useInvalidProfiles = ({entityTypeUri, dvfUris}: {entityTypeUri: string; dvfUris: string[]}) => {\n const [invalidProfilesCount, setInvalidProfilesCount] = useState<number>(null);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n const filter = [\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: [entityTypeUri]\n },\n {\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionURI',\n filter: FilterOptions.EQUALS,\n values: dvfUris\n }\n ];\n safePromise(getTotals(filter))\n .then(({total}) => setInvalidProfilesCount(total))\n .catch(() => setInvalidProfilesCount(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypeUri, dvfUris]);\n\n return invalidProfilesCount;\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {isNil, map, pipe, propSatisfies, keys, reduce, reject, uniq, without, has} from 'ramda';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {DataValidationFunction, DQDataLevel, DQMetric, getDvfColor, getLabel, TimeSeriesMetric} from '@reltio/mdm-sdk';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {\n getTimeSeriesData,\n getChartTooltipDateTitle,\n enrichTimeSeriesDataWithTodayData,\n filterValidDVFs\n} from '../../../services/mlDq';\nimport {getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {findDVFByUri, getValidationChartData} from '../../../services/tableCharts';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {VIOLATED_PROFILES_METRIC} from '../../../constants/ValidationMetric';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {getViolatedValidationData, NO_DATA_FIELD} from './helpers';\nimport {useDvfs} from './hooks/useDvfs';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\n\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\nimport {ChartDataTooltip, InfoDataRenderer, TooltipWithSquares} from '../../../components/ChartDataTooltip';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n// TODO get rid of hardcoded metric\nconst metrics = [VIOLATED_PROFILES_METRIC as TimeSeriesMetric];\n\nconst getTooltip =\n (dvfs: DataValidationFunction[], dataKeys: string[]) =>\n ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const data: ChartData[] = pipe(\n map((functionId: string) => {\n const dvf = findDVFByUri(dvfs, functionId);\n return {\n label: getLabel(dvf?.label || dvf?.name),\n value: currentPayload[functionId],\n group: functionId\n };\n }),\n reject(propSatisfies(isNil, 'value'))\n )(dataKeys);\n const title = getChartTooltipDateTitle(currentPayload, dataKeys);\n return <TooltipWithSquares title={title} data={data} getColor={getDvfColor} />;\n }\n };\n\nconst ViolatedValidationFuncTimeSeriesChart = (props: ViewProps) => {\n const {config} = props;\n const {title} = config;\n const {period, dateRange, entityType, detailedAttributeType, exportLoadingIds} = useDQDashboardState();\n\n const dvfData = useDvfs({onlyActive: true});\n const {dvfs, dvfConfigLink, reload: reloadDvf, state: stateDvf} = dvfData;\n const {changeZoom} = useDQDashboardStateActions();\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const dataLevel = useContext(DataLevelContext);\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType?.fieldName;\n const {\n data: dataMlDq,\n state: stateMlDq,\n reload: reloadMlDq\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n const {data: dataToday, state: stateToday, reload: reloadToday} = useChartData(getValidationChartData(dvfs));\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getViolatedValidationData),\n enrichTimeSeriesDataWithTodayData(period, dataToday, DQMetric.DATA_VALIDATION),\n filterValidDVFs(dvfs)\n )(dataMlDq),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataMlDq, dataToday]\n );\n\n useReloadFacet({\n state: stateMlDq,\n reload: reloadMlDq,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n\n const dataKeys = pipe(\n reduce((acc: string[], data: LineChartData) => acc.concat(keys(data)), []),\n uniq,\n without(['label', 'group'])\n )(chartData);\n\n const hasData = dataKeys.toString() !== NO_DATA_FIELD;\n\n const {type: noDataType, chartState} = getNoDataStatus(getChartState([stateMlDq, stateToday]), hasData);\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Profiles with invalid data over time')}\n data={[{value: i18n.text('Shows the number of profiles that violate active validation functions')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const reloadFunction = useCallback(() => {\n stateDvf === RequestStates.ERROR && reloadDvf();\n stateMlDq === RequestStates.ERROR && reloadMlDq();\n stateToday === RequestStates.ERROR && reloadToday();\n }, [stateDvf, reloadDvf, stateMlDq, reloadMlDq, stateToday, reloadToday]);\n\n const titleChildren = <PeriodChip />;\n const loadingState =\n chartState === RequestStates.LOADING ? RequestStates.LOADING : getChartState([stateMlDq, stateToday]);\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && stateMlDq === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, showExportButton, stateMlDq]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n return noDataType === VVFNoDataChartType.DVF_NOT_SUPPORTED ||\n noDataType === VVFNoDataChartType.PERMISSION_DENIED ? (\n <VVFChartNoData\n config={config}\n chartType={noDataType}\n title={i18n.text(title)}\n infoTooltipTitle={infoTooltipTitle}\n titleChildren={titleChildren}\n dvfConfigLink={dvfConfigLink}\n dataLevel={dataLevel}\n />\n ) : (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={chartData} loadingState={loadingState} onRefresh={reloadFunction}>\n {({data, width, height}) => (\n <div>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <LineChart\n width={width}\n height={height}\n data={data}\n lineKeys={dataKeys}\n getTooltip={getTooltip(dvfs, dataKeys)}\n getColor={getDvfColor}\n yAxisLabel={i18n.text('No. of profiles')}\n isPercent={false}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </div>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default ViolatedValidationFuncTimeSeriesChart;\n","import React from 'react';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\n\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport ViolatedValidationFuncChartToday from './ViolatedValidationFuncChart';\nimport ViolatedValidationFuncTimeSeriesChart from './ViolatedValidationFuncTimeSeriesChart';\n\nconst ViolatedValidationFuncChart = (props: ViewProps) => {\n const {config} = props;\n const isTimeSeries = checkIsTimeSeries(config);\n return (\n <DQLayoutItemView config={config}>\n {isTimeSeries ? (\n <ViolatedValidationFuncTimeSeriesChart {...props} />\n ) : (\n <ViolatedValidationFuncChartToday {...props} />\n )}\n </DQLayoutItemView>\n );\n};\n\nexport default ViolatedValidationFuncChart;\n","import classnames from 'classnames';\nimport React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\n\nimport {isDateType, isSSNType} from '@reltio/mdm-sdk';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {convertDateLabelsInChartData} from '../../services/charts';\nimport {getFrequencyAnalysisSearchState, getFrequencyChartData, getRowsCounterLabel} from '../../services/tableCharts';\nimport {ViewProps} from '../../types/ViewProps';\n\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\n\nimport {useStyles} from './styles';\n\nconst FrequencyAnalysisChart = ({config}: ViewProps) => {\n const styles = useStyles();\n\n const {data: chartData, state, reload} = useChartData(getFrequencyChartData);\n const attributeType: string = useDQDashboardState().detailedAttributeType?.type;\n const preparedData = useMemo(\n () => (isDateType(attributeType) ? convertDateLabelsInChartData(chartData, attributeType) : chartData),\n [chartData]\n );\n const searchProfiles = useSearchRedirect(getFrequencyAnalysisSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Frequency analysis')}\n data={[{value: i18n.text('Shows the number of times each value occurs')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Value'),\n secondLabel: getRowsCounterLabel(chartData),\n width: 0.4,\n cellClassName: classnames({[styles.monoFontCell]: isSSNType(attributeType)})\n },\n {\n id: 'value',\n label: i18n.text('Count'),\n width: 0.6\n }\n ];\n\n return (\n <CustomTableWithBarsChart\n config={config}\n data={preparedData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n columnsOptions={columnsOptions}\n />\n );\n};\n\nexport default FrequencyAnalysisChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n labelWrapper: ({width}: {width: number}) => ({\n overflow: 'hidden',\n width: `${width}px`,\n marginTop: '-3px'\n }),\n xAxisLabel: {\n textAlign: 'center',\n whiteSpace: 'nowrap',\n fontSize: '12px',\n paddingTop: '3px',\n '&::first-letter': {textTransform: 'capitalize'},\n '&:after': {\n top: '0',\n right: '0',\n width: '10px',\n height: '100%',\n content: '\"\"',\n position: 'absolute',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n }\n }\n}));\n","import React from 'react';\nimport {ExpandedValueTooltip} from '@reltio/components';\nimport {ContentRenderer} from 'recharts';\nimport {TickProps} from '../../../../types/TickProps';\nimport {useStyles} from './styles';\n\nconst SPACE_BETWEEN_LABELS = 4;\n\ntype Props = {\n width: number;\n height: number;\n label: string;\n x: number;\n y: number;\n};\nexport const XAxisLabel = ({width, height, label, x, y}: Props) => {\n const styles = useStyles({width});\n\n const xCoord = x - width / 2;\n\n return (\n <foreignObject x={xCoord} y={y} width={width} height={height}>\n <div className={styles.labelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.xAxisLabel}>{label}</div>\n </ExpandedValueTooltip>\n </div>\n </foreignObject>\n );\n};\n\nexport const renderXAxis: ContentRenderer<TickProps> = (tickProps) => {\n const {x, y, width, height, payload, visibleTicksCount} = tickProps;\n const {value} = payload;\n const maxTickWidth = width / visibleTicksCount - SPACE_BETWEEN_LABELS;\n\n return <XAxisLabel width={maxTickWidth} height={height} label={value} x={x} y={y} />;\n};\n","import {BarProps, CartesianGridProps, XAxisProps, YAxisProps, LabelProps, BarChartProps} from 'recharts';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport {tickFormatter} from '../../../services/barCharts';\nimport {MIN_CHART_BAR_SIZE} from '../../../services/charts';\nimport {renderXAxis} from './XAxisLabel/XAxisLabel';\n\ntype BarChartSettings = {\n barChart: BarChartProps;\n bar: BarProps;\n xAxis: XAxisProps;\n yAxis: YAxisProps;\n cartesianGrid: CartesianGridProps;\n labelForX: LabelProps;\n labelForY: LabelProps;\n};\n\nconst getBarChartSettings = ({\n showCategories = false,\n interval,\n barCategoryGap,\n maxBarSize,\n yTickRenderer,\n tickCount\n}: BarChartOptions): BarChartSettings => {\n return {\n barChart: {\n barCategoryGap: barCategoryGap || '10%'\n },\n bar: {\n dataKey: 'value',\n fill: '#0072CE',\n minPointSize: MIN_CHART_BAR_SIZE,\n maxBarSize: maxBarSize || 50\n },\n xAxis: {\n tick: showCategories && renderXAxis,\n tickLine: false,\n interval: interval ? interval : 0,\n dataKey: 'label'\n },\n yAxis: {\n axisLine: false,\n tickLine: false,\n tick: yTickRenderer || {fill: '#000', fontSize: 12},\n width: 60,\n tickFormatter: tickFormatter,\n tickCount: tickCount || 5\n },\n cartesianGrid: {\n stroke: '#000',\n strokeOpacity: '0.05',\n vertical: false\n },\n labelForX: {\n position: 'insideBottom',\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)'\n },\n offset: showCategories ? 0 : 3\n },\n labelForY: {\n angle: 270,\n position: 'left',\n offset: -3,\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)'\n }\n }\n };\n};\n\nexport default getBarChartSettings;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React from 'react';\nimport {TooltipProps} from 'recharts';\nimport i18n from 'ui-i18n';\nimport ChartDataTooltip from '../../../../components/ChartDataTooltip/ChartDataTooltip';\nimport {useStyles} from './styles';\n\ntype Props = TooltipProps & {\n name?: string;\n};\n\nexport const BarTooltip = ({payload, active, name}: Props) => {\n const tooltipPayload = payload?.[0]?.payload;\n const value = tooltipPayload?.value;\n const tooltipLabel = tooltipPayload?.label;\n const propertiesName = name ? `${name}` : '';\n const styles = useStyles();\n return (\n active && (\n <div className={styles.tooltipWrapper}>\n <ChartDataTooltip\n data={[\n {label: propertiesName, value: tooltipLabel},\n {label: i18n.text('No of profiles'), value: i18n.number(value)}\n ]}\n />\n </div>\n )\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n chartInfoLabel: {\n fontSize: '13px',\n lineHeight: '15px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n chartInfoValue: {\n fontSize: '13px',\n lineHeight: '15px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n chartInfoWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\n margin: '0 12px 12px',\n padding: '9px 12px 8px'\n },\n chartInfoItem: {\n marginRight: '16px'\n },\n clickable: {\n cursor: 'pointer'\n },\n title: {\n marginRight: '50px',\n fontSize: '16px'\n },\n root: {\n padding: '0 0 0 16px',\n minHeight: 'auto',\n marginTop: '12px',\n marginBottom: '12px'\n }\n}));\n","import React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport {InfoPanelData} from '../../../types/InfoPanelData';\nimport {useStyles} from './styles';\n\ntype Props = {\n data: InfoPanelData[];\n};\n\nexport const InfoPanel = ({data}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.chartInfoWrapper}>\n {data.map(({label, value, localizedValue}) => (\n <div key={label} className={styles.chartInfoItem}>\n <span className={styles.chartInfoLabel}>{label}: </span>\n {value !== localizedValue ? (\n <Tooltip title={localizedValue}>\n <span className={styles.chartInfoValue}>{value}</span>\n </Tooltip>\n ) : (\n <span className={styles.chartInfoValue}>{value}</span>\n )}\n </div>\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport {Rectangle, RectangleProps} from 'recharts';\nimport {useStyles} from './styles';\n\ntype Props = RectangleProps & {\n isClickable: boolean;\n};\n\nconst CustomBackgroundOnHover = ({isClickable, ...rectangleProps}: Props) => {\n const styles = useStyles();\n const className = isClickable ? styles.clickable : undefined;\n return (\n <Rectangle {...rectangleProps} className={className} fill=\"#000\" opacity=\"0.1\" pointerEvents=\"visibleFill\" />\n );\n};\nexport default CustomBackgroundOnHover;\n","import React from 'react';\nimport {Rectangle, RectangleProps} from 'recharts';\n\ntype Props = RectangleProps & {\n value?: number;\n};\n\nconst CustomBar = (props: Props) => {\n const {value} = props;\n return value > 0 ? <Rectangle {...props} /> : null;\n};\nexport default CustomBar;\n","import React, {useMemo} from 'react';\nimport {has} from 'ramda';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport getBarChartSettings from './getBarChartSettings';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {InfoPanelData} from '../../../types/InfoPanelData';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport {hasTimeRange} from '../../../services/mlDq';\n\nimport {BarTooltip} from './BarTooltip/BarTooltip';\nimport {InfoPanel} from './InfoPanel';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport CustomBackgroundOnHover from './CustomBackgroundOnHover';\nimport CustomBar from './CustomBar';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n data: ChartData[];\n xAxisLabel: string;\n yAxisLabel: string;\n state: RequestStates;\n onRefresh: () => void;\n onItemClick?: (group: string) => void;\n infoPanelData?: InfoPanelData[];\n infoTooltipTitle?: React.ReactElement | string;\n barTooltipTitle?: string;\n options?: BarChartOptions;\n};\n\nconst CustomBarChart = ({\n data,\n config,\n xAxisLabel,\n yAxisLabel,\n barTooltipTitle,\n infoPanelData,\n infoTooltipTitle,\n onItemClick,\n options = {},\n state,\n onRefresh\n}: Props) => {\n const styles = useStyles();\n const {title} = config;\n const {cartesianGrid, bar, xAxis, yAxis, labelForX, labelForY, barChart} = getBarChartSettings(options);\n const onBarClick = onItemClick && (({activePayload}) => onItemClick(activePayload[0].payload.group));\n const clickable = onBarClick ? styles.clickable : undefined;\n const showInfoPanel = state === RequestStates.LOADED && infoPanelData.length > 0;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n const {period, exportLoadingIds} = useDQDashboardState();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n {has(exportLoadingId, exportLoadingIds) && (\n <div style={{position: 'relative'}}>\n <DashboardLinearLoader />\n </div>\n )}\n {showInfoPanel && <InfoPanel data={infoPanelData} />}\n <DQLayoutItemContent data={data} loadingState={state} onRefresh={onRefresh}>\n {({data, width = 0, height = 0}) => {\n return (\n <div>\n <BarChart width={width} height={height} data={data} onClick={onBarClick} {...barChart}>\n <CartesianGrid {...cartesianGrid} />\n <ChartTooltip\n content={<BarTooltip name={barTooltipTitle} />}\n cursor={<CustomBackgroundOnHover isClickable={!!onBarClick} />}\n />\n <Bar {...bar} shape={<CustomBar className={clickable} />} />\n <YAxis {...yAxis}>\n <Label {...labelForY} value={yAxisLabel} />\n </YAxis>\n <XAxis {...xAxis}>\n <Label {...labelForX} value={xAxisLabel} />\n </XAxis>\n </BarChart>\n </div>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default CustomBarChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getLengthChartData, getLengthStatisticsSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\nimport i18n from 'ui-i18n';\n\nconst LengthStatisticsChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getLengthChartData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getLengthStatisticsSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Length statistics')}\n data={[{value: i18n.text('Measures the string length of values')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Length of values')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Length')}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default LengthStatisticsChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useLabelStyles = makeStyles({\n icon: {\n width: '20px',\n height: '20px',\n borderRadius: '4px',\n fontSize: '14px',\n marginRight: '8px'\n },\n text: ({color}: {color: string}) => ({\n backgroundColor: color\n }),\n label: ({color}: {color: string}) => ({\n backgroundColor: color,\n flexShrink: 0,\n fontSize: '14px',\n height: '12px',\n margin: ' 0 8px 0 0',\n width: '12px'\n })\n});\n","import React from 'react';\n\nimport {getSourceColor} from '@reltio/mdm-sdk';\nimport {SourceIcon} from '@reltio/components';\n\nimport {TableChartData} from '../../types/TableChartData';\n\nimport {useLabelStyles} from './styles';\n\ntype Props = {\n chartData: TableChartData;\n variant?: string;\n};\n\nexport const INCLUDE_SOURCE_ICON = 'includeSourceIcon';\n\nconst SourceLabelRenderer = ({chartData, variant}: Props) => {\n const {group, label} = chartData;\n const styles = useLabelStyles({color: getSourceColor(group)});\n return (\n <>\n {variant === INCLUDE_SOURCE_ICON ? (\n <SourceIcon sourceType={group} className={styles.icon} classes={{textRoot: styles.text}} />\n ) : (\n <div className={styles.label} />\n )}\n {label}\n </>\n );\n};\n\nexport default SourceLabelRenderer;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport i18n from 'ui-i18n';\nimport {Metadata} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {getCrosswalkAnalysisData, getCrosswalkAnalysisSearchState} from '../../../services/barCharts';\nimport {valueComparator} from '../../../services/tableCharts';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport CustomTableWithBarsChart from '../CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport SourceLabelRenderer, {INCLUDE_SOURCE_ICON} from '../../../components/SourceLabelRenderer/SourceLabelRenderer';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst CrosswalkAnalysisChart = ({config}: ViewProps) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const {data, state, reload} = useChartData(getCrosswalkAnalysisData(metadata));\n const {chartData} = data;\n const searchProfiles = useSearchRedirect(getCrosswalkAnalysisSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Source system analysis')}\n data={[{value: i18n.text('Distribution of source systems contributing to profiles')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Source system'),\n secondLabel: `(${chartData.length})`,\n width: 0.4,\n sortable: true,\n labelRenderer: SourceLabelRenderer,\n variant: INCLUDE_SOURCE_ICON\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.6,\n sortable: true\n }\n ];\n return (\n <CustomTableWithBarsChart\n config={{...config}}\n data={chartData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n customComparator={valueComparator}\n columnsOptions={columnsOptions}\n />\n );\n};\nexport default CrosswalkAnalysisChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getValueDistributionData, getValueDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\n\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\n\nconst ValueDistributionChart = ({config}: ViewProps) => {\n const attributeType: string = useDQDashboardState().detailedAttributeType?.type;\n const {data, state, reload} = useChartData(getValueDistributionData(attributeType));\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getValueDistributionSearchState(attributeType));\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Value')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Value')}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default ValueDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getMonthDistributionData, getMonthDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst MonthDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getMonthDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getMonthDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Months of the year')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Months of the year')}\n options={{showCategories: true, barCategoryGap: '20%', interval: 'preserveStartEnd'}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default MonthDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getDayOfWeekDistributionData, getDayOfweekDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst DayOfWeekDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getDayOfWeekDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getDayOfweekDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Days of the week')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Days of the week')}\n options={{showCategories: true, barCategoryGap: '25%', interval: 'preserveStartEnd'}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default DayOfWeekDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getDayOfMonthDistributionData, getDayOfMonthDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst DayOfMonthDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getDayOfMonthDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getDayOfMonthDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Days of the month')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Days of the month')}\n options={{showCategories: true, interval: 1}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default DayOfMonthDistributionChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {getPatternAnalisysData, getPatternAnalysisSearchState} from '../../services/tableCharts';\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../types/ViewProps';\nimport ChartDataTooltip from '../../components/ChartDataTooltip/ChartDataTooltip';\nimport {getRowsCounterLabel} from '../../services/tableCharts';\nimport {useStyles} from './styles';\n\nconst PatternAnalysisChart = ({config}: ViewProps) => {\n const styles = useStyles();\n const {data: chartData, state, reload} = useChartData(getPatternAnalisysData);\n const searchProfiles = useSearchRedirect(getPatternAnalysisSearchState);\n const infoTooltipTitle = <ChartDataTooltip title={i18n.text('Pattern analysis')} data={[]} />;\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Value'),\n secondLabel: getRowsCounterLabel(chartData),\n width: 0.4,\n cellClassName: styles.monoFontCell\n },\n {\n id: 'value',\n label: i18n.text('Count'),\n width: 0.6\n }\n ];\n return (\n <CustomTableWithBarsChart\n config={config}\n data={chartData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n columnsOptions={columnsOptions}\n />\n );\n};\n\nexport default PatternAnalysisChart;\n","import {curry, keys, mergeAll, omit, pipe} from 'ramda';\nimport React from 'react';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport getBarChartSettings from './getBarChartSettings';\nimport {useStyles} from './styles';\n\ntype StackedBarChartData = {\n label: string;\n group: string;\n} & {[index: string]: number | string};\n\ntype Props = {\n data: StackedBarChartData[];\n xAxisLabel?: string;\n yAxisLabel?: string;\n onItemClick?: (key: string) => void;\n getTooltip?: (payload: {active: boolean}) => React.ReactNode;\n getBarOpacity?: (key: string) => number;\n getBarColor: (key: string) => string;\n onBarSelect?: (key: string) => (data: unknown) => void;\n showTopLabel?: boolean;\n width: number;\n height: number;\n options?: BarChartOptions;\n dataReltioId?: string;\n};\n\nconst StackedBarChart = ({\n xAxisLabel,\n yAxisLabel,\n data,\n getTooltip,\n getBarOpacity,\n onBarSelect,\n width,\n height,\n showTopLabel = false,\n options = {},\n onItemClick,\n getBarColor,\n dataReltioId\n}: Props) => {\n const styles = useStyles();\n const {cartesianGrid, xAxis, yAxis, labelForX, labelForY, barChart, bar} = getBarChartSettings(options);\n const onBarClick = curry((key, _) => onItemClick && onItemClick(key));\n const clickable = onItemClick ? styles.clickable : undefined;\n const getBars = (chartData: StackedBarChartData[]) => {\n const uniqueDataKeys = pipe(mergeAll, omit(['label', 'group']), keys)(chartData);\n const getBarLabel = curry((index: number, {x, y, width, value}) =>\n showTopLabel && index === uniqueDataKeys.length - 1 ? (\n <text x={x + width / 2} textAnchor=\"middle\" y={y - 5} fontSize=\"12px\">\n {formatNumberAsMetric(value, 999)}\n </text>\n ) : null\n );\n return uniqueDataKeys.map((key: string, index: number) => (\n <Bar\n stackId={'all'}\n dataKey={key}\n opacity={getBarOpacity ? getBarOpacity(key) : 1}\n fill={getBarColor(key)}\n onMouseOver={onBarSelect(key)}\n onMouseLeave={onBarSelect(null)}\n key={key}\n label={getBarLabel(index)}\n maxBarSize={bar.maxBarSize}\n onClick={onBarClick(key)}\n className={clickable}\n />\n ));\n };\n\n return (\n <div data-reltio-id={dataReltioId}>\n <BarChart width={width} height={height} data={data} {...barChart} margin={{top: 15}}>\n <CartesianGrid {...cartesianGrid} />\n <ChartTooltip content={getTooltip} cursor={null} />\n {getBars(data)}\n <YAxis {...yAxis}>\n <Label {...labelForY} value={yAxisLabel} />\n </YAxis>\n <XAxis {...xAxis}>\n <Label {...labelForX} value={xAxisLabel} />\n </XAxis>\n </BarChart>\n </div>\n );\n};\nexport default StackedBarChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n consolidationRateWrapper: {\n display: 'flex'\n },\n ratePercent: {\n fontWeight: 700,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n tableWithSelectedRow: {\n '& .Table__grid__cell_wrapper_EWDDh': {\n opacity: 0.12\n },\n '& .Table__grid__cell_wrapper_EWDDh.hoveredRow': {\n opacity: 1\n }\n },\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\n\nimport {DQChartsData, formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nexport const ConsolidationPercentage = ({data}: {data: DQChartsData}) => {\n const styles = useStyles();\n const {totalCrosswalks, totalEntities} = data.consolidationRate;\n const reltioCleanser = data.consolidationRate.totalCrosswalksBySource['ReltioCleanser'] || 0;\n const percent = ((1 - totalEntities / (totalCrosswalks - reltioCleanser)) * 100).toFixed(1);\n const formattedPercent = percent.split('.')[1] == '0' ? percent.split('.')[0] : i18n.number(Number(percent));\n\n return (\n <>\n <span className={styles.ratePercent}>{formattedPercent}% </span>\n <span>\n {`(${formatNumberAsMetric(totalCrosswalks - reltioCleanser, 999)} ${i18n.text(\n 'to'\n )} ${formatNumberAsMetric(totalEntities, 999)} ${i18n.text('profiles')})`}\n </span>\n </>\n );\n};\n","import React from 'react';\nimport {ContentRenderer} from 'recharts';\nimport {tickFormatter} from '../../../services/barCharts';\nimport {TickProps} from '../../../types/TickProps';\n\nexport const YAxisTickRenderer: ContentRenderer<TickProps> = (tickProps) => {\n const {\n x,\n y,\n payload: {value},\n index\n } = tickProps;\n if (index % 2 === 0)\n return (\n <text fill=\"#000\" x={x} y={y} textAnchor=\"middle\" fontSize=\"12px\">\n {tickFormatter(Number(value))}\n </text>\n );\n return null;\n};\n","import classnames from 'classnames';\nimport {isNil, pick, propEq} from 'ramda';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {getSourceColor, getSourceSystemLabel, Metadata} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../../contexts/ChartsDataProvider';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {\n getBarOpacity,\n getConsolidationRateChartData,\n getConsolidationRateSearchState,\n getConsolidationRateTableData\n} from '../../../services/barCharts';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport StackedBarChart from '../CustomBarChart/StackedBarChart';\nimport {ConsolidationPercentage} from './ConsolidationPercentage';\nimport ChartDataTooltip from '../../../components/ChartDataTooltip/ChartDataTooltip';\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport SourceLabelRenderer from '../../../components/SourceLabelRenderer/SourceLabelRenderer';\nimport ChartInfoPanel from '../../../components/ChartInfoPanel/ChartInfoPanel';\nimport {YAxisTickRenderer} from './YAxisTickRenderer';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\nconst STACKED_BAR_CHART_WIDTH = 256;\nconst CHART_INFO_PANEL_HEIGHT = 34;\n\nconst getBarColor = (key: string) => (key === 'Reltio profiles' ? '#0072CE' : getSourceColor(key));\nconst infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Consolidation rate')}\n data={[\n {\n value: i18n.text(\n 'Consolidation rate is the measurement of the total number source profiles versus the number of Reltio profiles after removing duplicates.'\n )\n },\n {value: i18n.text('Consolidation rate helps to understand the data reduction achieved by matching.')}\n ]}\n />\n);\n\nconst ConsolidationRateChart = ({config}: ViewProps) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n const {title} = config;\n const [selectedSource, setSelectedSource] = useState<{rowIndex: number; key: string}>();\n const {data: barChartData, state, reload} = useChartData<ChartData[]>(getConsolidationRateChartData);\n const {data: tableChartData} = useChartData<ChartData[]>(getConsolidationRateTableData(metadata));\n const {\n chartsData: {data: chartsData}\n } = useChartsDataContext();\n const searchProfiles = useSearchRedirect(getConsolidationRateSearchState);\n const sortedBarChartData = useMemo(() => {\n const sortedSourceData = pick(['group', 'label'], barChartData[0]);\n for (let key = tableChartData.length - 1; key >= 0; key--) {\n sortedSourceData[tableChartData[key].group] = barChartData[0][tableChartData[key].group];\n }\n return [sortedSourceData, barChartData[1]];\n }, [tableChartData, barChartData]);\n const getTooltip = useCallback(\n ({active}) => {\n if (!(selectedSource && active)) return '';\n let data = [];\n if (selectedSource?.key === 'Reltio profiles') {\n data = [\n {\n label: i18n.text('Reltio profiles'),\n value: i18n.number(chartsData.consolidationRate.totalEntities)\n }\n ];\n } else {\n data = [\n {\n label: i18n.text('Source system'),\n value: getSourceSystemLabel(metadata, selectedSource.key)\n },\n {\n label: i18n.text('Source profiles'),\n value: i18n.number(chartsData.consolidationRate.totalCrosswalksBySource[selectedSource.key])\n }\n ];\n }\n return (\n <div className={styles.tooltipWrapper}>\n <ChartDataTooltip data={data} />\n </div>\n );\n },\n [selectedSource, chartsData, metadata]\n );\n\n const barSelectHandler = useCallback(\n (key: string) => () => {\n if (key) {\n const rowIndex = tableChartData.findIndex(propEq('group', key));\n setSelectedSource({rowIndex, key});\n } else setSelectedSource(null);\n },\n [setSelectedSource, tableChartData]\n );\n\n const rowSelectHandler = useCallback(\n (rowIndex: number) => {\n if (!isNil(rowIndex)) {\n const key = tableChartData[rowIndex]?.group;\n setSelectedSource({rowIndex, key});\n } else setSelectedSource(null);\n },\n [setSelectedSource, tableChartData]\n );\n\n const rowClickHandler = (rowIndex: number) => {\n if (!isNil(rowIndex)) {\n const key = tableChartData[rowIndex]?.group;\n searchProfiles(key);\n }\n };\n\n const columnsOptions: ColumnsOptions[] = [\n {\n id: 'label',\n label: i18n.text('Source system'),\n secondLabel: `(${i18n.number(tableChartData.length)})`,\n resizable: false,\n labelRenderer: SourceLabelRenderer,\n width: 0.3\n },\n {\n id: 'value',\n resizable: false,\n label: i18n.text('Source profiles'),\n width: 0.7\n }\n ];\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && tableChartData.length > 0,\n [state, tableChartData]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={tableChartData} loadingState={state} onRefresh={reload}>\n {({height = 0, width = 0}) => {\n const chartHeight = chartsData.consolidationRate ? height - CHART_INFO_PANEL_HEIGHT : height;\n return (\n <>\n {chartsData.consolidationRate && (\n <ChartInfoPanel\n label={`${i18n.text('Consolidation rate')}:`}\n info={<ConsolidationPercentage data={chartsData} />}\n />\n )}\n <div\n className={classnames(styles.consolidationRateWrapper, {\n [styles.tableWithSelectedRow]:\n !isNil(selectedSource?.rowIndex) && selectedSource?.rowIndex !== -1\n })}\n >\n <StackedBarChart\n yAxisLabel={i18n.text('No. of profiles')}\n data={sortedBarChartData}\n getTooltip={getTooltip}\n getBarOpacity={getBarOpacity(selectedSource)}\n getBarColor={getBarColor}\n onBarSelect={barSelectHandler}\n width={STACKED_BAR_CHART_WIDTH}\n height={chartHeight}\n options={{\n showCategories: true,\n maxBarSize: 40,\n yTickRenderer: YAxisTickRenderer,\n tickCount: 8\n }}\n onItemClick={searchProfiles}\n dataReltioId=\"reltio-dq-dashboard-consolidation-rate-barchart\"\n showTopLabel\n />\n <TableWithBars\n {...{\n data: tableChartData,\n width: width - STACKED_BAR_CHART_WIDTH,\n height: chartHeight,\n columnsOptions: columnsOptions,\n sorting: {\n field: 'value',\n order: 'desc'\n },\n onRowClick: rowClickHandler,\n onRowHover: rowSelectHandler,\n hoverRowIndex: selectedSource?.rowIndex,\n hoverStateEnabled: true,\n dataReltioId: 'reltio-dq-dashboard-consolidation-rate-tablechart'\n }}\n />\n </div>\n </>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\nexport default ConsolidationRateChart;\n","import {any, map, pipe} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n FilterOptions,\n getChartItemColor,\n isRDMLookupAttrType,\n Metadata,\n TEntityType,\n getAttributeTypesTree\n} from '@reltio/mdm-sdk';\n\nimport {getSearchState, localizeChartValues} from './charts';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\n\nexport enum RDMTranscodeStatus {\n RESOLVED = 'resolved',\n UNRESOLVED = 'unresolved'\n}\n\nconst RDMChartColors = {\n [RDMTranscodeStatus.RESOLVED]: '#7F22FD',\n [RDMTranscodeStatus.UNRESOLVED]: '#F085F2'\n};\n\nexport const getRDMChartColors: (chartsData: ChartData[]) => string[] = map(\n ({group}) => RDMChartColors[group] || getChartItemColor(group)\n);\n\nexport const formatRDMTranscodeData = ([resolveCount, unresolveCount]: Record<'total', number>[]): ChartData[] => {\n return localizeChartValues([\n {\n value: resolveCount.total,\n label: i18n.text('Mapped values'),\n group: RDMTranscodeStatus.RESOLVED,\n dataReltioId: 'reltio-dq-dashboard-transcode-mapped'\n },\n {\n value: unresolveCount.total,\n label: i18n.text('Unmapped values'),\n group: RDMTranscodeStatus.UNRESOLVED,\n dataReltioId: 'reltio-dq-dashboard-transcode-unmapped'\n }\n ]);\n};\n\nexport const getRDMTranscodeFilter = (rdmTranscodeStatus: RDMTranscodeStatus) => [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'rdmLookups.resolved',\n values: [rdmTranscodeStatus !== RDMTranscodeStatus.RESOLVED]\n }\n];\n\nexport const getRDMTranscodeSearchState = getSearchState(() => getRDMTranscodeFilter);\n\nexport const checkEntityTypeHasRDMLookup = (metadata: Metadata, entityType: TEntityType) => {\n const isAttrTreeHasRDMLookup = (item: DetailedAttributeType) => {\n return isRDMLookupAttrType(item) || item.children?.some(isAttrTreeHasRDMLookup);\n };\n return pipe(getAttributeTypesTree, any(isAttrTreeHasRDMLookup))(metadata, entityType);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n legendWrapper: {\n marginTop: '-13px'\n },\n bar: {\n height: '16px'\n }\n});\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\n\nimport {useRDMChartDataRequest} from '../../../hooks/useRDMChartDataRequest';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {getRDMTranscodeSearchState} from '../../../services/rdmTranscode';\nimport {getRDMChartColors} from '../../../services/rdmTranscode';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nimport {useStyles} from './styles';\n\nconst RDMTranscodeChart = ({config}: ViewProps) => {\n const searchProfiles = useSearchRedirect(getRDMTranscodeSearchState);\n const {data, state, reload} = useRDMChartDataRequest();\n const colors = getRDMChartColors(data);\n const styles = useStyles();\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('RDM value mapping status')}\n data={[\n {\n value: i18n.text(\n 'The relative number and percentage of reference data values that have been mapped to canonical values and transcoded for use by Reltio Reference Data Management.'\n )\n },\n {\n label: `${i18n.text('Mapped values')}:`,\n value: i18n.text('Values that have been mapped and transcoded')\n },\n {\n label: `${i18n.text('Unmapped values')}:`,\n value: i18n.text('Values that have not been mapped and transcoded')\n }\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n return (\n <StackedHorizontalBarChart\n data={data}\n colors={colors}\n onItemClick={searchProfiles}\n classes={{bar: styles.bar, legendWrapper: styles.legendWrapper}}\n config={config}\n onRefresh={reload}\n state={state}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default RDMTranscodeChart;\n","import {useCallback, useEffect, useState} from 'react';\n\nimport {ChartData, RequestStates, useSafePromise} from '@reltio/components';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {formatRDMTranscodeData} from '../services/rdmTranscode';\n\nexport const useRDMChartDataRequest = () => {\n const {entityType} = useDQDashboardState();\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [data, setData] = useState<ChartData[]>([]);\n const safePromise = useSafePromise();\n\n const getRDMData = useCallback(\n (isRDMLoolupResolve: boolean) => {\n return getTotals([\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'type',\n values: [entityType.uri]\n },\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'rdmLookups.resolved',\n values: [isRDMLoolupResolve]\n }\n ]);\n },\n [entityType]\n );\n\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setData([]);\n };\n\n const onRequestFinished = (data: ChartData[]) => {\n setData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const loadRDMChartData = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n setData([]);\n return safePromise(Promise.all([getRDMData(true), getRDMData(false)]))\n .then(formatRDMTranscodeData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getRDMData]);\n\n useEffect(() => {\n loadRDMChartData();\n }, [loadRDMChartData]);\n\n return {data: data, state: requestState, reload: loadRDMChartData};\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewType} from '../constants/ViewType';\n\nimport FillRateChart from './charts/FillRateChart';\nimport UniquenessAnalysisChart from './charts/UniquenessAnalysisChart';\nimport Summary from './Summary/Summary';\nimport DQDashboardErrorView from './DQDashboardErrorView/DQDashboardErrorView';\nimport ViolatedValidationFuncChart from './charts/ViolatedValidationFuncChart';\nimport FrequencyAnalysisChart from './charts/FrequencyAnalysisChart';\nimport LengthStatisticsChart from './charts/LengthStatisticsChart';\nimport CrosswalkAnalysisChart from './charts/CrosswalkAnalysisChart/CrosswalkAnalysisChart';\nimport ValueDistributionChart from './charts/ValueDistributionChart';\nimport MonthDistributionChart from './charts/MonthDistributionChart';\nimport DayOfWeekDistributionChart from './charts/DayOfWeekDistributionChart';\nimport DayOfMonthDistributionChart from './charts/DayOfMonthDistributionChart';\nimport PatternAnalysisChart from './charts/PatternAnalysisChart';\nimport ConsolidationRateChart from './charts/ConsolidationRateChart/ConsolidationRateChart';\nimport RDMTranscodeChart from './charts/RDMTranscodeChart/RDMTranscodeChart';\n\nclass ViewsFactory {\n static getComponent = ({type, config, isFullscreen, onToggleFullscreen}) => {\n const props = {\n config,\n isFullscreen,\n onToggleFullscreen\n };\n switch (type) {\n case ViewType.FILL_RATE:\n return <FillRateChart {...props} />;\n case ViewType.UNIQUENESS:\n return <UniquenessAnalysisChart {...props} />;\n case ViewType.SUMMARY:\n return <Summary {...props} />;\n case ViewType.DATA_VALIDATION:\n return <ViolatedValidationFuncChart {...props} />;\n case ViewType.FREQUENCY:\n return <FrequencyAnalysisChart {...props} />;\n case ViewType.LENGTH_STATISTIC:\n return <LengthStatisticsChart {...props} />;\n case ViewType.CROSSWALK_ANALYSIS:\n return <CrosswalkAnalysisChart {...props} />;\n case ViewType.VALUE_DISTRIBUTION:\n return <ValueDistributionChart {...props} />;\n case ViewType.MONTH_DISTRIBUTION:\n return <MonthDistributionChart {...props} />;\n case ViewType.DAY_OF_WEEK_DISTRIBUTION:\n return <DayOfWeekDistributionChart {...props} />;\n case ViewType.DAY_OF_MONTH_DISTRIBUTION:\n return <DayOfMonthDistributionChart {...props} />;\n case ViewType.PATTERN:\n return <PatternAnalysisChart {...props} />;\n case ViewType.CONSOLIDATION_RATE:\n return <ConsolidationRateChart {...props} />;\n case ViewType.RDM_TRANSCODE:\n return <RDMTranscodeChart {...props} />;\n default:\n return (\n <DQDashboardErrorView\n {...props}\n errorData={{message: i18n.text(\"Chart isn't supported for this data type\")}}\n />\n );\n }\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport ViewsFactory from '../../views/ViewsFactory';\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {ReactGridLayoutItem} from '@reltio/components';\n\ntype Props = {\n className?: string;\n isFullscreen: boolean;\n style: React.CSSProperties;\n views: DQDashboardView[];\n onToggleFullscreen: (id: string) => void;\n layoutItemConfig: ReactGridLayoutItem;\n children: React.ReactNode;\n};\n\nexport const DQDashboardLayoutItem = ({\n layoutItemConfig,\n views,\n onToggleFullscreen,\n isFullscreen,\n className,\n children: ResizeComponent,\n style\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n\n if (!config) {\n return null;\n }\n const {type} = config;\n\n return (\n <div style={style} className={className}>\n {ViewsFactory.getComponent({\n type,\n config,\n onToggleFullscreen,\n isFullscreen\n })}\n {ResizeComponent}\n </div>\n );\n};\n","import {assoc, map} from 'ramda';\nimport React, {memo, useMemo} from 'react';\n\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReltioGridLayout, ReltioGridLayoutOptions} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DQDashboardLayoutItem} from '../DQDashboardLayoutItem/DQDashboardLayoutItem';\n\nexport type DQDashboardLayoutProps = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n layoutOptions?: ReltioGridLayoutOptions;\n};\n\nconst reltioGridLayoutToStaticLayout = map(assoc('isStatic', true));\nconst DEFAULT_LAYOUT_OPTIONS = {\n cols: 6,\n rowHeight: 10,\n margin: [12, 12] as [number, number]\n};\n\nconst DQDashboardLayout = ({views, layout, layoutOptions = DEFAULT_LAYOUT_OPTIONS}: DQDashboardLayoutProps) => {\n const staticLayout = useMemo(() => reltioGridLayoutToStaticLayout(layout), [layout]);\n return (\n <ReltioGridLayout\n LayoutItem={DQDashboardLayoutItem}\n views={views}\n layout={staticLayout}\n layoutOptions={layoutOptions}\n />\n );\n};\n\nexport default memo(DQDashboardLayout);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n warning: {\n fontSize: '13px',\n color: 'rgba(0, 0, 0, 0.54)',\n height: '47px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n margin: '14px 11px 0 12px',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '18px',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n errorIcon: {\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '14px'\n }\n});\n","import React from 'react';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport {useStyles} from './styles';\n\nconst Warning = ({text}) => {\n const styles = useStyles();\n return (\n text && (\n <div className={styles.warning} data-reltio-id=\"dq-warning\">\n <ErrorIcon className={styles.errorIcon} />\n {text}\n </div>\n )\n );\n};\n\nexport default Warning;\n","import {CSSProperties} from 'react';\nimport {makeStyles} from '@mui/styles';\n\nconst scrollTopShadow: CSSProperties = {\n position: 'absolute',\n content: '\"\"',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1\n};\n\nexport const useStyles = makeStyles(() => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex',\n flexDirection: 'column',\n background: '#EEEEEE'\n },\n content: {\n height: 'calc(100% - 56px)',\n position: 'relative'\n },\n attributeLevelWrapper: {\n verticalAlign: 'top',\n width: 'auto',\n height: '100%',\n flexGrow: 1,\n position: 'relative',\n marginTop: '-12px',\n '&:before': {\n ...scrollTopShadow,\n top: '8px',\n height: '4px',\n background: 'linear-gradient(180deg, #EEEEEE 0%, rgba(238, 238, 238, 0) 100%)',\n zIndex: 1\n },\n '&:after': {\n ...scrollTopShadow,\n height: '8px',\n background: '#EEEEEE'\n }\n },\n navigationWrapper: {\n display: 'flex',\n padding: '18px 14px 18px 18px',\n alignItems: 'center',\n gap: '16px'\n },\n headerRightSide: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row-reverse',\n alignItems: 'center'\n },\n periodSelector: {\n position: 'relative',\n margin: '0 8px 0 16px',\n height: '30px',\n borderRadius: '6px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n flexBasis: '196px',\n overflow: 'hidden'\n },\n paper: {\n boxShadow:\n '0px 12px 17px 2px rgba(0, 0, 102, 0.06), 0px 5px 32px 4px rgba(0, 0, 102, 0.06), 0px 7px 8px -4px rgba(0, 0, 204, 0.1)',\n '& ul>div': {\n minWidth: '300px'\n }\n },\n input: {\n fontSize: '13px',\n height: '100%',\n padding: '1px 0 0 16px'\n },\n inputRoot: {\n backgroundColor: 'transparent',\n paddingRight: 4,\n height: '100%'\n },\n dropdownIndicator: {\n width: '18px',\n height: '18px',\n '& svg': {\n width: '18px',\n height: '18px'\n }\n },\n layoutRoot: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n}));\n","import React, {useEffect, useMemo} from 'react';\nimport {equals, pipe, reject} from 'ramda';\n\nimport {DQDataLevel, DQMetric, ReltioGridLayoutItem, TEntityType} from '@reltio/mdm-sdk';\nimport i18n from 'ui-i18n';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useReloadFacet} from '../../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {getLayoutByAttributeType, getMetricsFromViews, getAttributeLevelViews} from '../../services/charts';\nimport {isReferenceChild} from '../../services/attributeDetails';\nimport {useChartsDataRequest} from '../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../DQDashboardLayout/DQDashboardLayout';\nimport Warning from '../Warning/Warning';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n entityType?: TEntityType;\n};\n\nconst AttributeLevelLayout = ({config, entityType}: Props) => {\n const styles = useStyles();\n const {detailedAttributeType, searchByOv} = useDQDashboardState();\n const {hasRestrictions, isTimeSeriesAvailable} = usePermissionsContext();\n const customAttributeLayouts = config.layoutsByDataLevel?.[DQDataLevel.ATTRIBUTE_TYPE];\n const layout = useMemo(\n (): ReltioGridLayoutItem[] =>\n getLayoutByAttributeType(\n customAttributeLayouts,\n detailedAttributeType?.type,\n isTimeSeriesAvailable && !searchByOv\n ),\n [detailedAttributeType?.type, customAttributeLayouts, searchByOv]\n );\n\n const views = useMemo(\n () => getAttributeLevelViews(config.viewsByDataLevel, detailedAttributeType?.type, layout),\n [config.viewsByDataLevel, detailedAttributeType?.type, layout]\n );\n\n const attributeLevelMetrics = useMemo(\n () =>\n pipe(getMetricsFromViews, (metrics: DQMetric[]) =>\n isReferenceChild(detailedAttributeType) ? reject(equals(DQMetric.DATA_VALIDATION))(metrics) : metrics\n )(views),\n [views, detailedAttributeType]\n );\n\n const chartsData = useChartsDataRequest({\n entityType,\n detailedAttributeType,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: attributeLevelMetrics\n });\n const {changeChartsData} = useChartsDataContext();\n useEffect(() => changeChartsData(chartsData), [chartsData]);\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n return (\n <DataLevelContext.Provider value={DQDataLevel.ATTRIBUTE_TYPE}>\n <div className={styles.layoutRoot}>\n {hasRestrictions && (\n <Warning\n text={i18n.text(\n 'Not seeing the data you expected for this attribute? Contact your tenant admin to verify permissions.'\n )}\n />\n )}\n <DQDashboardLayout views={views} layout={layout} />\n </div>\n </DataLevelContext.Provider>\n );\n};\n\nexport default AttributeLevelLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n breadcrumb: {\n fontSize: '16px',\n color: theme.palette.text.primary\n },\n active: {\n color: 'rgba(0, 0, 102, 1)'\n },\n clickable: {\n cursor: 'pointer'\n }\n}));\n","import React from 'react';\nimport Breadcrumbs from '@mui/material/Breadcrumbs';\nimport classnames from 'classnames';\nimport NavigateNextIcon from '@mui/icons-material/NavigateNext';\nimport Typography from '@mui/material/Typography';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dataLevel: DQDataLevel;\n onChange: (dataLevel: DQDataLevel) => void;\n};\nconst DataLevelBreadcrumbs = ({dataLevel, onChange}: Props) => {\n const styles = useStyles();\n const {detailedAttributeType} = useDQDashboardState();\n const {setDetailedAttributeType} = useDQDashboardStateActions();\n const handleChangeDataLevel = (dataLevel: DQDataLevel) => () => {\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n setDetailedAttributeType(null);\n }\n onChange(dataLevel);\n };\n\n return (\n <Breadcrumbs separator={<NavigateNextIcon fontSize=\"small\" />} aria-label=\"breadcrumb\">\n {[\n <Typography\n key={DQDataLevel.ENTITY_TYPE}\n className={classnames(styles.breadcrumb, {\n [styles.active]: dataLevel === DQDataLevel.ENTITY_TYPE,\n [styles.clickable]: dataLevel === DQDataLevel.ATTRIBUTE_TYPE\n })}\n onClick={handleChangeDataLevel(DQDataLevel.ENTITY_TYPE)}\n data-reltio-id=\"reltio-dq-dashboard-breadcrumb-entity-level\"\n >\n {i18n.text('Entity overview')}\n </Typography>\n ].concat(\n dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? (\n <Typography\n key={DQDataLevel.ATTRIBUTE_TYPE}\n className={classnames(styles.breadcrumb, styles.active)}\n data-reltio-id=\"reltio-dq-dashboard-breadcrumb-attribute-level\"\n >\n {detailedAttributeType?.label}\n </Typography>\n ) : (\n []\n )\n )}\n </Breadcrumbs>\n );\n};\n\nexport default DataLevelBreadcrumbs;\n","import {find, map, pipe, pluck, propOr, propEq, sum, without} from 'ramda';\n\nexport type PageSettings = {\n index: number;\n width?: number;\n}[];\n\nexport const calculatePagePartsWidth = ({pages, width: allWidth}: {pages: PageSettings[]; width: number}) => {\n return pages.reduce((acc: PageSettings[], pagesettings: PageSettings) => {\n const fixedWidth = pagesettings.reduce((width, pagePart) => {\n return width + (pagePart?.width || 0);\n }, 0);\n\n acc.push(\n pagesettings.map(({width: partWidth, index}) =>\n partWidth\n ? {\n index,\n width: partWidth\n }\n : {\n index,\n width: allWidth - fixedWidth\n }\n )\n );\n return acc;\n }, []);\n};\n\nconst getPagePartWidth = (pagePartIndex: number) => pipe(find(propEq('index', pagePartIndex)), propOr(0, 'width'));\n\nexport const getPageIndexes = pluck('index');\n\nexport const getPagePartStyleWidth = ({\n pagesSettings,\n page,\n pagePartIndex\n}: {\n pagePartIndex: number;\n page: number;\n pagesSettings: PageSettings[];\n}) => {\n const pageIndexes = getPageIndexes(pagesSettings[page]);\n const minCurrentIndex = Math.min(...pageIndexes);\n const maxCurrentIndex = Math.max(...pageIndexes);\n\n if (pagePartIndex < minCurrentIndex || pagePartIndex > maxCurrentIndex) {\n return pipe(\n find((pageSettings, indexPage) => indexPage !== page),\n getPagePartWidth(pagePartIndex)\n )(pagesSettings);\n } else return getPagePartWidth(pagePartIndex)(pagesSettings[page]);\n};\n\nexport const getLeftPageOffset = ({page, pagesSettings}: {page: number; pagesSettings: PageSettings[]}) => {\n const pageIndexes = getPageIndexes(pagesSettings[page]);\n const prevPageIndexes = page === 0 ? [] : getPageIndexes(pagesSettings[page - 1]);\n const leftPagesIndexes = without(pageIndexes, prevPageIndexes);\n\n return page === 0\n ? 0\n : -pipe(\n map((pagePartIndex) => getPagePartWidth(pagePartIndex)(pagesSettings[page - 1])),\n sum\n )(leftPagesIndexes);\n};\n","import {makeStyles} from '@mui/styles';\n\ntype StyleProps = {\n transitionTime: number;\n pagesCount: number;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({transitionTime}: StyleProps) => ({\n transition: `left ${transitionTime}s ease 0s`,\n height: '100%',\n width: '100%',\n position: 'absolute'\n }),\n pagesWrapper: ({pagesCount}: StyleProps) => ({\n display: 'flex',\n height: '100%',\n width: `${100 * pagesCount}%`\n }),\n page: {\n display: 'flex'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {\n PageSettings,\n calculatePagePartsWidth,\n getPagePartStyleWidth,\n getLeftPageOffset,\n getPageIndexes\n} from './helpers';\n\nimport {useStyles} from './styles';\n\nconst TRANSITION_TIMEOUT_MS = 300;\n\nexport type ContentSliderProps = {\n page: number;\n pages: PageSettings[];\n children?: React.ReactNodeArray;\n startSliding?: () => void;\n endSliding?: () => void;\n};\n\nconst ContentSlider = ({page, children, pages, startSliding, endSliding}: ContentSliderProps) => {\n const styles = useStyles({\n transitionTime: TRANSITION_TIMEOUT_MS / 1000,\n pagesCount: pages.length\n });\n\n const [savedPage, setSavedPage] = useState(0);\n useEffect(() => {\n startSliding && startSliding();\n setTimeout(() => {\n setSavedPage(page);\n endSliding && endSliding();\n }, TRANSITION_TIMEOUT_MS);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [page]);\n\n const currentPageIndexes = getPageIndexes(pages[page]);\n\n return (\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth>\n {({width = 250}: {width: number}) => {\n const pagesSettings = calculatePagePartsWidth({pages, width});\n const left = getLeftPageOffset({page, pagesSettings});\n\n return (\n <div className={styles.root} style={{left}}>\n <div className={styles.pagesWrapper}>\n {children.map((component, index) => {\n const showComponent = page !== savedPage || currentPageIndexes.includes(index);\n const styleWidth = getPagePartStyleWidth({\n pagesSettings,\n page: page,\n pagePartIndex: index\n });\n\n return (\n <section className={styles.page} style={{width: styleWidth}} key={index}>\n {showComponent && component}\n </section>\n );\n })}\n </div>\n </div>\n );\n }}\n </ReactResizeDetector>\n );\n};\n\nexport default ContentSlider;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n height: '100%',\n verticalAlign: 'top',\n position: 'relative',\n boxSizing: 'border-box'\n },\n entityLevelBar: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: '16px',\n width: '28px',\n background: 'linear-gradient(0deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)), #FFFFFF',\n boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.14), 0px 2px 1px rgba(0, 0, 0, 0.12), 0px 1px 3px rgba(0, 0, 0, 0.2)',\n color: theme.palette.text.secondary,\n fontWeight: 500,\n fontSize: '14px',\n writingMode: 'vertical-rl',\n textTransform: 'uppercase',\n cursor: 'pointer',\n padding: '52px 0',\n marginBottom: '8px',\n lineHeight: '28px'\n },\n expandButton: {\n position: 'absolute',\n top: '15px',\n left: '6px',\n writingMode: 'initial',\n textTransform: 'none',\n maxWidth: '24px',\n height: '24px',\n borderRadius: '12px',\n background: '#fff',\n boxShadow: '0px 2px 2px rgba(0, 0, 0, 0.14), 0px 3px 1px rgba(0, 0, 0, 0.12), 0px 1px 5px rgba(0, 0, 0, 0.2)',\n transition: 'max-width 0.3s linear',\n zIndex: 2,\n overflow: 'hidden',\n display: 'flex',\n lineHeight: '28px',\n '&:hover': {\n maxWidth: '500px'\n }\n },\n expandButtonText: {\n paddingRight: '8px',\n fontSize: '12px',\n lineHeight: '24px',\n whiteSpace: 'nowrap'\n }\n}));\n","import React from 'react';\nimport RightArrowIcon from '@mui/icons-material/ChevronRight';\n\nimport i18n from 'ui-i18n';\nimport {getLabel, TEntityType} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n showEntityLevel: () => void;\n entityType: TEntityType;\n};\n\nconst DataLevelSwitcher = ({showEntityLevel, entityType}: Props) => {\n const styles = useStyles();\n\n const expandButtonTitle = `${i18n.text('Entity')}: ${getLabel(entityType.label)} ${i18n.text('overview')}`;\n return (\n <div className={styles.root} onClick={showEntityLevel}>\n <div className={styles.entityLevelBar} data-reltio-id=\"reltio-dq-dashboard-entity-level-bar-button\">\n <div className={styles.expandButton}>\n <RightArrowIcon />\n <span className={styles.expandButtonText}>{expandButtonTitle}</span>\n </div>\n {i18n.text('Entity')}\n </div>\n </div>\n );\n};\n\nexport default DataLevelSwitcher;\n","import {useState, useEffect, useMemo, useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport {evolve} from 'ramda';\nimport {TEntityType, Metadata, getEntityTypeMatchAttributes} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {getAttrTypeDetails} from '../services/attributeDetails';\nimport {AttributeItemType, DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {collectFilteredAttributeItems} from '../services/attributeDetails';\nimport {DVFContext} from '../contexts/DVFContext';\n\nexport const useAttrTypeDetails = (entityType: TEntityType, filterText: string) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attrTypeItems = useMemo(\n () => collectFilteredAttributeItems(filterText)(metadata, entityType),\n [metadata, entityType, filterText]\n );\n const [itemsWithDetails, setItemsWithDetails] = useState<AttributeItemType[]>([]);\n\n const entityTypeUri = entityType.uri;\n const matchAttributes = useMemo(\n () => getEntityTypeMatchAttributes(metadata, entityTypeUri),\n [metadata, entityTypeUri]\n );\n const dvf = useContext(DVFContext)?.dvfs?.data;\n useEffect(() => {\n setItemsWithDetails([]);\n dvf &&\n setItemsWithDetails(\n attrTypeItems.map(\n evolve({\n attributeItem: (attrTypeItem: DetailedAttributeType) => ({\n ...attrTypeItem,\n details: getAttrTypeDetails({attrTypeItem, dvf, matchAttributes}),\n ...(attrTypeItem.children && {\n children: attrTypeItem.children.map((child) => {\n child.details = getAttrTypeDetails({attrTypeItem: child, dvf, matchAttributes});\n child.details.reference = attrTypeItem.isAttributeReference;\n return child;\n })\n })\n })\n })\n )\n );\n }, [attrTypeItems, matchAttributes, dvf]);\n\n return itemsWithDetails;\n};\n","import {isComplexAttribute, isImage} from '@reltio/mdm-sdk';\nimport {\n __,\n assoc,\n both,\n curry,\n either,\n filter,\n find,\n findIndex,\n head,\n identity,\n includes,\n map,\n not,\n pipe,\n pluck,\n prop,\n propEq,\n propOr\n} from 'ramda';\nimport {ChartData} from '@reltio/components';\nimport {DetailedAttributeType, AttributeItemType, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {\n filterAttributeByNotEmpty,\n filterAttributeByDetails,\n filterAttributeTreeByDetails\n} from '../../services/attributeFilters';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\nimport {getDetailLabel} from '../../services/attributeDetails';\nimport i18n from 'ui-i18n';\n\nconst getAttrTypeFromItem = propOr({}, 'attributeItem');\ntype GetFirstSimpleDetailedAttrTypeFn = (items: AttributeItemType[]) => DetailedAttributeType;\nexport const getFirstSimpleDetailedAttrType: GetFirstSimpleDetailedAttrTypeFn = pipe(\n find(pipe(getAttrTypeFromItem, either(isComplexAttribute, isImage), not)),\n getAttrTypeFromItem\n);\n\nconst filterDetailedAttrTypeByFieldName = (fieldName: string) =>\n pipe(getAttrTypeFromItem, propEq('fieldName', fieldName));\n\ntype GetDetailedAttrTypeByFieldNameFn = (items: AttributeItemType[], uri: string) => DetailedAttributeType;\nexport const getDetailedAttrTypeByFieldName: GetDetailedAttrTypeByFieldNameFn = (items, fieldName) =>\n pipe(find(filterDetailedAttrTypeByFieldName(fieldName)), propOr(null, 'attributeItem'))(items);\n\nexport const getIndexByFieldName = (items: AttributeItemType[], fieldName: string): number =>\n findIndex(filterDetailedAttrTypeByFieldName(fieldName))(items);\n\nexport const getFillRateByAttributeType = (\n fillRates: Record<string, ChartData[]>,\n attributeType: DetailedAttributeType\n) => fillRates[attributeType.fieldName];\n\nexport const rejectCollapsedItemsChildren = (\n items: AttributeItemType[],\n collapsedFieldNames: string[]\n): AttributeItemType[] =>\n items.filter(\n ({attributeItem}) =>\n !collapsedFieldNames.some(\n (collapsedFieldName) =>\n attributeItem.fieldName.startsWith(collapsedFieldName) &&\n attributeItem.fieldName !== collapsedFieldName\n )\n );\n\nconst getFilterOptionsByGroup = (group: string) => filter(propEq('group', group));\n\nconst getDetailsOptionCount = (items: AttributeItemType[], option: FilterOption) =>\n items.filter((item) => filterAttributeByDetails([option], item.attributeItem)).length;\n\nexport enum EmptinessFilterValue {\n SHOW_EMPTY = 'showEmpty'\n}\n\nexport const noDataFilterOptions = [\n {\n label: i18n.text('Show attributes with no data'),\n value: EmptinessFilterValue.SHOW_EMPTY,\n group: 'emptiness'\n }\n];\n\nexport const getNoDataOptions = (): FilterOptionsGroup => {\n return {\n label: '',\n options: noDataFilterOptions\n };\n};\n\nexport const getDetailsOptions = (items: AttributeItemType[]): FilterOptionsGroup => {\n const options = Object.values(AttrTypeDetailsType)\n .map((value) => ({\n value,\n label: getDetailLabel(value),\n group: 'details'\n }))\n .map((option) => assoc('count', getDetailsOptionCount(items, option), option));\n\n return {\n label: i18n.text('Attribute properties'),\n options\n };\n};\n\nexport const filterItemsByEmptiness = curry(\n (options: FilterOption[], fillRates: Record<string, ChartData[]>, items: AttributeItemType[]) => {\n const firstEmptinessOption = head(getFilterOptionsByGroup('emptiness')(options));\n switch (firstEmptinessOption?.value) {\n case EmptinessFilterValue.SHOW_EMPTY:\n return items;\n default:\n return items.filter(pipe(getAttrTypeFromItem, filterAttributeByNotEmpty(fillRates)));\n }\n }\n);\n\nconst filterValidDetailsOptions = (options: FilterOption[]) => {\n const validOptionValues = Object.values(AttrTypeDetailsType);\n return options.filter(pipe(prop('value'), includes(__, validOptionValues)));\n};\nconst getFieldNameFromItem: (item: AttributeItemType) => string = pipe(getAttrTypeFromItem, prop('fieldName'));\nconst getFilteredNestedFieldNames = (options: FilterOption[]): ((items: AttributeItemType[]) => string[]) =>\n pipe(\n filter(pipe(getAttrTypeFromItem, both(prop('children'), filterAttributeByDetails(options)))),\n map(getFieldNameFromItem)\n );\n\nexport const filterItemsByDetails = curry((options: FilterOption[], items: AttributeItemType[]) => {\n const detailsOptions = pipe(getFilterOptionsByGroup('details'), filterValidDetailsOptions)(options);\n const filteredNestedFieldNames = getFilteredNestedFieldNames(detailsOptions)(items);\n return items.filter(\n ({attributeItem}) =>\n filteredNestedFieldNames.some((fieldName) => attributeItem.fieldName.startsWith(fieldName)) ||\n filterAttributeTreeByDetails(detailsOptions, attributeItem)\n );\n});\n\nexport const getAtrributeFieldNames: (items: AttributeItemType[]) => string[] = pipe(\n map(getAttrTypeFromItem),\n pluck('fieldName'),\n identity\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n paddingRight: '12px',\n paddingLeft: '20px',\n display: 'flex',\n flexDirection: 'row-reverse'\n },\n detailIcon: {\n marginLeft: '-5px',\n borderRadius: '50%',\n padding: '2px',\n width: '26px',\n height: '26px',\n boxSizing: 'border-box'\n },\n activeIcon: {\n background: 'white'\n }\n});\n","import React from 'react';\nimport {prop} from 'ramda';\nimport classnames from 'classnames';\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconSizes,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport Tooltip from '@mui/material/Tooltip';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {getDetailLabel, checkIsDataQualitativeForAttributeList} from '../../services/attributeDetails';\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {useStyles} from './styles';\n\ntype Props = {\n fillRateData?: ChartData[];\n fillRateState?: RequestStates;\n details: AttrTypeDetails;\n classes?: {\n iconRoot: string;\n iconsWrapper: string;\n };\n};\n\nconst AttributeTypeDetailsIcons = ({details, classes, fillRateData, fillRateState}: Props) => {\n const styles = useStyles();\n const iconRoot = prop('iconRoot', classes);\n const iconsWrapper = prop('iconsWrapper', classes);\n\n return (\n <div className={classnames(styles.root, iconsWrapper)}>\n {Object.entries(details || {})\n .reverse()\n .map(([detailType, value]) => {\n let iconVariant = AttributeTypeDetailIconVariant.NORMAL;\n if (detailType === AttrTypeDetailsType.REQUIRED) {\n const isDataLoading = fillRateState === RequestStates.LOADING;\n const isDataQualitative = checkIsDataQualitativeForAttributeList(fillRateData);\n if (isDataLoading) {\n iconVariant = AttributeTypeDetailIconVariant.LOADING;\n }\n if (!isDataLoading && !isDataQualitative) {\n iconVariant = AttributeTypeDetailIconVariant.BAD_QUALITY;\n }\n }\n return (\n <div\n key={detailType}\n className={classnames(value && (iconRoot || styles.activeIcon), styles.detailIcon)}\n >\n {value && (\n <Tooltip title={getDetailLabel(detailType)}>\n <span>\n <AttributeTypeDetailIcon\n detailType={detailType as AttrTypeDetailsType}\n variant={iconVariant}\n size={AttributeTypeDetailIconSizes.SMALL}\n />\n </span>\n </Tooltip>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default AttributeTypeDetailsIcons;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n bar: {\n width: '100%',\n display: 'flex',\n flexWrap: 'nowrap'\n },\n barPart: {\n height: '8px',\n flexGrow: 1\n },\n fillRateSquare: {\n height: '8px',\n width: '8px',\n display: 'inline-block',\n marginRight: '5px',\n verticalAlign: 'middle'\n },\n inactiveBarPart: {\n background: '#EFEFEF'\n },\n popper: {\n paddingTop: '6px'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, withPercents} from '@reltio/components';\n\nimport {isEmptyData, getBarWidthStyle} from '../../services/charts';\nimport {getFillRateColorByState, getFillRateColors} from '../../services/fillRate';\n\nimport {TooltipWithSquares} from '../ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: ChartData[];\n};\n\nconst FillRateLine = ({data}: Props) => {\n const styles = useStyles();\n const colors = getFillRateColors(data);\n\n return !isEmptyData(data) ? (\n <Tooltip\n followCursor={true}\n classes={{popper: styles.popper}}\n title={<TooltipWithSquares title={i18n.text('Fill rate')} data={data} getColor={getFillRateColorByState} />}\n >\n <div className={styles.bar}>\n {data.map((chartData, index) => (\n <div\n key={chartData.group}\n className={styles.barPart}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n />\n ))}\n </div>\n </Tooltip>\n ) : (\n <div className={styles.bar}>\n <div className={classnames(styles.barPart, styles.inactiveBarPart)} />\n </div>\n );\n};\n\nexport default withPercents(FillRateLine);\n","import {makeStyles} from '@mui/styles';\n\nconst levelLineColor = 'rgba(0, 114, 206, 0.12)';\nexport const useStyles = makeStyles({\n linesWrapper: {\n position: 'absolute',\n left: '9px',\n top: 0,\n bottom: 0\n },\n line: {\n position: 'absolute',\n width: '2px',\n background: levelLineColor,\n bottom: 0,\n zIndex: 2,\n left: 0,\n top: 0\n },\n horizontalLine: {\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n left: '2px',\n top: '15px',\n width: '3px',\n height: '2px',\n background: levelLineColor\n }\n },\n parentLine: {\n left: '20px',\n top: '34px'\n },\n lastLevel: {\n bottom: '31px'\n },\n lastLevelSelected: {\n '&:after': {top: '13px'}\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {range} from 'ramda';\nimport {Marginator} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n level: number;\n margin: number;\n hasChildren: boolean;\n isLastLevelItem: boolean;\n isCollapsed: boolean;\n isSelected: boolean;\n};\n\nconst getLevelsRange = (hasChildren: boolean, level: number): number[] => {\n if (level > 0 && hasChildren) return range(1, level + 1);\n\n if (level > 1) return range(1, level);\n return [];\n};\n\nconst TreeLines = ({level, margin, hasChildren, isLastLevelItem, isCollapsed, isSelected = false}: Props) => {\n const styles = useStyles();\n const drawLine = !isCollapsed && (level > 0 || hasChildren);\n\n return (\n <div className={styles.linesWrapper}>\n {getLevelsRange(hasChildren, level).map((level: number) => (\n <Marginator key={level} margin={margin} level={level} className={styles.line} />\n ))}\n {drawLine && (\n <Marginator\n margin={margin}\n level={level}\n className={classnames(\n styles.line,\n !hasChildren && level > 0 && styles.horizontalLine,\n hasChildren && styles.parentLine,\n isLastLevelItem && styles.lastLevel,\n isSelected && isLastLevelItem && styles.lastLevelSelected\n )}\n />\n )}\n </div>\n );\n};\n\nexport default TreeLines;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n listItem: {\n padding: '0 0 0 15px',\n '&:after': {\n content: '\"\"',\n left: 0,\n right: 0,\n position: 'absolute',\n bottom: 0,\n height: '1px',\n background: 'rgba(0, 0, 0, 0.05)'\n }\n },\n selectedItem: {\n background: 'white!important',\n border: '1px solid #000066',\n boxShadow:\n '0px 12px 17px -2px rgba(0, 0, 102, 0.06), 0px 5px 32px -4px rgba(0, 0, 102, 0.06), 0px 7px 8px -4px rgba(0, 0, 204, 0.1)',\n borderRadius: '6px',\n zIndex: 1,\n paddingLeft: '14px',\n '&:after': {\n display: 'none'\n }\n },\n clickableItem: {\n cursor: 'pointer',\n '&:hover::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none',\n zIndex: 1\n }\n },\n content: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n position: 'relative'\n },\n attribute: {\n paddingLeft: '9px',\n boxSizing: 'border-box',\n width: '100%',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n height: '100%',\n position: 'relative',\n fontSize: '13px'\n },\n marginWrapper: {\n display: 'inline-block',\n height: '100%',\n position: 'relative',\n width: '100%'\n },\n attributeType: {\n position: 'absolute',\n left: 0,\n top: '8px'\n },\n fillRate: {\n position: 'absolute',\n bottom: '8px',\n left: 0,\n right: 0,\n zIndex: 1\n },\n attributeLabel: {\n padding: '8px 0 0 15px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n }\n },\n parentAttributeLabel: {\n padding: '14px 0 0 13px'\n },\n detailsIcon: {\n background: 'white'\n },\n collapseIcon: {\n marginRight: '6px'\n },\n iconLoader: {\n width: '22px',\n height: '22px',\n border: '2px solid white',\n background: 'rgba(196, 196, 196, 0.4)',\n borderRadius: '50%'\n },\n iconsLoaderWrapper: {\n paddingRight: '23px',\n paddingLeft: '28px',\n display: 'flex'\n },\n iconLoaderWrapper: {\n width: '24px',\n height: '24px',\n backgroundColor: 'white',\n borderRadius: '50%',\n marginRight: '-3px'\n },\n fillRateLineLoader: {\n height: '8px',\n width: '100%',\n background: 'rgba(196, 196, 196, 0.4)',\n left: 0,\n right: 0,\n bottom: '8px',\n zIndex: 1,\n position: 'absolute'\n },\n iconsWrapper: {\n paddingRight: '11px'\n },\n noData: {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none',\n zIndex: 1\n }\n },\n noDataLabel: {\n fontSize: '12px',\n color: theme.palette.text.secondary,\n lineHeight: '16px',\n marginTop: '4px'\n }\n}));\n","import classnames from 'classnames';\nimport {times} from 'ramda';\nimport React from 'react';\nimport ListItem from '@mui/material/ListItem';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\nimport i18n from 'ui-i18n';\nimport {ChartData, ExpandedValueTooltip, Marginator, noop, RequestStates, SmallIconButton} from '@reltio/components';\n\nimport {getAttributeLabel} from '../../services/attributes';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nimport AttributeTypeDetailsIcons from '../AttributeTypeDetailsIcons/AttributeTypeDetailsIcons';\nimport AttributeTypeIcon from '../AttributeTypeIcon/AttributeTypeIcon';\nimport FillRateLine from '../FillRateLine/FillRateLine';\nimport TreeLines from './TreeLines/TreeLines';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n detailedAttributeType: DetailedAttributeType;\n level: number;\n onClick: (detailedAttributeType: DetailedAttributeType) => void;\n fillRateData?: ChartData[];\n fillRateState?: RequestStates;\n style?: React.CSSProperties;\n selected?: boolean;\n onCollapse?: () => void;\n isCollapsed?: boolean;\n isLastLevelItem?: boolean;\n isLoading?: boolean;\n};\n\nconst MARGIN_LEFT = 20;\nconst AttributeListItem = ({\n detailedAttributeType,\n fillRateData,\n fillRateState,\n style,\n level,\n selected = false,\n onClick,\n onCollapse = noop,\n isCollapsed = false,\n isLastLevelItem = false,\n isLoading\n}: Props) => {\n const styles = useStyles();\n const handleItemClick = () => {\n onClick(detailedAttributeType);\n };\n const hasChildren = !!detailedAttributeType.children;\n const hasFillRate = !!fillRateData;\n const noData = !hasFillRate && !isLoading;\n const attributeLabel = getAttributeLabel(detailedAttributeType);\n const CollapseIcon = isCollapsed ? ArrowRightIcon : ArrowDropDownIcon;\n\n return (\n <ListItem\n style={style}\n selected={selected}\n classes={{\n selected: styles.selectedItem\n }}\n onClick={hasChildren ? undefined : handleItemClick}\n component=\"div\"\n className={classnames(styles.listItem, {[styles.clickableItem]: !hasChildren, [styles.noData]: noData})}\n >\n <div className={styles.content}>\n {!hasChildren && (\n <div className={styles.attributeType}>\n <AttributeTypeIcon type={detailedAttributeType.type} />\n </div>\n )}\n <div className={styles.attribute}>\n <TreeLines\n level={level}\n margin={MARGIN_LEFT}\n hasChildren={hasChildren}\n isLastLevelItem={isLastLevelItem}\n isCollapsed={isCollapsed}\n isSelected={selected}\n />\n <Marginator margin={MARGIN_LEFT} level={level} className={styles.marginWrapper}>\n <ExpandedValueTooltip value={attributeLabel}>\n <div\n className={classnames(\n styles.attributeLabel,\n hasChildren && styles.parentAttributeLabel\n )}\n >\n {hasChildren && (\n <SmallIconButton\n size=\"XXS\"\n icon={CollapseIcon}\n onClick={onCollapse}\n className={styles.collapseIcon}\n />\n )}\n {attributeLabel}\n {noData && !hasChildren && (\n <div className={styles.noDataLabel}>{i18n.text('No data')}</div>\n )}\n </div>\n </ExpandedValueTooltip>\n </Marginator>\n {!isLoading && hasFillRate && !hasChildren && (\n <div className={styles.fillRate}>\n <FillRateLine data={fillRateData} />\n </div>\n )}\n {isLoading && !hasChildren && <div className={styles.fillRateLineLoader}></div>}\n </div>\n\n {isLoading ? (\n <div className={styles.iconsLoaderWrapper}>\n {times(\n (key: number) => (\n <div className={styles.iconLoaderWrapper} key={`unloadedIcon-${key}`}>\n <div className={styles.iconLoader}></div>\n </div>\n ),\n 5\n )}\n </div>\n ) : (\n <AttributeTypeDetailsIcons\n details={detailedAttributeType.details}\n classes={{iconRoot: styles.detailsIcon, iconsWrapper: selected && styles.iconsWrapper}}\n fillRateData={fillRateData}\n fillRateState={fillRateState}\n />\n )}\n </div>\n </ListItem>\n );\n};\n\nexport default AttributeListItem;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n searchWrapper: {\n padding: '8px 0px 8px 16px',\n alignItems: 'center',\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n marginLeft: '-105px'\n },\n filterByDetails: {\n width: '32px',\n height: '32px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n marginLeft: '9px'\n },\n searchInput: {\n borderRadius: '4px',\n width: '202px',\n minHeight: '32px!important',\n justifyContent: 'flex-end',\n alignItems: 'center',\n padding: '0 2px',\n boxSizing: 'border-box',\n '& input': {fontSize: '13px'},\n '& button': {padding: '2px'}\n },\n filledInput: {\n '& button:last-child': {\n backgroundColor: 'rgba(0, 0, 0, 0.0509804)'\n }\n },\n menu: {\n width: '300px',\n paddingTop: '8px'\n },\n filterIcon: {\n color: theme.palette.text.secondary\n },\n filterIconFilterApplied: {\n color: '#0072CE'\n },\n filterIconWrapper: {\n width: '32px',\n height: '32px',\n borderRadius: '4px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n position: 'relative',\n '&:after': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: '4px',\n background: 'rgba(0, 0, 0, 0.04)'\n },\n '&:hover': {\n '&:after': {\n content: '\"\"'\n }\n }\n },\n filterIconWrapperActive: {\n background: 'rgba(0, 0, 0, 0.04)',\n '&:after': {\n content: '\"\"',\n background: 'rgba(0, 0, 0, 0.04)'\n }\n },\n filterIconWrapperSelected: {\n background: 'rgba(0, 114, 206, 0.12)'\n },\n dropdownMenuTitle: {\n lineHeight: '48px',\n height: '48px',\n paddingLeft: '16px'\n },\n option: {\n paddingLeft: '5px',\n fontSize: '13px',\n height: '28px',\n lineHeight: '16px',\n letterSpacing: 'normal',\n paddingRight: '19px',\n filter: (isActive) => (isActive ? 'grayscale(0)' : 'grayscale(1)'),\n opacity: (isActive) => (isActive ? 1 : 0.5)\n },\n typeIconWrapper: {\n width: '28px',\n marginLeft: '1px',\n '& svg': {\n width: '20px',\n height: '20px'\n }\n },\n valueContainer: {\n marginLeft: 0\n },\n counter: {\n marginLeft: '5px'\n },\n\n optionLabel: {\n flexGrow: 1\n },\n groupLabel: {\n textTransform: 'uppercase',\n margin: '15px 16px 5px',\n letterSpacing: '0.1px',\n display: 'block'\n },\n actionsContainer: {\n display: 'flex',\n padding: '12px 5px 8px 12px'\n },\n clearAllButton: {\n marginRight: 'auto'\n }\n}));\n","import React from 'react';\nimport {isNil} from 'ramda';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport {ExpandedValueTooltip} from '@reltio/components';\nimport {FilterOption} from '../../types/FilterOption';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {AttributeTypeDetailIcon} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n data: FilterOption;\n isSelected: boolean;\n onChange: (data: FilterOption) => void;\n};\n\nconst Option = ({isSelected, data, onChange}: Props) => {\n const {count, label, value} = data;\n const showCounter = !isNil(count);\n const isOptionActive = !showCounter || count > 0;\n const styles = useStyles(isOptionActive);\n const handleClick = () => onChange(data);\n return (\n <MenuItem\n className={styles.option}\n component=\"div\"\n onClick={handleClick}\n data-reltio-id={`reltio-dq-dashboard-option-${data.value}`}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <span className={styles.typeIconWrapper}>\n <AttributeTypeDetailIcon detailType={value as AttrTypeDetailsType} />\n </span>\n <ExpandedValueTooltip value={label}>\n <div className={styles.optionLabel}>{label}</div>\n </ExpandedValueTooltip>\n {showCounter && <span className={styles.counter}>{formatNumberAsMetric(count, 999)}</span>}\n </MenuItem>\n );\n};\n\nexport default Option;\n","import {curry, flatten, pipe, pluck, propEq, remove} from 'ramda';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\n\nexport const containsOption = curry(\n (option: FilterOption, options: FilterOption[]) => !!options.find(propEq('value', option.value))\n);\n\nexport const withoutOption = curry((option: FilterOption, options: FilterOption[]) => {\n const optionIndex = options.findIndex(propEq('value', option.value));\n return optionIndex !== -1 ? remove(optionIndex, 1, options) : options;\n});\n\nexport const getValidFilterOptions = (\n options: FilterOption[],\n filterOptionsGroups: FilterOptionsGroup[]\n): FilterOption[] => {\n const allValidFilterOptions: FilterOption[] = pipe(pluck('options'), flatten)(filterOptionsGroups);\n return options.filter(({value}) => allValidFilterOptions.find(propEq('value', value)));\n};\n","import React, {useEffect, useState} from 'react';\nimport {always, concat, ifElse} from 'ramda';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport FilterListIcon from '@mui/icons-material/FilterList';\nimport Popover from '@mui/material/Popover';\nimport Typography from '@mui/material/Typography';\nimport SearchInput from 'react-components/dist/Form/SearchInput';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\nimport Option from './Option';\nimport {containsOption, getValidFilterOptions, withoutOption} from './helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n filterOptions: FilterOptionsGroup[];\n onChangeFilterOptions: (filterOptions: FilterOption[]) => void;\n onChangeFilterText: (filterText: string) => void;\n defaultFilterOptions?: FilterOption[];\n defaultFilterText?: string;\n};\n\nconst SEARCH_INPUT_HEIGHT = 40;\n\nconst AttributesFilters = ({\n defaultFilterOptions = [],\n filterOptions,\n defaultFilterText,\n onChangeFilterText,\n onChangeFilterOptions\n}: Props) => {\n const styles = useStyles();\n\n const [anchorEl, setAnchorEl] = useState(null);\n const [selectedFilterOptions, setSelectedFilterOptions] = useState<FilterOption[]>([]);\n const [valueInFilterTextInput, setValueInFilterTextInput] = useState<string>(defaultFilterText || null);\n useEffect(() => {\n setSelectedFilterOptions(getValidFilterOptions(defaultFilterOptions, filterOptions));\n }, [defaultFilterOptions, filterOptions]);\n\n const openFilter = (event) => setAnchorEl(event.currentTarget);\n const closeFilter = () => setAnchorEl(null);\n\n const handleClearAll = () => {\n setSelectedFilterOptions([]);\n };\n\n const handleCancel = () => {\n setSelectedFilterOptions(defaultFilterOptions);\n closeFilter();\n };\n\n const handleApply = () => {\n onChangeFilterOptions(selectedFilterOptions);\n closeFilter();\n };\n\n const handleClose = () => {\n setSelectedFilterOptions(always(defaultFilterOptions));\n closeFilter();\n };\n\n const handleChangeFilterText = (filterText: string) => {\n setValueInFilterTextInput(filterText);\n onChangeFilterText(filterText || '');\n };\n\n const handleOptionChange = (option: FilterOption) => {\n setSelectedFilterOptions(ifElse(containsOption(option), withoutOption(option), concat([option])));\n };\n\n const hasSelectedOptions = !!selectedFilterOptions.length;\n const isPopupOpen = !!anchorEl;\n const indicatorClassname = classnames(styles.filterIconWrapper, {\n [styles.filterIconWrapperActive]: isPopupOpen,\n [styles.filterIconWrapperSelected]: hasSelectedOptions\n });\n const indicatorIconClassname = hasSelectedOptions ? styles.filterIconFilterApplied : styles.filterIcon;\n\n return (\n <div className={styles.searchWrapper}>\n <div data-reltio-id=\"reltio-dq-dashboard-attributes-search-input\">\n <SearchInput\n autofocus\n onChange={handleChangeFilterText}\n initialValue={defaultFilterText || null}\n height={SEARCH_INPUT_HEIGHT}\n placeholder={i18n.text('Search attribute name')}\n classes={{root: classnames(styles.searchInput, {[styles.filledInput]: !!valueInFilterTextInput})}}\n />\n </div>\n <div className={styles.filterByDetails} data-reltio-id=\"reltio-dq-dashboard-attributes-filter\">\n <div className={indicatorClassname} onClick={openFilter}>\n <FilterListIcon className={indicatorIconClassname} />\n </div>\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n PaperProps={{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ['data-reltio-id']: 'reltio-dq-dashboard-attributes-filter-popup'\n }}\n >\n <div className={styles.menu}>\n <Typography variant=\"h6\" className={styles.dropdownMenuTitle}>\n {i18n.text('Filter')}\n </Typography>\n <div className={styles.valueContainer}>\n {filterOptions.map(({label, options}) => {\n return (\n <div key={label}>\n {label && (\n <Typography variant=\"caption\" className={styles.groupLabel}>\n {label}\n </Typography>\n )}\n {options.map((option) => {\n const isSelected = containsOption(option, selectedFilterOptions);\n\n return (\n <Option\n key={option.label}\n data={option}\n isSelected={isSelected}\n onChange={handleOptionChange}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n <div className={styles.actionsContainer}>\n <Button\n onClick={handleClearAll}\n className={styles.clearAllButton}\n disabled={!hasSelectedOptions}\n data-reltio-id=\"reltio-dq-dashboard-filter-clear-all-button\"\n >\n {i18n.text('Clear all')}\n </Button>\n <Button onClick={handleCancel} data-reltio-id=\"reltio-dq-dashboard-filter-cancel-button\">\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n onClick={handleApply}\n data-reltio-id=\"reltio-dq-dashboard-filter-apply-button\"\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </Popover>\n </div>\n </div>\n );\n};\n\nexport default AttributesFilters;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n width: '360px',\n minWidth: '360px',\n maxWidth: '360px',\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n zIndex: 1,\n marginBottom: '8px',\n borderRadius: '4px',\n boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.14), 0px 2px 1px rgba(0, 0, 0, 0.12), 0px 1px 3px rgba(0, 0, 0, 0.2)'\n },\n title: {\n height: '24px',\n margin: '16px',\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n itemCount: {\n color: theme.palette.text.primary,\n borderLeft: '1px solid rgba(0, 0, 0, 0.12)',\n marginLeft: '16px',\n paddingLeft: '16px'\n },\n listWrapper: {\n flexGrow: 1,\n overflow: 'hidden',\n position: 'relative'\n },\n loadingAnimation: {\n '&:before': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: '50%',\n zIndex: 1,\n width: '500%',\n marginLeft: '-250%',\n background:\n 'linear-gradient(to right, rgba(255, 255, 255, 0) 46%, rgba(255, 255, 255, 0.35) 50%, rgba(255, 255, 255, 0) 54%) 50% 50%;',\n animation: '$loaderAnimation 0.8s linear infinite',\n content: '\"\"',\n pointerEvents: 'none'\n }\n },\n columnsTitle: {\n height: '48px',\n display: 'grid',\n gridGap: '32px',\n gridTemplateColumns: '308px 108px',\n alignItems: 'center',\n padding: '0 16px',\n background: 'rgba(0, 0, 0, 0.06)',\n borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n fontWeight: 500,\n fontSize: '12px',\n lineHeight: '16px',\n color: theme.palette.text.secondary\n },\n loaderWrapper: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '4px',\n zIndex: 1\n },\n '@keyframes loaderAnimation': {\n '0%': {\n transform: 'translate(-30%, 0)'\n },\n '100%': {\n transform: 'translate(30%, 0)'\n }\n }\n}));\n","import classnames from 'classnames';\nimport {assoc, equals, isEmpty, pathOr} from 'ramda';\nimport React, {useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {FixedSizeList as List} from 'react-window';\n\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {useAttrTypeDetails} from '../../hooks/useAttrTypeDetails';\nimport {useFillRateRequest} from '../../hooks/useFillRateRequest';\nimport {formatFillRateData} from '../../services/fillRate';\nimport {AttributeItemType, DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {FilterOption} from '../../types/FilterOption';\nimport {\n noDataFilterOptions,\n filterItemsByDetails,\n filterItemsByEmptiness,\n getAtrributeFieldNames,\n getDetailedAttrTypeByFieldName,\n getDetailsOptions,\n getNoDataOptions,\n getFillRateByAttributeType,\n getFirstSimpleDetailedAttrType,\n getIndexByFieldName,\n rejectCollapsedItemsChildren\n} from './helpers';\n\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport AttributesFilters from '../AttributesFilters/AttributesFilters';\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\n\nimport {useStyles} from './styles';\n\nexport type DQDashboardAttributesListProps = {\n entityType: TEntityType;\n onAttributesListChange: ({\n selectedDetailedAttributeType,\n filterText,\n filterOptions\n }: {\n selectedDetailedAttributeType: DetailedAttributeType;\n filterText: string;\n filterOptions: FilterOption[];\n }) => void;\n defaultFieldName?: string;\n defaultFilterText?: string;\n defaultFilterOptions?: FilterOption[];\n disableAttributeSelection: boolean;\n};\n\ntype RenderAttributeProps = {\n data: AttributeItemType[];\n style: React.CSSProperties;\n index: number;\n};\n\nconst LIST_ITEM_HEIGHT = 48;\nconst NO_DATA_HEIGHT = 349;\n\nconst getItemsLabel = (count: number) => (count === 1 ? i18n.text('item') : i18n.text('items'));\n\nconst DQDashboardAttributesList = ({\n entityType,\n onAttributesListChange,\n defaultFieldName,\n defaultFilterOptions,\n defaultFilterText,\n disableAttributeSelection\n}: DQDashboardAttributesListProps) => {\n const styles = useStyles();\n const listRef = useRef<List>();\n const listWrapper = useRef<HTMLDivElement>();\n const [filterText, setFilterText] = useState(defaultFilterText || '');\n const [collapsedFieldNames, setCollapsedFieldNames] = useState<string[]>([]);\n const [selectedFilterOptions, setSelectedFilterOptions] = useState<FilterOption[]>(\n defaultFilterOptions || noDataFilterOptions\n );\n const [selectedFieldName, setSelectedFieldName] = useState(defaultFieldName);\n const [fillRates, setFillRates] = useState({});\n const {\n chartsData: {data: chartsData}\n } = useChartsDataContext();\n const dvfState = useContext(DVFContext)?.dvfs?.state;\n const items = useAttrTypeDetails(entityType, filterText);\n\n const attributeFieldNames = getAtrributeFieldNames(items);\n const memoizedAttributeFieldNames = useMemo(\n () => attributeFieldNames,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [attributeFieldNames.toString()]\n );\n const {data: initialFillRates, state: fillRatesState} = useFillRateRequest(\n entityType.uri,\n memoizedAttributeFieldNames\n );\n useEffect(() => setFillRates(initialFillRates), [initialFillRates]);\n useEffect(() => {\n const fillRateFromChartsData = chartsData?.fillRate && formatFillRateData(chartsData?.fillRate);\n const fillRateForSelectedAttribute = fillRates[selectedFieldName];\n setFillRates((fillRates) =>\n !fillRateFromChartsData || equals(fillRateForSelectedAttribute, fillRateFromChartsData)\n ? fillRates\n : assoc(selectedFieldName, fillRateFromChartsData, fillRates)\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chartsData?.fillRate]);\n\n const isFillRateNotLoaded = fillRatesState === RequestStates.INIT || fillRatesState === RequestStates.LOADING;\n const isLoading = isFillRateNotLoaded || dvfState === RequestStates.LOADING || dvfState === RequestStates.INIT;\n\n const isDVFLoaded = dvfState === RequestStates.LOADED || dvfState === RequestStates.ERROR;\n const isFillRateLoaded = fillRatesState === RequestStates.LOADED;\n\n const {filteredItems, filterOptions} = useMemo(() => {\n const filteredByEmptinessItems = isFillRateLoaded\n ? filterItemsByEmptiness(selectedFilterOptions, fillRates, items)\n : items;\n const detailsFilterOptions = getDetailsOptions(filteredByEmptinessItems);\n\n const filteredItems = isDVFLoaded\n ? filterItemsByDetails(selectedFilterOptions, filteredByEmptinessItems)\n : filteredByEmptinessItems;\n const noDataFilterOptions = getNoDataOptions();\n const filterOptions = [noDataFilterOptions, detailsFilterOptions];\n\n return {filteredItems, filterOptions};\n }, [items, selectedFilterOptions, fillRates, isFillRateLoaded, isDVFLoaded]);\n\n const visibleItems = useMemo(\n () => rejectCollapsedItemsChildren(filteredItems, collapsedFieldNames),\n [filteredItems, collapsedFieldNames]\n );\n const countAttrTypes = filteredItems.length;\n\n const handleAttrTypeDetailsChange = (selectedDetailedAttributeType: DetailedAttributeType) => {\n onAttributesListChange({selectedDetailedAttributeType, filterText, filterOptions: selectedFilterOptions});\n setSelectedFieldName(selectedDetailedAttributeType.fieldName);\n };\n\n const selectedDetailedAttributeType = useMemo(() => {\n const selectedDetailedAttributeType =\n getDetailedAttrTypeByFieldName(filteredItems, selectedFieldName) ||\n getFirstSimpleDetailedAttrType(filteredItems);\n return isEmpty(selectedDetailedAttributeType) || disableAttributeSelection\n ? null\n : selectedDetailedAttributeType;\n }, [filteredItems, selectedFieldName, disableAttributeSelection]);\n\n useEffect(() => {\n if (disableAttributeSelection) {\n listRef.current?.scrollTo(0);\n return;\n }\n if (filteredItems.length) {\n if (selectedDetailedAttributeType?.fieldName) setSelectedFieldName(selectedDetailedAttributeType.fieldName);\n }\n const indexOfSelectedFieldName = getIndexByFieldName(filteredItems, selectedFieldName);\n indexOfSelectedFieldName > -1\n ? listRef.current?.scrollToItem(indexOfSelectedFieldName, 'center')\n : listRef.current?.scrollTo(0);\n }, [filteredItems, selectedDetailedAttributeType]); // eslint-disable-line\n\n useEffect(() => {\n onAttributesListChange({selectedDetailedAttributeType, filterText, filterOptions: selectedFilterOptions});\n }, [filterText, selectedFilterOptions, selectedDetailedAttributeType]); // eslint-disable-line\n\n useEffect(() => {\n setSelectedFieldName((fieldName) => (disableAttributeSelection ? null : fieldName));\n }, [disableAttributeSelection]);\n\n const handleScroll = ({scrollOffset}) => {\n if (listWrapper.current) {\n const currentBorderTop = listWrapper.current?.style?.borderTop;\n if (scrollOffset === 0) {\n listWrapper.current.style.borderTop = '';\n }\n if (scrollOffset > 0 && currentBorderTop === '') {\n listWrapper.current.style.borderTop = '1px solid rgba(0, 0, 0, 0.05)';\n }\n }\n };\n\n const handleCollapse = (fieldName: string) => () => {\n setCollapsedFieldNames((collapsedFieldNames) =>\n collapsedFieldNames.includes(fieldName)\n ? collapsedFieldNames.filter((collapsedFieldName) => collapsedFieldName !== fieldName)\n : collapsedFieldNames.concat(fieldName)\n );\n };\n\n const renderAttribute = ({data, index, style}: RenderAttributeProps) => {\n const {attributeItem, level = 0} = data[index];\n const selected = selectedFieldName === attributeItem.fieldName;\n const fillRateData = getFillRateByAttributeType(fillRates, attributeItem);\n\n const isLastLevelItem = index > 0 && level > pathOr(-1, [index + 1, 'level'], visibleItems);\n\n return (\n <AttributeListItem\n fillRateData={fillRateData}\n fillRateState={fillRatesState}\n isLoading={isLoading}\n style={style}\n detailedAttributeType={attributeItem}\n level={level}\n onClick={handleAttrTypeDetailsChange}\n selected={selected}\n onCollapse={handleCollapse(attributeItem.fieldName)}\n isCollapsed={collapsedFieldNames.includes(attributeItem.fieldName)}\n isLastLevelItem={isLastLevelItem}\n />\n );\n };\n\n const itemCount = visibleItems.length;\n const hasData = !!itemCount;\n const showNoData = !hasData && (items.length === 0 || (filteredItems.length === 0 && isDVFLoaded));\n return (\n <div className={styles.root}>\n <div className={styles.title}>\n {i18n.text('Attributes')}\n <span className={styles.itemCount}>{`${countAttrTypes} ${getItemsLabel(countAttrTypes)}`}</span>\n <AttributesFilters\n defaultFilterText={defaultFilterText}\n defaultFilterOptions={selectedFilterOptions}\n onChangeFilterOptions={setSelectedFilterOptions}\n onChangeFilterText={setFilterText}\n filterOptions={filterOptions}\n />\n </div>\n <div\n ref={listWrapper}\n className={classnames(styles.listWrapper, {[styles.loadingAnimation]: isLoading && !showNoData})}\n data-reltio-id=\"reltio-dq-dashboard-attributes-list\"\n >\n {hasData ? (\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleHeight>\n {({height = 250}: {height: number}) => (\n <List\n ref={listRef}\n itemCount={itemCount}\n width=\"100%\"\n height={height}\n itemData={visibleItems}\n itemSize={LIST_ITEM_HEIGHT}\n onScroll={handleScroll}\n >\n {renderAttribute}\n </List>\n )}\n </ReactResizeDetector>\n ) : (\n showNoData && (\n <DQDashboardError\n height={NO_DATA_HEIGHT}\n errorData={{\n Icon: EMPTY_STATE_ICONS.SEARCH_RESULTS,\n title: i18n.text('No results found'),\n message: i18n.text(\n 'Try adjusting your search or filter to find\\nwhat you’re looking for'\n )\n }}\n variant={EmptyStateVariants.MEDIUM}\n />\n )\n )}\n </div>\n </div>\n );\n};\n\nexport default DQDashboardAttributesList;\n","import {useCallback, useEffect, useState} from 'react';\nimport {ChartData, useSafePromise, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, getDQChartsData} from '@reltio/mdm-sdk';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {formatFillRatesData} from '../services/fillRate';\n\nexport const useFillRateRequest = (entityTypeUri: string, attributeFieldNames: string[]) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [fillRateData, setFillRateData] = useState<Record<string, ChartData[]>>({});\n const safePromise = useSafePromise();\n const {searchByOv} = useDQDashboardState();\n\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setFillRateData({});\n };\n\n const loadFillRateData = useCallback(() => {\n if (!attributeFieldNames.length) return;\n setRequestState(RequestStates.LOADING);\n setFillRateData({});\n\n const onRequestFinished = (data: Record<string, ChartData[]>) => {\n setFillRateData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n return safePromise(\n getDQChartsData({\n entityTypeUri,\n attributes: attributeFieldNames,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: [DQMetric.FILL_RATE],\n searchByOv\n })\n )\n .then(formatFillRatesData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safePromise, setRequestState, setFillRateData, attributeFieldNames, searchByOv]);\n\n const refreshAction = useCallback(() => {\n try {\n loadFillRateData();\n } catch (e) {\n onError(e);\n }\n }, [loadFillRateData]);\n\n useEffect(() => {\n refreshAction();\n }, [refreshAction]);\n\n return {data: fillRateData, state: requestState, reload: refreshAction};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n title: {\n flexShrink: 0,\n paddingLeft: '20px'\n },\n content: {\n overflow: 'hidden',\n flexGrow: 1\n }\n});\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n children: React.ReactNode;\n};\nconst DQDashboardHeader = ({title, children}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.root}>\n <Typography variant=\"h6\" className={styles.title}>\n {title}\n </Typography>\n <div className={styles.content}>{children}</div>\n </div>\n );\n};\n\nexport default DQDashboardHeader;\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\n\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\n\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\n\nexport const NO_DATA_HEIGHT = 359;\n\nconst DQDashboardNoContent = () => {\n const {canGetDQStatistic} = usePermissionsContext();\n const errorData = canGetDQStatistic\n ? {\n Icon: EMPTY_STATE_ICONS.NO_DATA,\n title: i18n.text('Give us something to go on!'),\n message: i18n.text(\n 'Go ahead and load some data. We’ll put it on the scales and\\nlet you know here if it measures up.'\n )\n }\n : {\n title: i18n.text('You don’t currently have permission to view this page'),\n message: i18n.text(' Please contact your Tenant Admin to change permissions')\n };\n return <DQDashboardError height={NO_DATA_HEIGHT} errorData={errorData} variant={EmptyStateVariants.LARGE} />;\n};\n\nexport default DQDashboardNoContent;\n","import {CSSProperties} from 'react';\nimport {makeStyles} from '@mui/styles';\n\nconst scrollTopShadow: CSSProperties = {\n position: 'absolute',\n content: '\"\"',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1\n};\n\nexport const useStyles = makeStyles(() => ({\n root: {\n width: '100%',\n height: '100%',\n position: 'relative',\n marginTop: '-12px',\n '&:before': {\n ...scrollTopShadow,\n top: '8px',\n height: '4px',\n background: 'linear-gradient(180deg, #EEEEEE 0%, rgba(238, 238, 238, 0) 100%)',\n zIndex: 1\n },\n '&:after': {\n ...scrollTopShadow,\n height: '8px',\n background: '#EEEEEE'\n }\n },\n layoutRoot: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n}));\n","import React, {useMemo, useEffect} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\n\nimport {DQDataLevel, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport i18n from 'ui-i18n';\n\nimport {getMetricsFromViews, getEntityLevelViews} from '../../../services/charts';\nimport {DQDashboardPerspectiveConfig} from '../../../types/DQDashboardPerspectiveConfig';\nimport {defaultLayoutsByDataLevel} from '../../../constants/defaultConfig';\nimport {checkEntityTypeHasRDMLookup} from '../../../services/rdmTranscode';\nimport {useChartsDataContext} from '../../../contexts/ChartsDataProvider';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {RDMLookupState} from '../../../constants/RdmLookupState';\nimport {useChartsDataRequest} from '../../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../../DQDashboardLayout/DQDashboardLayout';\nimport Warning from '../../Warning/Warning';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n entityType?: TEntityType;\n};\n\nconst EntityLevelLayout = ({config, entityType}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const hasRDMLookup = metadata && entityType && checkEntityTypeHasRDMLookup(metadata, entityType);\n const currentRDMLookupState = hasRDMLookup ? RDMLookupState.RDM_LOOKUP_EXIST : RDMLookupState.RDM_LOOKUP_NOT_EXIST;\n const {hasRestrictions} = usePermissionsContext();\n const layout =\n config.layoutsByDataLevel?.[DQDataLevel.ENTITY_TYPE]?.[currentRDMLookupState] ||\n defaultLayoutsByDataLevel[DQDataLevel.ENTITY_TYPE][currentRDMLookupState];\n\n const views = useMemo(\n () => (layout ? getEntityLevelViews(config.viewsByDataLevel, layout) : []),\n [config.viewsByDataLevel, layout]\n );\n const metrics = useMemo(() => getMetricsFromViews(views), [views]);\n\n const chartsData = useChartsDataRequest({\n entityType,\n dataLevel: DQDataLevel.ENTITY_TYPE,\n metrics\n });\n const {changeChartsData} = useChartsDataContext();\n useEffect(() => changeChartsData(chartsData), [chartsData]);\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ENTITY_TYPE\n });\n\n return (\n <div className={classnames(styles.root)}>\n <DataLevelContext.Provider value={DQDataLevel.ENTITY_TYPE}>\n <div className={styles.layoutRoot}>\n {hasRestrictions && (\n <Warning\n text={i18n.text(\n 'Not seeing the data you expected for this entity type? Contact your tenant admin to verify permissions.'\n )}\n />\n )}\n <DQDashboardLayout views={views} layout={layout} />\n </div>\n </DataLevelContext.Provider>\n </div>\n );\n};\n\nexport default EntityLevelLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n counter: {\n fontSize: '10px',\n lineHeight: '12px',\n height: '12px',\n background: 'rgba(0, 0, 0, 0.05)',\n padding: '1px 4px',\n borderRadius: '2px'\n },\n selectRoot: {\n '&>fieldset': {\n border: 'none !important',\n outline: 'none !important'\n }\n },\n select: {\n borderRadius: '6px !important',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n padding: '3px 29px 3px 15px !important',\n fontSize: '18px',\n lineHeight: '24px',\n paddingRight: '30px',\n color: theme.palette.text.primary,\n minWidth: '128px',\n boxSizing: 'border-box',\n '&:hover,&:focus': {\n background: 'rgba(0, 0, 0, 0.05)',\n border: 'none',\n padding: '4px 30px 4px 16px !important'\n }\n },\n selectValue: {\n display: 'flex',\n alignItems: 'center',\n gap: '9px'\n },\n arrowIcon: {\n height: '16px',\n top: 'calc(50% - 8px)',\n right: '1px'\n },\n menu: {\n padding: '4px 0',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px'\n },\n optionRoot: {\n maxWidth: '184px',\n minWidth: '140px',\n display: 'flex',\n paddingRight: '8px'\n },\n optionLabel: {\n flexGrow: 1,\n fontSize: '13px',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n paddingRight: '10px',\n minWidth: 0\n }\n}));\n","import React from 'react';\nimport {isNil, find, pipe, propEq} from 'ramda';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select, {SelectProps} from '@mui/material/Select';\nimport Typography from '@mui/material/Typography';\nimport {mergeClasses} from '@reltio/components';\n\nimport {ExpandedValueTooltip, getValue} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nexport type Option = {\n value: string;\n label: string;\n count?: number;\n};\ntype Props = {\n options: Option[];\n value: string;\n onChange: (value: string) => void;\n dataReltioId?: string;\n dataReltioOptionId?: string;\n} & Omit<SelectProps, 'onChange' | 'value'>;\nconst Selector = ({\n options,\n value,\n onChange,\n dataReltioId,\n dataReltioOptionId,\n classes: classesProps = {},\n ...selectProps\n}: Props) => {\n const styles = useStyles();\n\n const renderCount = (count: number) => <span className={styles.counter}>{formatNumberAsMetric(count, 999)}</span>;\n\n const renderValue = (value: string) => {\n const {label, count}: Option = find(propEq('value', value))(options);\n return (\n <div className={styles.selectValue}>\n {label}\n {!isNil(count) && renderCount(count)}\n </div>\n );\n };\n\n const classes = mergeClasses(classesProps, {\n outlined: styles.select,\n icon: styles.arrowIcon\n });\n\n const renderOption = ({value, label, count}: Option, index: number) => (\n <MenuItem\n key={value}\n value={value}\n classes={{\n root: styles.optionRoot\n }}\n data-reltio-id={`${dataReltioOptionId}-${index}`}\n >\n <ExpandedValueTooltip value={label}>\n <Typography className={styles.optionLabel}>{label}</Typography>\n </ExpandedValueTooltip>\n {!isNil(count) && renderCount(count)}\n </MenuItem>\n );\n\n return (\n <Select\n variant=\"outlined\"\n MenuProps={{\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'left'\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'left'\n },\n classes: {\n list: styles.menu\n }\n }}\n value={value}\n onChange={pipe(getValue, onChange)}\n renderValue={renderValue}\n className={styles.selectRoot}\n classes={classes}\n autoWidth\n data-reltio-id={dataReltioId}\n {...selectProps}\n >\n {options.map(renderOption)}\n </Select>\n );\n};\n\nexport default Selector;\n","import React from 'react';\nimport {map, pipe} from 'ramda';\n\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nimport Selector, {Option} from '../Selector/Selector';\n\nexport type TEntityTypeWithCount = TEntityType & {\n entityCount: number;\n};\ntype Props = {\n entityTypes: TEntityTypeWithCount[];\n entityTypeUri: string;\n onChange: (entityTypeUri: string) => void;\n};\nconst EntityTypeSelector = ({entityTypes, entityTypeUri, onChange}: Props) => {\n const options: Option[] = pipe(\n map(({label, uri, entityCount}: {label: string; uri: string; entityCount: number}) => ({\n label,\n count: entityCount,\n value: uri\n }))\n )(entityTypes);\n\n return (\n <Selector\n options={options}\n value={entityTypeUri}\n onChange={onChange}\n dataReltioOptionId=\"reltio-dq-dashboard-entity-type-selector-option\"\n dataReltioId=\"reltio-dq-dashboard-entity-type-selector\"\n />\n );\n};\n\nexport default EntityTypeSelector;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"256\",\n height: \"256\",\n viewBox: \"0 0 256 256\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", null, React.createElement(\"g\", null, React.createElement(\"circle\", {\n cx: \"128\",\n cy: \"128\",\n r: \"128\",\n fill: \"#0072CE\",\n fillOpacity: \".03\"\n}), React.createElement(\"mask\", {\n id: \"svg1824010396a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"256\",\n height: \"256\"\n}, React.createElement(\"circle\", {\n cx: \"128\",\n cy: \"128\",\n r: \"128\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1824010396a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-16 9h256v247H-16V9z\",\n fill: \"url(#paint0_linear_2978_41880)\"\n}), React.createElement(\"g\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n}, React.createElement(\"path\", {\n d: \"M40.755 44.17C40.755 38.002 45.76 33 51.92 33h251.675c6.167 0 11.166 5.001 11.166 11.17v160.596H40.755V44.171z\",\n fill: \"#5E7282\"\n}), React.createElement(\"path\", {\n d: \"M50.371 43.106h255.685V195.71H50.371V43.106z\",\n fill: \"url(#paint1_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n d: \"M15.545 208.914c2.321.469 4.723.716 7.183.716H338.75c.22 0 .439-.002.658-.006-7.061 8.445-17.67 13.816-29.524 13.816H45.655c-12.111 0-22.916-5.597-29.968-14.349l-.142-.177z\",\n fill: \"#BDCBD8\"\n}), React.createElement(\"path\", {\n d: \"M339.015 204.883v4.966H15v-4.966h324.015z\",\n fill: \"#D4DCDF\"\n}), React.createElement(\"path\", {\n d: \"M201.107 213.991h-45.221a11.176 11.176 0 01-11.046-9.449h67.314a11.172 11.172 0 01-11.047 9.449z\",\n fill: \"url(#paint2_linear_2978_41880)\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter0_d_2978_41880)\"\n}, React.createElement(\"rect\", {\n x: \"81.703\",\n y: \"99\",\n width: \"170\",\n height: \"26\",\n rx: \"8\",\n fill: \"#D1E6FF\"\n}), React.createElement(\"rect\", {\n x: \"84.703\",\n y: \"102\",\n width: \"164\",\n height: \"20\",\n rx: \"5\",\n stroke: \"#fff\",\n strokeWidth: \"6\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter1_d_2978_41880)\"\n}, React.createElement(\"mask\", {\n id: \"svg1824010396b\",\n fill: \"#fff\"\n}, React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\"\n})), React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\",\n fill: \"#61A3F1\"\n}), React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\",\n stroke: \"#4A90E2\",\n strokeWidth: \"8\",\n mask: \"url(#svg1824010396b)\"\n})), React.createElement(\"g\", null, React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.703 74a3 3 0 013-3h81.625a3 3 0 010 6h-81.625a3 3 0 01-3-3z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M146.703 86a3 3 0 013-3h34a3 3 0 110 6h-34a3 3 0 01-3-3zM136.703 139a3 3 0 013-3h54a3 3 0 110 6h-54a3 3 0 01-3-3z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".1\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M112.703 151a3 3 0 013-3h103a3 3 0 110 6h-103a3 3 0 01-3-3zM124.703 163a3 3 0 013-3h79a3 3 0 110 6h-79a3 3 0 01-3-3z\",\n fill: \"#979797\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter2_ddd_2978_41880)\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", null, React.createElement(\"path\", {\n fill: \"#A0C1D7\",\n d: \"M70.703 64h11v8h-11z\"\n}), React.createElement(\"rect\", {\n x: \"62\",\n y: \"59\",\n width: \"28\",\n height: \"8\",\n rx: \"1\",\n fill: \"#BDD4E3\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M38.23 160.5c20.704 20.703 54.27 20.703 74.973 0 20.703-20.703 20.703-54.27 0-74.973-20.703-20.703-54.27-20.703-74.973 0-20.703 20.703-20.703 54.27 0 74.973z\",\n fill: \"#BDD4E3\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.427 85.988c20.463 20.652 20.404 53.981-.175 74.561-20.432 20.431-53.432 20.635-74.115.613l-.446-.439 74.736-74.735z\",\n fill: \"#A0C1D7\"\n}), React.createElement(\"path\", {\n opacity: \".144\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M75.037 175.385c29.402 0 53.236-23.834 53.236-53.236a54.67 54.67 0 00-.106-3.399L100.45 91.037l-55.142 58.396 25.814 25.811c1.293.094 2.598.141 3.915.141z\",\n fill: \"url(#paint3_linear_2978_41880)\"\n}), React.createElement(\"circle\", {\n cx: \"75.94\",\n cy: \"123.237\",\n r: \"44.723\",\n fill: \"#91B0C2\"\n}), React.createElement(\"g\", null, React.createElement(\"g\", {\n filter: \"url(#filter3_d_2978_41880)\"\n}, React.createElement(\"circle\", {\n r: \"42.793\",\n transform: \"matrix(-1 0 0 1 75.94 123.237)\",\n fill: \"#F7F4FF\"\n}))), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M105.043 175.309l-10.298.861-20.313-20.152.863-2.292-9.973-9.982 18.679-6.882h-4.308l-8.943-8.951 4.545-10.532L94.35 90.74l37.888 37.162c-.343 20.088-11.146 37.627-27.195 47.407z\",\n fill: \"url(#paint4_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M67.703 123a8 8 0 0112.362-6.707l14.477-25.145A36.828 36.828 0 0075.703 86c-20.434 0-37 16.565-37 37h29z\",\n fill: \"url(#paint5_angular_2978_41880)\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.297 90.6l.24.138s-12.45 35.125-12.811 35.752a6.92 6.92 0 01-11.985-6.92c.361-.626 24.556-28.97 24.556-28.97z\",\n fill: \"#323232\"\n}), React.createElement(\"circle\", {\n cx: \"75.94\",\n cy: \"123.237\",\n r: \"2.896\",\n fill: \"#EEEBF6\"\n}), React.createElement(\"circle\", {\n cx: \"96.211\",\n cy: \"148.655\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"107.15\",\n cy: \"131.924\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"rect\", {\n x: \"62.427\",\n y: \"135.592\",\n width: \"27.027\",\n height: \"10.039\",\n rx: \"3\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M85.914 170.534H75.112l-21.605-21.472 2.126-2.775v-1.01L42.8 132.523l2.853-2.529 40.261 40.54z\",\n fill: \"url(#paint6_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M96.362 136.555h-4.988l-38.126-38.01 2.853-2.53 40.261 40.54z\",\n fill: \"url(#paint7_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.746 129.006h-4.988L73.632 90.995l2.853-2.53 40.261 40.541z\",\n fill: \"url(#paint8_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M85.793 152.41h-4.988l-38.126-38.011 2.852-2.53 40.262 40.541z\",\n fill: \"url(#paint9_linear_2978_41880)\"\n}), React.createElement(\"circle\", {\n cx: \"75.618\",\n cy: \"155.734\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"55.026\",\n cy: \"148.655\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"44.73\",\n cy: \"131.924\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"g\", {\n fill: \"#A0C3D7\"\n}, React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 96.21 97.363)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 107.149 114.094)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 75.618 90.284)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 55.026 97.363)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 44.73 114.094)\"\n}))))))))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2978_41880\",\n x1: \"-16\",\n y1: \"9\",\n x2: \"-16\",\n y2: \"256\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_2978_41880\",\n x1: \"178.214\",\n y1: \"43.106\",\n x2: \"178.214\",\n y2: \"195.709\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#F2F9FB\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#fff\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_2978_41880\",\n x1: \"178.497\",\n y1: \"204.542\",\n x2: \"178.497\",\n y2: \"213.991\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#90AABF\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#869DAE\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint3_linear_2978_41880\",\n x1: \"154.275\",\n y1: \"146.574\",\n x2: \"96.683\",\n y2: \"91.352\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint4_linear_2978_41880\",\n x1: \"60.762\",\n y1: \"143.327\",\n x2: \"114.747\",\n y2: \"176.019\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".87\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopOpacity: \".01\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint6_linear_2978_41880\",\n x1: \"90.287\",\n y1: \"154.267\",\n x2: \"68.53\",\n y2: \"131.301\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint7_linear_2978_41880\",\n x1: \"100.735\",\n y1: \"120.288\",\n x2: \"78.978\",\n y2: \"97.322\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint8_linear_2978_41880\",\n x1: \"121.119\",\n y1: \"112.739\",\n x2: \"99.362\",\n y2: \"89.773\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint9_linear_2978_41880\",\n x1: \"90.166\",\n y1: \"136.143\",\n x2: \"68.409\",\n y2: \"113.177\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_2978_41880\",\n x: \"77.703\",\n y: \"96\",\n width: \"178\",\n height: \"34\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"1\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter1_d_2978_41880\",\n x: \"77\",\n y: \"102\",\n width: \"116\",\n height: \"22\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"1\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter2_ddd_2978_41880\",\n x: \"-13.297\",\n y: \"28\",\n width: \"181.534\",\n height: \"189.17\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"4\",\n operator: \"erode\",\n in: \"SourceAlpha\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"7\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"4\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.600156 0 0 0 0 0.745337 0 0 0 0 0.8625 0 0 0 0.1 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"4\",\n operator: \"dilate\",\n in: \"SourceAlpha\",\n result: \"effect2_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"5\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"16\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0.447059 0 0 0 0 0.807843 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"effect2_dropShadow_2978_41880\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"2\",\n operator: \"dilate\",\n in: \"SourceAlpha\",\n result: \"effect3_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"12\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"8.5\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0.447059 0 0 0 0 0.807843 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect2_dropShadow_2978_41880\",\n result: \"effect3_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect3_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter3_d_2978_41880\",\n x: \"29.148\",\n y: \"78.444\",\n width: \"93.585\",\n height: \"93.585\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"radialGradient\", {\n id: \"paint5_angular_2978_41880\",\n cx: \"0\",\n cy: \"0\",\n r: \"1\",\n gradientUnits: \"userSpaceOnUse\",\n gradientTransform: \"rotate(-56.035 152.55 -12.515) scale(43.4058 65.5062)\"\n}, React.createElement(\"stop\", {\n stopColor: \"#CFE8FF\"\n}), React.createElement(\"stop\", {\n offset: \".599\",\n stopColor: \"#D1F2F9\",\n stopOpacity: \"0\"\n})))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {EmptyState} from '@reltio/components';\nimport LoadingIcon from './icons/Loading.svg';\n\nconst LoadingComponent = () => {\n return (\n <EmptyState\n LogoRenderer={LoadingIcon}\n text={i18n.text('Loading...')}\n secondaryText={i18n.text('Please give us a moment while we load the page')}\n />\n );\n};\n\nexport default LoadingComponent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center'\n },\n updateTime: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n paddingRight: '16px'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport moment from 'moment';\nimport RefreshIcon from '@mui/icons-material/Refresh';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useReloadAllFacets, useUpdateTime} from '../../contexts/ReloadFacetContext';\n\nimport {useStyles} from './styles';\n\nconst DATE_UPDATE_TIME_MS = 10000;\n\ntype Props = {\n dataLevel: DQDataLevel;\n};\n\nconst UpdateTimeHeader = ({dataLevel}: Props) => {\n const styles = useStyles();\n const [, setTick] = useState(0);\n const refreshAll = useReloadAllFacets();\n const {updateTime} = useUpdateTime(dataLevel);\n\n const handleRefreshAll = () => {\n refreshAll(dataLevel);\n };\n\n useEffect(() => {\n const intervalId = setInterval(() => setTick((timer) => timer + 1), DATE_UPDATE_TIME_MS);\n return () => clearInterval(intervalId);\n }, []);\n\n const date = moment(updateTime);\n return (\n date.isValid() && (\n <div className={styles.root}>\n <span className={styles.updateTime}>{`${i18n.text('Last updated')} ${date.fromNow()}`}</span>\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Refresh')}\n icon={RefreshIcon}\n onClick={handleRefreshAll}\n size=\"S\"\n />\n </div>\n )\n );\n};\n\nexport default UpdateTimeHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n settingsAttributeLevel: {\n marginLeft: '2px',\n marginRight: '2px'\n },\n settingsEntityLevel: {\n marginRight: '-8px',\n marginLeft: '8px'\n }\n}));\n","import classnames from 'classnames';\nimport React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {SettingsMenu} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\n\nimport {useStyles} from './styles';\n\nconst SearchByOVSwitcher = ({dataLevel}: {dataLevel: DQDataLevel}) => {\n const styles = useStyles();\n const {searchByOv} = useDQDashboardState();\n const {changeSearchByOv} = useDQDashboardStateActions();\n const DropDownMenuItem = [\n {\n id: 'ov',\n active: true,\n onClick: () => changeSearchByOv(!searchByOv),\n text: i18n.text('Show OV only'),\n selected: searchByOv\n }\n ];\n return (\n <div\n className={classnames({\n [styles.settingsEntityLevel]: dataLevel === DQDataLevel.ENTITY_TYPE,\n [styles.settingsAttributeLevel]: dataLevel === DQDataLevel.ATTRIBUTE_TYPE\n })}\n >\n <SettingsMenu items={DropDownMenuItem} menuId=\"dqSettingsMenu\"></SettingsMenu>\n </div>\n );\n};\n\nexport default SearchByOVSwitcher;\n","import {equals, pick} from 'ramda';\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {DateRangeEditor, RequestStates, useSavedState} from '@reltio/components';\nimport {getEntityType, DQDataLevel, DateRangeValue, getDateRangeOptions} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {useUpdateTime} from '../../contexts/ReloadFacetContext';\nimport {ChartsDataProvider} from '../../contexts/ChartsDataProvider';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {useDVF} from '../../hooks/useDVF';\nimport {useDvfConfigLink} from '../../hooks/useDvfConfigLink';\nimport {useEntityCount} from '../../hooks/useEntityCount';\nimport {useEntityTypes} from '../../hooks/useEntityTypes';\nimport {useDebounceFunction} from '../../hooks/useDebounceFunction';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {FilterOption} from '../../types/FilterOption';\nimport {ATTRIBUTE_LIST_WIDTH, ENTITY_LEVEL_BAR_WIDTH} from './constants';\nimport {getTimeRangeDates, getPeriodValue} from '../../services/mlDq';\nimport {dateRangeValues, getFirstEntityTypeUri, getValuesDateRange, sortEntityTypesWithCount} from './helpers';\n\nimport AttributeLevelLayout from './AttributeLevelLayout';\nimport DataLevelBreadcrumbs from '../DataLevelBreadcrumbs/DataLevelBreadcrumbs';\nimport ContentSlider from '../ContentSlider/ContentSlider';\nimport DataLevelSwitcher from './DataLevelSwitcher/DataLevelSwitcher';\nimport DQDashboardAttributesList from '../DQDashboardAttributesList/DQDashboardAttributesList';\nimport DQDashboardHeader from '../DQDashboardHeader/DQDashboardHeader';\nimport DQDashboardNoContent from '../DQDashboardNoContent/DQDashboardNoContent';\nimport EntityLevelLayout from './EntityLevelLayout/EntityLevelLayout';\nimport EntityTypeSelector from '../EntityTypeSelector/EntityTypeSelector';\nimport LoadingComponent from '../LoadingComponent/LoadingComponent';\nimport UpdateTimeHeader from '../UpdateTimeHeader/UpdateTimeHeader';\nimport SearchByOVSwitcher from '../SearchByOVSwitcher/SearchByOVSwitcher';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n saveState: (state: DQDashboardSavedState) => void;\n getSavedState: () => Promise<DQDashboardSavedState>;\n};\n\nconst DQDashboardPerspectiveView = ({config, saveState, getSavedState}: Props) => {\n const styles = useStyles();\n const entityTypes = useEntityTypes();\n const {zoom, period, entityType, detailedAttributeType, searchByOv} = useDQDashboardState();\n const {\n changeZoom,\n changePeriod,\n setEntityType,\n setDetailedAttributeType: setSelectedAttributeType,\n changeSearchByOv\n } = useDQDashboardStateActions();\n const [entityTypeUri, setEntityTypeUri] = useState<string>('');\n\n const {getEntityCount, state: entityCountRequestState} = useEntityCount(entityTypes);\n const {canGetDQStatistic, permissionsLoadingState, isTimeSeriesAvailable} = usePermissionsContext();\n\n const [dataLevel, setDataLevel] = useState<DQDataLevel>();\n const {resetUpdateTimes} = useUpdateTime(dataLevel);\n\n const dvfConfigLink = useDvfConfigLink(entityType);\n const dvfs = useDVF(entityType?.uri);\n const dvfContext = useMemo(() => ({dvfs, dvfConfigLink}), [dvfs, dvfConfigLink]);\n\n const dqDashboardSavedState = useRef<DQDashboardSavedState>();\n const {isLoaded: isSavedStateLoaded, savedState} = useSavedState<DQDashboardSavedState>(getSavedState);\n const getNewSavedState = (state: DQDashboardSavedState): DQDashboardSavedState => ({\n fieldName: null,\n zoom: zoom || null,\n entityTypeUri,\n period,\n searchByOv,\n ...dqDashboardSavedState?.current,\n ...state\n });\n const isPermissionsRequestFinished =\n permissionsLoadingState === RequestStates.ERROR || permissionsLoadingState === RequestStates.LOADED;\n\n useEffect(() => {\n saveStateHandler({searchByOv});\n }, [searchByOv]);\n\n useEffect(() => {\n const selectedEntityType = entityTypes && entityTypeUri ? getEntityType({entityTypes}, entityTypeUri) : null;\n setEntityType(selectedEntityType);\n }, [entityTypeUri]);\n\n useEffect(() => {\n if (isSavedStateLoaded && isPermissionsRequestFinished) {\n dqDashboardSavedState.current = savedState;\n changeSearchByOv(!!savedState.searchByOv && config.showOVSwitcher);\n const isEntityTypeExists = !!getEntityType({entityTypes}, savedState.entityTypeUri);\n setEntityTypeUri(\n isEntityTypeExists ? savedState.entityTypeUri : getFirstEntityTypeUri(sortedEntityTypesWithCount)\n );\n\n setDataLevel((savedState.fieldName && savedState.dataLevel) || DQDataLevel.ENTITY_TYPE);\n const defaultPeriod = isTimeSeriesAvailable ? DateRangeValue.LAST_WEEK : DateRangeValue.LAST_DAY;\n const newPeriod =\n isTimeSeriesAvailable &&\n (dateRangeValues.includes(savedState?.period as DQDateRangeValue) || Array.isArray(savedState?.period))\n ? savedState.period\n : defaultPeriod;\n changePeriod(newPeriod);\n if (savedState.zoom) {\n changeZoom(savedState.zoom);\n }\n }\n }, [isSavedStateLoaded, isPermissionsRequestFinished]); // eslint-disable-line\n\n useEffect(() => {\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n saveStateHandler({\n fieldName: null,\n dataLevel: DQDataLevel.ENTITY_TYPE,\n entityTypeUri\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dataLevel, entityTypeUri]);\n\n useEffect(() => {\n if (isSavedStateLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) {\n const {startDate, endDate} = getTimeRangeDates(period);\n saveStateHandler({\n period: [new Date(startDate), new Date(endDate)],\n zoom\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zoom]);\n\n useEffect(() => {\n if (isSavedStateLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) saveStateHandler({period});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [period]);\n\n const saveStateDebounce = useDebounceFunction<DQDashboardSavedState>(saveState);\n const saveStateHandler = (state: DQDashboardSavedState) => {\n const newSavedState = getNewSavedState(state);\n saveStateDebounce(newSavedState, dqDashboardSavedState.current);\n dqDashboardSavedState.current = newSavedState;\n };\n const sortedEntityTypesWithCount = useMemo(\n () => sortEntityTypesWithCount({entityTypes, getEntityCount}),\n [entityTypes, getEntityCount]\n );\n\n const handleSetEntityTypeByUri = useCallback(\n (entityTypeUri: string) => {\n if (entityType?.uri !== entityTypeUri) {\n resetUpdateTimes(DQDataLevel.ENTITY_TYPE);\n setSelectedAttributeType(null);\n setEntityTypeUri(entityTypeUri);\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n }\n },\n [entityType?.uri] // eslint-disable-line\n );\n\n const handleAttributesListChange = ({\n selectedDetailedAttributeType,\n filterText,\n filterOptions\n }: {\n selectedDetailedAttributeType: DetailedAttributeType;\n filterText: string;\n filterOptions: FilterOption[];\n }) => {\n const fieldName = selectedDetailedAttributeType?.fieldName;\n if (\n fieldName ||\n !equals({filterText, filterOptions}, pick([filterText, filterOptions], dqDashboardSavedState.current))\n )\n saveStateHandler({\n fieldName: fieldName || null,\n filterOptions,\n filterText,\n dataLevel: fieldName ? DQDataLevel.ATTRIBUTE_TYPE : dataLevel\n });\n\n fieldName && setDataLevel(DQDataLevel.ATTRIBUTE_TYPE);\n\n if (!equals(detailedAttributeType, selectedDetailedAttributeType)) {\n resetUpdateTimes(DQDataLevel.ATTRIBUTE_TYPE);\n selectedDetailedAttributeType && setSelectedAttributeType(selectedDetailedAttributeType);\n }\n };\n\n const showEntityLevel = () => {\n setSelectedAttributeType(null);\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n resetUpdateTimes(DQDataLevel.ENTITY_TYPE);\n };\n\n const showDashboard =\n entityCountRequestState !== RequestStates.LOADING && isSavedStateLoaded && isPermissionsRequestFinished;\n const showContent = entityType && canGetDQStatistic && !!getEntityCount(entityTypeUri);\n const showTimeRange = dataLevel === DQDataLevel.ATTRIBUTE_TYPE && isTimeSeriesAvailable;\n const dateRangeEditorValue = getPeriodValue(zoom, period);\n\n return showDashboard ? (\n <div className={styles.perspectiveView}>\n <DQDashboardHeader title={i18n.text('Data Quality')}>\n {entityType && (\n <div className={styles.navigationWrapper}>\n <EntityTypeSelector\n entityTypes={sortedEntityTypesWithCount}\n entityTypeUri={entityType.uri}\n onChange={handleSetEntityTypeByUri}\n />\n <DataLevelBreadcrumbs dataLevel={dataLevel} onChange={setDataLevel} />\n <div className={styles.headerRightSide}>\n {config.showOVSwitcher && <SearchByOVSwitcher dataLevel={dataLevel} />}\n {showTimeRange && (\n <DateRangeEditor\n values={dateRangeEditorValue}\n options={getDateRangeOptions(dateRangeValues)}\n getValuesDateRange={getValuesDateRange}\n onChange={changePeriod}\n className={styles.periodSelector}\n TextFieldProps={{\n InputProps: {\n classes: {input: styles.input, root: styles.inputRoot},\n disableUnderline: true\n }\n }}\n MenuProps={{classes: {paper: styles.paper}}}\n classes={{dropdownIndicator: styles.dropdownIndicator}}\n DateRangePickerProps={{\n maxDate: moment().startOf('day').toDate()\n }}\n />\n )}\n <UpdateTimeHeader dataLevel={dataLevel} />\n </div>\n </div>\n )}\n </DQDashboardHeader>\n {showContent ? (\n <div className={styles.content}>\n <DVFContext.Provider value={dvfContext}>\n <ChartsDataProvider>\n <ContentSlider\n page={dataLevel === DQDataLevel.ENTITY_TYPE ? 0 : 1}\n pages={[\n [{index: 0}, {index: 2, width: ATTRIBUTE_LIST_WIDTH + 12}],\n [\n {index: 1, width: ENTITY_LEVEL_BAR_WIDTH},\n {index: 2, width: ATTRIBUTE_LIST_WIDTH},\n {index: 3}\n ]\n ]}\n >\n <ChartsDataProvider>\n <EntityLevelLayout config={config} entityType={entityType} />\n </ChartsDataProvider>\n <DataLevelSwitcher showEntityLevel={showEntityLevel} entityType={entityType} />\n <DQDashboardAttributesList\n entityType={entityType}\n onAttributesListChange={handleAttributesListChange}\n defaultFieldName={dqDashboardSavedState.current?.fieldName}\n defaultFilterText={dqDashboardSavedState.current?.filterText}\n defaultFilterOptions={dqDashboardSavedState.current?.filterOptions}\n disableAttributeSelection={dataLevel === DQDataLevel.ENTITY_TYPE}\n />\n <div className={styles.attributeLevelWrapper}>\n {detailedAttributeType && (\n <AttributeLevelLayout config={config} entityType={entityType} />\n )}\n </div>\n </ContentSlider>\n </ChartsDataProvider>\n </DVFContext.Provider>\n </div>\n ) : (\n entityType && <DQDashboardNoContent />\n )}\n </div>\n ) : (\n <LoadingComponent />\n );\n};\n\nexport default DQDashboardPerspectiveView;\n","import {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isAvailableEntityType, Metadata} from '@reltio/mdm-sdk';\n\nexport const useEntityTypes = () => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityTypes = useMemo(() => metadata.entityTypes.filter(isAvailableEntityType), [metadata.entityTypes]);\n return entityTypes;\n};\n","import {insert, join, pipe, propEq, split} from 'ramda';\nimport {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {getLastUriPart, TEntityType, getConsoleApps} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useDvfConfigLink = (selectedEntityType: TEntityType) => {\n const [consoleLink, setConsoleLink] = useState<string>(null);\n const [dvfConfigLink, setDVFConfigLink] = useState<string>(null);\n const safePromise = useSafePromise();\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n const environment = useSelector(mdmModule.selectors.getEnvironment) as string;\n const tenant = useSelector(mdmModule.selectors.getTenant) as string;\n useEffect(() => {\n safePromise(getConsoleApps({servicesPath, tenant, environment}))\n .then((response) => {\n const consoleLink = response?.data?.apps.find(propEq('name', 'Console')).uri;\n setConsoleLink(consoleLink);\n })\n .catch(() => setConsoleLink(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [environment, tenant, servicesPath]);\n useEffect(() => {\n const dvfConfigLink =\n consoleLink && selectedEntityType?.uri\n ? pipe(\n split('?'),\n insert(1, `datamodeler/entityDetails/${getLastUriPart(selectedEntityType.uri)}/validation?`),\n join('')\n )(consoleLink)\n : null;\n setDVFConfigLink(dvfConfigLink);\n }, [selectedEntityType, consoleLink]);\n\n return dvfConfigLink;\n};\n","import {useState, useEffect, useCallback, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {getDVF, DataValidationFunction, ApiErrorCode} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise, RequestStates} from '@reltio/components';\n\nexport const useDVF = (entityTypeUri: string) => {\n const [dvfs, setDvfs] = useState<DataValidationFunction[]>([]);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [errorCode, setErrorCode] = useState<number>();\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dvfPath: string = useSelector(mdmModule.selectors.getDVFPath);\n const safePromise = useSafePromise();\n const env: string = useSelector(mdmModule.selectors.getEnvironment);\n const canUserReadDVF = useSelector(mdmModule.selectors.getCanUserReadDVF);\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setDvfs([]);\n setErrorCode(error?.errorCode);\n };\n const onRequestFinished = (dvf: {functions: DataValidationFunction[]}) => {\n setDvfs(dvf?.functions || []);\n setErrorCode(undefined);\n setRequestState(RequestStates.LOADED);\n };\n const loadDVFs = useCallback(() => {\n if (!canUserReadDVF) {\n onError({errorCode: ApiErrorCode.ACCESS_DENIED});\n return;\n }\n if (entityTypeUri && env) {\n setErrorCode(undefined);\n setRequestState(RequestStates.LOADING);\n return safePromise(getDVF({dvfPath, tenant, entityTypeUri, env})).then(onRequestFinished).catch(onError);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dvfPath, tenant, entityTypeUri, env]);\n\n useEffect(() => {\n loadDVFs();\n }, [loadDVFs]);\n\n const result = useMemo(\n () => ({data: dvfs, state: requestState, reload: loadDVFs, errorCode}),\n [dvfs, requestState, loadDVFs, errorCode]\n );\n return result;\n};\n","import {useCallback, useRef} from 'react';\nimport {equals} from 'ramda';\n\nconst DEBOUNCE_TIMEOUT = 200;\n\nexport const useDebounceFunction = <T extends unknown>(fn: (params: T) => void) => {\n const timer = useRef<ReturnType<typeof setTimeout>>();\n const lastParams = useRef<T>(null);\n\n return useCallback(\n (params: T, startParams: T) => {\n timer?.current && clearTimeout(timer?.current);\n if (!lastParams?.current) lastParams.current = startParams;\n if (!equals(params, lastParams?.current)) {\n timer.current = setTimeout(() => {\n lastParams.current = params;\n fn(params);\n }, DEBOUNCE_TIMEOUT);\n }\n },\n [fn]\n );\n};\n","export const NO_DATA_HEIGHT = 359;\nexport const ATTRIBUTE_LIST_WIDTH = 360;\nexport const ENTITY_LEVEL_BAR_WIDTH = 60;\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {StyledEngineProvider, createTheme} from '@mui/material/styles';\nimport {ThemeProvider} from '@mui/styles';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\n\nimport {promisifyCallback} from '@reltio/mdm-sdk';\n\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {ReloadFacetProvider} from '../../contexts/ReloadFacetContext';\nimport {PermissionsProvider} from '../../contexts/PermissionsProvider';\nimport {DQDashboardStateProvider} from '../../contexts/DQDashboardStateContext';\nimport {theme} from '../../theme';\n\nimport DQDashboardPerspectiveView from './DQDashboardPerspectiveView';\n\nconst dqDashboardTheme = createTheme(theme);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'DQDashboardPerspective',\n disableGlobal: true,\n seed: 'dash'\n});\n\ntype Props = {\n store: Store<unknown>;\n config: DQDashboardPerspectiveConfig;\n saveState: (state: DQDashboardSavedState) => void;\n getSavedState: (clb: (state: DQDashboardSavedState) => void) => void;\n};\n\nconst DQDashboardPerspective = ({store, config, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<DQDashboardSavedState> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n return (\n <Provider store={store}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={dqDashboardTheme}>\n <StylesProvider generateClassName={generateClassName}>\n <ReloadFacetProvider>\n <DQDashboardStateProvider>\n <PermissionsProvider config={config}>\n <DQDashboardPerspectiveView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n </PermissionsProvider>\n </DQDashboardStateProvider>\n </ReloadFacetProvider>\n </StylesProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </LocalizationProvider>\n </Provider>\n );\n};\n\nexport default DQDashboardPerspective;\n","import {DQDashboardView} from '@reltio/dq-dashboard';\n\nexport default DQDashboardView;\n"],"names":["AvatarStates","className","icon","avatarText","rootClasses","otherProps","state","setState","useState","useEffect","ICON_MODE","TEXT_MODE","onImageLoadFail","ERROR_MODE","classnames","iconRoot","src","onError","textRoot","useStyles","makeStyles","flex","padding","paddingTop","children","styles","theme","root","display","flexWrap","flexDirection","alignItems","justifyContent","overflow","height","minHeight","boxSizing","color","palette","text","primary","fontSize","fontWeight","lineHeight","letterSpacing","textAlign","secondary","root_small","embedded","flexShrink","width","full","textBox","maxWidth","marginTop","secondaryText","button","minWidth","borderRadius","boxShadow","EMPTY_STATE_VARIANTS","EMPTY_STATE_ICONS","SEARCH_RESULTS","props","viewBox","xmlns","xmlnsXlink","cx","cy","fx","fy","r","gradientTransform","id","stopColor","stopOpacity","offset","x1","y1","x2","y2","x","y","filterUnits","stdDeviation","in","stroke","strokeWidth","fill","fillRule","xlinkHref","fillOpacity","mask","transform","opacity","d","rx","ry","filter","SELECT_ATTRIBUTES","style","maskType","maskUnits","clipRule","gradientUnits","NO_DATA","dx","dy","result","values","type","mixBlendMode","ERROR","colorInterpolationFilters","floodOpacity","mode","in2","variant","LogoRenderer","buttonTitle","onClick","identity","access","showButton","Typography","classes","h5","subtitle1","Button","EmptyStub","widthToHide","handleWidth","render","menuItem","menuText","checkbox","marginRight","SettingsMenuItemRenderer","forwardRef","ref","item","onMenuClose","selected","MenuItem","e","Checkbox","checked","displayName","items","menuId","DropDownMenuButton","buttonComponent","SmallIconButtonWithTooltip","buttonProps","SettingsIcon","tooltipTitle","i18n","size","menuItems","MenuItemRenderer","sourceType","metadata","useSelector","mdmModule","uri","findSourceSystemByUri","getSourceSystemLabel","sourceIcon","getAbsoluteImageUrl","VerticalDivider","margin","borderLeft","propTypes","PropTypes","enrichDataWithPercents","data","percents","countPercents","pluck","map","i","percent","Component","WithPercents","dataWithPercents","useMemo","clickable","cursor","useClickableStyle","undefined","useActions","actions","dispatch","Object","entries","reduce","acc","actionName","actionCreator","pipe","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","then","_","catch","RequestStates","ReloadFacetSignalContext","createContext","ReloadFacetActionContext","RequestsUpdateTimeContext","ReloadFacetProvider","refreshSignals","setRefreshSignals","updateTimes","setUpdateTimes","resetUpdateTimes","useCallback","dataLevel","assoc","refreshAll","signals","nextSignal","propOr","Provider","value","updateTime","actionId","time","Date","now","assocPath","useReloadFacet","reload","useContext","Error","refreshSignal","useRefreshAction","action","nanoid","useUpdateTime","Math","min","DQDateRangeValue","omit","DateRangeValue","getDQDateRangeByValue","currentDate","moment","subtract","valueOf","getDateRangeByValue","getFirstEntityTypeUri","path","dateRangeValues","getValuesDateRange","defaultTo","DQDashboardStateContext","DQDashboardDispatchContext","SET_ENTITY_TYPE","SET_ATTRIBUTE_TYPE","CHANGE_PERIOD","CHANGE_ZOOM","CHANGE_OV_STATE","ADD_EXPORT_LOADING_ID","DELETE_EXPORT_LOADING_ID","setEntityType","createStandardAction","setDetailedAttributeType","changeZoom","changePeriod","changeSearchByOv","addExportLoadingId","deleteExportLoadingId","getValidZoom","zoom","dqDashboardStateReducer","detailedAttributeType","payload","entityType","period","dateRange","searchByOv","exportLoadingIds","dissoc","DQDashboardStateProvider","useReducer","dqDashboardStateActions","useDQDashboardState","viewStateContext","useDQDashboardStateActions","viewStateActions","PermissionsContext","React","PermissionsProvider","config","permissions","tenantPermissions","requestState","permissionsLoadingState","setPermissions","setRequestState","safePromise","useSafePromise","apiPath","tenant","onRequestFinished","error","console","loadPermissions","getTenantPermissions","usePermissionsRequest","entityTypeUri","roles","canGetDQStatistic","noMetaDataRestrictions","canReadWithoutFilter","includes","getPermissionsForRoles","prop","__","getPermissionByUri","find","propEq","configurationLevelPermission","entityLevelPermission","isEmpty","some","checkPermissions","hasRestrictions","showTimeSeries","showErrorBands","showExportButton","isTimeSeriesAvailable","usePermissionsContext","defaultTheme","tooltip","backgroundColor","DVFContext","ChartsDataContext","ChartsDataProvider","chartsData","setChartsData","changeChartsData","useChartsDataContext","useEntityCount","entityTypes","entitiesCountMap","setEntitiesCountMap","getEntityCount","buildFilterQueryString","fieldName","FilterOptions","getFacets","query","generateValuableQueryString","activeness","body","pageSize","pageNo","Number","getLastUriPart","ChartDataType","CustomViewType","ViewType","DQMetric","RDMLookupState","defaultViewsByDataLevel","DQDataLevel","FILL_RATE","title","UNIQUENESS","SUMMARY","DATA_VALIDATION","FREQUENCY","LENGTH_STATISTIC","PATTERN","CROSSWALK_ANALYSIS","VALUE_DISTRIBUTION","UNSUPPORTED","options","timeSeries","CONSOLIDATION_RATE","RDM_TRANSCODE","defaultLayoutsByDataLevel","today","default","SSN","BOOLEAN","DATE","INTEGER","FLOAT","timeRange","boolean","date","integer","float","RDM_LOOKUP_EXIST","RDM_LOOKUP_NOT_EXIST","getAdvancedSearchFilter","filters","attributes","index","operator","SearchOperator","localizeChartValues","chartData","localizedValue","getPercentLabel","isNil","isEmptyData","facetFiltersToSearchState","curry","advanced","when","isDateType","evolve","mapFilterValue","parseTimestamp","version","getSearchState","getFilter","getChartDataTypeByAttributeType","DataTypes","STRING","UNKNOWN","getValidViews","views","allViews","supportedViews","layout","layoutItem","viewType","viewIndex","findIndex","concat","getMetricsFromViews","metric","uniq","getBarWidthStyle","enrichChartDataWithSourceLabel","max","group","label","getEntityTypeSummarySearchState","formatPercent","toFixed","transformTimeSeriesChartData","getChartState","states","all","equals","any","NO_DATA_AVAILABLE","NO_PROFILES","prependZeroIfNeeds","number","getTimeSeriesData","getData","timeSeriesData","_max_date","sortBy","getStatisticData","anomalyData","dataValues","anomaly","pick","getAnomalyData","getTimeRangeDates","startTimestamp","endTimeStamp","getDateRangeByDatePeriod","startDate","endDate","getFullYear","getMonth","getDate","checkIsTimeSeries","getChartTooltipDateTitle","dataKeys","cond","either","keys","always","allValuesEqualZero","T","hasTimeRange","enrichTimeSeriesDataWithTodayData","todayChartData","format","reject","append","todayData","currentData","todayChartDataWithPercent","todayOption","FillRateState","UniquenessAnalysisState","getStateFromMetric","todayDataForTimeSeries","dataItem","getTodayData","filterValidDVFs","dvfs","activeDVFUris","isNoProfiles","lineKeys","areaKeys","F","isNoDataAvailable","DataLevelContext","isContainActiveVF","dvf","attributeTypeUri","allPass","StatusVF","isFloatingType","getAttributeLabel","getLabel","name","AttrTypeDetailsType","filterAttributeByDetails","filterOptions","detail","details","filterAttributeTreeByDetails","length","child","filterAttributeByNotEmpty","fillRates","fillRate","filterAttributesTypesByName","filterText","array","resultArray","currentItem","isCurrentItemMatch","toLowerCase","filterAttributeByName","push","assign","getAttrTypeDetails","attrTypeItem","matchAttributes","required","isAttributeReference","INCLUDED_IN_MATCHING","CONTAIN_VF","REQUIRED","REFERENCE","RDM_LOOKUP","isRDMLookupAttrType","getDetailLabel","attributeDetailType","buildItems","parents","level","chain","childrenItems","isReference","attributeItem","attributeUriToSearchUri","isReferenceChild","useChartsDataRequest","metrics","attributeFieldName","loadChartsData","async","getActiveProfiles","ActivityFilters","getInactiveProfiles","getDqChartsData","getDQChartsData","Promise","activeProfiles","inactiveProfiles","dqChartsData","has","sourceSystems","summary","pathOr","ifElse","refreshAction","whiteSpace","paddingRight","infoDataLabel","chartDataLabel","anomalyTitle","anomalyTitleBackground","position","top","left","anomalyTitleWrapper","anomalyValue","paddingLeft","row","tooltipWrapper","DataRenderer","ChartDataRenderer","key","fillRateSquare","verticalAlign","getValueLabel","getColor","tooltipData","background","FillRateChartColors","getFillRateColorByState","getChartItemColor","getFillRateColors","getLabelFromState","formatFillRateData","indexOf","formatFillRatesData","toPairs","getFillRateData","getFillRateChartData","converge","colors","getFillRateFilter","getFillRateSearchState","useChartData","getChartData","getRawFilterSearchState","keyword","isRawFilter","getEqualsRawFilterSearchState","excludeDescendantEntityTypes","searchState","entityTypesFilter","entityTypesUris","AdditionalFilterOptionsValues","join","getExcludedEntityTypesRawFilter","getDescendantEntityTypes","currentRawFilter","newRawFilter","addOVOption","ovOption","ovOnly","useSearchRedirect","useDispatch","globalFilter","activityFilter","ActivityFilter","search","isMuted","ui","legendLabel","legendValue","legendHorizontal","marginBottom","legendVertical","itemColor","dataKey","ANOMALY_DATA_KEY","withPercents","legendProps","align","wrapperStyle","overflowY","maxHeight","content","formatNumberAsMetric","VIOLATED_PROFILES_METRIC","DIVIDER","_extends","target","arguments","source","prototype","hasOwnProperty","call","apply","this","menuButton","right","exportLoadingId","exportData","exportParams","exportDQPath","replace","attributeType","attributeDataType","isTimeseries","utc","getFileName","dataType","useExportDQParams","exportId","exportDQ","res","arrayBuffer","blob","Blob","url","URL","createObjectURL","link","document","createElement","href","download","appendChild","click","removeChild","finally","useExportData","ExportResult","active","disabled","DashboardPopupMenu","EmptyStateVariants","container","paddingBottom","small","medium","large","message","refreshButton","main","refreshIcon","defaultIcon","onRefresh","errorData","SMALL","Icon","startIcon","Replay","viewContent","loadingState","BasicViewContent","refreshMode","refreshRate","handleHeight","ErrorBoundary","DashboardLinearLoader","infoIcon","infoTooltipTitle","hasInfoIcon","hasChildren","isAttributeLevel","BasicViewHeader","SmallIconButton","InfoIcon","tooltipPlacement","HideOnShrink","view","dataReltioId","BasicView","border","chipProps","isDateRangeValue","getRangeOptionLabel","Chip","BarAxis","bottom","stackedBar","bar","flexGrow","transition","zIndex","pointerEvents","inactivePart","tooltipFillRate","legendWrapper","rangeWrapper","rangeValue","popper","Bar","getTooltipData","onItemClick","onBarClick","maxValue","sum","isExportAvailable","Tooltip","followCursor","searchProfiles","ANOMALY_METRICS","useMlDqDataRequest","LAST_WEEK","setTimeSeriesData","mlDqPath","oldRequestDependencies","useRef","needRequestErrorBandsData","memoizedRequestDependencies","toString","getMlDqData","attribute","applySpec","statisticData","needRefresh","currentRange","last","head","currentStartTime","currentEndTime","startTime","endTime","needRefreshData","current","getValuesFromChartData","flatten","roundPercent","round","XAxisTickFormatter","getZoomedData","indexStart","indexEnd","slice","infoPanel","gap","info","dynamicInfo","dynamicInfoPositive","dynamicInfoNegative","dynamicIcon","dynamicPercent","isPositiveDynamic","abs","infoLabel","percentKey","zoomedData","lastChartData","filteredData","Infinity","prevPercent","lastPercent","getDynamicPercent","lastDateOfPeriod","dateLabel","isSame","noPercentLabel","DAYS_OF_WEEK","MONTHS","getFormattedDataForBarChart","chartType","RELTIO_PROFILES","SOURCE_PROFILES","getConsolidationRateChartData","InfoPanelProperties","getLabelForInfoPanel","propName","Properties","lengthStatistics","MEDIAN","AVERAGE","MININMUN","MAXIMUM","valueDistribution","crosswalkAnalysis","NUMBER_OF_SOURCES","AVG_NUMBER_OF_PROFILES","MIN_NUMBER_OF_PROFILES","MAX_NUMBER_OF_PROFILES","getInfoPanelDataForBarChart","getDataForBarChart","infoPanelData","getChartValueLabel","formatDataTypeValue","dataTypeDefinition","convertDataWithInterval","getStartRangeFromChartData","split","chartDataWithRange","sort","ascend","startRange","endRange","isLastItem","addIntervalBrackets","getLengthChartData","getMonthDistributionData","getDayOfWeekDistributionData","getDayOfMonthDistributionData","getDayOfweekDistributionSearchState","dayOfWeek","getMonthDistributionSearchState","month","getDayOfMonthDistributionSearchState","dayOfMonth","getLengthStatisticsSearchState","getRangeRawFilterSearchState","getCrosswalkAnalysisSearchState","getValueDistributionFilterForDate","timestampStart","timestampEnd","getValueDistributionFilterForNumber","getValueDistributionFilterForFloat","lastItem","isSingleValue","getValueDistributionSearchState","getConsolidationRateFilter","getConsolidationRateSearchState","getBarOpacity","selectedBar","tickFormatter","toUpperCase","isPercent","minLineChartData","getMinValueFromLineChartData","maxLineChartData","getMaxValueFromLineChartData","minYAxisValue","maxYAxisValue","updatedMinData","updatedMaxData","getUpdatedEdgeData","xAxis","tick","tickMargin","userSelect","angle","textAnchor","tickLine","interval","scale","yAxis","tickCount","domain","cartesianGrid","strokeDasharray","strokeOpacity","line","dot","activeDot","referenceLine","isFront","labelForY","area","legend","DEFAULT_LINE_COLOR","getTooltip","getTooltipProp","yAxisLabel","getLineChartSettings","tooltipProps","selectedDots","setSelectedDots","zoomAreaStart","setZoomAreaStart","zoomAreaEnd","setZoomAreaEnd","emptyAreas","getDateByIndex","every","isNaN","isLineChartDataEmpty","areas","lastArea","end","start","extendArea","getEmptyAreas","separateLines","currentValue","currentIndex","dataArray","getSeparateLines","hasZoomArea","onMouseMove","mouseEvent","isTooltipActive","activePayload","activeLabel","onMouseLeave","onMouseDown","onMouseUp","Array","isArray","emptyArea","separateLine","filterNull","renderData","monoFontCell","fontFamily","timeSeriesContent","tooltipKeys","currentPayload","mlDqData","mlDqState","mlDqReload","todayState","todayReload","reloadFunction","isTimeSeries","InfoDataRenderer","UniquenessChartColors","getUniquenessColorByState","getUniquenessColors","formatUniquenessAnalysisData","getUniquenessData","getUniquenessChartData","uniqueness","dataMlDq","stateMlDq","reloadMlDq","dataToday","stateToday","reloadToday","loading","badQuality","AttributeTypeDetailIconSizes","NORMAL","AttributeTypeDetailIconVariant","AttributeTypeDetailIcon","detailType","iconVariant","isDataLoading","isDataQualitative","checkIsDataQualitativeForSummary","LOADING","BAD_QUALITY","rootTimeRange","marginLeft","chipClasses","header","borderRight","entitySummary","attributeTypeSummary","infoTitle","infoContent","attributeTypeIconWrapper","totalLoading","summaryWrapper","HeaderInfo","AttributeTypeIconSizes","entityTypesArray","total","recordsInfo","CircularProgress","attributeTypesCount","getAttributeTypesTree","collectAttributes","attributesCollection","countEntityTypeAttributes","getValue","isAttributeTypeLevel","DefaultIcon","titleChildren","viewTitle","getFormattedDataForTableChart","valueComparator","sortDirection","sortField","a","b","filterExistedDVF","chartDataItem","findDVFByUri","enrichDVFDataWithFunctionLabel","getAttributeTypeLabelFromHierarhy","enrichEntityLevelDVFData","attributeUri","attributeTypesHierarhy","getAttributeTypesHierarchyByUri","attributeLabel","getValidationChartData","getFrequencyChartData","getPatternAnalisysData","getDVFAnalyticAttribtuteUri","attributeName","getValidationFilter","getFrequencyAnalysisStateForTimestamp","attributeValue","getFrequencyAnalysisFilterForDate","getFrequencyAnalysisFilter","getFrequencyAnalysisFilterForBoolean","parseBoolean","getFrequencyAnalysisSearchState","isTimestampBasedType","isBooleanType","getPatternAnalysisSearchState","pattern","getRowsCounterLabel","NO_DATA_FIELD","getEntityLevelColumnsOptions","functionsCount","sortable","secondLabel","getBarColor","getDvfColor","getAttributeLevelColumnsOptions","getColumnsOptions","getViolatedValidationData","textOverflow","titleCount","countProfiles","chartInfoPanel","VVFNoDataChartType","chartTitle","dvfConfigLink","dataSourceLabel","DVF_NOT_SUPPORTED","NotSupportedIcon","DVF_NOT_CONFIGURE","Link","component","underline","DATA_VALID","NiceOneIcon","PERMISSION_DENIED","useNoDataDvfType","activeDvfs","errorCode","dvfsState","chartDataState","hasData","chartState","isAttributeDataLevel","isPermissionDenied","ApiErrorCode","isDVFNotSupported","isDVFNotConfigured","isDataValid","useDvfs","onlyActive","dvfsData","currentDvfs","getDVFsForAttribute","getLabelAndMaxValue","getValueByColumnId","rowValue","is","handler","childrenRef","onResize","el","clientWidth","scrollWidth","headCell","isFirstColumn","headCellWithRange","headLabel","labelWrapper","rangeLabel","tooltipValue","useNumberCellStyles","barColor","colorBarContainer","numberContainer","headCellData","headIndex","formattedMaxValue","hasRange","isOverflowing","setIsOverflowing","labelElement","overflowed","DefaultHeadCellRenderer","columnsHeaders","withTableContext","columnData","cellClassName","labelRenderer","LabelRenderer","hasCustomRenderer","utils","formattedValue","ColorBar","tableContainer","cellBorder","getExtendedLabel","columnsOptions","basicTableRef","tableClasses","headData","columnOptions","resizable","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","LabelCellRenderer","initialWidth","NumberCellValueRenderer","context","BasicTable","columnsData","rowsData","headRowHeight","getRowCellHeight","defaultColumnWidth","defaultColumnMinWidth","hoverStateEnabled","layoutItemContent","customComparator","contentChildren","setSortDirection","setSortField","comparator","defaultComparator","handleSort","field","toggleSortOrder","sortedData","sorting","order","onSort","TotalInfo","totalProfiles","invalidProfiles","totalInfo","dvfData","dvfErrorCode","dvfsReload","getNoDataStatus","getEntityLevelValidationChartData","noDataType","dvfUris","invalidProfilesCount","setInvalidProfilesCount","getTotals","useInvalidProfiles","dvfUri","getValidationSearchState","functionId","propSatisfies","reloadDvf","stateDvf","without","preparedData","convertDateLabelsInChartData","isSSNType","xAxisLabel","textTransform","XAxisLabel","xCoord","ExpandedValueTooltip","renderXAxis","tickProps","visibleTicksCount","maxTickWidth","showCategories","barCategoryGap","maxBarSize","yTickRenderer","barChart","minPointSize","axisLine","vertical","labelForX","BarTooltip","tooltipPayload","tooltipLabel","propertiesName","chartInfoLabel","chartInfoValue","chartInfoWrapper","chartInfoItem","InfoPanel","isClickable","rectangleProps","barTooltipTitle","getBarChartSettings","showInfoPanel","shape","useLabelStyles","INCLUDE_SOURCE_ICON","getSourceColor","SourceIcon","getCrosswalkAnalysisData","SourceLabelRenderer","getValueDistributionData","onBarSelect","showTopLabel","uniqueDataKeys","mergeAll","getBarLabel","stackId","onMouseOver","getBars","consolidationRateWrapper","ratePercent","tableWithSelectedRow","ConsolidationPercentage","totalCrosswalks","totalEntities","consolidationRate","reltioCleanser","totalCrosswalksBySource","formattedPercent","YAxisTickRenderer","selectedSource","setSelectedSource","barChartData","tableChartData","crosswalk","descend","getConsolidationRateTableData","sortedBarChartData","sortedSourceData","barSelectHandler","rowIndex","rowSelectHandler","rowClickHandler","chartHeight","onRowClick","onRowHover","hoverRowIndex","RDMTranscodeStatus","RDMChartColors","RESOLVED","UNRESOLVED","getRDMChartColors","formatRDMTranscodeData","resolveCount","unresolveCount","getRDMTranscodeFilter","rdmTranscodeStatus","getRDMTranscodeSearchState","setData","getRDMData","isRDMLoolupResolve","loadRDMChartData","useRDMChartDataRequest","ViewsFactory","getComponent","isFullscreen","onToggleFullscreen","MONTH_DISTRIBUTION","DAY_OF_WEEK_DISTRIBUTION","DAY_OF_MONTH_DISTRIBUTION","DQDashboardLayoutItem","layoutItemConfig","ResizeComponent","reltioGridLayoutToStaticLayout","DEFAULT_LAYOUT_OPTIONS","cols","rowHeight","memo","layoutOptions","staticLayout","ReltioGridLayout","LayoutItem","warning","errorIcon","scrollTopShadow","perspectiveView","overflowX","attributeLevelWrapper","navigationWrapper","headerRightSide","periodSelector","flexBasis","paper","input","inputRoot","dropdownIndicator","layoutRoot","customAttributeLayouts","layoutsByDataLevel","layouts","timeRangeAvailable","chartDataType","customLayouts","defaultLayouts","mergedLayoutsByType","mergeLeft","getLayoutByAttributeType","uniqBy","getViewsByDataType","getAttributeLevelViews","viewsByDataLevel","attributeLevelMetrics","breadcrumb","onChange","Breadcrumbs","separator","NavigateNext","handleChangeDataLevel","getPagePartWidth","pagePartIndex","getPageIndexes","transitionTime","pagesWrapper","pagesCount","page","pages","startSliding","endSliding","TRANSITION_TIMEOUT_MS","savedPage","setSavedPage","setTimeout","currentPageIndexes","pagesSettings","allWidth","pagesettings","fixedWidth","pagePart","partWidth","calculatePagePartsWidth","pageIndexes","prevPageIndexes","leftPagesIndexes","getLeftPageOffset","showComponent","styleWidth","minCurrentIndex","maxCurrentIndex","pageSettings","indexPage","getPagePartStyleWidth","entityLevelBar","writingMode","expandButton","expandButtonText","showEntityLevel","expandButtonTitle","getAttrTypeFromItem","getFirstSimpleDetailedAttrType","isComplexAttribute","isImage","not","filterDetailedAttrTypeByFieldName","getFilterOptionsByGroup","EmptinessFilterValue","noDataFilterOptions","SHOW_EMPTY","filterItemsByEmptiness","firstEmptinessOption","filterValidDetailsOptions","validOptionValues","getFieldNameFromItem","filterItemsByDetails","detailsOptions","filteredNestedFieldNames","both","getFilteredNestedFieldNames","startsWith","getAtrributeFieldNames","detailIcon","activeIcon","fillRateData","fillRateState","iconsWrapper","reverse","barPart","inactiveBarPart","levelLineColor","linesWrapper","horizontalLine","parentLine","lastLevel","lastLevelSelected","isLastLevelItem","isCollapsed","isSelected","drawLine","range","getLevelsRange","Marginator","listItem","selectedItem","clickableItem","marginWrapper","parentAttributeLabel","detailsIcon","collapseIcon","iconLoader","iconsLoaderWrapper","iconLoaderWrapper","fillRateLineLoader","noData","noDataLabel","onCollapse","noop","isLoading","hasFillRate","CollapseIcon","ArrowRightIcon","ArrowDropDownIcon","ListItem","times","searchWrapper","filterByDetails","searchInput","filledInput","menu","filterIcon","filterIconFilterApplied","filterIconWrapper","filterIconWrapperActive","filterIconWrapperSelected","dropdownMenuTitle","option","isActive","typeIconWrapper","valueContainer","counter","optionLabel","groupLabel","actionsContainer","clearAllButton","count","showCounter","containsOption","withoutOption","optionIndex","remove","defaultFilterOptions","defaultFilterText","onChangeFilterText","onChangeFilterOptions","anchorEl","setAnchorEl","selectedFilterOptions","setSelectedFilterOptions","valueInFilterTextInput","setValueInFilterTextInput","filterOptionsGroups","allValidFilterOptions","getValidFilterOptions","closeFilter","handleOptionChange","hasSelectedOptions","isPopupOpen","indicatorClassname","indicatorIconClassname","SearchInput","autofocus","initialValue","placeholder","event","currentTarget","FilterList","Popover","open","onClose","anchorOrigin","horizontal","transformOrigin","PaperProps","itemCount","listWrapper","loadingAnimation","animation","columnsTitle","gridGap","gridTemplateColumns","borderBottom","loaderWrapper","onAttributesListChange","defaultFieldName","disableAttributeSelection","listRef","setFilterText","collapsedFieldNames","setCollapsedFieldNames","selectedFieldName","setSelectedFieldName","setFillRates","dvfState","attrTypeItems","collectFilteredAttributeItems","itemsWithDetails","setItemsWithDetails","getEntityTypeMatchAttributes","reference","useAttrTypeDetails","attributeFieldNames","memoizedAttributeFieldNames","initialFillRates","fillRatesState","setFillRateData","loadFillRateData","useFillRateRequest","fillRateFromChartsData","fillRateForSelectedAttribute","isDVFLoaded","isFillRateLoaded","filteredItems","filteredByEmptinessItems","detailsFilterOptions","getDetailsOptionCount","getDetailsOptions","visibleItems","collapsedFieldName","rejectCollapsedItemsChildren","countAttrTypes","handleAttrTypeDetailsChange","selectedDetailedAttributeType","getDetailedAttrTypeByFieldName","scrollTo","indexOfSelectedFieldName","getIndexByFieldName","scrollToItem","handleScroll","scrollOffset","currentBorderTop","borderTop","renderAttribute","getFillRateByAttributeType","showNoData","itemData","itemSize","onScroll","MEDIUM","LARGE","hasRDMLookup","isAttrTreeHasRDMLookup","checkEntityTypeHasRDMLookup","currentRDMLookupState","getEntityLevelViews","selectRoot","outline","select","selectValue","arrowIcon","optionRoot","dataReltioOptionId","classesProps","selectProps","renderCount","mergeClasses","outlined","Select","MenuProps","list","renderValue","autoWidth","entityCount","radius","EmptyState","LoadingIcon","setTick","useReloadAllFacets","intervalId","setInterval","timer","clearInterval","isValid","fromNow","RefreshIcon","settingsAttributeLevel","settingsEntityLevel","DropDownMenuItem","SettingsMenu","saveState","isAvailableEntityType","useEntityTypes","setSelectedAttributeType","setEntityTypeUri","entityCountRequestState","setDataLevel","selectedEntityType","consoleLink","setConsoleLink","setDVFConfigLink","servicesPath","environment","getConsoleApps","response","apps","insert","useDvfConfigLink","setDvfs","setErrorCode","dvfPath","env","canUserReadDVF","functions","loadDVFs","getDVF","useDVF","dvfContext","dqDashboardSavedState","isSavedStateLoaded","isPermissionsRequestFinished","saveStateHandler","getEntityType","showOVSwitcher","isEntityTypeExists","sortedEntityTypesWithCount","defaultPeriod","newPeriod","saveStateDebounce","fn","lastParams","params","startParams","clearTimeout","useDebounceFunction","newSavedState","getNewSavedState","sortWith","sortEntityTypesWithCount","handleSetEntityTypeByUri","showDashboard","showContent","showTimeRange","dateRangeEditorValue","getPeriodValue","DateRangeEditor","getDateRangeOptions","TextFieldProps","InputProps","disableUnderline","DateRangePickerProps","maxDate","startOf","toDate","ATTRIBUTE_LIST_WIDTH","dqDashboardTheme","createTheme","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","store","getSavedStatePromisified","promisifyCallback","LocalizationProvider","dateAdapter","AdapterMoment","StyledEngineProvider","injectFirst","ThemeProvider","StylesProvider"],"sourceRoot":""}
1
+ {"version":3,"file":"5039.js","mappings":"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","sources":["webpack://@reltio/remotes/../components/src/components/AvatarWithFallback/AvatarWithFallback.tsx","webpack://@reltio/remotes/../components/src/components/BasicTableView/BasicTable/HOCs/withTableContext.js","webpack://@reltio/remotes/../components/src/components/BasicView/styles.ts","webpack://@reltio/remotes/../components/src/components/BasicView/BasicView.tsx","webpack://@reltio/remotes/../components/src/components/BasicViewContent/styles.ts","webpack://@reltio/remotes/../components/src/components/BasicViewContent/BasicViewContent.tsx","webpack://@reltio/remotes/../components/src/components/BasicViewHeader/styles.ts","webpack://@reltio/remotes/../components/src/components/BasicViewHeader/BasicViewHeader.tsx","webpack://@reltio/remotes/../components/src/components/ColorBar/styles.ts","webpack://@reltio/remotes/../components/src/components/ColorBar/ColorBar.tsx","webpack://@reltio/remotes/../components/src/components/DropDownMenuButton/styles.ts","webpack://@reltio/remotes/../components/src/components/DropDownMenuButton/MenuItemRenderer.tsx","webpack://@reltio/remotes/../components/src/components/DropDownMenuButton/DropDownMenuButton.tsx","webpack://@reltio/remotes/../components/src/components/EmptyState/styles.ts","webpack://@reltio/remotes/../components/src/components/EmptyState/EmptyState.tsx","webpack://@reltio/remotes/../components/src/icons/EmptySearchResults.tsx","webpack://@reltio/remotes/../components/src/icons/SelectAttributes.tsx","webpack://@reltio/remotes/../components/src/icons/NoData.tsx","webpack://@reltio/remotes/../components/src/icons/Error.tsx","webpack://@reltio/remotes/../components/src/components/ErrorBoundary/ErrorBoundary.tsx","webpack://@reltio/remotes/../components/src/components/HideOnShrink/HideOnShrink.tsx","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/helpers.ts","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/icons/ResizeIcon.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/styles.ts","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/ReltioGridLayout.tsx","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenuItemRender/styles.ts","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenuItemRender/SettingsMenuItemRender.tsx","webpack://@reltio/remotes/../components/src/components/SettingsMenu/SettingsMenu.tsx","webpack://@reltio/remotes/../components/src/components/SourceIcon/SourceIcon.tsx","webpack://@reltio/remotes/../components/src/components/VerticalDivider/VerticalDivider.js","webpack://@reltio/remotes/../components/src/components/charts/HOCs/withPercents.tsx","webpack://@reltio/remotes/../components/src/components/charts/hooks/useClickableStyle.ts","webpack://@reltio/remotes/../components/src/hooks/useActions.ts","webpack://@reltio/remotes/../components/src/hooks/useSavedState.ts","webpack://@reltio/remotes/../components/src/types/index.ts","webpack://@reltio/remotes/../dashboard/src/components/DashboardLinearLoader/styles.ts","webpack://@reltio/remotes/../dashboard/src/components/DashboardLinearLoader/DashboardLinearLoader.tsx","webpack://@reltio/remotes/../dashboard/src/components/DashboardPopupMenu/styles.ts","webpack://@reltio/remotes/../dashboard/src/components/DashboardPopupMenu/DashboardPopupMenu.tsx","webpack://@reltio/remotes/../dashboard/src/components/LayoutItemView/styles.ts","webpack://@reltio/remotes/../dashboard/src/components/LayoutItemView/LayoutItemView.tsx","webpack://@reltio/remotes/../dashboard/src/contexts/DashboardViewIdContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ReloadFacetContext/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/types/DQDateRangeValue.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/dateRange.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DQDashboardStateContext/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/contexts/PermissionsProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/usePermissionsRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/theme/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DVFContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ChartsDataProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useEntityCount.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/ChartDataType.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/ViewType.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/RdmLookupState.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/defaultConfig.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/advancedFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/charts.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/NoDataLabels.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/mlDq.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DataLevelContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributes.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/DetailedAttributeType.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributeFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/attributeDetails.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartsDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/InfoDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/ChartDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/ChartDataTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/TooltipWithSquares/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/TooltipWithSquares/TooltipWithSquares.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/fillRate.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartData.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/rawFilters.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useSearchRedirect.ts","webpack://@reltio/remotes/../dq-dashboard/src/constants/AnomalyDataKey.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/CustomLegend.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartLegends/ChartLegends.tsx","webpack://@reltio/remotes/../dq-dashboard/src/constants/ValidationMetric.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useExportParams.ts","webpack://@reltio/remotes/../dq-dashboard/src/icons/ExportResult.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPopupMenu/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPopupMenu/DQDashboardPopupMenu.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useExportData.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/EmptyStateVariants.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/DQDashboardError.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemContent/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemContent/DQLayoutItemContent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemHeader/DQLayoutItemHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQLayoutItemView/DQLayoutItemView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/PeriodChip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/PeriodChip/PeriodChip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/Bar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/StackedHorizontalBarChart/StackedHorizontalBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useMlDqDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/positiveDynamic.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/negativeDynamic.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/ChartInfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartInfoPanel/TimeSeriesInfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/barCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/getLineChartSettings.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/LineChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ChartDataTooltip/data-renderers/AnomalyDataRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/uniquenessAnalysis.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/UniquenessAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/UniquenessAnalysisTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/UniquenessAnalysisChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/dvf.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/includedInMatching.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/rdm.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/reference.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/icons/required.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailIcon/AttributeTypeDetailIcon.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailChip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailChip/AttributeTypeDetailChip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetails/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetails/AttributeTypeDetails.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/HeaderInfo.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/boolean.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/date.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/float.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/integer.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/ssn.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/icons/string.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeIcon/AttributeTypeIcon.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/AttributeTypeSummary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Summary/EntityTypeSummary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/Summary/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/Summary/Summary.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/DQDashboardErrorView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/DQDashboardErrorView/DQDashboardErrorView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/tableCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/niceOne.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/settingsIcon.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/icons/notSupportedIcon.svg","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/VVFChartNodata.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/hooks/useNoDataDvfType.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/hooks/useDvfs.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/OverflowingHandler.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/HeadCellRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/TableCellTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/LabelCellRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/cell-renderers/NumberCellValueRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/CustomTableWithBars/TableWithBars.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomTableWithBarsChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomTableWithBarsChart/CustomTableWithBarsChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/TotalInfo.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/ViolatedValidationFuncChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useInvalidProfiles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/ViolatedValidationFuncTimeSeriesChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ViolatedValidationFuncChart/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FrequencyAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/XAxisLabel/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/XAxisLabel/XAxisLabel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/getBarChartSettings.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/BarTooltip/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/BarTooltip/BarTooltip.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/InfoPanel.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBackgroundOnHover.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/CustomBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/LengthStatisticsChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/SourceLabelRenderer/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/SourceLabelRenderer/SourceLabelRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CrosswalkAnalysisChart/CrosswalkAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ValueDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/MonthDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/DayOfWeekDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/DayOfMonthDistributionChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/PatternAnalysisChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/CustomBarChart/StackedBarChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/ConsolidationPercentage.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/YAxisTickRenderer.tsx","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/ConsolidationRateChart/ConsolidationRateChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/services/rdmTranscode.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/RDMTranscodeChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/RDMTranscodeChart/RDMTranscodeChart.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useRDMChartDataRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/ViewsFactory.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayoutItem/DQDashboardLayoutItem.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayout/DQDashboardLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Warning/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Warning/Warning.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/AttributeLevelLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DataLevelBreadcrumbs/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DataLevelBreadcrumbs/DataLevelBreadcrumbs.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/ContentSlider/ContentSlider.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DataLevelSwitcher/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DataLevelSwitcher/DataLevelSwitcher.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useAttrTypeDetails.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailsIcons/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeTypeDetailsIcons/AttributeTypeDetailsIcons.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/FillRateLine/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/FillRateLine/FillRateLine.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/TreeLines/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/TreeLines/TreeLines.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributeListItem/AttributeListItem.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/Option.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/AttributesFilters/AttributesFilters.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardAttributesList/DQDashboardAttributesList.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useFillRateRequest.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardHeader/DQDashboardHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoContent/DQDashboardNoContent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/EntityLevelLayout/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/EntityLevelLayout/EntityLevelLayout.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/Selector/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/Selector/Selector.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/EntityTypeSelector/EntityTypeSelector.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/LoadingComponent/icons/Loading.svg","webpack://@reltio/remotes/../dq-dashboard/src/components/LoadingComponent/LoadingComponent.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/UpdateTimeHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/SearchByOVSwitcher/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/SearchByOVSwitcher/SearchByOVSwitcher.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/DQDashboardPerspectiveView.tsx","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useEntityTypes.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDvfConfigLink.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDVF.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useDebounceFunction.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/constants.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/index.tsx","webpack://@reltio/remotes/./src/dq-dashboard.ts"],"sourcesContent":["import Avatar from '@mui/material/Avatar';\nimport classnames from 'classnames';\nimport React, {useEffect, useState} from 'react';\n\nenum AvatarStates {\n ICON_MODE,\n TEXT_MODE,\n ERROR_MODE\n}\ntype Props = {\n className?: string;\n icon?: string;\n avatarText?: string;\n variant?: 'circular' | 'rounded' | 'square';\n rootClasses?: {\n iconRoot?: string;\n textRoot?: string;\n };\n};\nconst AvatarWithFallback = ({className, icon, avatarText, rootClasses, ...otherProps}: Props) => {\n const [state, setState] = useState<AvatarStates>(null);\n useEffect(() => {\n if (icon) {\n setState(AvatarStates.ICON_MODE);\n } else {\n setState(AvatarStates.TEXT_MODE);\n }\n }, [icon, avatarText]);\n const onImageLoadFail = () => {\n setState(AvatarStates.ERROR_MODE);\n };\n\n switch (state) {\n case AvatarStates.ICON_MODE:\n return (\n <Avatar\n className={classnames(className, rootClasses?.iconRoot)}\n src={icon}\n onError={onImageLoadFail}\n {...otherProps}\n />\n );\n case AvatarStates.TEXT_MODE:\n case AvatarStates.ERROR_MODE:\n return (\n <Avatar className={classnames(className, rootClasses?.textRoot)} {...otherProps}>\n {avatarText}\n </Avatar>\n );\n default:\n return null;\n }\n};\n\nexport default AvatarWithFallback;\n","import {TableContext} from '../contexts/TableContext';\nimport {withContext} from '../../../../HOCs/withContext/withContext';\n\nconst withTableContext = (contextSelector) => (CellRenderer) =>\n withContext(TableContext, contextSelector, CellRenderer);\n\nexport default withTableContext;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n basicViewPaper: {\n display: 'flex',\n flexDirection: 'column',\n ...theme.basicView\n }\n}));\n","import React, {forwardRef} from 'react';\nimport Paper, {PaperProps} from '@mui/material/Paper';\nimport {useStyles} from './styles';\n\nconst BasicView = forwardRef(\n ({children, className, ...otherProps}: PaperProps, ref: React.RefObject<HTMLDivElement>) => {\n const styles = useStyles();\n return (\n <Paper ref={ref} className={className} classes={{root: styles.basicViewPaper}} {...otherProps}>\n {children}\n </Paper>\n );\n }\n);\n\nBasicView.displayName = 'BasicView';\n\nexport default BasicView;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n 'basic-view-content': {\n flex: '1 1 auto',\n padding: '0 24px 24px',\n '&:first-child': {\n paddingTop: '24px'\n }\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = React.ComponentPropsWithoutRef<'div'>;\n\nconst BasicViewContent = ({children, className, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles['basic-view-content'], className)} {...otherProps}>\n {children}\n </div>\n );\n};\n\nexport default BasicViewContent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n toolbar: {\n minHeight: '48px',\n padding: '8px 24px',\n lineHeight: '28px'\n },\n title: {\n fontSize: '18px',\n minWidth: '50px',\n fontWeight: 'normal',\n lineHeight: 'inherit',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n});\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Toolbar, {ToolbarProps} from '@mui/material/Toolbar';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype Props = ToolbarProps & {\n title?: string;\n classes?: Partial<Record<'root' | 'title', string>>;\n};\n\nconst BasicViewHeader = ({title = '', children = null, classes = {}, ...otherProps}: Props) => {\n const styles = useStyles();\n return (\n <Toolbar className={classes.root} classes={{root: styles.toolbar}} {...otherProps}>\n <Typography className={classes.title} classes={{root: styles.title}} variant=\"h6\">\n {i18n.text(title)}\n </Typography>\n {children}\n </Toolbar>\n );\n};\n\nexport default BasicViewHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n bar: {\n backgroundColor: theme.palette.secondary.main,\n opacity: 0.12,\n position: 'absolute',\n minHeight: '20px',\n minWidth: '5px',\n borderRadius: '2px',\n top: 0,\n left: 0,\n height: '100%'\n }\n}));\n","import React, {useCallback} from 'react';\nimport classnames from 'classnames';\nimport {is} from 'ramda';\nimport {useStyles} from './styles';\n\ntype Props = {\n className?: string;\n width?: number | string;\n maxWidth?: number;\n};\n\nconst widthIsNumber = (width: string | number): width is number => is(Number, width);\n\nconst ColorBar = ({className, width = 0, maxWidth}: Props) => {\n const styles = useStyles();\n\n const getBarColorWidth = useCallback(\n (width: number) => {\n return (maxWidth ? (100 * width) / maxWidth : 0) + '%';\n },\n [maxWidth]\n );\n\n return width ? (\n <div\n className={classnames(styles.bar, className)}\n style={{width: widthIsNumber(width) ? getBarColorWidth(width) : width}}\n />\n ) : null;\n};\n\nexport default ColorBar;\n","import {alpha} from '@mui/material/styles';\nimport {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n buttonRoot: {\n '&$selected': {\n color: theme.palette.action.active,\n backgroundColor: alpha(theme.palette.action.active, 0.12),\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.active, 0.15)\n }\n }\n },\n selected: {},\n paper: {\n minWidth: '112px'\n },\n menuItem: {\n minHeight: '32px'\n },\n menuText: {\n color: theme.palette.text.primary,\n fontSize: '13px',\n lineHeight: '15px',\n letterSpacing: 0\n }\n}));\n","import React, {forwardRef} from 'react';\nimport {identity} from 'ramda';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport withTooltip from '../../HOCs/withTooltip/withTooltip';\nimport {DropDownMenuItem} from '../../types';\n\nimport {useStyles} from './styles';\n\nconst MenuItemWithTooltip = withTooltip(MenuItem);\n\ntype Props = {\n item: DropDownMenuItem;\n onMenuClose?: (e) => void;\n};\n\nconst MenuItemRenderer = forwardRef(({item, onMenuClose = identity}: Props, ref: React.Ref<HTMLLIElement>) => {\n const styles = useStyles();\n const {disabled, text, tooltip, onClick, id = '', selectable, selected} = item;\n const handleClick = (e) => {\n onMenuClose(e);\n onClick(e);\n };\n\n return (\n <MenuItemWithTooltip\n tooltipTitle={tooltip}\n showForDisabled={true}\n classes={{root: styles.menuItem}}\n onClick={handleClick}\n disabled={disabled}\n ref={ref}\n data-modal\n data-reltio-id={`reltio-search-menu-item${id}`}\n >\n {selectable && <Checkbox checked={selected} color=\"primary\" />}\n <Typography classes={{root: styles.menuText}}>{text}</Typography>\n </MenuItemWithTooltip>\n );\n});\n\nMenuItemRenderer.displayName = 'MenuItemRenderer';\n\nexport default MenuItemRenderer;\n","import React, {useCallback, useRef, useState} from 'react';\nimport classnames from 'classnames';\nimport {identity} from 'ramda';\nimport Button from '@mui/material/Button';\nimport Menu, {MenuProps} from '@mui/material/Menu';\nimport {useDidUpdateEffect} from '../../hooks';\nimport DefaultMenuItemRenderer from './MenuItemRenderer';\nimport {useStyles} from './styles';\nimport {DropDownMenuItem} from '../../types';\n\ntype Props<T> = {\n className?: string;\n buttonComponent?: React.ElementType;\n buttonContent?: React.ReactNode;\n menuItems?: T[];\n buttonProps?: Record<string, unknown>;\n popoverProps?: Omit<MenuProps, 'open'>;\n menuId: string;\n onMenuOpen?: () => void;\n onMenuClose?: () => void;\n MenuItemRenderer?: (props) => JSX.Element;\n};\n\nfunction DropDownMenuButton<T = DropDownMenuItem>({\n className,\n menuId,\n buttonComponent = Button,\n buttonContent,\n menuItems = [],\n buttonProps = {},\n popoverProps = {},\n onMenuOpen = identity,\n onMenuClose = identity,\n MenuItemRenderer = DefaultMenuItemRenderer\n}: Props<T>) {\n const ButtonComponent = buttonComponent;\n const styles = useStyles();\n const buttonRef = useRef();\n const [isOpen, setIsOpen] = useState(false);\n\n useDidUpdateEffect(() => {\n isOpen ? onMenuOpen() : onMenuClose();\n }, [isOpen]);\n\n const handleToggle = useCallback((e) => {\n e?.stopPropagation();\n setIsOpen((open) => !open);\n }, []);\n\n const renderMenuItem = (item, index) => {\n return <MenuItemRenderer item={item} key={index} onMenuClose={handleToggle} />;\n };\n\n return (\n <>\n <ButtonComponent\n data-reltio-id={'drop-down-menu-button'}\n ref={buttonRef}\n className={classnames(\n styles.buttonRoot,\n {\n [styles.selected]: isOpen\n },\n className\n )}\n onClick={handleToggle}\n aria-pressed={isOpen}\n aria-controls={isOpen ? menuId : undefined}\n aria-haspopup=\"true\"\n {...buttonProps}\n >\n {buttonContent}\n </ButtonComponent>\n <Menu\n id={menuId}\n variant=\"menu\"\n open={isOpen}\n autoFocus={false}\n classes={{paper: styles.paper}}\n anchorEl={buttonRef.current}\n onClose={handleToggle}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n elevation={2}\n MenuListProps={{autoFocusItem: isOpen}}\n {...popoverProps}\n >\n {menuItems.map(renderMenuItem)}\n </Menu>\n </>\n );\n}\n\nDropDownMenuButton.displayName = 'DropDownMenuButton';\n\nexport default DropDownMenuButton;\n","import {makeStyles} from '@mui/styles';\n\nconst maxWidth = 500;\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flex: '1 1 auto',\n flexWrap: 'nowrap',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '10px',\n overflow: 'auto',\n height: '100%',\n minHeight: '350px',\n boxSizing: 'border-box',\n '&$root_small': {\n minHeight: '160px'\n },\n '& $text': {\n color: theme.palette.text.primary,\n fontSize: '20px',\n fontWeight: 500,\n lineHeight: '24px',\n letterSpacing: '0.25px',\n textAlign: 'center'\n },\n '& $secondaryText': {\n color: theme.palette.text.secondary,\n fontSize: '15px',\n fontWeight: 300,\n lineHeight: '18px',\n letterSpacing: '0.11px',\n textAlign: 'center',\n paddingTop: '3px'\n }\n },\n root_small: {},\n embedded: {\n flexShrink: 0,\n width: '190px',\n height: '190px',\n padding: '8px'\n },\n full: {\n width: '256px',\n height: '256px'\n },\n textBox: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n maxWidth: maxWidth,\n marginTop: '16px'\n },\n text: {},\n secondaryText: {},\n button: {\n minHeight: 36,\n minWidth: 64,\n maxWidth: maxWidth,\n padding: '10px 16px',\n borderRadius: '2px',\n boxShadow:\n '0 0 2px 0 rgba(0,0,0,0.12), 0 2px 2px 0 rgba(0,0,0,0.24), 0 0 8px 0 rgba(0,0,0,0.12), 0 8px 8px 0 rgba(0,0,0,0.24)',\n fontSize: '14px',\n fontWeight: 500,\n lineHeight: '16px',\n marginTop: '24px'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\nimport {identity} from 'ramda';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport EmptySearchResultsIcon from '../../icons/EmptySearchResults';\nimport SelectAttributesIcon from '../../icons/SelectAttributes';\nimport NoData from '../../icons/NoData';\nimport Error from '../../icons/Error';\nimport {useStyles} from './styles';\n\nexport enum EMPTY_STATE_VARIANTS {\n full = 'full',\n embedded = 'embedded',\n small = 'small'\n}\n\nexport const EMPTY_STATE_ICONS = {\n SEARCH_RESULTS: EmptySearchResultsIcon,\n SELECT_ATTRIBUTES: SelectAttributesIcon,\n NO_DATA: NoData,\n ERROR: Error\n};\n\ntype Props = {\n variant?: EMPTY_STATE_VARIANTS;\n LogoRenderer?: React.ElementType;\n text: string;\n secondaryText?: string;\n buttonTitle?: string;\n access?: boolean;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n};\n\nconst EmptyState = ({\n variant = EMPTY_STATE_VARIANTS.full,\n LogoRenderer = EMPTY_STATE_ICONS.SEARCH_RESULTS,\n text,\n secondaryText,\n buttonTitle,\n onClick = identity,\n access\n}: Props) => {\n const styles = useStyles();\n const showButton = access && buttonTitle;\n\n return (\n <div className={classnames(styles.root, styles[`root_${variant}`])}>\n <LogoRenderer className={styles[`${variant}`]} />\n <div className={styles.textBox}>\n <Typography variant=\"h5\" classes={{h5: styles.text}}>\n {text}\n </Typography>\n {secondaryText && (\n <Typography variant=\"subtitle1\" classes={{subtitle1: styles.secondaryText}}>\n {secondaryText}\n </Typography>\n )}\n </div>\n {showButton && (\n <Button className={styles.button} variant=\"contained\" color=\"primary\" onClick={onClick}>\n {buttonTitle}\n </Button>\n )}\n </div>\n );\n};\n\nexport default EmptyState;\n","import React from 'react';\n\nconst SvgEmptySearchResults: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={256}\n height={256}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <radialGradient\n cx=\"50%\"\n cy=\"100%\"\n fx=\"50%\"\n fy=\"100%\"\n r=\"81.681%\"\n gradientTransform=\"matrix(.98998 0 0 .612 .005 .388)\"\n id=\"EmptySearchResults_svg__c\"\n >\n <stop stopColor=\"#00BFFF\" stopOpacity={0.5} offset=\"0%\" />\n <stop stopColor=\"#9EE8FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <radialGradient\n cx=\"50%\"\n cy=\"111.651%\"\n fx=\"50%\"\n fy=\"111.651%\"\n r=\"87.693%\"\n gradientTransform=\"matrix(0 -.97693 .7263 0 -.31 1.605)\"\n id=\"EmptySearchResults_svg__f\"\n >\n <stop stopColor=\"#91F8E5\" stopOpacity={0.6} offset=\"0%\" />\n <stop stopColor=\"#14F7FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <radialGradient\n cx=\"50%\"\n cy=\"103.659%\"\n fx=\"50%\"\n fy=\"103.659%\"\n r=\"90.207%\"\n gradientTransform=\"matrix(0 -1 2.23905 0 -1.821 1.537)\"\n id=\"EmptySearchResults_svg__g\"\n >\n <stop stopColor=\"#FFF\" offset=\"0%\" />\n <stop stopColor=\"#73FAFF\" stopOpacity={0.21} offset=\"59.38%\" />\n <stop stopColor=\"#14F7FF\" stopOpacity={0} offset=\"100%\" />\n </radialGradient>\n <linearGradient x1=\"50%\" y1=\"170.771%\" x2=\"50%\" y2=\"10.303%\" id=\"EmptySearchResults_svg__e\">\n <stop stopColor=\"#91F8E5\" offset=\"0%\" />\n <stop stopColor=\"#99FCFF\" stopOpacity={0} offset=\"100%\" />\n </linearGradient>\n <filter\n x=\"-25.9%\"\n y=\"-26.2%\"\n width=\"151.8%\"\n height=\"152.3%\"\n filterUnits=\"objectBoundingBox\"\n id=\"EmptySearchResults_svg__d\"\n >\n <feGaussianBlur stdDeviation={15} in=\"SourceGraphic\" />\n </filter>\n <circle id=\"EmptySearchResults_svg__a\" cx={128} cy={128} r={128} />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"EmptySearchResults_svg__b\" fill=\"#fff\">\n <use xlinkHref=\"#EmptySearchResults_svg__a\" />\n </mask>\n <use fillOpacity={0.2} fill=\"#A792CD\" xlinkHref=\"#EmptySearchResults_svg__a\" />\n <g mask=\"url(#EmptySearchResults_svg__b)\">\n <g transform=\"translate(56 34)\">\n <g opacity={0.9} strokeWidth={1} fill=\"#FFF\">\n <path d=\"M0 6.99C0 3.13 3.137 0 7 0h247.067c3.866 0 7 3.144 7 6.99v169.353c0 3.86-3.137 6.99-7 6.99H7c-3.866 0-7-3.143-7-6.99V6.99z\" />\n <path\n d=\"M13 25.99c0-3.86 3.137-6.99 7-6.99h247.067c3.866 0 7 3.144 7 6.99v169.353c0 3.86-3.137 6.99-7 6.99H20c-3.866 0-7-3.143-7-6.99V25.99z\"\n opacity={0.4}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 45.833)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <path\n d=\"M10.334 1.091c5.707 0 10.334 4.627 10.334 10.334v.067c0 5.707-4.627 10.333-10.334 10.333S0 17.2 0 11.492v-.067C0 5.718 4.627 1.091 10.334 1.091z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M35.365.861h69.768a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048h126.164a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869H73.89a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <rect\n fill=\"#645F6D\"\n opacity={0.5}\n x={21.756}\n y={17.46}\n width={87.022}\n height={12.004}\n rx={6.002}\n />\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 87.302)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <rect fill=\"#E3EBF4\" x={0} y={1.091} width={20.668} height={20.734} rx={10.334} />\n <path\n d=\"M35.365.861h82.647a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048H174.58a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869h113.119a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(21.756 128.77)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={213.204} cy={5.456} rx={4.351} ry={4.365} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={197.976} cy={5.456} rx={4.351} ry={4.365} />\n <path\n d=\"M10.334 1.091c5.707 0 10.334 4.627 10.334 10.334v.067c0 5.707-4.627 10.333-10.334 10.333S0 17.2 0 11.492v-.067C0 5.718 4.627 1.091 10.334 1.091z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M35.365.861h110.929a3.82 3.82 0 010 7.639H35.365a3.82 3.82 0 010-7.639z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M34.274 15.048h92.443a2.728 2.728 0 010 5.456H34.274a2.728 2.728 0 110-5.456z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M33.182 24.869H73.89a1.637 1.637 0 110 3.274H33.182a1.637 1.637 0 010-3.274z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n </g>\n </g>\n <g mask=\"url(#EmptySearchResults_svg__b)\">\n <path\n fill=\"#446275\"\n d=\"M72.246 84.033l8.66 5-35.5 61.488-8.66-5-12.556-24.729-51.307-29.622 20.431-35.388 50.648 29.242z\"\n />\n <path\n d=\"M62.906 120.21l-80.091-46.24 10.5-18.188 50.647 29.242 28.284-.99 8.66 5-18 31.176z\"\n fillOpacity={0.2}\n fill=\"#FFF\"\n />\n <path\n d=\"M27.566 75.558L3.877 109.065l-5.013-2.895 26.045-32.146 2.657 1.534zm9.467 5.466L13.345 114.53l-5.014-2.895L34.377 79.49l2.656 1.534zm8.158 4.71l-22.32 34.297-5.013-2.895L43.903 84.99l1.288.744z\"\n fill=\"#527585\"\n />\n <path\n d=\"M11.524 90.544l13.385-16.52 2.657 1.534-12.174 17.22-3.868-2.234zm9.467 5.467L34.377 79.49l2.656 1.534-12.174 17.22-3.868-2.233zm9.527 5.5L43.903 84.99l1.288.744-11.47 17.626-3.203-1.85z\"\n fill=\"#76A2B5\"\n opacity={0.6}\n />\n <path\n d=\"M.355 59.848l-23.689 33.507-5.013-2.895 26.045-32.146 2.657 1.534zm9.468 5.466L-13.866 98.82l-5.013-2.895L7.166 63.78l2.657 1.534zm8.158 4.71L-4.34 104.32l-5.014-2.895L16.692 69.28l1.289.744z\"\n fillOpacity={0.1}\n fill=\"#000\"\n />\n <g>\n <path\n fill=\"url(#EmptySearchResults_svg__c)\"\n opacity={0.993}\n filter=\"url(#EmptySearchResults_svg__d)\"\n d=\"M.63 0h173.74L123 172H52z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__e)\"\n opacity={0.3}\n d=\"M4 9h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__f)\"\n opacity={0.3}\n d=\"M4 2h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path\n fill=\"url(#EmptySearchResults_svg__g)\"\n d=\"M4 9h166.37L120.73 172.299H53.64z\"\n transform=\"rotate(120 90.404 138.861)\"\n />\n <path fill=\"#FFF\" opacity={0.196} d=\"M212.363 205.344l-1 1.732L60.418 124.52l4.977-8.62z\" />\n </g>\n <path fill=\"#76A2B5\" d=\"M73.112 84.533l-35.5 61.488-.866-.5 35.5-61.488z\" />\n <path fill=\"#F3F3F3\" d=\"M80.906 89.033l-35.5 61.488-.866-.5 35.5-61.488z\" />\n <path fill=\"#538196\" d=\"M55.112 115.71l-17.5 30.311-.866-.5 17.5-30.31z\" />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgEmptySearchResults;\n","import React from 'react';\n\nconst SvgSelectAttributes: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={256} height={256} viewBox=\"0 0 256 256\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx={128} cy={128} r={128} fill=\"#0072CE\" fillOpacity={0.1} />\n <mask\n id=\"SelectAttributes_svg__a\"\n style={{\n maskType: 'alpha'\n }}\n maskUnits=\"userSpaceOnUse\"\n x={0}\n y={0}\n width={256}\n height={256}\n >\n <circle cx={128} cy={128} r={128} fill=\"#fff\" />\n </mask>\n <g mask=\"url(#SelectAttributes_svg__a)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M-16 9h256v247H-16V9z\"\n fill=\"url(#SelectAttributes_svg__paint0_linear_0_19219)\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M187.761 56.865l58.639 58.639v148.871H93.383L52 225.083V56.865h135.761z\"\n fill=\"url(#SelectAttributes_svg__paint1_linear_0_19219)\"\n />\n <path\n opacity={0.06}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M47 58h202a7 7 0 017 7v157a7 7 0 01-7 7H47a7 7 0 01-7-7V65a7 7 0 017-7z\"\n fill=\"#000\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M50 56h201a5 5 0 015 5v157a5 5 0 01-5 5H50a5 5 0 01-5-5V61a5 5 0 015-5z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 72.635a3 3 0 013-3H150a3 3 0 110 6h-41.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 84.635a3 3 0 013-3h64.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 163a3 3 0 013-3H150a3 3 0 110 6h-41.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 175a3 3 0 013-3h64.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105.376 193a3 3 0 013-3H190a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M105 205a3 3 0 013-3h74.205a3 3 0 110 6H108a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138.376 103a3 3 0 013-3H223a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138 115a3 3 0 013-3h64.205a3 3 0 110 6H141a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <circle cx={67} cy={79} r={9} fill=\"#B6C7DB\" />\n <circle cx={67} cy={79} r={9} fill=\"#B6C7DB\" />\n <circle cx={120} cy={106} r={6} fill=\"#B6C7DB\" />\n <circle cx={120} cy={136} r={6} fill=\"#B6C7DB\" />\n <circle cx={67} cy={169} r={9} fill=\"#B6C7DB\" />\n <circle cx={67} cy={199} r={9} fill=\"#B6C7DB\" />\n <path\n opacity={0.8}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138.376 133a3 3 0 013-3H223a3 3 0 110 6h-81.624a3 3 0 01-3-3z\"\n fill=\"#B6C7DB\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M138 145a3 3 0 013-3h74.205a3 3 0 110 6H141a3 3 0 01-3-3z\"\n fill=\"#979797\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M92.514 108v-8h-2V140.365h11.178v-2h-9.178V110h9.178v-2h-9.178z\"\n fill=\"#2B98F0\"\n />\n <path\n opacity={0.54}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M95.071 77l-3.535 3.535L88 77h7.071z\"\n fill=\"#000\"\n />\n <path\n opacity={0.6}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M50 22h186a6 6 0 016 6v18a6 6 0 01-6 6H50a6 6 0 01-6-6V28a6 6 0 016-6z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58 37a6 6 0 016-6h70a6 6 0 110 12H64a6 6 0 01-6-6zM148 37a6 6 0 016-6h10a6 6 0 110 12h-10a6 6 0 01-6-6z\"\n fill=\"#979797\"\n />\n </g>\n <defs>\n <linearGradient\n id=\"SelectAttributes_svg__paint0_linear_0_19219\"\n x1={-16}\n y1={9}\n x2={-16}\n y2={256}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#FAFAFA\" stopOpacity={0.01} />\n <stop offset={1} stopColor=\"#F4F4F4\" />\n </linearGradient>\n <linearGradient\n id=\"SelectAttributes_svg__paint1_linear_0_19219\"\n x1={266.117}\n y1={181.111}\n x2={154.882}\n y2={77.681}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity={0.01} />\n <stop offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport default SvgSelectAttributes;\n","import React from 'react';\n\nconst SvgNoData: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg\n width={256}\n height={256}\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n {...props}\n >\n <defs>\n <linearGradient x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\" id=\"NoData_svg__b\">\n <stop stopColor=\"#FAFAFA\" stopOpacity={0} offset=\"0%\" />\n <stop stopColor=\"#F4F4F4\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"69.573%\" y1=\"86.747%\" x2=\"38.144%\" y2=\"33.403%\" id=\"NoData_svg__d\">\n <stop stopColor=\"#000\" stopOpacity={0} offset=\"0%\" />\n <stop stopColor=\"#000\" offset=\"100%\" />\n </linearGradient>\n <linearGradient x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\" id=\"NoData_svg__e\">\n <stop stopColor=\"#EEFBFF\" offset=\"0%\" />\n <stop stopColor=\"#0072CE\" offset=\"100%\" />\n </linearGradient>\n <filter\n x=\"-7.7%\"\n y=\"-7.5%\"\n width=\"115.3%\"\n height=\"115%\"\n filterUnits=\"objectBoundingBox\"\n id=\"NoData_svg__f\"\n >\n <feOffset dx={0} dy={2} in=\"SourceAlpha\" result=\"shadowOffsetOuter1\" />\n <feGaussianBlur stdDeviation={2} in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\" />\n <feColorMatrix\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n type=\"matrix\"\n in=\"shadowBlurOuter1\"\n result=\"shadowMatrixOuter1\"\n />\n <feMerge>\n <feMergeNode in=\"shadowMatrixOuter1\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n <circle id=\"NoData_svg__a\" cx={128} cy={128} r={128} />\n </defs>\n <g stroke=\"none\" strokeWidth={1} fill=\"none\" fillRule=\"evenodd\">\n <mask id=\"NoData_svg__c\" fill=\"#fff\">\n <use xlinkHref=\"#NoData_svg__a\" />\n </mask>\n <use fillOpacity={0.1} fill=\"#0072CE\" xlinkHref=\"#NoData_svg__a\" />\n <path fill=\"url(#NoData_svg__b)\" mask=\"url(#NoData_svg__c)\" d=\"M0 9h256v247H0z\" />\n <g mask=\"url(#NoData_svg__c)\">\n <g transform=\"translate(29 37)\">\n <g opacity={0.9} strokeWidth={1} fill=\"#FFF\">\n <path fillOpacity={0.8} opacity={0.5} d=\"M14.565 8h228.144v176.476H14.565z\" />\n <path d=\"M0 8.01C0 3.586 3.576 0 7.997 0h223.838a7.997 7.997 0 017.997 8.01v152.401c0 4.424-3.577 8.01-7.997 8.01H7.997A7.997 7.997 0 010 160.411V8.01z\" />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 42.105)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <path\n d=\"M9.493 1.003a9.493 9.493 0 019.494 9.493v.06a9.493 9.493 0 01-18.987 0v-.06a9.493 9.493 0 019.493-9.493z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M32.488.791h64.093a3.509 3.509 0 110 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h115.902a2.506 2.506 0 010 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846H67.88a1.504 1.504 0 110 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <rect\n fill=\"#645F6D\"\n opacity={0.5}\n x={19.986}\n y={16.04}\n width={79.944}\n height={11.028}\n rx={5.514}\n />\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 80.2)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <rect fill=\"#E3EBF4\" x={0} y={1.003} width={18.987} height={19.048} rx={9.493} />\n <path\n d=\"M32.488.791h75.925a3.509 3.509 0 010 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h128.893a2.506 2.506 0 110 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846h103.918a1.504 1.504 0 010 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n <g strokeWidth={1} fill=\"none\" transform=\"translate(19.986 118.296)\">\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={195.862} cy={5.013} rx={3.997} ry={4.01} />\n <ellipse fill=\"#6DBCFF\" opacity={0.5} cx={181.872} cy={5.013} rx={3.997} ry={4.01} />\n <path\n d=\"M9.493 1.003a9.493 9.493 0 019.494 9.493v.06a9.493 9.493 0 01-18.987 0v-.06a9.493 9.493 0 019.493-9.493z\"\n fill=\"#E3EBF4\"\n />\n <path\n d=\"M32.488.791h101.906a3.509 3.509 0 010 7.018H32.488a3.509 3.509 0 110-7.018z\"\n fill=\"#B1AABD\"\n opacity={0.5}\n />\n <path\n d=\"M31.486 13.824h84.924a2.506 2.506 0 010 5.012H31.486a2.506 2.506 0 010-5.012z\"\n fill=\"#B1AABD\"\n opacity={0.43}\n />\n <path\n d=\"M30.483 22.846H67.88a1.504 1.504 0 110 3.008H30.483a1.504 1.504 0 110-3.008z\"\n fill=\"#B1AABD\"\n opacity={0.2}\n />\n </g>\n </g>\n </g>\n <g mask=\"url(#NoData_svg__c)\">\n <path\n d=\"M154.445 45.134v154.072H36.625V45.134h.811C35.508 62.52 41.07 80.609 54.12 93.944c22.74 23.235 59.61 23.235 82.352 0 13.05-13.335 18.612-31.424 16.683-48.81h1.29z\"\n fill=\"url(#NoData_svg__d)\"\n opacity={0.1}\n transform=\"rotate(-30 291.014 34.548)\"\n />\n <path\n d=\"M27.473 93.234c17.964 18.355 47.09 18.355 65.054 0s17.964-48.113 0-66.468c-17.964-18.355-47.09-18.355-65.054 0s-17.964 48.113 0 66.468z\"\n fill=\"url(#NoData_svg__e)\"\n opacity={0.2}\n transform=\"translate(70 86)\"\n />\n <g filter=\"url(#NoData_svg__f)\" strokeWidth={1} fill=\"none\" transform=\"translate(70 86)\">\n <path\n d=\"M59.697 0c32.97 0 59.697 26.746 59.697 59.738 0 15.185-5.662 29.047-14.988 39.587l51.204 51.24a89.336 89.336 0 01-10.097 9.392l-51.38-51.416c-9.73 6.888-21.61 10.936-34.436 10.936C26.727 119.477 0 92.73 0 59.738 0 26.746 26.727 0 59.697 0zm0 17.756c-23.17 0-41.953 18.796-41.953 41.982s18.783 41.982 41.953 41.982 41.953-18.796 41.953-41.982-18.783-41.982-41.953-41.982z\"\n fill=\"#B5C8C9\"\n />\n <path\n d=\"M21.508 105.656C8.365 94.698 0 78.196 0 59.738 0 26.746 26.727 0 59.697 0c18.444 0 34.935 8.37 45.885 21.523l-9.794 9.8c-8.408-10.68-21.45-17.537-36.091-17.537-25.361 0-45.92 20.573-45.92 45.952 0 14.652 6.852 27.702 17.525 36.117l-9.794 9.8z\"\n fillOpacity={0.4}\n fill=\"#FFF\"\n />\n </g>\n <path\n d=\"M97.473 179.234c17.964 18.355 47.09 18.355 65.054 0s17.964-48.113 0-66.468c-17.964-18.355-47.09-18.355-65.054 0s-17.964 48.113 0 66.468z\"\n fill=\"#D9F5FF\"\n opacity={0.4}\n style={{\n mixBlendMode: 'soft-light'\n }}\n />\n <path\n d=\"M123.885 158.736c0-3.929.444-7.03 1.332-9.304.888-2.274 2.328-4.245 4.32-5.914 1.99-1.668 3.504-3.195 4.54-4.581 1.037-1.386 1.555-2.913 1.555-4.581 0-4.064-1.75-6.095-5.248-6.095-1.614 0-2.92.592-3.915 1.776-.996 1.184-1.52 2.785-1.574 4.803H111.25c.054-5.382 1.75-9.573 5.086-12.574 3.337-3 8.02-4.5 14.047-4.5 6.001 0 10.65 1.386 13.946 4.157 3.297 2.772 4.945 6.714 4.945 11.827 0 2.234-.444 4.265-1.332 6.095-.888 1.83-2.315 3.7-4.279 5.61l-4.642 4.32c-1.318 1.265-2.233 2.563-2.745 3.895-.51 1.332-.793 3.02-.847 5.066h-11.545zm-1.655 12.27c0-1.99.72-3.625 2.16-4.904 1.44-1.278 3.236-1.917 5.389-1.917 2.152 0 3.949.64 5.388 1.917 1.44 1.279 2.16 2.913 2.16 4.905 0 1.991-.72 3.626-2.16 4.904-1.44 1.278-3.236 1.917-5.388 1.917-2.153 0-3.95-.639-5.389-1.917-1.44-1.278-2.16-2.913-2.16-4.904z\"\n fillOpacity={0.87}\n fill=\"#000\"\n style={{\n mixBlendMode: 'overlay'\n }}\n />\n <path\n d=\"M123.885 158.736c0-3.929.444-7.03 1.332-9.304.888-2.274 2.328-4.245 4.32-5.914 1.99-1.668 3.504-3.195 4.54-4.581 1.037-1.386 1.555-2.913 1.555-4.581 0-4.064-1.75-6.095-5.248-6.095-1.614 0-2.92.592-3.915 1.776-.996 1.184-1.52 2.785-1.574 4.803H111.25c.054-5.382 1.75-9.573 5.086-12.574 3.337-3 8.02-4.5 14.047-4.5 6.001 0 10.65 1.386 13.946 4.157 3.297 2.772 4.945 6.714 4.945 11.827 0 2.234-.444 4.265-1.332 6.095-.888 1.83-2.315 3.7-4.279 5.61l-4.642 4.32c-1.318 1.265-2.233 2.563-2.745 3.895-.51 1.332-.793 3.02-.847 5.066h-11.545zm-1.655 12.27c0-1.99.72-3.625 2.16-4.904 1.44-1.278 3.236-1.917 5.389-1.917 2.152 0 3.949.64 5.388 1.917 1.44 1.279 2.16 2.913 2.16 4.905 0 1.991-.72 3.626-2.16 4.904-1.44 1.278-3.236 1.917-5.388 1.917-2.153 0-3.95-.639-5.389-1.917-1.44-1.278-2.16-2.913-2.16-4.904z\"\n fillOpacity={0.38}\n fill=\"#3C74B4\"\n />\n </g>\n </g>\n </svg>\n );\n};\n\nexport default SvgNoData;\n","import React from 'react';\n\nconst SvgError: React.FC<React.SVGProps<SVGSVGElement>> = (props) => {\n return (\n <svg width={88} height={88} viewBox=\"0 0 88 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <mask\n id=\"Error_svg__a\"\n style={{\n maskType: 'alpha'\n }}\n maskUnits=\"userSpaceOnUse\"\n x={0}\n y={0}\n width={88}\n height={88}\n >\n <path d=\"M44 88c24.3 0 44-19.7 44-44S68.3 0 44 0 0 19.7 0 44s19.7 44 44 44z\" fill=\"#fff\" />\n </mask>\n <g mask=\"url(#Error_svg__a)\">\n <path\n d=\"M44 88c24.3 0 44-19.7 44-44S68.3 0 44 0 0 19.7 0 44s19.7 44 44 44z\"\n fill=\"#CAC4D5\"\n fillOpacity={0.3}\n />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M19.987 6.73l49.449 6.072a.687.687 0 01.596.767l-7.845 63.888a.688.688 0 01-.766.6L7.214 71.4a.688.688 0 01-.599-.763l.408-3.326L19.987 6.73z\"\n fill=\"#fff\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.267 25.921l45.86-19.466a.687.687 0 01.9.366l25.15 59.251a.61.61 0 01-.386.84L22.34 82.765a.719.719 0 01-.887-.445l-20.185-56.4z\"\n fill=\"#fff\"\n />\n <path\n d=\"M65.631 9.23H11.017a.688.688 0 00-.687.687v64.37c0 .38.307.687.687.687h54.614c.38 0 .688-.308.688-.687V9.917a.688.688 0 00-.688-.688z\"\n fill=\"#F9F9F9\"\n />\n <path\n opacity={0.1}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 34.95l3.105-1.666 7.31-4.025 8.852 3.472 7.89-5.223 8.036-2.628 8.113 5.193 3.352-10.255v16.967H14.935l-.05-1.835z\"\n fill=\"#9C6CF0\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 32.331l3.105-3.761 7.31 4.31 8.852 1.656 7.89-2.205 8.036 1.827 8.113-12.643 3.352.742V36.36H14.935l-.05-4.029z\"\n fill=\"#FA82AA\"\n />\n <path\n opacity={0.2}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M14.885 34.946l3.105.432 7.31 1.01 8.852-5.117 7.89 3.675 8.036 1.839 8.113-1.839 3.352.811v1.028H14.935l-.05-1.839z\"\n fill=\"#4DBEE9\"\n />\n <path\n opacity={0.1}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M61.543 35.288l-.05 1.497H14.885v-5.239l3.352-.276 8.114 4.697 8.036-.679 7.889.82 8.852-.616 7.31-1.601 3.105 1.397z\"\n fill=\"#4DBEE9\"\n />\n <path d=\"M21.036 40.178h-5.09a.636.636 0 000 1.272h5.09a.636.636 0 100-1.272z\" fill=\"#ACACAC\" />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM25.914 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM39.91 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM21.248 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.273 1.273 0 01-2.545 0V57.144c0-.702.57-1.272 1.273-1.272zM35.245 55.872c.703 0 1.273.57 1.273 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM30.58 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.272 1.272 0 11-2.545 0V57.144c0-.702.57-1.272 1.272-1.272zM44.577 55.872c.702 0 1.272.57 1.272 1.273V69.02a1.273 1.273 0 01-2.545 0V57.144c0-.702.57-1.272 1.273-1.272z\"\n fill=\"#BDBDBD\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 65.628c.703 0 1.273.57 1.273 1.272v2.121a1.272 1.272 0 11-2.545 0v-2.12c0-.703.57-1.273 1.272-1.273zM25.914 62.658c.702 0 1.272.57 1.272 1.273v5.09a1.272 1.272 0 11-2.545 0v-5.09c0-.703.57-1.273 1.273-1.273zM39.91 65.628c.703 0 1.273.57 1.273 1.272v2.121a1.272 1.272 0 11-2.545 0v-2.12c0-.703.57-1.273 1.273-1.273zM21.248 66.477c.702 0 1.272.57 1.272 1.272v1.273a1.273 1.273 0 01-2.545 0v-1.273c0-.703.57-1.272 1.273-1.272z\"\n fill=\"#4DBEE9\"\n />\n <path\n d=\"M36.518 65.628a1.272 1.272 0 00-2.545 0v3.393a1.272 1.272 0 102.545 0v-3.393zM31.852 62.234a1.272 1.272 0 10-2.545 0v6.787a1.272 1.272 0 102.545 0v-6.787z\"\n fill=\"#4DBEE9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M44.577 60.962c.702 0 1.272.57 1.272 1.272v6.787a1.273 1.273 0 01-2.545 0v-6.787c0-.702.57-1.272 1.273-1.272z\"\n fill=\"#4DBEE9\"\n />\n <path d=\"M18.915 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#9C6CF0\" />\n <path\n opacity={0.5}\n d=\"M34.185 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\"\n fill=\"#4DBEE9\"\n />\n <path\n opacity={0.3}\n d=\"M49.454 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\"\n fill=\"#4DBEE9\"\n />\n <path opacity={0.8} d=\"M26.55 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#FB6597\" />\n <path d=\"M41.82 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#4DBEE9\" />\n <path opacity={0.2} d=\"M57.09 18.546a1.909 1.909 0 100-3.817 1.909 1.909 0 000 3.817z\" fill=\"#4DBEE9\" />\n <path\n opacity={0.5}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M16.582 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849zM31.851 19.818h4.666a.424.424 0 010 .849h-4.666a.424.424 0 110-.849zM47.121 19.818h4.666a.424.424 0 010 .849h-4.666a.424.424 0 010-.849zM24.217 19.818h4.665a.424.424 0 010 .849h-4.665a.424.424 0 010-.849zM39.486 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849zM54.756 19.818h4.666a.424.424 0 110 .849h-4.666a.424.424 0 110-.849z\"\n fill=\"#ACACAC\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M15.946 43.571h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 010-1.273zM15.946 46.116h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 010-1.273zM15.946 48.661h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 110-1.273zM23.58 43.571h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 010-1.273zM23.58 46.116h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 010-1.273zM23.58 48.661h5.09a.636.636 0 010 1.273h-5.09a.636.636 0 110-1.273zM49.454 43.571h11.028a.636.636 0 010 1.273H49.454a.636.636 0 010-1.273zM49.454 46.116h11.028a.636.636 0 010 1.273H49.454a.636.636 0 010-1.273zM49.454 48.661h11.028a.636.636 0 010 1.273H49.454a.636.636 0 110-1.273zM31.215 43.571h15.27a.636.636 0 110 1.273h-15.27a.636.636 0 010-1.273zM31.215 46.116h15.27a.636.636 0 010 1.273h-15.27a.636.636 0 010-1.273zM31.215 48.661h15.27a.636.636 0 010 1.273h-15.27a.636.636 0 010-1.273zM15.946 51.206h5.09a.636.636 0 110 1.272h-5.09a.636.636 0 110-1.272zM23.58 51.206h5.09a.636.636 0 110 1.272h-5.09a.636.636 0 110-1.272zM49.454 51.206h11.028a.636.636 0 010 1.272H49.454a.636.636 0 110-1.272zM31.215 51.206h15.27a.636.636 0 110 1.272h-15.27a.636.636 0 010-1.272z\"\n fill=\"#E9E9E9\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M49.878 55.872h5.09a.636.636 0 110 1.273h-5.09a.636.636 0 110-1.273z\"\n fill=\"#ACACAC\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M49.878 59.69h11.029a.636.636 0 010 1.272H49.878a.636.636 0 110-1.273zM49.878 62.234h11.029a.636.636 0 010 1.273H49.878a.636.636 0 010-1.273zM49.878 64.78h11.029a.636.636 0 010 1.272H49.878a.636.636 0 010-1.273z\"\n fill=\"#E9E9E9\"\n />\n <path d=\"M54.968 67.324h-5.09a.636.636 0 000 1.273h5.09a.636.636 0 000-1.273z\" fill=\"#E9E9E9\" />\n <g filter=\"url(#Error_svg__filter0_d)\">\n <path\n d=\"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\"\n fill=\"#000\"\n />\n </g>\n <path\n d=\"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.15}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 34.719c12.34 0 22.344 10.003 22.344 22.343S69.746 79.406 57.406 79.406c-12.34 0-22.343-10.003-22.343-22.344 0-12.34 10.003-22.343 22.343-22.343zm-.172 2.406c-10.916 0-19.765 8.85-19.765 19.766 0 10.916 8.85 19.765 19.765 19.765C68.151 76.656 77 67.806 77 56.891c0-10.917-8.85-19.766-19.766-19.766z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.3}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 38.844c10.062 0 18.219 8.157 18.219 18.218 0 10.062-8.157 18.22-18.219 18.22-10.062 0-18.218-8.158-18.218-18.22 0-10.061 8.156-18.218 18.218-18.218zm0 2.043c-8.933 0-16.175 7.242-16.175 16.175 0 8.934 7.242 16.176 16.175 16.176 8.934 0 16.176-7.242 16.176-16.175 0-8.934-7.242-16.176-16.176-16.176z\"\n fill=\"#F25252\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M57.406 26.469C74.303 26.469 88 40.166 88 57.062c0 16.897-13.697 30.594-30.594 30.594-16.896 0-30.593-13.697-30.593-30.594 0-16.896 13.697-30.593 30.593-30.593zm-.172 3.437c-14.903 0-26.984 12.082-26.984 26.985 0 14.903 12.081 26.984 26.984 26.984 14.903 0 26.985-12.081 26.985-26.984 0-14.903-12.082-26.985-26.985-26.985z\"\n fill=\"#F25252\"\n />\n <path\n d=\"M57.406 71.844c8.164 0 14.782-6.618 14.782-14.781 0-8.164-6.618-14.782-14.782-14.782-8.163 0-14.781 6.618-14.781 14.782 0 8.163 6.618 14.78 14.781 14.78z\"\n fill=\"#FF6A6A\"\n />\n <path\n opacity={0.05}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M58.298 46.448L75.18 63.331l-9.114 12.078h-2.029l-7.582-7.582 1.006-3.178.837-18.2z\"\n fill=\"url(#Error_svg__paint0_linear)\"\n />\n <g filter=\"url(#Error_svg__filter1_d)\">\n <path d=\"M57.406 68.063a1.719 1.719 0 100-3.438 1.719 1.719 0 000 3.438z\" fill=\"#000\" />\n </g>\n <path d=\"M57.406 68.063a1.719 1.719 0 100-3.438 1.719 1.719 0 000 3.438z\" fill=\"#fff\" />\n <g filter=\"url(#Error_svg__filter2_d)\">\n <path\n d=\"M57.406 46.063c.95 0 1.719.769 1.719 1.718v12.375a1.719 1.719 0 11-3.438 0V47.781c0-.949.77-1.718 1.72-1.718z\"\n fill=\"#000\"\n />\n </g>\n <path\n d=\"M57.406 46.063c.95 0 1.719.769 1.719 1.718v12.375a1.719 1.719 0 11-3.438 0V47.781c0-.949.77-1.718 1.72-1.718z\"\n fill=\"#fff\"\n />\n </g>\n <defs>\n <filter\n id=\"Error_svg__filter0_d\"\n x={36.219}\n y={37.875}\n width={42.375}\n height={42.375}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <filter\n id=\"Error_svg__filter1_d\"\n x={51.688}\n y={62.625}\n width={11.438}\n height={11.438}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <filter\n id=\"Error_svg__filter2_d\"\n x={51.688}\n y={44.063}\n width={11.438}\n height={23.813}\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity={0} result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" />\n <feOffset dy={2} />\n <feGaussianBlur stdDeviation={2} />\n <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow\" result=\"shape\" />\n </filter>\n <linearGradient\n id=\"Error_svg__paint0_linear\"\n x1={68.438}\n y1={71.571}\n x2={60.119}\n y2={58.801}\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopOpacity={0} />\n <stop offset={1} />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport default SvgError;\n","import React from 'react';\n\ntype State = {\n error: Error | null;\n};\n\ntype Props = {\n error: React.ReactNode;\n};\n\nexport default class ErrorBoundary extends React.Component<Props, State> {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n\n componentDidCatch(error) {\n this.setState({\n error: error\n });\n console.error(error);\n }\n\n render() {\n const {children, error} = this.props;\n if (this.state.error) {\n return error;\n }\n return children;\n }\n}\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\ntype Props = {\n children: React.ReactNode;\n widthToHide: number;\n};\n\nconst HideOnShrink = ({widthToHide, children}: Props) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nexport default HideOnShrink;\n","import {curry, defaultTo, mergeAll, pick, pipe, prop, propEq, __} from 'ramda';\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReactGridLayoutItem, ReltioGridLayoutOptions} from '../../types';\n\nexport const reltioLayoutItemToReactGridLayoutItem = ({\n x,\n y,\n width,\n height,\n id,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n isStatic\n}: ReltioGridLayoutItem): ReactGridLayoutItem => ({\n x,\n y,\n w: width,\n h: height,\n minW: minWidth,\n minH: minHeight,\n maxW: maxWidth,\n maxH: maxHeight,\n i: id,\n static: isStatic\n});\n\nexport const reactGridLayoutItemToReltioLayoutItem = ({\n x,\n y,\n w,\n h,\n maxW,\n minW,\n minH,\n maxH,\n i,\n ...obj\n}: ReactGridLayoutItem): ReltioGridLayoutItem => ({\n x,\n y,\n width: w,\n height: h,\n minWidth: minW,\n minHeight: minH,\n maxWidth: maxW,\n maxHeight: maxH,\n id: i,\n isStatic: obj.static\n});\n\nexport const reltioLayoutToReactGridLayout = (layout: ReltioGridLayoutItem[]): ReactGridLayoutItem[] =>\n (layout || []).map(reltioLayoutItemToReactGridLayoutItem);\n\nexport const reactGridLayoutToReltioLayout = (layout: ReactGridLayoutItem[]): ReltioGridLayoutItem[] =>\n (layout || []).map(reactGridLayoutItemToReltioLayoutItem);\n\nexport const getReltioLayoutItemById = curry((layout: ReltioGridLayoutItem[], id: string) =>\n (layout || []).find(propEq('id', id))\n);\n\nconst updateExtraPropsInLayoutItem = curry(\n (props: string[], from: Record<string, unknown>, to: Record<string, unknown>) => mergeAll([to, pick(props, from)])\n);\n\nexport const copyPropsFromPreviousLayout = curry(\n (\n props: string[],\n oldReltioLayout: ReltioGridLayoutItem[],\n reltioLayout: ReltioGridLayoutItem[]\n ): ReltioGridLayoutItem[] =>\n (reltioLayout || []).map((layoutItem) =>\n pipe(\n prop('id'),\n getReltioLayoutItemById(oldReltioLayout),\n defaultTo({}),\n updateExtraPropsInLayoutItem(props, __, layoutItem)\n )(layoutItem)\n )\n);\n\nexport const calcHeight = (height: number, options: ReltioGridLayoutOptions): number => {\n const {margin, rowHeight} = options;\n\n return Math.ceil((height + margin[1]) / (rowHeight + margin[1]));\n};\n\nexport const alignGroupedItemsHeights = curry(\n (heightsMap: {[id: string]: number}, layout: ReltioGridLayoutItem[]): ReltioGridLayoutItem[] => {\n return layout.map((layoutItem) => {\n const oneRowItemsHeights = layout\n .filter((item) => item.y === layoutItem.y)\n .map((item) => heightsMap[item.id] || (!item.autosizing && item.minHeight) || 0);\n const newHeight = Math.max(...oneRowItemsHeights);\n if (layoutItem.height !== newHeight && newHeight) {\n const minMaxHeights = layoutItem.autosizing\n ? {\n minHeight: newHeight,\n maxHeight: newHeight\n }\n : {};\n return {\n ...layoutItem,\n ...minMaxHeights,\n height: newHeight\n };\n }\n return layoutItem;\n });\n }\n);\n\nexport const calcLayoutItemsHeight = curry(\n (heightsMap: {[id: string]: number}, layout: ReltioGridLayoutItem[]): ReltioGridLayoutItem[] => {\n return layout.map((layoutItem) => {\n const height = heightsMap[layoutItem.id];\n if (height && layoutItem.autosizing) {\n return {\n ...layoutItem,\n minHeight: height,\n maxHeight: height,\n height\n };\n }\n return layoutItem;\n });\n }\n);\n","export const RESIZE_ICON = `<svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path stroke=\"#505050\" stroke-opacity=\".54\" d=\"M9.5 0v10M0 9.5h9M7.5 4v4M4 7.5h3\"/>\n</svg>`;\n","import {makeStyles} from '@mui/styles';\nimport {svg2Url} from '@reltio/mdm-sdk';\nimport {RESIZE_ICON} from './icons/ResizeIcon.svg';\n\nexport const useStyles = makeStyles((_) => ({\n gridLayout: {\n position: 'relative',\n width: '100%',\n '& .react-grid-item': {\n '&.react-grid-placeholder': {\n background: 'rgba(0, 0, 0, 0.03)',\n border: '2px dashed rgba(0, 0, 0, 0.3)',\n borderRadius: '3px',\n transitionDuration: '100ms',\n zIndex: 7,\n userSelect: 'none',\n '& .react-resizable-handle': {\n display: 'none'\n }\n },\n '&.static .react-resizable-handle': {\n display: 'none'\n },\n '&.customView .react-resizable-handle': {\n width: '10px',\n height: '10px'\n },\n '&.cssTransforms': {\n transitionProperty: 'transform'\n },\n '&.react-draggable-dragging': {\n transition: 'none',\n zIndex: 8,\n willChange: 'transform',\n '& .react-resizable-handle': {\n backgroundImage: 'none'\n }\n },\n '& .react-resizable-handle': {\n position: 'absolute',\n width: '14px',\n height: '14px',\n bottom: 0,\n right: 0,\n zIndex: 20,\n backgroundImage: `url('${svg2Url(RESIZE_ICON)}')`,\n backgroundRepeat: 'no-repeat',\n backgroundOrigin: 'content-box',\n boxSizing: 'border-box',\n cursor: 'se-resize'\n },\n '&.fullscreen': {\n visibility: 'visible',\n position: 'unset',\n width: '100% !important',\n height: '100% !important',\n transform: 'translate(0) !important'\n }\n }\n },\n\n gridFullscreen: {\n height: '100% !important',\n overflowY: 'hidden',\n '& .react-resizable-handle, & .react-grid-item': {\n visibility: 'hidden'\n }\n },\n isResizing: {\n zIndex: 9,\n willChange: 'width, height',\n pointerEvents: 'none'\n }\n}));\n","import React, {DragEvent, useCallback, useMemo, useRef, useState, memo, ElementType} from 'react';\nimport GridLayout from 'react-grid-layout';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {pipe, ifElse, always} from 'ramda';\nimport classnames from 'classnames';\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReactGridLayoutItem, ReltioGridLayoutOptions} from '../../types';\nimport {\n alignGroupedItemsHeights,\n calcLayoutItemsHeight,\n reltioLayoutToReactGridLayout,\n reactGridLayoutToReltioLayout,\n reactGridLayoutItemToReltioLayoutItem,\n copyPropsFromPreviousLayout,\n calcHeight,\n getReltioLayoutItemById\n} from './helpers';\nimport {noop} from '../../core';\n\nimport {useStyles} from './styles';\n\ntype Props<ViewConfig = Record<string, unknown>> = {\n layout: ReltioGridLayoutItem[];\n views?: ViewConfig[];\n layoutOptions?: ReltioGridLayoutOptions;\n onLayoutChanged?: (layout: ReltioGridLayoutItem[]) => void;\n onDrop?: (layout: ReltioGridLayoutItem[], layoutItem: ReltioGridLayoutItem, e: DragEvent<HTMLDivElement>) => void;\n onRemove?: (id: string) => void;\n LayoutItem: ElementType;\n draggableHandle?: string;\n isDroppable?: boolean;\n isStatic?: boolean;\n droppingItem?: ReactGridLayoutItem;\n classes?: {\n root?: string;\n item?: string;\n };\n};\n\nconst DEFAULT_LAYOUT_OPTIONS: ReltioGridLayoutOptions = {\n cols: 4,\n rowHeight: 30,\n margin: [15, 15]\n};\n\nconst ReltioGridLayout = ({\n views,\n layout,\n layoutOptions = DEFAULT_LAYOUT_OPTIONS,\n onLayoutChanged = noop,\n draggableHandle,\n LayoutItem,\n onRemove,\n onDrop,\n droppingItem,\n isDroppable,\n isStatic,\n classes\n}: Props) => {\n const ref = useRef();\n const heightsMap = useRef<{[id: string]: number}>({});\n const styles = useStyles();\n const [resizingItemId, setResizingItemId] = useState<string>(null);\n const [fullscreenItemId, setFullscreenItemId] = useState<string>(null);\n const [width, setWidth] = useState(0);\n const {cols, rowHeight, margin} = layoutOptions;\n const processedLayout: ReactGridLayoutItem[] = useMemo(() => reltioLayoutToReactGridLayout(layout), [layout]);\n\n const onReltioLayoutChanged = pipe(\n reactGridLayoutToReltioLayout,\n copyPropsFromPreviousLayout(['autosizing'], layout),\n ifElse(\n always(isStatic),\n alignGroupedItemsHeights(heightsMap.current),\n calcLayoutItemsHeight(heightsMap.current)\n ),\n onLayoutChanged\n );\n const handleDrop = (\n layout: ReactGridLayoutItem[],\n layoutItem: ReactGridLayoutItem,\n e: DragEvent<HTMLDivElement>\n ) => {\n if (onDrop) {\n onDrop(reactGridLayoutToReltioLayout(layout), reactGridLayoutItemToReltioLayoutItem(layoutItem), e);\n }\n };\n const onToggleFullscreen = useCallback((id: string) => setFullscreenItemId((prevId) => (prevId ? null : id)), []);\n const isFullscreenEnabled = fullscreenItemId !== null;\n\n const getAutosizeComponent = (layoutItemId: string) => (\n <ReactResizeDetector\n handleHeight\n onResize={(_, height) => {\n if (height) {\n const newHeight = calcHeight(height, layoutOptions);\n if (newHeight !== heightsMap.current[layoutItemId]) {\n heightsMap.current[layoutItemId] = newHeight;\n onReltioLayoutChanged(processedLayout);\n }\n }\n }}\n />\n );\n\n return (\n <>\n <ReactResizeDetector\n refreshMode=\"debounce\"\n refreshRate={50}\n handleWidth={true}\n onResize={(width: number) => setWidth(width)}\n />\n {!!width && (\n <GridLayout\n innerRef={ref}\n layout={processedLayout}\n cols={cols}\n draggableHandle={draggableHandle}\n autoSize={true}\n rowHeight={rowHeight}\n width={width}\n margin={margin}\n onLayoutChange={isStatic ? undefined : onReltioLayoutChanged}\n isResizable={!isStatic && !isFullscreenEnabled}\n isDraggable={!isStatic && !isFullscreenEnabled}\n className={classnames(classes?.root, styles.gridLayout, {\n [styles.gridFullscreen]: isFullscreenEnabled\n })}\n onDrop={handleDrop}\n droppingItem={droppingItem}\n isDroppable={!isStatic && isDroppable}\n onResizeStart={(_, layoutItem) => setResizingItemId(layoutItem.i)}\n onResizeStop={() => setResizingItemId(null)}\n data-reltio-id=\"reltio-grid-layout\"\n >\n {processedLayout.map((layoutItem) => {\n const isItemFullscreen = fullscreenItemId === layoutItem.i;\n const isResizing = resizingItemId === layoutItem.i;\n const isAutosize = (getReltioLayoutItemById(layout, layoutItem.i) || {}).autosizing;\n const autosizeComponent = isAutosize\n ? {AutosizeComponent: getAutosizeComponent(layoutItem.i)}\n : {};\n return (\n <LayoutItem\n key={layoutItem.i}\n layoutItemConfig={layoutItem}\n views={views}\n onToggleFullscreen={onToggleFullscreen}\n onRemove={onRemove}\n className={classnames(classes?.item, {\n static: isStatic,\n fullscreen: isItemFullscreen,\n [styles.isResizing]: isResizing\n })}\n isFullscreen={isItemFullscreen}\n {...autosizeComponent}\n />\n );\n })}\n </GridLayout>\n )}\n </>\n );\n};\n\nReltioGridLayout.displayName = 'ReltioGridLayout';\n\nexport default memo(ReltioGridLayout);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n menuItem: {\n height: '32px'\n },\n menuText: {\n color: theme.palette.text.primary,\n fontSize: '13px',\n lineHeight: '15px'\n },\n checkbox: {\n padding: 0,\n marginRight: '15px'\n }\n}));\n","import React, {forwardRef} from 'react';\nimport {identity} from 'ramda';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport Typography from '@mui/material/Typography';\nimport {DropDownMenuItem} from '../../../types';\nimport {useStyles} from './styles';\n\ntype Props = {\n item: DropDownMenuItem;\n onMenuClose?: (e) => void;\n};\n\nconst SettingsMenuItemRenderer = forwardRef(({item, onMenuClose = identity}: Props, ref: React.Ref<HTMLLIElement>) => {\n const styles = useStyles();\n const {text, onClick, id, selected} = item;\n const handleClick = (e) => {\n onMenuClose(e);\n onClick(e);\n };\n\n return (\n <MenuItem\n classes={{root: styles.menuItem}}\n onClick={handleClick}\n ref={ref}\n data-modal\n data-reltio-id={`reltio-settings-menu-item${id}`}\n >\n <Checkbox checked={selected} className={styles.checkbox} color=\"primary\" />\n <Typography classes={{root: styles.menuText}}>{text}</Typography>\n </MenuItem>\n );\n});\n\nSettingsMenuItemRenderer.displayName = 'SettingsMenuItemRenderer';\n\nexport default SettingsMenuItemRenderer;\n","import React from 'react';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport i18n from 'ui-i18n';\nimport {DropDownMenuItem} from '../../types';\nimport {SmallIconButtonWithTooltip} from '../SmallIconButton';\nimport DropDownMenuButton from '../DropDownMenuButton/DropDownMenuButton';\nimport SettingsMenuItemRenderer from './SettingsMenuItemRender/SettingsMenuItemRender';\n\ntype Props = {\n items: Array<DropDownMenuItem>;\n menuId: string;\n};\n\nconst SettingsMenu = ({items, menuId}: Props) => {\n return (\n <DropDownMenuButton\n buttonComponent={SmallIconButtonWithTooltip}\n buttonProps={{\n icon: SettingsIcon,\n tooltipTitle: i18n.text('Settings'),\n size: 'L'\n }}\n menuId={menuId}\n menuItems={items}\n MenuItemRenderer={SettingsMenuItemRenderer}\n />\n );\n};\n\nexport default SettingsMenu;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {findSourceSystemByUri, getAbsoluteImageUrl, getSourceSystemLabel, Source} from '@reltio/mdm-sdk';\nimport AvatarWithFallback from '../AvatarWithFallback/AvatarWithFallback';\n\ntype Props = {\n sourceType: string;\n className?: string;\n classes?: {\n iconRoot?: string;\n textRoot?: string;\n };\n};\nconst SOURCE_URL = 'https://s3.amazonaws.com/reltio.images/api';\nconst SourceIcon = ({sourceType, className, classes}: Props) => {\n const metadata = useSelector(mdmModule.selectors.getMetadata);\n const {uri, icon}: Source = findSourceSystemByUri(metadata, sourceType) || {};\n const avatarText = uri ? getSourceSystemLabel(metadata, uri)[0] : '';\n const sourceIcon = icon ? getAbsoluteImageUrl(SOURCE_URL, icon) : null;\n\n return (\n <AvatarWithFallback\n className={className}\n avatarText={avatarText}\n icon={sourceIcon}\n variant=\"square\"\n rootClasses={classes}\n />\n );\n};\n\nexport default SourceIcon;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst VerticalDivider = ({height, margin}) => (\n <div\n style={{\n width: '1px',\n height: `${height}px`,\n borderLeft: '1px solid rgba(0,0,0,0.38)',\n margin: `0 ${margin}px`,\n flexShrink: '0'\n }}\n />\n);\n\nVerticalDivider.propTypes = {\n height: PropTypes.number,\n margin: PropTypes.number\n};\n\nexport default VerticalDivider;\n","import React, {useMemo} from 'react';\nimport {countPercents} from '@reltio/mdm-sdk';\nimport {pluck} from 'ramda';\nimport {ChartData} from '../types';\n\ntype PropsWithChartData = {\n data: ChartData[];\n};\n\nexport const enrichDataWithPercents = (data: ChartData[]): ChartData[] => {\n const percents = countPercents(pluck('value', data), 1);\n return data.map((item, i) => ({...item, percent: percents[i]}));\n};\n\nconst withPercents = <T extends PropsWithChartData>(Component: React.ComponentType<T>) => {\n const WithPercents = ({data, ...otherProps}: T) => {\n const dataWithPercents = useMemo(() => data && enrichDataWithPercents(data), [data]);\n return <Component data={dataWithPercents} {...(otherProps as T)} />;\n };\n\n WithPercents.displayName = 'WithPercents';\n\n return WithPercents;\n};\n\nexport default withPercents;\n","import {makeStyles} from '@mui/styles';\n\nconst useStyles = makeStyles({\n clickable: {\n cursor: 'pointer'\n }\n});\n\nexport const useClickableStyle = (clickable) => {\n const styles = useStyles();\n return clickable ? styles.clickable : undefined;\n};\n","import {useMemo} from 'react';\nimport {pipe} from 'ramda';\n\ntype UseActions = ({\n actions,\n dispatch\n}: {\n actions: {\n [key: string]: <T>(payload: T) => {type: string; payload: T};\n };\n dispatch: <T>({type, payload}: {type: string; payload: T}) => void;\n}) => {\n [key in keyof typeof actions]: <T>(payload: T) => void;\n};\n\nexport const useActions: UseActions = ({actions, dispatch}) =>\n useMemo(\n () =>\n Object.entries(actions).reduce((acc, [actionName, actionCreator]) => {\n return {...acc, [actionName]: pipe(actionCreator, dispatch)};\n }, {}),\n [dispatch, actions]\n );\n","import {useEffect, useState} from 'react';\n\nexport const useSavedState = <T>(getSavedState: () => Promise<T>) => {\n const [isLoaded, setIsLoaded] = useState(false);\n const [savedState, setSavedState] = useState<T | Record<string, never>>({});\n\n useEffect(() => {\n getSavedState()\n .then((savedState) => {\n setSavedState(savedState || {});\n })\n .then((_) => setIsLoaded(true))\n .catch((_) => setIsLoaded(true));\n }, []); // eslint-disable-line\n\n return {isLoaded, savedState};\n};\n","import React from 'react';\nimport {AttributeType, SearchFilter} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type ReltioGridLayoutOptions = {\n cols: number;\n rowHeight: number;\n margin: [number, number];\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type FiltersRowData = {\n attribute: AttributeSelectorItem;\n filter: string;\n id: number;\n values: SearchFilter['values'];\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n\nexport type PerspectivesSettings = Record<string, PerspectiveSettingItem>;\n\nexport type PerspectiveSettingItem = {\n active?: number;\n width?: number;\n};\n\nexport type RightPanelTab = {\n content?: React.ReactElement;\n title?: React.ReactElement;\n buttonProps?: {\n id: number;\n icon: React.FC;\n tooltipTitle: string;\n showForDisabled?: boolean;\n };\n headerProps?:\n | {content: React.ReactElement}\n | {mainTitle: string; secondTitle?: string; rightContent?: React.ReactElement};\n hidden?: boolean;\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n loader: {\n width: '100%',\n top: 0,\n left: 0,\n position: 'absolute',\n borderRadius: '2px'\n }\n});\n","import React from 'react';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {useStyles} from './styles';\n\nconst DashboardLinearLoader = () => {\n const styles = useStyles();\n return <LinearProgress color=\"primary\" className={styles.loader} data-reltio-id=\"dashboard-item-loader\" />;\n};\n\nexport default DashboardLinearLoader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n menuItemTitle: {\n fontSize: '13px',\n lineHeight: '15px'\n },\n openIcon: {\n padding: '4px',\n borderRadius: '2px',\n marginRight: '-10px'\n }\n}));\n","import React, {useState, ReactNode, MouseEvent} from 'react';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport IconButton from '@mui/material/IconButton';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\n\nimport {useStyles} from './styles';\n\ntype MenuItem = {\n id: string;\n title: string;\n icon: ReactNode;\n active: boolean;\n action: () => void;\n disabled?: boolean;\n};\n\ntype DashboardPopupMenuProps = {\n items: MenuItem[];\n};\n\nconst DashboardPopupMenu = ({items}: DashboardPopupMenuProps) => {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const isMenuOpen = Boolean(anchorEl);\n const styles = useStyles();\n\n const handleMenuClick = (e: MouseEvent<HTMLButtonElement>) => setAnchorEl(e.currentTarget);\n\n const handleMenuClose = () => setAnchorEl(null);\n\n const handleItemClick = (action: () => void) => () => {\n handleMenuClose();\n action();\n };\n\n const renderItem = ({id, icon, title, action, disabled = false}: MenuItem) => (\n <MenuItem key={id} onClick={handleItemClick(action)} disabled={disabled}>\n <ListItemIcon>{icon}</ListItemIcon>\n <ListItemText classes={{primary: styles.menuItemTitle}}>{title}</ListItemText>\n </MenuItem>\n );\n\n return (\n <>\n <IconButton\n className={styles.openIcon}\n aria-controls=\"menu\"\n aria-haspopup=\"true\"\n onClick={handleMenuClick}\n size=\"large\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id=\"facet-menu\"\n anchorEl={anchorEl}\n open={isMenuOpen}\n onClose={handleMenuClose}\n elevation={2}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n {items.filter((item) => item.active).map(renderItem)}\n </Menu>\n </>\n );\n};\n\nexport default DashboardPopupMenu;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n view: {\n flex: 1,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n boxShadow: 'none'\n }\n}));\n","import React from 'react';\nimport {BasicView} from '@reltio/components';\nimport {DashboardViewIdContext} from '../../contexts/DashboardViewIdContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n id: string;\n children: React.ReactNode;\n};\n\nconst LayoutItemView = ({id, children}: Props) => {\n const styles = useStyles();\n\n return (\n <DashboardViewIdContext.Provider value={id}>\n <BasicView className={styles.view} data-reltio-id={`layout-item-${id}`}>\n {children}\n </BasicView>\n </DashboardViewIdContext.Provider>\n );\n};\n\nexport default LayoutItemView;\n","import React from 'react';\n\nexport const DashboardViewIdContext = React.createContext(null);\n\nDashboardViewIdContext.displayName = 'DashboardViewIdContext';\n","import React, {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport {assoc, assocPath, propOr} from 'ramda';\nimport {nanoid} from 'nanoid';\n\nimport {RequestStates} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\ntype RefreshSignals = Partial<Record<DQDataLevel, number>>;\ntype UpdateTime = {[actionId: string]: number};\ntype UpdateTimes = Partial<Record<DQDataLevel, UpdateTime>>;\ntype RequestsUpdateTimeContextType = {\n updateTime: ({dataLevel, actionId}: {dataLevel: DQDataLevel; actionId: string}) => void;\n updateTimes: UpdateTimes;\n resetUpdateTimes: (dataLevel: DQDataLevel) => void;\n};\nconst ReloadFacetSignalContext = createContext<RefreshSignals>(null);\nconst ReloadFacetActionContext = createContext<(dataLevel: DQDataLevel) => void>(null);\nconst RequestsUpdateTimeContext = createContext<RequestsUpdateTimeContextType>(null);\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const ReloadFacetProvider = ({children}: Props) => {\n const [refreshSignals, setRefreshSignals] = useState<RefreshSignals>({});\n const [updateTimes, setUpdateTimes] = useState<UpdateTimes>({});\n\n const resetUpdateTimes = useCallback(\n (dataLevel?: DQDataLevel) => (dataLevel ? setUpdateTimes(assoc(dataLevel, {})) : setUpdateTimes({})),\n []\n );\n const refreshAll = useCallback(\n (dataLevel: DQDataLevel) => {\n setRefreshSignals((signals) => {\n const nextSignal = propOr(0, dataLevel, signals) + 1;\n return assoc(dataLevel, nextSignal, signals);\n });\n },\n [setRefreshSignals]\n );\n\n const updateTime = ({dataLevel, actionId}) => {\n const time = Date.now();\n setUpdateTimes(assocPath([dataLevel, actionId], time));\n };\n return (\n <ReloadFacetActionContext.Provider value={refreshAll}>\n <ReloadFacetSignalContext.Provider value={refreshSignals}>\n <RequestsUpdateTimeContext.Provider value={{updateTime, updateTimes, resetUpdateTimes}}>\n {children}\n </RequestsUpdateTimeContext.Provider>\n </ReloadFacetSignalContext.Provider>\n </ReloadFacetActionContext.Provider>\n );\n};\n\nexport const useReloadAllFacets = () => {\n const refreshAll = useContext(ReloadFacetActionContext);\n\n if (refreshAll === undefined) {\n throw new Error('useReloadAllFacets must be used within a ReloadFacetProvider');\n }\n\n return refreshAll;\n};\n\ntype useReloadFacetProps = {\n state: RequestStates;\n reload: () => void;\n dataLevel?: DQDataLevel;\n};\n\nexport const useReloadFacet = ({state, reload, dataLevel}: useReloadFacetProps) => {\n const refreshSignals = useContext(ReloadFacetSignalContext);\n\n if (refreshSignals === undefined) {\n throw new Error('useReloadFacet must be used within a ReloadFacetProvider');\n }\n\n const refreshSignal = refreshSignals[dataLevel];\n useEffect(() => {\n if (state === RequestStates.LOADED || state === RequestStates.ERROR) {\n reload();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refreshSignal]);\n};\n\nexport const useRefreshAction = ({action, dataLevel}: {action: () => void; dataLevel: DQDataLevel}) => {\n const {updateTime} = useContext(RequestsUpdateTimeContext);\n\n const actionId = useMemo(() => nanoid(), []);\n return useCallback(() => {\n updateTime({actionId, dataLevel});\n action();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [action, dataLevel]);\n};\n\nexport const useUpdateTime = (dataLevel: DQDataLevel) => {\n const {updateTimes, resetUpdateTimes} = useContext(RequestsUpdateTimeContext);\n\n return {\n updateTime: Math.min(...(Object.values(updateTimes[dataLevel] || {}) as number[])),\n resetUpdateTimes\n };\n};\n","import {omit} from 'ramda';\n\nimport {DateRangeValue} from '@reltio/mdm-sdk';\n\nexport type DQDateRangeValue = Exclude<DateRangeValue, DateRangeValue.LAST_DAY>;\nexport const DQDateRangeValue = omit(['LAST_DAY'], {...DateRangeValue});\n","import moment from 'moment';\nimport {DatePeriod, DateRangeValue, getDateRangeByValue} from '@reltio/mdm-sdk';\n\ntype GetDQDateRangeByValue = (value: DatePeriod | [number, number]) => [number, number];\nexport const getDQDateRangeByValue: GetDQDateRangeByValue = (value) => {\n const currentDate = moment();\n\n switch (value) {\n case DateRangeValue.LAST_WEEK:\n return [moment(currentDate).subtract(6, 'days').valueOf(), currentDate.valueOf()];\n default:\n return getDateRangeByValue(value);\n }\n};\n","import {ascend, assoc, defaultTo, map, path, pipe, prop, sortWith, includes, propEq, __, isEmpty} from 'ramda';\n\nimport {TEntityType, TenantPermission, Permission} from '@reltio/mdm-sdk';\n\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {getDQDateRangeByValue} from '../../services/dateRange';\n\nexport const sortEntityTypesWithCount = ({entityTypes, getEntityCount}) =>\n pipe(\n map((entityType: TEntityType) => assoc('entityCount', getEntityCount(entityType.uri))(entityType)),\n sortWith([\n ({entityCount: a}: {entityCount: number}, {entityCount: b}: {entityCount: number}) =>\n a === b || (a > 0 && b > 0) ? 0 : a === 0 ? 1 : -1,\n ascend(prop('label'))\n ])\n )(entityTypes);\n\nexport const getFirstEntityTypeUri = path([0, 'uri']);\n\nexport const dateRangeValues: DQDateRangeValue[] = Object.values(DQDateRangeValue);\n\nexport const getValuesDateRange = pipe(\n getDQDateRangeByValue,\n defaultTo([]),\n map((value) => value && new Date(value))\n);\n\nexport const checkPermissions = ({\n roles,\n tenantPermissions,\n entityTypeUri\n}: {\n roles: string[];\n tenantPermissions: TenantPermission[];\n entityTypeUri: string;\n}) => {\n const canReadWithoutFilter = ({filter, access}: Permission) => {\n return access && includes('READ', access) && !filter;\n };\n const getPermissionsForRoles = (permissions: Permission[], roles: string[]) =>\n (permissions || []).filter(pipe(prop('role'), includes(__, roles)));\n const getPermissionByUri = (uri: string) => tenantPermissions.find(propEq('uri', uri))?.permissions;\n const configurationLevelPermission = getPermissionsForRoles(getPermissionByUri('configuration'), roles);\n const entityLevelPermission = getPermissionsForRoles(getPermissionByUri(entityTypeUri), roles);\n if (!isEmpty(configurationLevelPermission)) {\n return configurationLevelPermission.some(canReadWithoutFilter);\n }\n if (!isEmpty(entityLevelPermission)) {\n return entityLevelPermission.some(canReadWithoutFilter);\n }\n return true;\n};\n","import React, {createContext, useContext, useReducer} from 'react';\nimport {dissoc} from 'ramda';\n\nimport {createStandardAction, useActions} from '@reltio/components';\nimport {DatePeriod, TEntityType} from '@reltio/mdm-sdk';\n\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\ntype ActionContext = {\n setEntityType: (entityType: TEntityType) => void;\n setDetailedAttributeType: (attributeType: DetailedAttributeType) => void;\n changeZoom?: (zoom: [string, string]) => void;\n changePeriod?: (period: DatePeriod) => void;\n changeSearchByOv?: (searchByOv: boolean) => void;\n addExportLoadingId?: (loadingId: string) => void;\n deleteExportLoadingId?: (loadingId: string) => void;\n};\n\ntype StateContext = {\n entityType?: TEntityType;\n detailedAttributeType?: DetailedAttributeType;\n zoom?: [string, string];\n period?: DatePeriod;\n dateRange?: DatePeriod;\n searchByOv?: boolean;\n exportLoadingIds?: Record<string, boolean>;\n};\n\ntype Props = {\n children: React.ReactElement;\n};\n\nconst DQDashboardStateContext = createContext<StateContext>(null);\nconst DQDashboardDispatchContext = createContext<ActionContext>(null);\n\nconst SET_ENTITY_TYPE = 'SET_SELECTED_ENTITY_TYPE';\nconst SET_ATTRIBUTE_TYPE = 'SET_SELECTED_ATTRIBUTE_TYPE';\nconst CHANGE_PERIOD = 'CHANGE_PERIOD';\nconst CHANGE_ZOOM = 'CHANGE_ZOOM';\nconst CHANGE_OV_STATE = 'CHANGE_OV_STATE';\nconst ADD_EXPORT_LOADING_ID = 'ADD_EXPORT_LOADING_ID';\nconst DELETE_EXPORT_LOADING_ID = 'DELETE_EXPORT_LOADING_ID';\n\nconst actions = {\n setEntityType: createStandardAction(SET_ENTITY_TYPE),\n setDetailedAttributeType: createStandardAction(SET_ATTRIBUTE_TYPE),\n changeZoom: createStandardAction(CHANGE_ZOOM),\n changePeriod: createStandardAction(CHANGE_PERIOD),\n changeSearchByOv: createStandardAction(CHANGE_OV_STATE),\n addExportLoadingId: createStandardAction(ADD_EXPORT_LOADING_ID),\n deleteExportLoadingId: createStandardAction(DELETE_EXPORT_LOADING_ID)\n};\nconst getValidZoom = (zoom: [string, string]) => (new Date(zoom[0]) > new Date(zoom[1]) ? [zoom[1], zoom[0]] : zoom);\nconst dqDashboardStateReducer = (state: StateContext, action: ReturnType<ReturnType<typeof createStandardAction>>) => {\n switch (action.type) {\n case SET_ATTRIBUTE_TYPE:\n return {...state, detailedAttributeType: action.payload};\n case SET_ENTITY_TYPE:\n return {...state, entityType: action.payload};\n case CHANGE_PERIOD:\n return {\n ...state,\n period: action.payload,\n dateRange: action.payload,\n ...(action.payload ? {zoom: null} : {})\n };\n case CHANGE_ZOOM:\n return {\n ...state,\n ...(action.payload\n ? {\n zoom: getValidZoom(action.payload),\n dateRange: [\n new Date(getValidZoom(action.payload)[0]),\n new Date(getValidZoom(action.payload)[1])\n ]\n }\n : {})\n };\n case CHANGE_OV_STATE:\n return {\n ...state,\n searchByOv: action.payload\n };\n case ADD_EXPORT_LOADING_ID:\n return {\n ...state,\n exportLoadingIds: {\n ...state.exportLoadingIds,\n [action.payload]: true\n }\n };\n case DELETE_EXPORT_LOADING_ID:\n return {\n ...state,\n exportLoadingIds: dissoc(action.payload, state.exportLoadingIds)\n };\n }\n};\n\nexport const DQDashboardStateProvider = ({children}: Props) => {\n const [state, dispatch] = useReducer(dqDashboardStateReducer, {detailedAttributeType: null});\n const dqDashboardStateActions = useActions({actions, dispatch});\n\n return (\n <DQDashboardStateContext.Provider value={state as StateContext}>\n <DQDashboardDispatchContext.Provider value={dqDashboardStateActions as ActionContext}>\n {children}\n </DQDashboardDispatchContext.Provider>\n </DQDashboardStateContext.Provider>\n );\n};\n\nexport const useDQDashboardState = () => {\n const viewStateContext = useContext<StateContext>(DQDashboardStateContext);\n if (viewStateContext === undefined) {\n throw new Error('useViewState must be used within a DQDashboardStateProvider');\n }\n return viewStateContext;\n};\n\nexport const useDQDashboardStateActions = () => {\n const viewStateActions = useContext<ActionContext>(DQDashboardDispatchContext);\n if (viewStateActions === undefined) {\n throw new Error('useDQDashboardStateActions must be used within a DQDashboardStateProvider');\n }\n return viewStateActions;\n};\n","import {RequestStates} from '@reltio/components';\nimport React, {useContext, useMemo} from 'react';\nimport {isEmpty} from 'ramda';\nimport {usePermissionsRequest} from '../../hooks/usePermissionsRequest';\nimport {checkPermissions} from '../../components/DQDashboardPerspectiveView/helpers';\nimport {useDQDashboardState} from '../DQDashboardStateContext';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\n\ntype Props = {children: React.ReactNode; config: DQDashboardPerspectiveConfig};\n\nexport const PermissionsContext = React.createContext<{\n isTimeSeriesAvailable: boolean;\n hasRestrictions: boolean;\n canGetDQStatistic: boolean;\n showErrorBands: boolean;\n permissionsLoadingState: RequestStates;\n showExportButton: boolean;\n}>(null);\n\nexport const PermissionsProvider = ({children, config}: Props) => {\n const {permissions: tenantPermissions, requestState: permissionsLoadingState} = usePermissionsRequest();\n const entityTypeUri = useDQDashboardState()?.entityType?.uri;\n const roles = useSelector(mdmModule.selectors.getUserRoles);\n const canGetDQStatistic = useSelector(mdmModule.selectors.getCanUserGetDQStatistic);\n const noMetaDataRestrictions = useMemo(\n () =>\n permissionsLoadingState === RequestStates.LOADED &&\n checkPermissions({roles, tenantPermissions, entityTypeUri}),\n [tenantPermissions, permissionsLoadingState, roles, entityTypeUri]\n );\n const hasRestrictions = !isEmpty(tenantPermissions);\n const {showTimeSeries = true, showErrorBands = false, showExportButton = false} = config;\n return (\n <PermissionsContext.Provider\n value={{\n isTimeSeriesAvailable: showTimeSeries && noMetaDataRestrictions,\n hasRestrictions,\n canGetDQStatistic,\n permissionsLoadingState,\n showErrorBands,\n showExportButton\n }}\n >\n {children}\n </PermissionsContext.Provider>\n );\n};\n\nexport const usePermissionsContext = () => useContext(PermissionsContext);\n","import {useState, useCallback, useEffect, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {getTenantPermissions, TenantPermission} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nexport const usePermissionsRequest = () => {\n const [permissions, setPermissions] = useState<TenantPermission[]>(null);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const safePromise = useSafePromise();\n const apiPath: string = useSelector(mdmModule.selectors.getApiPath);\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n\n const onRequestFinished = (permissions) => {\n setPermissions(permissions);\n setRequestState(RequestStates.LOADED);\n };\n\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setPermissions(null);\n };\n\n const loadPermissions = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n safePromise(getTenantPermissions({tenant, apiPath})).then(onRequestFinished).catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiPath, tenant]);\n useEffect(() => {\n loadPermissions();\n }, [loadPermissions]);\n\n return useMemo(\n () => ({\n permissions,\n requestState,\n reload: loadPermissions\n }),\n [permissions, requestState]\n );\n};\n","import {theme as defaultTheme} from '@reltio/mdm-sdk';\n\nexport const theme = {\n ...defaultTheme,\n tooltip: {\n borderRadius: '4px',\n backgroundColor: 'rgba(96, 96, 96, 0.9)',\n maxWidth: '300px'\n }\n};\n","import React from 'react';\n\nimport {DataValidationFunction} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\n\ntype ContextType = {\n dvfs?: {\n data: DataValidationFunction[];\n state: RequestStates;\n reload: () => Promise<void>;\n errorCode?: number;\n };\n dvfConfigLink?: string;\n};\n\nexport const DVFContext = React.createContext<ContextType>(null);\n\nDVFContext.displayName = 'DVFContext';\n","import React, {useContext, useState} from 'react';\n\nimport {ChartsDataWithState} from '../../types/ChartsDataWithState';\n\ntype Props = {children: React.ReactNode};\n\nexport const ChartsDataContext = React.createContext<{\n chartsData: ChartsDataWithState | Record<string, never>;\n changeChartsData: (chartsData: ChartsDataWithState) => void;\n }>(null);\n\nexport const ChartsDataProvider = ({children}: Props) => {\n const [chartsData, setChartsData] = useState<ChartsDataWithState | Record<string, never>>({});\n const changeChartsData = (chartsData: ChartsDataWithState) => setChartsData(chartsData);\n return <ChartsDataContext.Provider value={{chartsData, changeChartsData}}>{children}</ChartsDataContext.Provider>;\n};\n\nexport const useChartsDataContext = () => useContext(ChartsDataContext);\n","import {pluck} from 'ramda';\nimport {useCallback, useEffect, useMemo, useState} from 'react';\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {\n buildFilterQueryString,\n FilterOptions,\n generateValuableQueryString,\n getFacets,\n getLastUriPart,\n TEntityType\n} from '@reltio/mdm-sdk';\n\nexport const useEntityCount = (entityTypes: TEntityType[]) => {\n const [entitiesCountMap, setEntitiesCountMap] = useState(null);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const safePromise = useSafePromise();\n\n const onRequestFinished = ({type: entitiesCountMap}) => {\n setEntitiesCountMap(entitiesCountMap);\n setRequestState(RequestStates.LOADED);\n };\n\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setEntitiesCountMap(null);\n };\n\n const getEntityCount = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n const filter = buildFilterQueryString()([\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: pluck('uri', entityTypes)\n }\n ]);\n\n safePromise(\n getFacets({\n query: generateValuableQueryString({activeness: 'active', filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n })\n )\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypes]);\n useEffect(() => {\n getEntityCount();\n }, [getEntityCount]);\n\n return useMemo(\n () => ({\n getEntityCount: (entityTypeUri: string) =>\n Number(entitiesCountMap?.[getLastUriPart(entityTypeUri)] || null),\n state: requestState\n }),\n [entitiesCountMap, requestState]\n );\n};\n","export enum ChartDataType {\n STRING = 'string',\n FLOAT = 'float',\n INTEGER = 'integer',\n BOOLEAN = 'boolean',\n DATE = 'date',\n SSN = 'SSN',\n UNKNOWN = 'unknown'\n}\n","import {DQMetric} from '@reltio/mdm-sdk';\n\nenum CustomViewType {\n UNSUPPORTED = 'unsupported',\n SUMMARY = 'summary',\n MONTH_DISTRIBUTION = 'monthDistribution',\n DAY_OF_WEEK_DISTRIBUTION = 'dayOfWeekDistribution',\n DAY_OF_MONTH_DISTRIBUTION = 'dayOfMonthDistribution',\n RDM_TRANSCODE = 'rdmTranscode'\n}\n\nexport type ViewType = DQMetric | CustomViewType;\nexport const ViewType = {...DQMetric, ...CustomViewType};\n","export enum RDMLookupState {\n RDM_LOOKUP_EXIST = 'rdmLookupExist',\n RDM_LOOKUP_NOT_EXIST = 'rdmLookupNotExist'\n}\n","import i18n from 'ui-i18n';\n\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {LayoutsByAttributeType, ViewsByDataLevel} from '../types/DQDashboardPerspectiveConfig';\nimport {ChartDataType} from './ChartDataType';\nimport {ViewType} from './ViewType';\nimport {RDMLookupState} from '../constants/RdmLookupState';\n\nexport const defaultViewsByDataLevel: ViewsByDataLevel = {\n [DQDataLevel.ATTRIBUTE_TYPE]: [\n {\n id: 'FillRateView',\n type: ViewType.FILL_RATE,\n title: i18n.text('Fill rate')\n },\n {\n id: 'UniquenessAnalysisView',\n type: ViewType.UNIQUENESS,\n title: i18n.text('Uniqueness analysis')\n },\n {\n id: 'SummaryView',\n type: ViewType.SUMMARY,\n title: i18n.text('Summary')\n },\n {\n id: 'ValidationView',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data')\n },\n {\n id: 'FrequencyAnalysis',\n type: ViewType.FREQUENCY,\n title: i18n.text('Frequency analysis')\n },\n {\n id: 'LengthStatistics',\n type: ViewType.LENGTH_STATISTIC,\n title: i18n.text('Length statistics')\n },\n {\n id: 'PatternAnalysis',\n type: ViewType.PATTERN,\n title: i18n.text('Pattern analysis')\n },\n {\n id: 'CrosswalkAnalysis',\n type: ViewType.CROSSWALK_ANALYSIS,\n title: i18n.text('Source system analysis')\n },\n {\n id: 'ValueDistribution',\n type: ViewType.VALUE_DISTRIBUTION,\n title: i18n.text('Value distribution')\n },\n {\n id: 'UnsupportedDataType',\n type: ViewType.UNSUPPORTED,\n title: i18n.text('Unsupported Data Type')\n },\n {\n id: 'FillRateViewTimeSeries',\n type: ViewType.FILL_RATE,\n title: i18n.text('Fill rate over time'),\n options: {\n timeSeries: true\n }\n },\n {\n id: 'UniquenessAnalysisViewTimeSeries',\n type: ViewType.UNIQUENESS,\n title: i18n.text('Uniqueness analysis over time'),\n options: {\n timeSeries: true\n }\n },\n {\n id: 'ValidationViewTimeSeries',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data over time'),\n options: {\n timeSeries: true\n }\n }\n ],\n [DQDataLevel.ENTITY_TYPE]: [\n {\n id: 'SummaryView',\n type: ViewType.SUMMARY,\n title: i18n.text('Summary')\n },\n {\n id: 'ValidationView',\n type: ViewType.DATA_VALIDATION,\n title: i18n.text('Profiles with invalid data')\n },\n {\n id: 'ConsolidationRate',\n type: ViewType.CONSOLIDATION_RATE,\n title: i18n.text('Consolidation rate')\n },\n {\n id: 'RDMTranscode',\n type: ViewType.RDM_TRANSCODE,\n title: i18n.text('RDM value mapping status')\n }\n ]\n};\n\nexport const defaultLayoutsByDataLevel = {\n [DQDataLevel.ATTRIBUTE_TYPE]: {\n today: {\n default: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'LengthStatistics'}\n ],\n [ChartDataType.SSN]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 3, height: 19, id: 'PatternAnalysis'}\n ],\n [ChartDataType.BOOLEAN]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'FrequencyAnalysis'},\n {x: 0, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'}\n ],\n [ChartDataType.DATE]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n [ChartDataType.INTEGER]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n [ChartDataType.FLOAT]: [\n {x: 0, y: 0, width: 3, height: 11, id: 'SummaryView'},\n {x: 3, y: 0, width: 3, height: 11, id: 'ValidationView'},\n {x: 0, y: 11, width: 3, height: 8, id: 'FillRateView'},\n {x: 3, y: 11, width: 3, height: 8, id: 'UniquenessAnalysisView'},\n {x: 0, y: 19, width: 3, height: 19, id: 'FrequencyAnalysis'},\n {x: 3, y: 19, width: 3, height: 19, id: 'CrosswalkAnalysis'},\n {x: 0, y: 38, width: 6, height: 19, id: 'ValueDistribution'}\n ]\n },\n timeRange: {\n default: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'LengthStatistics'}\n ],\n SSN: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 3, height: 14, id: 'PatternAnalysis'}\n ],\n boolean: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'FrequencyAnalysis'},\n {x: 3, y: 30, width: 3, height: 12, id: 'CrosswalkAnalysis'}\n ],\n date: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n integer: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ],\n float: [\n {x: 0, y: 0, width: 6, height: 6, id: 'SummaryView'},\n {x: 0, y: 6, width: 3, height: 12, id: 'ValidationView'},\n {x: 3, y: 6, width: 3, height: 12, id: 'ValidationViewTimeSeries'},\n {x: 0, y: 18, width: 3, height: 12, id: 'FillRateView'},\n {x: 3, y: 18, width: 3, height: 12, id: 'FillRateViewTimeSeries'},\n {x: 0, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisView'},\n {x: 3, y: 30, width: 3, height: 12, id: 'UniquenessAnalysisViewTimeSeries'},\n {x: 0, y: 42, width: 3, height: 14, id: 'FrequencyAnalysis'},\n {x: 3, y: 42, width: 3, height: 14, id: 'CrosswalkAnalysis'},\n {x: 0, y: 56, width: 6, height: 19, id: 'ValueDistribution'}\n ]\n }\n } as LayoutsByAttributeType,\n [DQDataLevel.ENTITY_TYPE]: {\n [RDMLookupState.RDM_LOOKUP_EXIST]: [\n {x: 0, y: 0, width: 4, height: 7, id: 'SummaryView'},\n {x: 4, y: 0, width: 2, height: 7, id: 'RDMTranscode'},\n {x: 0, y: 7, width: 6, height: 18, id: 'ConsolidationRate'},\n {x: 0, y: 25, width: 6, height: 12, id: 'ValidationView'}\n ],\n [RDMLookupState.RDM_LOOKUP_NOT_EXIST]: [\n {x: 0, y: 0, width: 6, height: 7, id: 'SummaryView'},\n {x: 0, y: 7, width: 6, height: 18, id: 'ConsolidationRate'},\n {x: 0, y: 25, width: 6, height: 12, id: 'ValidationView'}\n ]\n }\n};\n","import {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {FacetFilter} from '../types/FacetFilter';\nimport {SearchStateAttributesGroup, SearchOperator} from '@reltio/mdm-sdk';\n\nexport const getAdvancedSearchFilter = (\n entityTypeUri: string,\n filters?: FacetFilter[],\n detailedAttributeType?: DetailedAttributeType\n): SearchStateAttributesGroup => ({\n attributes: (filters || []).map(({filter, fieldName, values = [], uri}, index: number) => ({\n data: {\n uri: uri || detailedAttributeType?.uri,\n entityTypeUri,\n fieldName\n },\n filter,\n id: `attribute_${index}`,\n operator: SearchOperator.and,\n values\n })),\n entityTypes: [entityTypeUri],\n id: 'group',\n operator: SearchOperator.or\n});\n","import {\n all,\n any,\n assoc,\n concat,\n curry,\n defaultTo,\n equals,\n evolve,\n filter,\n isEmpty,\n isNil,\n map,\n mergeLeft,\n pipe,\n pluck,\n prop,\n propEq,\n uniq,\n uniqBy,\n when\n} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {\n DataTypes,\n DQDataLevel,\n DQMetric,\n formatDataTypeValue,\n getSourceSystemLabel,\n isDateType,\n mapFilterValue,\n Metadata,\n parseTimestamp,\n SearchState,\n TimeSeriesStatisticValues,\n ReltioGridLayoutItem\n} from '@reltio/mdm-sdk';\n\nimport {ChartDataType} from '../constants/ChartDataType';\nimport {defaultLayoutsByDataLevel, defaultViewsByDataLevel} from '../constants/defaultConfig';\nimport {ViewType} from '../constants/ViewType';\nimport {getAdvancedSearchFilter} from './advancedFilters';\n\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {LayoutsByAttributeType, ViewsByDataLevel} from '../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {FacetFilter} from '../types/FacetFilter';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\n\nexport const MIN_CHART_BAR_SIZE = 3;\n\nexport const localizeChartValues = map((chartData: ChartData) => ({\n ...chartData,\n localizedValue: i18n.number(chartData.value)\n}));\n\nexport const getPercentLabel = (percent: number) => (isNil(percent) ? '' : `${percent}%`);\n\nexport const isEmptyData = (data: ChartData[]) => isEmpty(data) || !data.find(({value}) => value > 0);\n\nexport const facetFiltersToSearchState = curry(\n (detailedAttributeType: DetailedAttributeType, entityTypeUri: string, filters: FacetFilter[]): SearchState => ({\n advanced: [\n getAdvancedSearchFilter(\n entityTypeUri,\n filters.map(\n when(\n () => isDateType(detailedAttributeType?.type),\n evolve({values: map(mapFilterValue(parseTimestamp))})\n )\n ),\n detailedAttributeType\n )\n ],\n version: '2.0'\n })\n);\n\nexport const getSearchState =\n (getFilter) =>\n ({\n detailedAttributeType,\n entityTypeUri\n }: {\n detailedAttributeType: DetailedAttributeType;\n entityTypeUri: string;\n }): ((value: string) => SearchState) =>\n pipe(\n getFilter({\n fieldName: detailedAttributeType?.fieldName,\n entityTypeUri\n }),\n facetFiltersToSearchState(detailedAttributeType, entityTypeUri)\n );\n\nexport const convertDateLabelsInChartData = (data: ChartData[], attributeType: string) =>\n data.map((dataItem) => ({\n ...dataItem,\n label: formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(dataItem.label))\n }));\n\nexport const getChartDataTypeByAttributeType = (type: string) => {\n switch (type) {\n case DataTypes.TYPE_BLOB:\n case DataTypes.TYPE_BLOG_URL:\n case DataTypes.TYPE_CIK_ID:\n case DataTypes.TYPE_ENTITY_ID:\n case DataTypes.TYPE_IMAGE_URL:\n case DataTypes.TYPE_STRING:\n case DataTypes.TYPE_TEXT:\n case DataTypes.TYPE_URL:\n return ChartDataType.STRING;\n case DataTypes.TYPE_COUNT:\n case DataTypes.TYPE_DOLLAR:\n case DataTypes.TYPE_INT:\n case DataTypes.TYPE_LONG:\n return ChartDataType.INTEGER;\n case DataTypes.TYPE_FLOAT:\n case DataTypes.TYPE_DOUBLE:\n case DataTypes.TYPE_NUMBER:\n return ChartDataType.FLOAT;\n case DataTypes.TYPE_BOOLEAN:\n case DataTypes.TYPE_RDM_LOOKUPS_NOT_RESOLVED:\n return ChartDataType.BOOLEAN;\n case DataTypes.TYPE_ACTIVENESS_DATE:\n case DataTypes.TYPE_DATE:\n case DataTypes.TYPE_LOCAL_DATE:\n case DataTypes.TYPE_TIMESTAMP:\n return ChartDataType.DATE;\n case DataTypes.TYPE_SSN:\n return ChartDataType.SSN;\n default:\n return ChartDataType.UNKNOWN;\n }\n};\n\nconst getViewsByDataType = (chartDataType: ChartDataType) => {\n switch (chartDataType) {\n case ChartDataType.INTEGER:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.FLOAT:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.BOOLEAN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY\n ];\n case ChartDataType.STRING:\n return [\n ViewType.LENGTH_STATISTIC,\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS\n ];\n case ChartDataType.DATE:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.VALUE_DISTRIBUTION\n ];\n case ChartDataType.SSN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.PATTERN\n ];\n case ChartDataType.UNKNOWN:\n return [\n ViewType.SUMMARY,\n ViewType.CROSSWALK_ANALYSIS,\n ViewType.DATA_VALIDATION,\n ViewType.FILL_RATE,\n ViewType.FREQUENCY,\n ViewType.UNIQUENESS,\n ViewType.LENGTH_STATISTIC\n ];\n default:\n return [];\n }\n};\n\nconst getValidViews = ({\n views: allViews,\n supportedViews,\n layout\n}: {\n views: DQDashboardView[];\n supportedViews: ViewType[];\n layout: ReltioGridLayoutItem[];\n}): DQDashboardView[] => {\n return layout.reduce((views, layoutItem) => {\n const viewType = prop('type', allViews.find(propEq('id', layoutItem.id)));\n const viewIndex = allViews.findIndex(propEq('id', layoutItem.id));\n if (viewIndex !== -1)\n return !supportedViews.includes(viewType)\n ? views.concat(assoc('type', ViewType.UNSUPPORTED, allViews[viewIndex]))\n : views.concat(allViews[viewIndex]);\n else\n return views.concat({\n id: layoutItem.id,\n type: ViewType.UNSUPPORTED,\n title: i18n.text('Unsupported')\n });\n }, []);\n};\n\nexport const getEntityLevelViews = (\n views: Partial<ViewsByDataLevel>,\n layout: ReltioGridLayoutItem[]\n): DQDashboardView[] => {\n const allViews = uniqBy(\n prop('id'),\n concat(views?.[DQDataLevel.ENTITY_TYPE] || [], defaultViewsByDataLevel[DQDataLevel.ENTITY_TYPE] || [])\n );\n const supportedViews = [\n ViewType.SUMMARY,\n ViewType.CONSOLIDATION_RATE,\n ViewType.DATA_VALIDATION,\n ViewType.RDM_TRANSCODE\n ];\n return getValidViews({views: allViews, supportedViews, layout});\n};\n\nexport const getAttributeLevelViews = (\n views: Partial<ViewsByDataLevel>,\n attributeType: string,\n layout: ReltioGridLayoutItem[]\n): DQDashboardView[] => {\n const allViews = uniqBy(\n prop('id'),\n concat(views?.[DQDataLevel.ATTRIBUTE_TYPE] || [], defaultViewsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE] || [])\n );\n const chartDataType = getChartDataTypeByAttributeType(attributeType);\n const supportedViews = getViewsByDataType(chartDataType);\n return getValidViews({views: allViews, supportedViews, layout});\n};\n\nexport const getMetricsFromViews: (views: DQDashboardView[]) => DQMetric[] = pipe(\n defaultTo([]),\n pluck('type'),\n filter((metric: DQMetric) => Object.values(DQMetric).includes(metric)),\n uniq\n);\n\nexport const getLayoutByAttributeType = (\n layouts: LayoutsByAttributeType,\n type: string,\n timeRangeAvailable: boolean\n) => {\n const chartDataType = getChartDataTypeByAttributeType(type);\n const customLayouts = (timeRangeAvailable && layouts?.timeRange) || layouts?.today;\n const defaultLayouts =\n (timeRangeAvailable && defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]['timeRange']) ||\n defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]['today'];\n const mergedLayoutsByType = mergeLeft(customLayouts, defaultLayouts);\n return mergedLayoutsByType[chartDataType] || mergedLayoutsByType['default'] || [];\n};\n\nexport const getBarWidthStyle = ({percent, value}: ChartData) => ({\n width: `${percent}%`,\n ...(value > 0 && {minWidth: `${MIN_CHART_BAR_SIZE}px`})\n});\n\nexport const getMaxPercentFromChartData = pipe(pluck('percent'), (percents: number[]) => Math.max(...percents));\nexport const enrichChartDataWithSourceLabel = curry((metadata: Metadata, chartData: ChartData[]) =>\n chartData.map((data) => assoc('label', getSourceSystemLabel(metadata, data.group) || data.label, data))\n);\nexport const getEntityTypeSummarySearchState =\n ({entityTypeUri}: GetSearchStateProps) =>\n () =>\n facetFiltersToSearchState(undefined, entityTypeUri, []);\n\nexport const formatPercent = (percent: number | string): number => +(Number(percent) * 100).toFixed(1);\n\nexport const transformTimeSeriesChartData = curry((metric: DQMetric, chartData: TimeSeriesStatisticValues[]) =>\n chartData.map((data) => {\n return {\n ...data,\n [metric]: typeof data[metric] === 'number' ? formatPercent(data[metric]) : null\n };\n })\n);\n\nexport const getChartState = (states: RequestStates[]) => {\n if (all(equals(RequestStates.LOADED), states)) return RequestStates.LOADED;\n if (any(equals(RequestStates.ERROR), states)) return RequestStates.ERROR;\n if (any(equals(RequestStates.LOADING), states)) return RequestStates.LOADING;\n return RequestStates.INIT;\n};\n","export const NO_DATA_AVAILABLE = 'No data available';\nexport const NO_PROFILES = 'There are 0 profiles';\n","import moment from 'moment';\nimport {\n append,\n assoc,\n curry,\n defaultTo,\n find,\n map,\n pick,\n pipe,\n pluck,\n prop,\n propEq,\n propOr,\n reject,\n sortBy,\n uniq,\n values,\n cond,\n all,\n equals,\n always,\n isEmpty,\n T,\n keys,\n omit,\n F,\n either\n} from 'ramda';\nimport i18n from 'ui-i18n';\n\nimport {ChartData, enrichDataWithPercents} from '@reltio/components';\nimport {\n DatePeriod,\n DateRangeValue,\n DQMetric,\n FillRateState,\n getDateRangeByDatePeriod,\n getRangeOptionLabel,\n isDateRangeValue,\n TimeSeriesAnomalyValues,\n TimeSeriesData,\n TimeSeriesStatisticValues,\n UniquenessAnalysisState,\n DataValidationFunction\n} from '@reltio/mdm-sdk';\n\nimport {getDQDateRangeByValue} from '../services/dateRange';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {LineChartData} from '../types/LineChartData';\nimport {formatPercent} from './charts';\nimport {NO_DATA_AVAILABLE, NO_PROFILES} from '../constants/NoDataLabels';\n\nexport const getLabelByTimeRange = (period: DatePeriod): string =>\n isDateRangeValue(period as DQDateRangeValue)\n ? getRangeOptionLabel(period as DQDateRangeValue)\n : (period as [Date, Date]).map((date) => i18n.date(moment(date))).join(' \\u2013 ');\n\nexport const getStatisticData = <T>(\n getData: (chartsData: TimeSeriesStatisticValues) => T\n): ((chartsData: TimeSeriesData) => LineChartData[]) =>\n pipe(\n propOr([], 'statisticData'),\n defaultTo([]),\n map(({time, values}) => ({\n group: time?._max_date,\n label: i18n.date(time?._max_date, 'MMM D'),\n ...getData(values)\n })),\n sortBy(prop('group'))\n );\nconst prependZeroIfNeeds = (number: number) => (number < 10 ? `0${number}` : `${number}`);\n\nexport const getAnomalyData = <T>(\n getData: (chartsData: TimeSeriesAnomalyValues) => T\n): ((chartsData: TimeSeriesData) => LineChartData[]) =>\n pipe(\n propOr([], 'anomalyData'),\n map(({time, values: dataValues}) => ({\n group: time?._max_date,\n label: i18n.date(time?._max_date, 'MMM D'),\n anomaly: pipe(getData, pick(['lower', 'upper']), values, map(formatPercent))(dataValues)\n })),\n sortBy(prop('group'))\n );\n\nexport const getTimeSeriesData =\n <T>(getData: (chartsData: TimeSeriesStatisticValues | TimeSeriesAnomalyValues) => T) =>\n (chartsData: TimeSeriesData) => {\n const timeSeriesData = getStatisticData(getData)(chartsData);\n const anomalyData = getAnomalyData(getData)(chartsData);\n return pipe(\n pluck('group'),\n uniq,\n map((group) => ({\n ...find(propEq('group', group), timeSeriesData),\n ...find(propEq('group', group), anomalyData)\n }))\n )([...timeSeriesData, ...anomalyData]);\n };\nexport const getTimeRangeDates = (period: DatePeriod) => {\n const [startTimestamp, endTimeStamp] = getDateRangeByDatePeriod(period, getDQDateRangeByValue);\n const startDate = new Date(startTimestamp);\n const endDate = new Date(endTimeStamp);\n return {\n startDate: `${startDate.getFullYear()}-${prependZeroIfNeeds(startDate.getMonth() + 1)}-${prependZeroIfNeeds(\n startDate.getDate()\n )}`,\n endDate: `${endDate.getFullYear()}-${prependZeroIfNeeds(endDate.getMonth() + 1)}-${prependZeroIfNeeds(\n endDate.getDate()\n )}`\n };\n};\n\nexport const checkIsTimeSeries = (config: DQDashboardView) => !!config?.options?.timeSeries;\n\nexport const getChartTooltipDateTitle = (payload: Record<string, string | number>, dataKeys: string[]) =>\n pipe(\n pick(dataKeys),\n cond([\n [pipe(either(pipe(keys, all(equals('noData'))), isEmpty)), always(i18n.text(NO_DATA_AVAILABLE))],\n [allValuesEqualZero, always(i18n.text(NO_PROFILES))],\n [T, always(i18n.date(payload.group, 'MMM D, YYYY'))]\n ])\n )(payload);\n\nexport const hasTimeRange = (period: DatePeriod) => period !== DateRangeValue.LAST_DAY;\n\nconst getStateFromMetric = (metric: DQMetric) => {\n switch (metric) {\n case DQMetric.FILL_RATE:\n return FillRateState.EXISTS;\n case DQMetric.UNIQUENESS:\n return UniquenessAnalysisState.UNIQUE;\n }\n};\n\nconst getTodayData = (metric: DQMetric, todayChartData: ChartData[]) => {\n if (metric === DQMetric.DATA_VALIDATION)\n return todayChartData.reduce(\n (todayData, currentData) => assoc(currentData.group, currentData.value, todayData),\n {\n group: moment().format('YYYY-MM-DD'),\n label: i18n.date(moment(), 'MMM D')\n }\n );\n else {\n const todayChartDataWithPercent = enrichDataWithPercents(todayChartData);\n const todayOption = getStateFromMetric(metric);\n const todayData = {\n group: moment().format('YYYY-MM-DD'),\n label: i18n.date(moment(), 'MMM D'),\n [metric]: todayChartDataWithPercent.find(propEq('group', todayOption))?.percent\n };\n return todayChartData.reduce((todayDataForTimeSeries, dataItem) => {\n todayDataForTimeSeries[dataItem.group] = dataItem.value;\n return todayDataForTimeSeries;\n }, todayData);\n }\n};\n\nexport const enrichTimeSeriesDataWithTodayData = curry(\n (period: DatePeriod, todayChartData: ChartData[], metric: DQMetric, timeSeriesData: LineChartData[]) => {\n const {endDate} = getTimeRangeDates(period);\n const today = moment().format('YYYY-MM-DD');\n return endDate === today\n ? pipe(reject(propEq('group', today)), append(getTodayData(metric, todayChartData)))(timeSeriesData)\n : timeSeriesData;\n }\n);\n\nexport const getPeriodValue = (zoom: [string, string], period: DatePeriod): DatePeriod =>\n zoom ? [new Date(zoom[0]), new Date(zoom[1])] : period;\n\nexport const filterValidDVFs = curry((dvfs: DataValidationFunction, chartData: LineChartData[]) => {\n const activeDVFUris = map(prop('uri'), dvfs);\n return map(pick([...activeDVFUris, 'group', 'label', 'noData']), chartData);\n});\n\nexport const isNoProfiles = (data: LineChartData, lineKeys: string[], areaKeys: string[] = []) =>\n pipe(\n omit([...lineKeys, ...areaKeys, 'group', 'label']),\n values,\n cond([\n [isEmpty, F],\n [all(equals(0)), T],\n [T, F]\n ])\n )(data);\n\nexport const isNoDataAvailable = (data: LineChartData, lineKeys: string[], areaKeys: string[] = []) =>\n pipe(omit([...lineKeys, ...areaKeys, 'group', 'label']), keys, isEmpty)(data);\n\nexport const allValuesEqualZero = pipe(values, all(equals(0)));\n","import React from 'react';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nexport const DataLevelContext = React.createContext<DQDataLevel>(null);\n\nDataLevelContext.displayName = 'DataLevelContext';\n","import {propEq, allPass} from 'ramda';\nimport {\n getLabel,\n AttributeType,\n DataTypes,\n DataValidationFunction,\n getAttributeTypesTree,\n Metadata,\n TEntityType,\n StatusVF,\n AttributeNode\n} from '@reltio/mdm-sdk';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\n\ntype IsContainActiveVF = (dvf: DataValidationFunction[], attributeTypeUri: string) => boolean;\nexport const isContainActiveVF: IsContainActiveVF = (dvf, attributeTypeUri) =>\n (dvf || []).some(allPass([propEq('attribute', attributeTypeUri), propEq('status', StatusVF.ACTIVE)]));\n\nexport const isFloatingType = (type: string): boolean =>\n [DataTypes.TYPE_FLOAT, DataTypes.TYPE_DOUBLE, DataTypes.TYPE_NUMBER].includes(type as DataTypes);\nexport const getDVFsForAttribute = (dvfs: DataValidationFunction[], attributeTypeUri: string) =>\n (dvfs || []).filter(propEq('attribute', attributeTypeUri));\n\nexport const countEntityTypeAttributes = (metadata: Metadata, entityType: TEntityType) => {\n const attributes = getAttributeTypesTree(metadata, entityType) || [];\n const collectAttributes = (attributes: AttributeType[]) => {\n return attributes.reduce((attributesCollection: AttributeType[], attribute: AttributeNode) => {\n const children = attribute?.children;\n return children?.length\n ? [...attributesCollection, attribute, ...collectAttributes(children)]\n : [...attributesCollection, attribute];\n }, []);\n };\n return collectAttributes(attributes).length;\n};\n\nexport const getAttributeLabel = (detailedAttributeType: DetailedAttributeType) =>\n getLabel(detailedAttributeType.label || detailedAttributeType.name);\n","import {AttributeType} from '@reltio/mdm-sdk';\n\nexport enum AttrTypeDetailsType {\n INCLUDED_IN_MATCHING = 'includedInMatching',\n CONTAIN_VF = 'containVF',\n REQUIRED = 'required',\n REFERENCE = 'reference',\n RDM_LOOKUP = 'RDMLookup'\n}\n\nexport type AttrTypeDetails = Record<AttrTypeDetailsType, boolean>;\n\nexport type DetailedAttributeType = AttributeType & {\n children?: DetailedAttributeType[];\n fieldName?: string;\n isAttributeReference?: boolean;\n details?: AttrTypeDetails;\n};\n\nexport type AttributeItemType = {\n attributeItem: DetailedAttributeType;\n level: number;\n};\n","import {ChartData} from '@reltio/components';\nimport {FillRateState} from '@reltio/mdm-sdk';\nimport {curry, propEq} from 'ramda';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {FilterOption} from '../types/FilterOption';\n\nconst filterAttributeByName = (item: DetailedAttributeType, filterText: string) =>\n (item.label || item.name)?.toLowerCase().includes(filterText.toLowerCase());\n\nexport const filterAttributeByDetails = curry((filterOptions: FilterOption[], item: DetailedAttributeType) =>\n filterOptions.some((detail) => item.details[detail.value])\n);\n\nexport const filterAttributeTreeByDetails = curry((filterOptions: FilterOption[], item: DetailedAttributeType) => {\n if (filterOptions.length === 0) return true;\n return (\n filterAttributeByDetails(filterOptions, item) ||\n item.children?.some((child) => filterAttributeTreeByDetails(filterOptions, child))\n );\n});\n\nexport const filterAttributeByNotEmpty = curry(\n (fillRates: Record<string, ChartData[]>, item: DetailedAttributeType) => {\n const fillRate = fillRates[item.fieldName];\n return fillRate?.find(propEq('group', FillRateState.EXISTS))?.value;\n }\n);\n\nexport const filterAttributesTypesByName = curry((filterText: string, array: DetailedAttributeType[]) => {\n return array.reduce((resultArray, currentItem) => {\n const isCurrentItemMatch = filterAttributeByName(currentItem, filterText);\n const children = isCurrentItemMatch\n ? currentItem.children || []\n : filterAttributesTypesByName(filterText, currentItem.children || []);\n if (isCurrentItemMatch || children.length)\n resultArray.push(Object.assign({}, currentItem, children.length && {children}));\n return resultArray;\n }, []);\n});\n","import {chain, curry, pipe, prop, propEq} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {\n Metadata,\n TEntityType,\n getAttributeTypesTree,\n attributeUriToSearchUri,\n isReference,\n DataValidationFunction,\n isRDMLookupAttrType,\n FillRateState,\n DQChartsData\n} from '@reltio/mdm-sdk';\nimport {isContainActiveVF} from './attributes';\nimport {\n AttributeItemType,\n DetailedAttributeType,\n AttrTypeDetails,\n AttrTypeDetailsType\n} from '../types/DetailedAttributeType';\n\nimport {filterAttributesTypesByName} from './attributeFilters';\nimport {ChartData} from '@reltio/components';\n\ntype GetAttrTypeDetailsParams = {\n attrTypeItem: DetailedAttributeType;\n dvf: DataValidationFunction[];\n matchAttributes: string[];\n};\n\nexport const getAttrTypeDetails = ({\n attrTypeItem,\n dvf = [],\n matchAttributes = []\n}: GetAttrTypeDetailsParams): AttrTypeDetails => {\n const {uri, required, isAttributeReference} = attrTypeItem;\n\n return {\n [AttrTypeDetailsType.INCLUDED_IN_MATCHING]: matchAttributes.includes(uri),\n [AttrTypeDetailsType.CONTAIN_VF]: isContainActiveVF(dvf, uri),\n [AttrTypeDetailsType.REQUIRED]: !!required,\n [AttrTypeDetailsType.REFERENCE]: isAttributeReference,\n [AttrTypeDetailsType.RDM_LOOKUP]: isRDMLookupAttrType(attrTypeItem)\n };\n};\n\nexport const getDetailLabel = (attributeDetailType: string): string => {\n const detailLabels = {\n [AttrTypeDetailsType.INCLUDED_IN_MATCHING]: i18n.text('Included in match rule'),\n [AttrTypeDetailsType.CONTAIN_VF]: i18n.text('Has validation functions'),\n [AttrTypeDetailsType.REQUIRED]: i18n.text('Required'),\n [AttrTypeDetailsType.REFERENCE]: i18n.text('Reference attribute'),\n [AttrTypeDetailsType.RDM_LOOKUP]: i18n.text('RDM')\n };\n\n return detailLabels[attributeDetailType] || attributeDetailType;\n};\n\nconst buildItems = curry(\n (items: DetailedAttributeType[], parents = [], isAttributeReference = false, level = 0): AttributeItemType[] =>\n pipe(\n chain((item: DetailedAttributeType) => {\n const childrenItems = item.children\n ? buildItems(\n item.children,\n parents.concat({name: item.name, label: item.label}),\n isAttributeReference || isReference(item),\n level + 1\n )\n : [];\n\n return [\n {\n attributeItem: {\n ...item,\n fieldName: attributeUriToSearchUri(item.uri, parents),\n isAttributeReference: isReference(item) || isAttributeReference\n },\n level\n },\n ...childrenItems\n ];\n })\n )(items)\n);\n\ntype CollectAttributeItemsFn = (\n filterText: string\n) => (metadata: Metadata, entityType: TEntityType) => AttributeItemType[];\n\nexport const collectFilteredAttributeItems: CollectAttributeItemsFn = (filterText: string) =>\n pipe(getAttributeTypesTree, filterAttributesTypesByName(filterText), buildItems);\n\nexport const checkIsDataQualitativeForSummary = (data: DQChartsData) => data?.fillRate?.[FillRateState.MISSING] === 0;\n\nexport const checkIsDataQualitativeForAttributeList = (data: ChartData[]) =>\n data?.find(propEq('group', FillRateState.MISSING))?.value === 0;\n\nexport const isReferenceChild = prop('isAttributeReference');\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {omit, pathOr, pipe, keys, path, length, ifElse, has} from 'ramda';\nimport {RequestStates} from '@reltio/components';\nimport {\n getDQChartsData,\n DQChartsData,\n TEntityType,\n getLastUriPart,\n FilterOptions,\n buildFilterQueryString,\n generateValuableQueryString,\n getFacets,\n ActivityFilters,\n DQDataLevel,\n DQMetric\n} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {useRefreshAction} from '../contexts/ReloadFacetContext';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\n\nexport type UseChartsDataRequestProps = {\n entityType: TEntityType;\n detailedAttributeType?: DetailedAttributeType;\n dataLevel: DQDataLevel;\n metrics?: DQMetric[];\n};\n\nexport const useChartsDataRequest = ({\n entityType,\n detailedAttributeType,\n dataLevel,\n metrics\n}: UseChartsDataRequestProps) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [chartsData, setChartsData] = useState<DQChartsData>({});\n const attributeFieldName = detailedAttributeType?.fieldName;\n const entityTypeUri = entityType?.uri;\n const safePromise = useSafePromise();\n const {searchByOv} = useDQDashboardState();\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setChartsData({});\n };\n\n const onRequestFinished = (data: DQChartsData) => {\n setChartsData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const loadChartsData = useCallback(async () => {\n if (!entityTypeUri) return;\n setRequestState(RequestStates.LOADING);\n setChartsData({});\n\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n const filter = buildFilterQueryString()([\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: [entityTypeUri]\n }\n ]);\n\n const getActiveProfiles = getFacets({\n query: generateValuableQueryString({activeness: ActivityFilters.ACTIVE_ONLY, filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n });\n\n const getInactiveProfiles = getFacets({\n query: generateValuableQueryString({activeness: ActivityFilters.INACTIVE_ONLY, filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n });\n const getDqChartsData = getDQChartsData({\n entityTypeUri,\n dataLevel,\n metrics,\n searchByOv\n });\n\n safePromise(Promise.all([getActiveProfiles, getInactiveProfiles, getDqChartsData]))\n .then(([activeProfiles, inactiveProfiles, dqChartsData]) => {\n if (has('error', dqChartsData)) {\n onError(dqChartsData);\n } else {\n const sourceSystems = pipe(\n path(['consolidationRate', 'totalCrosswalksBySource']),\n omit(['ReltioCleanser']),\n keys,\n length\n )(dqChartsData);\n onRequestFinished({\n ...dqChartsData,\n summary: {\n inactiveProfiles: inactiveProfiles.type?.[getLastUriPart(entityTypeUri)],\n activeProfiles: activeProfiles.type?.[getLastUriPart(entityTypeUri)],\n sourceSystems\n }\n });\n }\n })\n .catch(onError);\n } else {\n if (!attributeFieldName) return;\n safePromise(\n getDQChartsData({\n entityTypeUri,\n attributes: [attributeFieldName],\n dataLevel,\n metrics,\n searchByOv\n })\n )\n .then(\n pipe(\n pathOr({}, ['statistic', attributeFieldName]),\n ifElse(has('error'), onError, onRequestFinished)\n )\n )\n .catch(onError);\n }\n }, [\n setRequestState,\n setChartsData,\n safePromise,\n attributeFieldName,\n entityTypeUri,\n dataLevel,\n metrics,\n searchByOv\n ]);\n\n const refreshAction = useRefreshAction({\n action: loadChartsData,\n dataLevel\n });\n\n useEffect(() => {\n refreshAction();\n }, [refreshAction]);\n\n const chartsDataResult = useMemo(\n () => ({data: chartsData, state: requestState, reload: refreshAction}),\n [chartsData, requestState, refreshAction]\n );\n\n return chartsDataResult;\n};\n","import {makeStyles} from '@mui/styles';\n\ntype Props = {\n color?: string;\n};\n\nexport const useStyles = makeStyles({\n label: {\n whiteSpace: 'nowrap',\n paddingRight: '9px'\n },\n infoDataLabel: {\n fontWeight: 700\n },\n chartDataLabel: {\n color: 'rgba(255, 255, 255, 0.75)'\n },\n anomalyTitle: ({color}: Props) => ({\n width: '10px',\n height: '10px',\n backgroundColor: color,\n opacity: 0.12\n }),\n anomalyTitleBackground: {\n width: '10px',\n height: '10px',\n backgroundColor: '#fff',\n position: 'absolute',\n top: 0,\n left: 0\n },\n anomalyTitleWrapper: {\n width: '10px',\n height: '10px',\n position: 'relative',\n display: 'inline-block',\n marginRight: '-3px'\n },\n anomalyValue: {\n paddingLeft: '16px'\n },\n row: {\n padding: '2px 0'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\nconst InfoDataRenderer = ({label, value}: Props) => {\n const styles = useStyles({});\n\n return (\n <>\n {label && <span className={classnames(styles.label, styles.infoDataLabel)}>{label}</span>}\n {value}\n </>\n );\n};\n\nexport default InfoDataRenderer;\n","import React from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\nconst ChartDataRenderer = ({label, value}: Props) => {\n const styles = useStyles({});\n\n return (\n <>\n {label && <span className={classnames(styles.label, styles.chartDataLabel)}>{label}</span>}\n {value}\n </>\n );\n};\n\nexport default ChartDataRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n tooltipWrapper: {\n fontSize: '10px',\n fontWeight: 400,\n lineHeight: '12px',\n color: '#FFFFFF'\n },\n title: {\n padding: '2px 0'\n },\n row: {\n padding: '2px 0'\n }\n});\n","import React from 'react';\nimport ChartDataRenderer from './data-renderers/ChartDataRenderer';\nimport {useStyles} from './styles';\n\ntype Data = {\n label?: React.ReactNode;\n value?: React.ReactNode;\n};\n\ntype Props = {\n data: Data[];\n title?: string;\n DataRenderer?: React.ComponentType<Data>;\n children?: React.ReactNode;\n};\n\nconst ChartDataTooltip = ({data, title, DataRenderer = ChartDataRenderer, children}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={styles.tooltipWrapper}>\n {title && <div className={styles.title}>{title}</div>}\n {data.map((data, index) => (\n <div key={index} className={styles.row}>\n <DataRenderer {...data} />\n </div>\n ))}\n {children}\n </div>\n );\n};\n\nexport default ChartDataTooltip;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n fillRateSquare: {\n height: '8px',\n width: '8px',\n display: 'inline-block',\n marginRight: '5px',\n verticalAlign: 'middle'\n }\n});\n","import React from 'react';\nimport {isNil} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\n\nimport {getPercentLabel} from '../../../services/charts';\n\nimport ChartDataTooltip from '../ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: ChartData[];\n getColor: (group: string) => string;\n title?: string;\n};\n\nconst getValueLabel = ({value, percent}: {value: number; percent?: number}) =>\n isNil(percent) ? i18n.number(value) : `(${i18n.number(value)})`;\n\nconst TooltipWithSquares = ({data, title, getColor}: Props) => {\n const styles = useStyles();\n\n const tooltipData = data.map(({label, percent, value, group}) => ({\n label: (\n <span>\n <div className={styles.fillRateSquare} style={{background: getColor(group)}}></div>\n {label}\n </span>\n ),\n value: `${getPercentLabel(percent)} ${getValueLabel({value, percent})}`\n }));\n\n return <ChartDataTooltip title={title} data={tooltipData} />;\n};\n\nexport default TooltipWithSquares;\n","import {always, converge, curry, identity, pipe, propOr, map, reduce, sortBy, toPairs, when, assoc} from 'ramda';\nimport {\n getChartItemColor,\n FillRateState,\n DQChartsData,\n FillRateData,\n FilterOptions,\n TimeSeriesAnomalyValues,\n TimeSeriesAnomalyValue,\n TimeSeriesStatisticValues\n} from '@reltio/mdm-sdk';\nimport {ChartData} from '@reltio/components';\nimport {getSearchState, localizeChartValues, isEmptyData} from './charts';\nimport i18n from 'ui-i18n';\n\nconst FillRateChartColors = {\n [FillRateState.MISSING]: '#CE5C00',\n [FillRateState.EXISTS]: '#C4CE00'\n};\n\nexport const getFillRateColorByState = (state: FillRateState) => FillRateChartColors[state] || getChartItemColor(state);\n\nexport const getFillRateColors: (chartsData: ChartData[]) => string[] = map(({group}) =>\n getFillRateColorByState(group)\n);\n\nexport const getLabelFromState = (state: FillRateState) => {\n const FillRateStateLabels = {\n [FillRateState.MISSING]: i18n.text('Missing'),\n [FillRateState.EXISTS]: i18n.text('Exists')\n };\n\n return FillRateStateLabels[state] || state;\n};\n\nconst getFillRateStateIndexFromData = (data: ChartData) =>\n Object.values(FillRateState).indexOf(data.group as FillRateState);\n\ntype FormatFillRateDataFn = (fillRateData: FillRateData) => ChartData[];\nexport const formatFillRateData = pipe(\n Object.entries,\n map(([state, value]) => ({label: getLabelFromState(state), group: state, value})),\n sortBy(getFillRateStateIndexFromData),\n localizeChartValues\n) as FormatFillRateDataFn;\n\ntype FillRateStatistic = {\n statistic: Record<string, DQChartsData>;\n};\nexport const formatFillRatesData: (fillRates: FillRateStatistic) => Record<string, ChartData[]> = pipe(\n propOr({}, 'statistic'),\n toPairs,\n reduce((result, [key, value]) => {\n if (value?.fillRate) return assoc(key, formatFillRateData(value.fillRate), result);\n return result;\n }, {})\n);\n\ntype GetFillRateDataFn = (\n chartsData: DQChartsData | TimeSeriesAnomalyValues | TimeSeriesStatisticValues\n) => FillRateData | TimeSeriesAnomalyValue;\nexport const getFillRateData: GetFillRateDataFn = propOr({}, 'fillRate');\n\ntype GetFillRateChartDataFn = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n colors: string[];\n};\nexport const getFillRateChartData: GetFillRateChartDataFn = pipe(\n getFillRateData,\n formatFillRateData,\n when(isEmptyData, always([])),\n converge(\n (chartData: ChartData, colors: string[]) => ({\n chartData,\n colors\n }),\n [identity, getFillRateColors]\n )\n);\n\nconst getFillRateFilter = curry(({fieldName}: {fieldName: string}, state: FillRateState) => [\n {\n filter: state === FillRateState.EXISTS ? FilterOptions.EXISTS : FilterOptions.MISSING_VALUE,\n fieldName\n }\n]);\nexport const getFillRateSearchState = getSearchState(getFillRateFilter);\n","import {useMemo} from 'react';\n\nimport {DQChartsData} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../contexts/ChartsDataProvider';\n\nexport const useChartData = <T>(getChartData: (chartsData: DQChartsData) => T) => {\n const {\n chartsData: {data: chartsData, state, reload}\n } = useChartsDataContext();\n const data = useMemo(() => getChartData(chartsData), [chartsData, getChartData]);\n return useMemo(() => ({data, state, reload}), [data, state, reload]);\n};\n","import {AdditionalFilterOptionsValues, FilterOptions, SearchState} from '@reltio/mdm-sdk';\nimport {getAdvancedSearchFilter} from './advancedFilters';\n\nexport const RawFilterFields = {\n DAY_OF_WEEK: 'day_of_week',\n DAY_OF_MONTH: 'day_of_month',\n MONTH: 'month',\n LENGTH: 'length',\n CROSSWALK_SOURCES: 'crosswalk_sources',\n PATTERN: 'pattern'\n};\n\ntype GetRawFilterSearchState = {\n keyword: string;\n entityTypeUri: string;\n};\nconst getRawFilterSearchState = ({keyword, entityTypeUri}: GetRawFilterSearchState): SearchState => ({\n keyword: {\n value: keyword,\n isRawFilter: true\n },\n advanced: [getAdvancedSearchFilter(entityTypeUri)],\n version: '2.0'\n});\ntype GetRangeRawFilterSearchState = {\n fieldName: string;\n startRange: string;\n endRange: string;\n entityTypeUri: string;\n};\n\nexport const getExcludedEntityTypesRawFilter = (entityTypesUris: string[] = []) =>\n entityTypesUris.length > 0\n ? `(${AdditionalFilterOptionsValues.NOT_LIST_EQUALS}(type, ${entityTypesUris.join(',')}))`\n : '';\n\nexport const getRangeRawFilterSearchState = ({\n fieldName,\n startRange,\n endRange,\n entityTypeUri\n}: GetRangeRawFilterSearchState): SearchState =>\n getRawFilterSearchState({\n keyword: `${FilterOptions.IN_RANGE}(${fieldName}, ${startRange}, ${endRange})`,\n entityTypeUri\n });\n\ntype GetEqualsRawFilterSearchState = {\n fieldName: string;\n value: string;\n entityTypeUri: string;\n};\nexport const getEqualsRawFilterSearchState = ({\n fieldName,\n value,\n entityTypeUri\n}: GetEqualsRawFilterSearchState): SearchState =>\n getRawFilterSearchState({\n keyword: `${FilterOptions.EQUALS}(${fieldName}, ${value})`,\n entityTypeUri\n });\n","import {assoc, curry, pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport mdmModule, {ui, search} from '@reltio/mdm-module';\nimport {ActivityFilter, getDescendantEntityTypes, Metadata, SearchState} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {getExcludedEntityTypesRawFilter} from '../services/rawFilters';\nimport type {GetSearchStateProps} from '../types/GetSearchStateProps';\n\nconst excludeDescendantEntityTypes = curry((metadata: Metadata, entityTypeUri: string, searchState: SearchState) => {\n const descendantEntityTypes: string[] = getDescendantEntityTypes(metadata, entityTypeUri);\n const entityTypesFilter = getExcludedEntityTypesRawFilter(descendantEntityTypes);\n const currentRawFilter = searchState?.keyword?.value;\n if (entityTypesFilter) {\n const newRawFilter = currentRawFilter ? `(${currentRawFilter}) and ${entityTypesFilter}` : entityTypesFilter;\n return assoc(\n 'keyword',\n {\n value: newRawFilter,\n isRawFilter: true\n },\n searchState\n );\n } else return searchState;\n});\nconst addOVOption = curry((ovOption: boolean, searchState: SearchState) =>\n assoc('searchOptions', {searchByOv: ovOption, ovOnly: ovOption}, searchState)\n);\ntype GetSearchStateFn = (props: GetSearchStateProps) => (group: string, activityFilter?: ActivityFilter) => SearchState;\nexport const useSearchRedirect = (\n getSearchState: GetSearchStateFn\n): ((group: string, activityFilter?: ActivityFilter) => void) => {\n const dispatch = useDispatch();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const {detailedAttributeType, entityType, searchByOv} = useDQDashboardState();\n const globalFilter = useSelector(mdmModule.selectors.getGlobalFilter);\n return (group, activityFilter = ActivityFilter.ACTIVE_ONLY) => {\n dispatch(search.actions.activityFilterUpdated(activityFilter));\n dispatch(search.actions.globalFilterUpdated({...globalFilter, isMuted: true, query: null}));\n pipe(\n getSearchState({detailedAttributeType, entityTypeUri: entityType.uri}),\n excludeDescendantEntityTypes(metadata, entityType.uri),\n addOVOption(searchByOv),\n ui.actions.openSearch,\n dispatch\n )(group);\n };\n};\n","const ANOMALY_DATA_KEY = 'anomaly';\n\nexport default ANOMALY_DATA_KEY;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n legendLabel: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n legendValue: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n legendHorizontal: {\n width: '100%',\n display: 'flex',\n justifyContent: 'left',\n margin: 'auto',\n flexWrap: 'wrap',\n flexDirection: 'row',\n marginBottom: 2\n },\n legendVertical: {\n width: '100%',\n display: 'flex',\n justifyContent: 'center',\n margin: 'auto',\n flexWrap: 'wrap',\n flexDirection: 'column',\n marginBottom: 2\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n height: 19\n },\n itemColor: {\n width: 12,\n height: 12,\n marginRight: 9,\n flexShrink: 0\n }\n});\n","import React from 'react';\nimport {LegendPayload, LegendProps} from 'recharts';\nimport classnames from 'classnames';\n\nimport ANOMALY_DATA_KEY from '../../constants/AnomalyDataKey';\n\nimport {useStyles} from './styles';\n\nconst CustomLegend = ({payload, layout}: LegendProps) => {\n const styles = useStyles();\n return (\n <div\n className={classnames({\n [styles.legendHorizontal]: layout === 'horizontal',\n [styles.legendVertical]: layout === 'vertical'\n })}\n >\n {payload.map((item: LegendPayload & {dataKey: string}) => (\n <div key={item.dataKey} className={styles.item}>\n <div\n style={{background: item.color, opacity: item.dataKey === ANOMALY_DATA_KEY ? 0.24 : 1}}\n className={styles.itemColor}\n />\n <span className={styles.legendLabel}> {item.value}</span>\n </div>\n ))}\n </div>\n );\n};\n\nexport default CustomLegend;\n","import React from 'react';\nimport {Legend, LegendProps} from 'recharts';\n\nimport {ChartData, withPercents} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {getPercentLabel} from '../../services/charts';\n\nimport CustomLegend from './CustomLegend';\n\nimport {useStyles} from './styles';\n\ntype StackedHorizontalBarData = ChartData & {dataReltioId?: string};\n\ntype Props = LegendProps & {\n data: StackedHorizontalBarData[];\n colors: string[];\n};\n\nconst ChartLegends = ({data, colors, ...legendProps}: Props) => {\n const styles = useStyles();\n return (\n <Legend\n layout=\"vertical\"\n align=\"left\"\n verticalAlign=\"top\"\n wrapperStyle={{\n display: 'flex',\n overflowY: 'auto',\n maxHeight: '100%',\n maxWidth: '100%',\n marginTop: '13px'\n }}\n content={<CustomLegend />}\n payload={(data || []).map(({group, label, value, percent}, index) => ({\n id: group,\n type: 'square',\n color: colors[index],\n value: (\n <>\n <span className={styles.legendLabel}>{label}</span>\n <span className={styles.legendValue}>\n {`${getPercentLabel(percent)} (${formatNumberAsMetric(value, 999)})`}\n </span>\n </>\n )\n }))}\n {...legendProps}\n />\n );\n};\n\nexport default withPercents(ChartLegends);\n","export const VIOLATED_PROFILES_METRIC = 'violatedProfiles';\n","import moment from 'moment';\nimport {useContext} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport mdmModule from '@reltio/mdm-module';\nimport {DQMetric, DataTypes, getLastUriPart} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {checkIsTimeSeries, getTimeRangeDates} from '../services/mlDq';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {VIOLATED_PROFILES_METRIC} from '../constants/ValidationMetric';\n\ntype Props = {\n config: DQDashboardView;\n};\n\nconst DIVIDER = '_';\n\nexport const useExportDQParams = ({config}: Props) => {\n const exportDQPath: string = useSelector(mdmModule.selectors.getExportDQPath);\n const tenant = useSelector(mdmModule.selectors.getTenant);\n const {entityType, detailedAttributeType, dateRange} = useDQDashboardState();\n const attributeFieldName = detailedAttributeType?.fieldName.replace('attributes.', '');\n const attributeType = detailedAttributeType?.fieldName;\n const attributeDataType = detailedAttributeType?.type as DataTypes;\n const dataLevel = useContext(DataLevelContext);\n const {startDate, endDate} = getTimeRangeDates(dateRange);\n const isTimeseries = checkIsTimeSeries(config);\n const period = checkIsTimeSeries(config) ? startDate.concat('_', endDate) : moment().utc().format();\n const getFileName = () =>\n tenant.concat(\n DIVIDER,\n entityType.label || getLastUriPart(entityType.uri),\n `${attributeFieldName ? DIVIDER.concat(attributeFieldName) : ''}`,\n DIVIDER,\n config.type,\n DIVIDER,\n period,\n '.csv'\n );\n const metrics =\n config.type === 'dataValidationFunctions' && isTimeseries\n ? VIOLATED_PROFILES_METRIC\n : (config.type as DQMetric);\n\n return {\n tenant,\n entityType: getLastUriPart(entityType.uri),\n attributeType,\n exportDQPath,\n dataLevel,\n metrics: [metrics],\n period: [startDate, endDate],\n isTimeseries,\n getFileName,\n dataType: attributeDataType\n };\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n width: \"24\"\n}, props), React.createElement(\"g\", null, React.createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0z\"\n})), React.createElement(\"g\", null, React.createElement(\"path\", {\n fillOpacity: \".54\",\n d: \"M5 20h14v-2H5v2zM19 9h-4V3H9v6H5l7 7 7-7z\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n menuButton: {\n position: 'absolute',\n right: '10px'\n }\n});\n","import {has} from 'ramda';\nimport React, {useContext} from 'react';\n\nimport i18n from 'ui-i18n';\nimport {DashboardPopupMenu} from '@reltio/dashboard';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useExportData} from '../../hooks/useExportData';\nimport ExportResultIcon from '../../icons/ExportResult.svg';\nimport {DQDashboardView} from '../../types/DQDashboardView';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n exportLoadingId: string;\n};\n\nconst DQDashboardPopupMenu = ({config, exportLoadingId}: Props) => {\n const styles = useStyles();\n const dataLevel = useContext(DataLevelContext);\n const {addExportLoadingId} = useDQDashboardStateActions();\n const {exportLoadingIds} = useDQDashboardState();\n const exportData = useExportData(config);\n const handleDownloadClick = () => {\n addExportLoadingId(exportLoadingId);\n exportData(exportLoadingId);\n };\n const menuItems = [\n {\n id: 'download',\n title: i18n.text('Download'),\n icon: <ExportResultIcon />,\n active: true,\n action: handleDownloadClick,\n disabled: has(exportLoadingId, exportLoadingIds)\n }\n ];\n return (\n <div className={styles.menuButton} data-reltio-id={`reltio-dq-dashboard-export-${dataLevel}-${config.type}`}>\n <DashboardPopupMenu items={menuItems} />\n </div>\n );\n};\n\nexport default DQDashboardPopupMenu;\n","import {useSafePromise} from '@reltio/components';\nimport {exportDQ} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardStateActions} from '../contexts/DQDashboardStateContext';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {useExportDQParams} from './useExportParams';\n\nexport const useExportData = (config: DQDashboardView) => {\n const safePromise = useSafePromise();\n const exportParams = useExportDQParams({config});\n const {deleteExportLoadingId} = useDQDashboardStateActions();\n return (exportId: string) =>\n safePromise(exportDQ(exportParams))\n .then((res) => res.arrayBuffer())\n .then((arrayBuffer) => {\n const blob = new Blob([arrayBuffer], {type: 'csv'});\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = exportParams.getFileName();\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n })\n .catch(console.error)\n .finally(() => deleteExportLoadingId(exportId));\n};\n","export enum EmptyStateVariants {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large'\n}\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n container: ({height}: {height: number}) => ({\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'rgba(0, 0, 0, 0.54)',\n margin: '0 auto',\n paddingBottom: height > 239 ? '30px' : 0,\n boxSizing: 'border-box'\n }),\n small: {\n '& $icon': {\n maxHeight: '88px'\n },\n '& $message': {\n fontSize: '12px'\n },\n '& $title': {\n fontSize: '13px',\n fontWeight: 400,\n marginBottom: 0\n },\n '& $refreshButton': {\n marginTop: '2px',\n padding: 0\n }\n },\n medium: {\n '& $icon': {\n maxHeight: '190px',\n marginBottom: '24px'\n }\n },\n large: {\n '& $icon': {\n height: '256px',\n width: '256px',\n marginBottom: '24px'\n }\n },\n icon: ({height}: {height: number}) => ({\n paddingTop: 0,\n marginBottom: height > 170 ? '16px' : '4px'\n }),\n message: {\n padding: '0 24px',\n fontSize: '14px',\n textAlign: 'center',\n whiteSpace: 'pre-wrap'\n },\n title: {\n padding: '0 24px',\n fontSize: '20px',\n textAlign: 'center',\n color: 'rgba(0,0,0,0.87)',\n fontWeight: 500,\n marginBottom: '8px'\n },\n refreshButton: {\n color: theme.palette.primary.main,\n marginTop: '12px',\n padding: '6px 8px'\n },\n refreshIcon: {\n width: '24px',\n height: '24px'\n }\n}));\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport ReplayIcon from '@mui/icons-material/Replay';\nimport {ErrorData} from '../../types/ErrorData';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\ntype Props = {\n errorData?: ErrorData;\n onRefresh?: () => void;\n height?: number;\n variant?: EmptyStateVariants;\n};\n\nconst defaultIcon = EMPTY_STATE_ICONS.ERROR;\n\nconst DQDashboardError = ({onRefresh, height, errorData = {}, variant = EmptyStateVariants.SMALL}: Props) => {\n const {Icon = defaultIcon, message, title} = errorData;\n const styles = useStyles({height});\n return (\n <div className={classnames(styles.container, styles[`${variant}`])}>\n <Icon className={styles.icon} />\n {title && <Typography className={styles.title}>{title}</Typography>}\n {message && <Typography className={styles.message}>{message}</Typography>}\n {!!onRefresh && (\n <Button\n className={styles.refreshButton}\n startIcon={<ReplayIcon color=\"primary\" className={styles.refreshIcon} />}\n onClick={onRefresh}\n data-reltio-id=\"reltio-dq-dashboard-chart-refresh-button\"\n >\n <Typography variant=\"button\">{i18n.text('Refresh')}</Typography>\n </Button>\n )}\n </div>\n );\n};\n\nexport default DQDashboardError;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n }\n}));\n","import classnames from 'classnames';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport i18n from 'ui-i18n';\nimport {BasicViewContent, ErrorBoundary, EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {useStyles} from './styles';\n\ntype ChildrenProps<T> = {data: T[]; width: number; height: number};\n\ntype Props<T> = {\n loadingState: RequestStates;\n children: (props: ChildrenProps<T>) => React.ReactNode;\n onRefresh: () => void;\n data: T[];\n className?: string;\n errorData?: {\n icon?: JSX.Element;\n message?: React.ReactNode;\n title?: React.ReactNode;\n };\n};\n\nconst DQLayoutItemContent = <T extends unknown>({loadingState, onRefresh, children, data, className}: Props<T>) => {\n const styles = useStyles();\n const renderContent = ({width, height}: {width: number; height: number}) => {\n switch (loadingState) {\n case RequestStates.LOADED:\n if (!data || data.length === 0) {\n return (\n <DQDashboardError\n height={height}\n errorData={{\n Icon: EMPTY_STATE_ICONS.NO_DATA,\n message: i18n.text(\n 'Go ahead and load some data. We’ll put it on the scales and let you know here if it measures up.'\n ),\n title: i18n.text('Give us something to go on!')\n }}\n variant={EmptyStateVariants.SMALL}\n />\n );\n }\n return (\n <ErrorBoundary\n error={\n <DQDashboardError\n errorData={{message: i18n.text('Something went wrong')}}\n height={height}\n variant={EmptyStateVariants.SMALL}\n />\n }\n >\n {children({data, width, height})}\n </ErrorBoundary>\n );\n case RequestStates.LOADING:\n return <DashboardLinearLoader />;\n case RequestStates.ERROR:\n return (\n <DQDashboardError\n errorData={{\n Icon: EMPTY_STATE_ICONS.ERROR,\n message: i18n.text('No need to fret - just refresh and it will work itself out.'),\n title: i18n.text('Oops! We ran into a problem.')\n }}\n height={height}\n onRefresh={onRefresh}\n variant={EmptyStateVariants.SMALL}\n />\n );\n default:\n return <div>Loading...</div>;\n }\n };\n\n return (\n <BasicViewContent className={classnames(styles.viewContent, className)}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n {renderContent}\n </ReactResizeDetector>\n </BasicViewContent>\n );\n};\n\nexport default DQLayoutItemContent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n root: {\n padding: '0px 16px'\n },\n title: {\n fontSize: '16px',\n marginRight: '5px',\n lineHeight: '24px'\n },\n infoIcon: {\n position: 'relative'\n }\n}));\n","import React, {useContext} from 'react';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\n\nimport {BasicViewHeader, SmallIconButtonWithTooltip, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n infoTooltipTitle?: React.ReactElement | string;\n children?: React.ReactNode;\n};\n\nconst DQLayoutItemHeader = ({title, infoTooltipTitle, children}: Props) => {\n const hasInfoIcon = !!infoTooltipTitle;\n const hasChildren = !!children;\n const styles = useStyles(hasChildren);\n const isAttributeLevel = useContext(DataLevelContext) === DQDataLevel.ATTRIBUTE_TYPE;\n return (\n <BasicViewHeader\n title={title}\n className={styles.root}\n classes={{\n title: styles.title\n }}\n >\n {hasInfoIcon && (\n <SmallIconButtonWithTooltip\n icon={InfoIcon}\n size=\"XXS\"\n tooltipTitle={infoTooltipTitle}\n className={styles.infoIcon}\n tooltipPlacement=\"top-start\"\n />\n )}\n {hasChildren && (\n <HideOnShrink widthToHide={250}>\n {isAttributeLevel && <VerticalDivider height={24} margin={16} />}\n {children}\n </HideOnShrink>\n )}\n </BasicViewHeader>\n );\n};\n\nexport default DQLayoutItemHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n view: {\n flex: 1,\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n }\n}));\n","import React, {useContext} from 'react';\nimport {BasicView} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n children: React.ReactNode;\n};\n\nconst DQLayoutItemView = ({config, children}: Props) => {\n const styles = useStyles();\n const {type} = config;\n const dataLevel = useContext(DataLevelContext);\n const {period} = useDQDashboardState();\n const dataReltioId = hasTimeRange(period)\n ? `reltio-dq-dashboard-chart-time-series-${type}-${dataLevel}`\n : `reltio-dq-dashboard-chart-${type}-${dataLevel}`;\n\n return (\n <BasicView className={styles.view} data-reltio-id={dataReltioId}>\n {children}\n </BasicView>\n );\n};\n\nexport default DQLayoutItemView;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n height: '18px',\n padding: '3px 8px',\n background: 'rgba(43, 152, 240, 0.12)',\n border: '0.6px solid #2B98F0',\n borderRadius: '2px'\n },\n label: {\n fontSize: '8px',\n padding: 0\n },\n disabled: {\n background: 'rgba(153, 153, 153, 0.12)',\n border: '0.6px solid #999999'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@mui/material/Chip';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {getLabelByTimeRange} from '../../services/mlDq';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = ChipProps & {\n disabled?: boolean;\n};\n\nconst PeriodChip = ({disabled = false, ...chipProps}: Props) => {\n const styles = useStyles();\n const {dateRange} = useDQDashboardState();\n const label = disabled ? i18n.text('Today') : getLabelByTimeRange(dateRange);\n\n return (\n <Chip\n classes={{\n root: classnames(styles.root, styles.disabled),\n label: styles.label\n }}\n label={label}\n {...chipProps}\n />\n );\n};\n\nexport default PeriodChip;\n","import {makeStyles} from '@mui/styles';\n\nconst BarAxis = {\n content: '\"\"',\n position: 'absolute',\n background: 'rgba(0, 0, 0, 0.38)',\n width: '1px',\n height: '4px',\n bottom: '-4px',\n left: 0\n};\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n },\n stackedBar: {\n width: '100%',\n display: 'flex',\n flexWrap: 'nowrap',\n marginTop: '13px',\n position: 'relative',\n '&:before': BarAxis,\n '&:after': {\n ...BarAxis,\n right: 0,\n left: 'initial'\n }\n },\n bar: {\n height: '24px',\n flexGrow: 1,\n position: 'relative',\n width: '50%',\n transition: 'width 0.7s',\n '&:hover': {\n '&:after': {\n content: '\"\"',\n background: 'rgba(0, 0, 0, 0.1)'\n }\n },\n '&:after': {\n position: 'absolute',\n top: '-3px',\n bottom: '-4px',\n left: '-3px',\n right: '-3px',\n transition: 'background 0.3s',\n zIndex: 1,\n pointerEvents: 'none'\n }\n },\n inactivePart: {\n background: '#EFEFEF'\n },\n tooltipTitle: {\n fontSize: '11px'\n },\n tooltipFillRate: {\n marginTop: '4px'\n },\n tooltip: {\n background: '#fff',\n filter: 'drop-shadow(0px 4px 5px rgba(0, 0, 0, 0.14)) drop-shadow(0px 1px 10px rgba(0, 0, 0, 0.12)) drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.2))',\n padding: '5px 8px'\n },\n legendWrapper: {\n position: 'relative',\n flexGrow: 1\n },\n legendLabel: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n legendValue: {\n fontSize: '13px',\n lineHeight: '18px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n clickable: {\n cursor: 'pointer'\n },\n rangeWrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: '4px'\n },\n rangeValue: {\n color: 'rgba(0, 0, 0, 0.54)',\n fontSize: '12px'\n },\n popper: {\n paddingTop: '6px'\n }\n});\n","import React, {forwardRef} from 'react';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst Bar = forwardRef(\n ({className, ...props}: React.HTMLAttributes<HTMLDivElement>, ref: React.RefObject<HTMLDivElement>) => {\n const styles = useStyles();\n return <div className={classnames(styles.bar, className)} {...props} ref={ref} />;\n }\n);\nBar.displayName = 'Bar';\n\nexport default Bar;\n","import classnames from 'classnames';\nimport {nanoid} from 'nanoid';\nimport {has, pipe, pluck, sum} from 'ramda';\nimport React, {useContext, useMemo} from 'react';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport i18n from 'ui-i18n';\n\nimport {ChartData, RequestStates, withPercents} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {getBarWidthStyle, getPercentLabel} from '../../services/charts';\nimport {hasTimeRange} from '../../services/mlDq';\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {ChartDataTooltip} from '../../components/ChartDataTooltip';\nimport ChartLegends from '../../components/ChartLegends/ChartLegends';\nimport DQDashboardPopupMenu from '../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\nimport DQLayoutItemContent from '../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../components/PeriodChip/PeriodChip';\nimport Bar from './Bar';\nimport {useStyles} from './styles';\n\nconst getTooltipData = ({label, value, percent}: ChartData) => [\n {\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }\n];\n\ntype StackedHorizontalBarData = ChartData & {dataReltioId?: string};\n\ntype Props = {\n classes?: Partial<Record<'bar' | 'stackedBar' | 'legendWrapper', string>>;\n colors: string[];\n config: DQDashboardView;\n data: StackedHorizontalBarData[];\n infoTooltipTitle?: React.ReactElement | string;\n onItemClick?: (group: string) => void;\n onRefresh: () => void;\n state: RequestStates;\n};\n\nconst StackedHorizontalBarChart = ({\n classes = {},\n colors,\n config,\n data,\n infoTooltipTitle,\n onItemClick,\n onRefresh,\n state\n}: Props) => {\n const styles = useStyles();\n const onBarClick = onItemClick && ((group: string) => onItemClick(group));\n const clickable = !!onItemClick;\n const maxValue = pipe(pluck('percent'), sum)(data);\n const {title} = config;\n const {period, exportLoadingIds} = useDQDashboardState();\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n const dataLevel = useContext(DataLevelContext);\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && dataLevel === DQDataLevel.ATTRIBUTE_TYPE && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent loadingState={state} onRefresh={onRefresh} data={data}>\n {({data}) => (\n <div className={styles.root}>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <div className={classnames(styles.stackedBar, classes.stackedBar)}>\n {data.map((chartData: StackedHorizontalBarData, index: number) => (\n <Tooltip\n title={<ChartDataTooltip data={getTooltipData(chartData)} />}\n followCursor={true}\n key={chartData.label}\n classes={{popper: styles.popper}}\n >\n <Bar\n className={classnames(classes.bar, clickable && styles.clickable)}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n onClick={() => onBarClick && onBarClick(chartData.group)}\n data-reltio-id={chartData.dataReltioId}\n />\n </Tooltip>\n ))}\n </div>\n <div className={styles.rangeWrapper}>\n <span className={styles.rangeValue}>0</span>\n <span className={styles.rangeValue}>{i18n.number(maxValue)}</span>\n </div>\n <div className={classnames(styles.legendWrapper, classes.legendWrapper)}>\n <ChartLegends data={data} colors={colors} />\n </div>\n </div>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default withPercents(StackedHorizontalBarChart);\n","import React from 'react';\n\nimport {getFillRateChartData, getFillRateSearchState} from '../../../services/fillRate';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\n\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nconst FillRateChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const {data, state, reload} = useChartData(getFillRateChartData);\n const {chartData, colors} = data;\n const searchProfiles = useSearchRedirect(getFillRateSearchState);\n\n return (\n <StackedHorizontalBarChart\n data={chartData}\n colors={colors}\n onItemClick={searchProfiles}\n config={config}\n state={state}\n onRefresh={reload}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default FillRateChart;\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {last, head, path, pathOr, pipe, applySpec, any, includes, __} from 'ramda';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {\n DatePeriod,\n DQDataLevel,\n TimeSeriesMetric,\n getMlDqData,\n TimeSeriesData,\n TimeSeriesStatisticData,\n DQMetric\n} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {getTimeRangeDates} from '../services/mlDq';\nimport {useRefreshAction} from '../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../contexts/PermissionsProvider';\n\ntype useMlDqDataRequestProps = {\n entityTypeUri: string;\n attributeFieldName: string;\n period?: DatePeriod;\n dataLevel?: DQDataLevel;\n metrics?: TimeSeriesMetric[];\n};\n\nconst needRefreshData = (period: DatePeriod, data: TimeSeriesStatisticData[]) => {\n const currentRange = data\n ? {\n startDate: pipe(last, path(['time', '_max_date']))(data),\n endDate: pipe(head, path(['time', '_min_date']))(data)\n }\n : null;\n\n if (currentRange) {\n const currentStartTime = new Date(currentRange.startDate);\n const currentEndTime = new Date(currentRange.endDate);\n const {startDate, endDate} = getTimeRangeDates(period);\n const startTime = new Date(startDate);\n const endTime = new Date(endDate);\n if (startTime >= currentStartTime && endTime <= currentEndTime) return false;\n }\n\n return true;\n};\n\nconst ANOMALY_METRICS = [DQMetric.FILL_RATE, DQMetric.UNIQUENESS];\n\nexport const useMlDqDataRequest = ({\n entityTypeUri,\n attributeFieldName,\n period = DQDateRangeValue.LAST_WEEK,\n dataLevel = DQDataLevel.ATTRIBUTE_TYPE,\n metrics\n}: useMlDqDataRequestProps) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [timeSeriesData, setTimeSeriesData] = useState<TimeSeriesData>(null);\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const mlDqPath: string = useSelector(mdmModule.selectors.getMlDqPath);\n const safePromise = useSafePromise();\n const oldRequestDependencies = useRef<string>();\n const needRequestErrorBandsData =\n usePermissionsContext().showErrorBands && any(includes(__, ANOMALY_METRICS), metrics);\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setTimeSeriesData(null);\n };\n\n const onRequestFinished = (data: TimeSeriesData) => {\n setTimeSeriesData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const memoizedRequestDependencies = [attributeFieldName, entityTypeUri, dataLevel, metrics, tenant].toString();\n\n const loadChartsData = useCallback(() => {\n if (!entityTypeUri) return;\n setRequestState(RequestStates.LOADING);\n setTimeSeriesData(null);\n\n const {startDate, endDate} = getTimeRangeDates(period);\n safePromise(\n getMlDqData({\n mlDqPath,\n tenant,\n entityTypeUri,\n attribute: attributeFieldName,\n dataLevel,\n metrics,\n startDate,\n endDate,\n ...(needRequestErrorBandsData && {anomaly: 'prophet'})\n })\n )\n .then(\n pipe(\n applySpec({\n statisticData: pipe(pathOr({}, ['data', attributeFieldName, 'timeSeries'])),\n anomalyData: pipe(pathOr({}, ['dataAnomaly', attributeFieldName, 'timeSeries']))\n }),\n onRequestFinished\n )\n )\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [memoizedRequestDependencies, period]);\n\n const refreshAction = useRefreshAction({\n action: loadChartsData,\n dataLevel\n });\n\n useEffect(() => {\n const needRefresh = needRefreshData(period, timeSeriesData?.statisticData);\n (needRefresh || memoizedRequestDependencies !== oldRequestDependencies?.current) && refreshAction();\n oldRequestDependencies.current = memoizedRequestDependencies;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refreshAction]);\n\n return useMemo(\n () => ({data: timeSeriesData, state: requestState, reload: refreshAction}),\n [timeSeriesData, requestState, refreshAction]\n );\n};\n","import {flatten, pipe, props, map, isNil, propEq, reject, curry, slice, findIndex, assocPath, last, path} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\nimport {getTimeRangeDates, isNoDataAvailable, isNoProfiles} from '../../services/mlDq';\nimport {LineChartData} from '../../types/LineChartData';\n\nconst getValuesFromChartData = curry((keys: string[], data: LineChartData[]) =>\n pipe(map(props(keys)), flatten, reject(isNil))(data)\n);\n\nexport const getMaxValueFromLineChartData = (keys: string[], data: LineChartData[]) =>\n pipe(getValuesFromChartData(keys), (values: number[]) => Math.max(...values))(data);\n\nexport const getMinValueFromLineChartData = (keys: string[], data: LineChartData[]) =>\n pipe(getValuesFromChartData(keys), (values: number[]) => Math.min(...values))(data);\n\nconst roundPercent = (percent: number) => Math.round(percent * 100) / 100;\n\nconst getOneLinePercentEdgeData = (data: number) => {\n if (data === 0 || data === 100)\n return {\n minYAxisValue: 0,\n maxYAxisValue: 100\n };\n const minYAxisValue = data > 50 ? roundPercent(2 * data - 100) : 0;\n const maxYAxisValue = data > 50 ? 100 : roundPercent(2 * data);\n return {\n minYAxisValue,\n maxYAxisValue\n };\n};\n\nexport const getUpdatedEdgeData = ({\n minLineChartData,\n maxLineChartData,\n isPercent\n}: {\n minLineChartData: number;\n maxLineChartData: number;\n isPercent: boolean;\n}) => {\n if (minLineChartData === maxLineChartData) {\n return isPercent\n ? getOneLinePercentEdgeData(minLineChartData)\n : {\n minYAxisValue: 'minData',\n maxYAxisValue: 'maxData'\n };\n }\n const gap = (maxLineChartData - minLineChartData) / 6;\n const updatedMinData = roundPercent(minLineChartData - gap);\n const updatedMaxData = roundPercent(maxLineChartData + gap);\n return {\n minYAxisValue: updatedMinData > 0 ? updatedMinData : 0,\n maxYAxisValue: isPercent && updatedMaxData > 100 ? 100 : updatedMaxData\n };\n};\n\nconst isLineChartDataEmpty = (data: LineChartData, keys: string[]) =>\n keys.every((key) => isNil(data[key]) || isNaN(+data[key]));\n\nexport const getEmptyAreas = (chartData: LineChartData[], keys: string[]) => {\n const getDateByIndex = (index: number) => path([index, 'group'], chartData);\n const extendArea = (areas: Record<'start' | 'end', number>[], index: number) => {\n const lastArea = last(areas);\n const endDate = getDateByIndex(index === chartData.length - 1 ? index : index + 1);\n\n return (lastArea && getDateByIndex(index) !== lastArea.end) || areas?.length === 0\n ? areas.concat({\n start: getDateByIndex(index === 0 ? index : index - 1),\n end: endDate\n })\n : assocPath([areas.length - 1, 'end'], endDate, areas);\n };\n\n return chartData.reduce((emptyAreas, data, index) => {\n return isLineChartDataEmpty(data, keys) ? extendArea(emptyAreas, index) : emptyAreas;\n }, []);\n};\n\nexport const XAxisTickFormatter = (value: number) => i18n.date(value, 'MMM D');\n\nexport const getZoomedData = (data: LineChartData[], dateRange: DatePeriod): LineChartData[] => {\n if (data.length === 1) return data;\n const {startDate, endDate} = getTimeRangeDates(dateRange);\n const indexStart = findIndex(propEq('group', startDate), data);\n const indexEnd = findIndex(propEq('group', endDate), data) + 1;\n return data && dateRange ? slice(indexStart, indexEnd, data) : data;\n};\n\nexport const getSeparateLines = (data: LineChartData[], lineKeys: string[], areaKeys: string[]) =>\n data.reduce((acc, currentValue, currentIndex, dataArray) => {\n if (currentIndex + 1 === dataArray.length) return acc;\n if (\n isNoDataAvailable(currentValue, lineKeys, areaKeys) &&\n isNoProfiles(dataArray[currentIndex + 1], lineKeys, areaKeys)\n ) {\n return [...acc, currentValue.group];\n }\n if (\n isNoProfiles(currentValue, lineKeys, areaKeys) &&\n isNoDataAvailable(dataArray[currentIndex + 1], lineKeys, areaKeys)\n ) {\n return [...acc, currentValue.group];\n }\n return acc;\n }, []);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M10 16.667A6.676 6.676 0 013.333 10 6.676 6.676 0 0110 3.333 6.675 6.675 0 0116.667 10 6.675 6.675 0 0110 16.667zm0 1.666c4.6 0 8.333-3.733 8.333-8.333S14.6 1.667 10 1.667A8.336 8.336 0 001.667 10c0 4.6 3.733 8.333 8.333 8.333zM9.167 10v3.333h1.666V10h2.5L10 6.667 6.667 10h2.5z\",\n fill: \"#7BAB52\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 20 20\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M10 3.333A6.676 6.676 0 0116.667 10 6.675 6.675 0 0110 16.667 6.675 6.675 0 013.333 10 6.676 6.676 0 0110 3.333zm0-1.666A8.336 8.336 0 001.667 10c0 4.6 3.733 8.333 8.333 8.333S18.333 14.6 18.333 10 14.6 1.667 10 1.667zM10.833 10V6.667H9.167V10h-2.5L10 13.333 13.333 10h-2.5z\",\n fill: \"#FF1744\"\n})));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n infoPanel: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\n margin: '0 0 2px',\n padding: '6px 12px 6px',\n color: theme.palette.text.secondary,\n fontSize: '13px',\n lineHeight: '20px'\n },\n info: {\n color: theme.palette.text.primary,\n fontSize: '14px'\n },\n dynamicInfo: {\n display: 'flex',\n alignItems: 'center'\n },\n dynamicInfoPositive: {\n color: '#5C922E'\n },\n dynamicInfoNegative: {\n color: '#FF1744'\n },\n dynamicIcon: {\n paddingRight: '4px'\n },\n\n percent: {\n fontWeight: 700,\n paddingRight: '4px'\n },\n\n period: {\n fontWeight: 'bold'\n }\n}));\n","import React from 'react';\nimport classnames from 'classnames';\n\nimport PositiveDynamicIcon from './positiveDynamic.svg';\nimport NegativeDynamicIcon from './negativeDynamic.svg';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n label: React.ReactNode;\n info: React.ReactNode;\n dynamicPercent?: number;\n};\n\nexport const ChartInfoPanel = ({label, info, dynamicPercent}: Props) => {\n const styles = useStyles();\n\n const isPositiveDynamic = dynamicPercent > 0;\n return (\n <div className={styles.infoPanel}>\n {label}\n <span className={styles.info}>{info}</span>\n {!!dynamicPercent && (\n <span\n className={classnames(styles.dynamicInfo, {\n [styles.dynamicInfoPositive]: isPositiveDynamic,\n [styles.dynamicInfoNegative]: !isPositiveDynamic\n })}\n >\n {isPositiveDynamic ? (\n <PositiveDynamicIcon className={styles.dynamicIcon} />\n ) : (\n <NegativeDynamicIcon className={styles.dynamicIcon} />\n )}\n {Math.abs(dynamicPercent).toFixed(2)}%\n </span>\n )}\n </div>\n );\n};\n\nexport default ChartInfoPanel;\n","import React, {useMemo} from 'react';\nimport {last, pipe, pluck, slice, reject, isNil} from 'ramda';\nimport moment from 'moment';\n\nimport i18n from 'ui-i18n';\nimport {DatePeriod, formatNumberAsMetric, getDateRangeByValue} from '@reltio/mdm-sdk';\n\nimport {TimeSeriesChartData} from '../../types/TimeSeriesChartData';\nimport {getZoomedData} from '../LineChart/helpers';\nimport {isNoDataAvailable, isNoProfiles} from '../../services/mlDq';\nimport {NO_DATA_AVAILABLE, NO_PROFILES} from '../../constants/NoDataLabels';\n\nimport ChartInfoPanel from './ChartInfoPanel';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dateRange: DatePeriod;\n infoLabel: string;\n dataKey: string;\n chartData: TimeSeriesChartData[];\n percentKey: string;\n areaKeys: string[];\n};\n\nconst getDynamicPercent = (chartData: TimeSeriesChartData[], percentKey: string): number => {\n const filteredData = pipe(pluck(percentKey), reject(isNil))(chartData);\n if (filteredData.length < 2) return 0;\n return pipe(\n slice(-2, Infinity),\n ([prevPercent, lastPercent]) => lastPercent - prevPercent,\n (percent: number) => Math.round(percent * 10000) / 10000\n )(filteredData);\n};\n\nconst TimeSeriesInfoPanel = ({dateRange, infoLabel, percentKey, dataKey, chartData, areaKeys}: Props) => {\n const styles = useStyles();\n\n const zoomedData = useMemo(() => getZoomedData(chartData, dateRange), [chartData, dateRange]);\n const lastChartData = last(zoomedData);\n const data = lastChartData?.[dataKey];\n const percent = lastChartData?.[percentKey];\n const dynamicPercent = !isNil(percent) && percentKey && getDynamicPercent(zoomedData, percentKey);\n const lastDateOfPeriod = getDateRangeByValue(dateRange)[1];\n const dateLabel = moment().isSame(lastDateOfPeriod, 'day') ? i18n.text('Today') : i18n.date(lastDateOfPeriod);\n const noPercentLabel = isNoDataAvailable(lastChartData, [percentKey], areaKeys)\n ? i18n.text(NO_DATA_AVAILABLE)\n : isNoProfiles(lastChartData, [percentKey], areaKeys)\n ? i18n.text(NO_PROFILES)\n : '';\n const label = (\n <>\n <span className={styles.period}>{dateLabel}:</span>\n {!isNil(percent) ? infoLabel : noPercentLabel}\n </>\n );\n const info = !isNil(percent) && (\n <>\n <span className={styles.percent}>{percent}%</span>({formatNumberAsMetric(data, 999)})\n </>\n );\n\n return <ChartInfoPanel label={label} info={info} dynamicPercent={dynamicPercent} />;\n};\n\nexport default TimeSeriesInfoPanel;\n","import {\n always,\n applySpec,\n ascend,\n assoc,\n cond,\n curry,\n filter,\n head,\n identity,\n map,\n pathOr,\n pipe,\n prop,\n propOr,\n split,\n converge,\n concat,\n propEq,\n omit,\n sort,\n descend\n} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n DQChartsData,\n ConsolidationRateData,\n FilterOptions,\n isDateType,\n formatNumberAsMetric,\n Metadata,\n formatDataTypeValue\n} from '@reltio/mdm-sdk';\nimport {InfoPanelData} from '../types/InfoPanelData';\nimport {getSearchState, localizeChartValues} from './charts';\nimport {isFloatingType} from './attributes';\nimport {getEqualsRawFilterSearchState, getRangeRawFilterSearchState, RawFilterFields} from './rawFilters';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\nimport {enrichChartDataWithSourceLabel} from '../services/charts';\n\nenum DAYS_OF_WEEK {\n sun,\n mon,\n tue,\n wed,\n thu,\n fri,\n sat\n}\n\nenum MONTHS {\n jan,\n feb,\n mar,\n apr,\n may,\n jun,\n jul,\n aug,\n sep,\n oct,\n nov,\n dec\n}\n\ntype GetFormattedDataForBarChartFn = (chartType: string) => (chartsData: DQChartsData) => ChartData[];\nconst getFormattedDataForBarChart: GetFormattedDataForBarChartFn = (chartType: string) =>\n pipe(\n pathOr({}, [chartType, 'data']),\n Object.entries,\n map(([item, value]) => ({label: item, group: item, value})),\n localizeChartValues\n );\n\nconst RELTIO_PROFILES = 'Reltio profiles';\nconst SOURCE_PROFILES = 'Source profiles';\n\nexport const getConsolidationRateChartData = pipe(\n pathOr({}, ['consolidationRate']),\n converge(concat, [\n pipe(prop('totalCrosswalksBySource'), omit(['ReltioCleanser']), (data) => [\n {...data, label: SOURCE_PROFILES, group: SOURCE_PROFILES}\n ]),\n pipe(prop('totalEntities'), (value) => [\n assoc(RELTIO_PROFILES, value, {label: RELTIO_PROFILES, group: RELTIO_PROFILES})\n ])\n ])\n);\n\nexport const getConsolidationRateTableData = (metadata: Metadata) =>\n pipe(\n pathOr({}, ['consolidationRate']),\n (consolidationRate: ConsolidationRateData) => {\n return Object.keys(consolidationRate?.totalCrosswalksBySource || []).reduce((data, crosswalk) => {\n return crosswalk !== 'ReltioCleanser'\n ? data.concat({\n label: crosswalk,\n group: crosswalk,\n value: consolidationRate.totalCrosswalksBySource[crosswalk]\n })\n : data;\n }, []);\n },\n enrichChartDataWithSourceLabel(metadata),\n sort(descend(prop('value')))\n );\n\nenum InfoPanelProperties {\n AVERAGE = 'avg',\n MININMUN = 'min',\n MAXIMUM = 'max',\n MEDIAN = 'median',\n NUMBER_OF_SOURCES = 'numberOfSources',\n MIN_NUMBER_OF_PROFILES = 'minNumberOfProfiles',\n MAX_NUMBER_OF_PROFILES = 'maxNumberOfProfiles',\n AVG_NUMBER_OF_PROFILES = 'avgNumberOfProfiles'\n}\n\nconst getLabelForInfoPanel = (propName: string, chartType: string) => {\n const Properties = {\n lengthStatistics: {\n [InfoPanelProperties.MEDIAN]: i18n.text('Median'),\n [InfoPanelProperties.AVERAGE]: i18n.text('Average'),\n [InfoPanelProperties.MININMUN]: i18n.text('Minimum'),\n [InfoPanelProperties.MAXIMUM]: i18n.text('Maximum')\n },\n valueDistribution: {\n [InfoPanelProperties.MEDIAN]: i18n.text('Median'),\n [InfoPanelProperties.AVERAGE]: i18n.text('Average'),\n [InfoPanelProperties.MININMUN]: i18n.text('Minimum'),\n [InfoPanelProperties.MAXIMUM]: i18n.text('Maximum')\n },\n crosswalkAnalysis: {\n [InfoPanelProperties.NUMBER_OF_SOURCES]: i18n.text('No. of source systems'),\n [InfoPanelProperties.AVG_NUMBER_OF_PROFILES]: i18n.text('Avg no. of profiles'),\n [InfoPanelProperties.MIN_NUMBER_OF_PROFILES]: i18n.text('Min no. of profiles'),\n [InfoPanelProperties.MAX_NUMBER_OF_PROFILES]: i18n.text('Max no. of profiles')\n }\n };\n\n return pathOr(null, [chartType, propName], Properties);\n};\n\ntype GetInfoPanelDataForBarChartFn = (chartType: string) => (chartsData: DQChartsData) => InfoPanelData[];\nconst getInfoPanelDataForBarChart: GetInfoPanelDataForBarChartFn = (chartType: string) =>\n pipe(\n propOr({}, chartType),\n Object.entries,\n map(([name, value]) => ({label: getLabelForInfoPanel(name, chartType), value})),\n filter(({label}) => label),\n localizeChartValues\n );\n\nconst getDataForBarChart = (chartType: string) => (chartsData: DQChartsData) => ({\n chartData: getFormattedDataForBarChart(chartType)(chartsData),\n infoPanelData: getInfoPanelDataForBarChart(chartType)(chartsData)\n});\n\nconst addIntervalBrackets = (label: string, attributeType: string, isLastItem: boolean) =>\n isFloatingType(attributeType) ? `[${label}${isLastItem ? ']' : ')'}` : label;\n\nconst getChartValueLabel = (value: number, attributeType: string) =>\n isDateType(attributeType)\n ? formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(value))\n : i18n.number(value);\n\nexport const convertDataWithInterval = curry(\n (\n attributeType: string,\n data: {chartData: ChartData[]; infoPanelData: InfoPanelData[]}\n ): {chartData: ChartData[]; infoPanelData: InfoPanelData[]} => {\n const getStartRangeFromChartData = pipe(prop('group'), split(' '), head, Number);\n const chartDataWithRange = data.chartData.sort(ascend(getStartRangeFromChartData)).map((dataItem, index) => {\n const [startRange, endRange = startRange] = dataItem.group.split(' ').map(Number);\n const isLastItem = index === data.chartData.length - 1;\n const label =\n startRange !== endRange\n ? addIntervalBrackets(\n `${getChartValueLabel(startRange, attributeType)} - ${getChartValueLabel(\n endRange,\n attributeType\n )}`,\n attributeType,\n isLastItem\n )\n : getChartValueLabel(startRange, attributeType);\n return {\n ...dataItem,\n label,\n group: [startRange, endRange, isLastItem ? 'last' : ''].toString()\n };\n });\n\n const infoPanelDataWithConvertedValue = data.infoPanelData.map((dataItem) => {\n const value = isDateType(attributeType)\n ? formatDataTypeValue({dataTypeDefinition: {type: attributeType}}, Number(dataItem.value))\n : formatNumberAsMetric(dataItem.value, 999);\n const localizedValue = isDateType(attributeType) ? value : dataItem.localizedValue;\n return {...dataItem, value, localizedValue};\n });\n return {infoPanelData: infoPanelDataWithConvertedValue, chartData: chartDataWithRange};\n }\n);\n\ntype GetChartDataWithInfoPanelData = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n infoPanelData: InfoPanelData[];\n};\nexport const getLengthChartData: GetChartDataWithInfoPanelData = pipe(\n getDataForBarChart('lengthStatistics'),\n convertDataWithInterval('')\n);\n\nexport const getCrosswalkAnalysisData = (metadata: Metadata): GetChartDataWithInfoPanelData =>\n pipe(\n getDataForBarChart('crosswalkAnalysis'),\n applySpec({\n chartData: pipe(prop('chartData'), enrichChartDataWithSourceLabel(metadata)),\n infoPanelData: pipe(\n prop('infoPanelData'),\n map((dataItem: InfoPanelData) => assoc('value', formatNumberAsMetric(dataItem.value, 999), dataItem))\n )\n })\n );\n\nexport const getValueDistributionData = (attributeType: string): GetChartDataWithInfoPanelData =>\n pipe(getDataForBarChart('valueDistribution'), convertDataWithInterval(attributeType));\nexport const getMonthDistributionData = getDataForBarChart('monthDistribution');\nexport const getDayOfWeekDistributionData = getDataForBarChart('dayOfWeekDistribution');\nexport const getDayOfMonthDistributionData = getDataForBarChart('dayOfMonthDistribution');\n\nexport const getDayOfweekDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, dayOfWeek: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.DAY_OF_WEEK}`,\n value: DAYS_OF_WEEK[dayOfWeek.toLowerCase()],\n entityTypeUri\n })\n);\n\nexport const getMonthDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, month: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.MONTH}`,\n value: MONTHS[month.toLowerCase()],\n entityTypeUri\n })\n);\n\nexport const getDayOfMonthDistributionSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, dayOfMonth: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.DAY_OF_MONTH}`,\n value: dayOfMonth,\n entityTypeUri\n })\n);\n\nexport const getLengthStatisticsSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, group: string) => {\n const [startRange, endRange] = group.split(',');\n return startRange === endRange\n ? getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.LENGTH}`,\n value: startRange,\n entityTypeUri\n })\n : getRangeRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.LENGTH}`,\n startRange,\n endRange,\n entityTypeUri\n });\n }\n);\n\nexport const getCrosswalkAnalysisSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, source: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.CROSSWALK_SOURCES}`,\n value: source,\n entityTypeUri\n })\n);\n\nconst getValueDistributionFilterForDate = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [timestampStart, timestampEnd] = group.split(',');\n return [\n {\n filter: FilterOptions.WITHIN,\n values: [[timestampStart, timestampEnd]],\n fieldName\n }\n ];\n});\n\nconst getValueDistributionFilterForNumber = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [startRange, endRange] = group.split(',');\n return [\n startRange === endRange\n ? {\n filter: FilterOptions.EQUALS,\n values: [[startRange]],\n fieldName\n }\n : {\n filter: FilterOptions.IN_RANGE,\n values: [[startRange, endRange]],\n fieldName\n }\n ];\n});\n\nconst getValueDistributionFilterForFloat = curry(({fieldName}: {fieldName: string}, group: string) => {\n const [startRange, endRange, lastItem] = group.split(',');\n\n const isSingleValue = startRange === endRange;\n\n const filter: {\n filter: string;\n values: string[][] | string[];\n fieldName: string;\n }[] = isSingleValue\n ? [\n {\n filter: FilterOptions.EQUALS,\n values: [[startRange]],\n fieldName\n }\n ]\n : [\n {\n filter: FilterOptions.IN_RANGE,\n values: [[startRange, endRange]],\n fieldName\n }\n ];\n !lastItem &&\n !isSingleValue &&\n filter.push({\n filter: FilterOptions.NOT_EQUALS,\n values: [[endRange]],\n fieldName\n });\n return filter;\n});\n\nexport const getValueDistributionSearchState = cond([\n [isDateType, always(getSearchState(getValueDistributionFilterForDate))],\n [isFloatingType, always(getSearchState(getValueDistributionFilterForFloat))],\n [identity, always(getSearchState(getValueDistributionFilterForNumber))]\n]);\n\nconst getConsolidationRateFilter = curry((_, source: string) =>\n source === RELTIO_PROFILES\n ? []\n : [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'sourceSystems',\n values: [[source]]\n }\n ]\n);\n\nexport const getConsolidationRateSearchState = getSearchState(getConsolidationRateFilter);\n\nexport const getBarOpacity = curry((selectedBar: {group: string; key: string}, key: string) => {\n return !selectedBar || propEq('key', key, selectedBar) || key === RELTIO_PROFILES ? 1 : 0.12;\n});\n\nexport const tickFormatter = (value: number) => {\n return value > 999 ? i18n.number(value, '0,0.0a').toUpperCase() : Math.round(value * 1000) / 1000;\n};\n","import {\n CartesianGridProps,\n LineProps,\n TooltipProps,\n XAxisProps,\n YAxisProps,\n ReferenceLineProps,\n LabelProps,\n AreaProps,\n LegendProps\n} from 'recharts';\nimport {tickFormatter} from '../../services/barCharts';\nimport {\n getMaxValueFromLineChartData,\n getMinValueFromLineChartData,\n getUpdatedEdgeData,\n XAxisTickFormatter\n} from './helpers';\n\ntype LineChartSettings = {\n xAxis: XAxisProps;\n yAxis: YAxisProps;\n cartesianGrid: CartesianGridProps;\n tooltip: TooltipProps;\n line: LineProps;\n referenceLine: ReferenceLineProps;\n labelForY: LabelProps;\n area: Partial<AreaProps>;\n legend: Partial<LegendProps>;\n};\n\nconst getLineChartSettings = ({lineKeys, data, isPercent}): LineChartSettings => {\n const minLineChartData = getMinValueFromLineChartData(lineKeys, data);\n const maxLineChartData = getMaxValueFromLineChartData(lineKeys, data);\n const {minYAxisValue, maxYAxisValue} = getUpdatedEdgeData({minLineChartData, maxLineChartData, isPercent});\n\n return {\n xAxis: {\n type: 'category',\n dataKey: 'group',\n tick: {\n fill: '#000',\n fontSize: '12px',\n tickMargin: '18px',\n style: {\n userSelect: 'none'\n }\n },\n angle: 0,\n textAnchor: 'middle',\n stroke: '#666',\n tickLine: false,\n dy: 8,\n tickFormatter: XAxisTickFormatter,\n interval: 'preserveStartEnd',\n scale: 'point'\n },\n yAxis: {\n dataKey: '',\n type: 'number',\n tick: {\n fill: '#000',\n fontSize: '12px',\n width: undefined,\n style: {\n userSelect: 'none'\n }\n },\n stroke: '#666',\n tickFormatter: tickFormatter,\n tickCount: 5,\n width: 59,\n tickLine: false,\n domain: [minYAxisValue, maxYAxisValue]\n },\n cartesianGrid: {\n strokeDasharray: '3 3',\n stroke: '#666',\n strokeOpacity: '0.4'\n },\n tooltip: {\n cursor: {\n fill: '#000',\n opacity: '0.1'\n }\n },\n line: {\n type: 'linear',\n dataKey: 'value',\n strokeWidth: 3,\n dot: null,\n activeDot: {stroke: 'white', strokeWidth: 2, r: 5}\n },\n referenceLine: {\n strokeDasharray: '3 3',\n stroke: '#000',\n isFront: true\n },\n labelForY: {\n angle: 270,\n position: 'left',\n offset: -3,\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)',\n userSelect: 'none'\n }\n },\n area: {\n activeDot: false,\n fillOpacity: '0.24',\n stroke: 'none'\n },\n legend: {\n verticalAlign: 'bottom',\n align: 'left'\n }\n };\n};\n\nexport default getLineChartSettings;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React, {useCallback, useState, useMemo} from 'react';\nimport {\n CartesianGrid,\n Line,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n TooltipProps,\n ReferenceLine,\n ReferenceArea,\n Area,\n ComposedChart,\n Legend\n} from 'recharts';\nimport {either, pluck, isNil} from 'ramda';\n\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\nimport {LineChartData} from '../../types/LineChartData';\nimport getLineChartSettings from './getLineChartSettings';\nimport {getZoomedData, getEmptyAreas, getSeparateLines} from './helpers';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\n\nimport CustomLegend from '../ChartLegends/CustomLegend';\n\nimport {useStyles} from './styles';\nimport i18n from 'ui-i18n';\n\ntype Props = {\n data: LineChartData[];\n width: number;\n height: number;\n lineKeys: string[];\n areaKeys?: string[];\n dateRange: DatePeriod;\n getTooltip?: (payload: TooltipProps) => React.ReactNode;\n getColor?: (key: string) => string;\n yAxisLabel?: string;\n isPercent?: boolean;\n changeZoom?: (zoom: [string, string]) => void;\n};\n\nconst DEFAULT_LINE_COLOR = '#00439D';\ntype MouseEventProps = {\n activeLabel: string;\n activePayload: {value: number}[];\n isTooltipActive: boolean;\n};\n\nconst LineChart = ({\n data,\n width,\n height,\n getTooltip: getTooltipProp,\n getColor,\n lineKeys,\n areaKeys,\n yAxisLabel,\n isPercent = true,\n dateRange,\n changeZoom\n}: Props) => {\n const styles = useStyles();\n const {showErrorBands} = usePermissionsContext();\n const {cartesianGrid, tooltip, xAxis, yAxis, line, referenceLine, labelForY, area, legend} = getLineChartSettings({\n lineKeys,\n data,\n isPercent\n });\n const getTooltip = useCallback(\n (tooltipProps: TooltipProps) => <div className={styles.tooltipWrapper}>{getTooltipProp(tooltipProps)}</div>,\n [getTooltipProp]\n );\n const [selectedDots, setSelectedDots] = useState<{\n group: string;\n values: number[];\n }>();\n const [zoomAreaStart, setZoomAreaStart] = useState<string>(null);\n const [zoomAreaEnd, setZoomAreaEnd] = useState<string>(null);\n\n const handleMouseDown = (mouseEvent: MouseEventProps) => {\n mouseEvent?.activeLabel && setZoomAreaStart(mouseEvent.activeLabel);\n };\n const handleMouseMove = (mouseEvent: MouseEventProps) => {\n if (mouseEvent.isTooltipActive && mouseEvent.activePayload) {\n setSelectedDots({\n group: mouseEvent.activeLabel,\n values: pluck('value', mouseEvent.activePayload)\n });\n } else setSelectedDots(undefined);\n zoomAreaStart && setZoomAreaEnd(mouseEvent.activeLabel);\n };\n const handleMouseLeave = () => {\n setSelectedDots(undefined);\n setZoomAreaEnd(null);\n setZoomAreaStart(null);\n };\n const handleMouseUp = () => {\n zoomAreaEnd && changeZoom([zoomAreaStart, zoomAreaEnd]);\n setZoomAreaEnd(null);\n setZoomAreaStart(null);\n };\n const zoomedData = useMemo(() => getZoomedData(data, dateRange), [data, dateRange]);\n const emptyAreas = useMemo(() => getEmptyAreas(zoomedData, lineKeys), [zoomedData, lineKeys]);\n const separateLines = useMemo(\n () => getSeparateLines(zoomedData, lineKeys, areaKeys),\n [zoomedData, lineKeys, areaKeys]\n );\n const hasZoomArea = zoomAreaStart && zoomAreaEnd;\n\n return (\n <ComposedChart\n width={width}\n height={height}\n data={zoomedData}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n margin={{\n top: 12,\n right: 20\n }}\n >\n {selectedDots && <ReferenceLine {...referenceLine} x={selectedDots.group} />}\n {selectedDots &&\n selectedDots.values.filter((value) => !Array.isArray(value)).every(either(isNaN, isNil)) &&\n !hasZoomArea &&\n emptyAreas.map((emptyArea, index) => (\n <ReferenceArea x1={emptyArea.start} x2={emptyArea.end} key={index} />\n ))}\n {hasZoomArea && <ReferenceArea x1={zoomAreaStart} x2={zoomAreaEnd} strokeOpacity={0.3} />}\n <CartesianGrid {...cartesianGrid} />\n <XAxis {...xAxis} />\n <YAxis {...yAxis} label={{...labelForY, value: yAxisLabel}} />\n {lineKeys.map((key: string) => (\n <Line\n {...line}\n name={i18n.text('Actual')}\n key={key}\n dataKey={key}\n stroke={getColor ? getColor(key) : DEFAULT_LINE_COLOR}\n />\n ))}\n {separateLines &&\n separateLines.map((separateLine) => (\n <ReferenceLine {...referenceLine} x={separateLine} key={separateLine} strokeDasharray=\"12 4\" />\n ))}\n {areaKeys &&\n areaKeys.map((key: string) => (\n <Area\n {...area}\n name={i18n.text('Error band')}\n dataKey={key}\n key={key}\n fill={getColor ? getColor(key) : DEFAULT_LINE_COLOR}\n />\n ))}\n <ChartTooltip {...tooltip} content={getTooltip} cursor={null} filterNull={false} />\n {areaKeys && showErrorBands && <Legend {...legend} content={<CustomLegend />} />}\n </ComposedChart>\n );\n};\n\nexport default LineChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {getPercentLabel} from '../../../services/charts';\n\nimport ChartDataRenderer from './ChartDataRenderer';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: [number, number];\n color: string;\n};\n\nconst AnomalyDataRenderer = ({data, color}: Props) => {\n const styles = useStyles({color});\n const renderData = [\n {\n label: (\n <div className={styles.anomalyTitleWrapper}>\n <div className={styles.anomalyTitleBackground}></div>\n <div className={styles.anomalyTitle}></div>\n </div>\n ),\n value: i18n.text('Error Band')\n },\n {label: <span className={styles.anomalyValue}>{i18n.text('Low')}</span>, value: `${getPercentLabel(data[0])}`},\n {label: <span className={styles.anomalyValue}>{i18n.text('High')}</span>, value: `${getPercentLabel(data[1])}`}\n ];\n return (\n <>\n {renderData.map((data, index) => (\n <div key={index} className={styles.row}>\n <ChartDataRenderer {...data} />\n </div>\n ))}\n </>\n );\n};\nexport default AnomalyDataRenderer;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n monoFontCell: {\n fontFamily: '\"Roboto Mono\", monospace'\n },\n timeSeriesContent: {\n padding: '0 12px 10px'\n }\n});\n","import {assoc, map, pick, pipe, when, always, has} from 'ramda';\nimport React, {useCallback, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel, DQMetric, FillRateState, TimeSeriesMetric} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {getChartState, getPercentLabel, transformTimeSeriesChartData} from '../../../services/charts';\nimport {\n formatFillRateData,\n getFillRateChartData,\n getFillRateColorByState,\n getFillRateData\n} from '../../../services/fillRate';\nimport {\n hasTimeRange,\n allValuesEqualZero,\n enrichTimeSeriesDataWithTodayData,\n getChartTooltipDateTitle,\n getTimeSeriesData\n} from '../../../services/mlDq';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nimport {LineChartData} from '../../../types/LineChartData';\nimport ANOMALY_DATA_KEY from '../../../constants/AnomalyDataKey';\n\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport AnomalyDataRenderer from '../../../components/ChartDataTooltip/data-renderers/AnomalyDataRenderer';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from '../styles';\n\nconst INFO_PANEL_HEIGHT = 36;\n\nconst tooltipKeys = [FillRateState.EXISTS, FillRateState.MISSING];\nconst metrics = [DQMetric.FILL_RATE as TimeSeriesMetric];\n\nconst getColor = () => getFillRateColorByState(FillRateState.EXISTS);\nconst getTooltip = ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const percent = currentPayload.fillRate;\n const percents = {\n [FillRateState.EXISTS]: percent,\n [FillRateState.MISSING]: +(100 - percent).toFixed(2)\n };\n\n const data: ChartData[] = pipe(\n pick(tooltipKeys),\n when(allValuesEqualZero, always({})),\n formatFillRateData,\n map((data: ChartData) => assoc('percent', percents[data.group], data)),\n map(({label, percent, value}) => ({\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }))\n )(currentPayload);\n const title = getChartTooltipDateTitle(currentPayload, tooltipKeys);\n return (\n <ChartDataTooltip data={data} title={title}>\n {currentPayload.anomaly?.length > 0 && (\n <AnomalyDataRenderer data={currentPayload.anomaly} color={getColor()} />\n )}\n </ChartDataTooltip>\n );\n }\n};\n\nconst FillRateTimeSeriesChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const styles = useStyles();\n const {entityType, detailedAttributeType, period, dateRange, exportLoadingIds} = useDQDashboardState();\n const {changeZoom} = useDQDashboardStateActions();\n\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType.fieldName;\n const {\n data: mlDqData,\n state: mlDqState,\n reload: mlDqReload\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n\n useReloadFacet({\n state: mlDqState,\n reload: mlDqReload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n const {data: todayData, state: todayState, reload: todayReload} = useChartData(getFillRateChartData);\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getFillRateData),\n transformTimeSeriesChartData(DQMetric.FILL_RATE),\n enrichTimeSeriesDataWithTodayData(period, todayData.chartData, DQMetric.FILL_RATE)\n )(mlDqData),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mlDqData, todayData]\n );\n const reloadFunction = useCallback(() => {\n mlDqState === RequestStates.ERROR && mlDqReload();\n todayState === RequestStates.ERROR && todayReload();\n }, [mlDqState, mlDqReload, todayState, todayReload]);\n const {title} = config;\n const infoLabel = `${i18n.text('% of profiles with complete values')}:`;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && mlDqState === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, mlDqState]\n );\n\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([mlDqState, todayState])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateRange={dateRange}\n chartData={data}\n percentKey={DQMetric.FILL_RATE}\n dataKey={FillRateState.EXISTS}\n areaKeys={[ANOMALY_DATA_KEY]}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n lineKeys={metrics}\n areaKeys={[ANOMALY_DATA_KEY]}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of profiles')}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default FillRateTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport FillRateChartToday from './FillRateChart';\nimport FillRateTimeSeriesChart from './FillRateTimeSeriesChart';\n\nconst FillRateChart = ({config}: ViewProps) => {\n const isTimeSeries = checkIsTimeSeries(config);\n const {showErrorBands} = usePermissionsContext();\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Fill rate')}\n data={[\n {\n label: `${i18n.text('Exists')}:`,\n value: i18n.text('Profiles with data')\n },\n {\n label: `${i18n.text('Missing')}:`,\n value: i18n.text('Profiles without data')\n },\n ...(isTimeSeries && showErrorBands\n ? [\n {\n value: i18n.text(\n 'Anomaly detection is the process of analyzing company data to\\nfind data points that don\\'t align with standard data patterns. The \"Error Band\" depicts the expected range.'\n )\n }\n ]\n : [])\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n return (\n <>\n {isTimeSeries ? (\n <FillRateTimeSeriesChart config={config} infoTooltipTitle={infoTooltipTitle} />\n ) : (\n <FillRateChartToday config={config} infoTooltipTitle={infoTooltipTitle} />\n )}\n </>\n );\n};\n\nexport default FillRateChart;\n","import {always, converge, identity, pipe, propOr, map, sortBy, when} from 'ramda';\nimport {\n getChartItemColor,\n DQChartsData,\n UniquenessAnalysisState,\n UniquenessData,\n TimeSeriesAnomalyValue,\n TimeSeriesStatisticValues,\n TimeSeriesAnomalyValues\n} from '@reltio/mdm-sdk';\nimport {ChartData} from '@reltio/components';\nimport {localizeChartValues, isEmptyData} from '../services/charts';\nimport i18n from 'ui-i18n';\n\nconst UniquenessChartColors = {\n [UniquenessAnalysisState.UNIQUE]: '#4BAFFF',\n [UniquenessAnalysisState.NOT_UNIQUE]: '#C34980'\n};\n\nexport const getUniquenessColorByState = (state: UniquenessAnalysisState) =>\n UniquenessChartColors[state] || getChartItemColor(state);\n\nexport const getUniquenessColors: (chartsData: ChartData[]) => string[] = map(({group}) =>\n getUniquenessColorByState(group)\n);\n\nconst getLabelFromState = (state: UniquenessAnalysisState) => {\n const UniquenessAnalysisStateLabels = {\n [UniquenessAnalysisState.UNIQUE]: i18n.text('Unique'),\n [UniquenessAnalysisState.NOT_UNIQUE]: i18n.text('Not unique')\n };\n\n return UniquenessAnalysisStateLabels[state] || state;\n};\n\nconst getUniquenessStateIndexFromData = (data: ChartData) =>\n Object.values(UniquenessAnalysisState).indexOf(data.group as UniquenessAnalysisState);\n\ntype FormatUniquenessAnalysisDataFn = (uniquenessAnalysisData: UniquenessData) => ChartData[];\nexport const formatUniquenessAnalysisData: FormatUniquenessAnalysisDataFn = pipe(\n Object.entries,\n map(([state, value]) => ({label: getLabelFromState(state), group: state, value})),\n sortBy(getUniquenessStateIndexFromData),\n localizeChartValues\n);\n\ntype GetUniquenessDataFn = (\n chartsData: DQChartsData | TimeSeriesAnomalyValues | TimeSeriesStatisticValues\n) => UniquenessData | TimeSeriesAnomalyValue;\nexport const getUniquenessData: GetUniquenessDataFn = propOr({}, 'uniqueness');\n\ntype GetUniquenessChartDataFn = (chartsData: DQChartsData) => {\n chartData: ChartData[];\n colors: string[];\n};\nexport const getUniquenessChartData: GetUniquenessChartDataFn = pipe(\n getUniquenessData,\n formatUniquenessAnalysisData,\n when(isEmptyData, always([])),\n converge(\n (chartData: ChartData, colors: string[]) => ({\n chartData,\n colors\n }),\n [identity, getUniquenessColors]\n )\n);\n","import React from 'react';\n\nimport {getUniquenessChartData} from '../../../services/uniquenessAnalysis';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\n\nconst UniquenessAnalysisChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const {data, state, reload} = useChartData(getUniquenessChartData);\n const {chartData, colors} = data;\n\n return (\n <StackedHorizontalBarChart\n data={chartData}\n colors={colors}\n config={config}\n state={state}\n onRefresh={reload}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default UniquenessAnalysisChart;\n","import {assoc, map, pick, pipe, when, always, has} from 'ramda';\nimport React, {useCallback, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, TimeSeriesMetric, UniquenessAnalysisState} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {getChartState, getPercentLabel, transformTimeSeriesChartData} from '../../../services/charts';\nimport {\n hasTimeRange,\n allValuesEqualZero,\n enrichTimeSeriesDataWithTodayData,\n getChartTooltipDateTitle,\n getTimeSeriesData\n} from '../../../services/mlDq';\nimport {\n formatUniquenessAnalysisData,\n getUniquenessChartData,\n getUniquenessColorByState,\n getUniquenessData\n} from '../../../services/uniquenessAnalysis';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {LineChartData} from '../../../types/LineChartData';\nimport ANOMALY_DATA_KEY from '../../../constants/AnomalyDataKey';\n\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport AnomalyDataRenderer from '../../../components/ChartDataTooltip/data-renderers/AnomalyDataRenderer';\n\nimport {useStyles} from '../styles';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nconst INFO_PANEL_HEIGHT = 36;\n\nconst tooltipKeys = [UniquenessAnalysisState.UNIQUE, UniquenessAnalysisState.NOT_UNIQUE];\nconst metrics = [DQMetric.UNIQUENESS as TimeSeriesMetric];\n\nconst getColor = () => getUniquenessColorByState(UniquenessAnalysisState.UNIQUE);\nconst getTooltip = ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const percent = currentPayload.uniqueness;\n const percents = {\n [UniquenessAnalysisState.UNIQUE]: percent,\n [UniquenessAnalysisState.NOT_UNIQUE]: +(100 - percent).toFixed(2)\n };\n\n const data: ChartData[] = pipe(\n pick(tooltipKeys),\n when(allValuesEqualZero, always({})),\n formatUniquenessAnalysisData,\n map((data) => assoc('percent', percents[data.group], data)),\n map(({label, percent, value}) => ({\n label,\n value: `${getPercentLabel(percent)} (${i18n.number(value)})`\n }))\n )(currentPayload);\n const title = getChartTooltipDateTitle(currentPayload, tooltipKeys);\n return (\n <ChartDataTooltip data={data} title={title}>\n {currentPayload.anomaly?.length > 0 && (\n <AnomalyDataRenderer data={currentPayload.anomaly} color={getColor()} />\n )}\n </ChartDataTooltip>\n );\n }\n};\n\nconst UniquenessAnalysisTimeSeriesChart = ({\n config,\n infoTooltipTitle\n}: {\n config: DQDashboardView;\n infoTooltipTitle: React.ReactElement | string;\n}) => {\n const styles = useStyles();\n const {entityType, detailedAttributeType, period, dateRange, exportLoadingIds} = useDQDashboardState();\n const {changeZoom} = useDQDashboardStateActions();\n\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType.fieldName;\n const {\n data: dataMlDq,\n state: stateMlDq,\n reload: reloadMlDq\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n\n useReloadFacet({\n state: stateMlDq,\n reload: reloadMlDq,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n\n const {data: dataToday, state: stateToday, reload: reloadToday} = useChartData(getUniquenessChartData);\n\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getUniquenessData),\n transformTimeSeriesChartData(DQMetric.UNIQUENESS),\n enrichTimeSeriesDataWithTodayData(period, dataToday.chartData, DQMetric.UNIQUENESS)\n )(dataMlDq),\n [dataMlDq, dataToday]\n );\n const reloadFunction = useCallback(() => {\n stateMlDq === RequestStates.ERROR && reloadMlDq();\n stateToday === RequestStates.ERROR && reloadToday();\n }, [stateMlDq, reloadMlDq, stateToday, reloadToday]);\n const {title} = config;\n const infoLabel = `${i18n.text('% of unique distinct values')}:`;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && stateMlDq === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, showExportButton, stateMlDq]\n );\n\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([stateMlDq, stateToday])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateRange={dateRange}\n chartData={data}\n percentKey={DQMetric.UNIQUENESS}\n dataKey={UniquenessAnalysisState.UNIQUE}\n areaKeys={[ANOMALY_DATA_KEY]}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n lineKeys={metrics}\n areaKeys={[ANOMALY_DATA_KEY]}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of distinct values')}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default UniquenessAnalysisTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\n\nimport UniquenessAnalysisChartToday from './UniquenessAnalysisChart';\nimport UniquenessAnalysisTimeSeriesChart from './UniquenessAnalysisTimeSeriesChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst UniquenessAnalysisChart = ({config}: ViewProps) => {\n const isTimeSeries = checkIsTimeSeries(config);\n const {showErrorBands} = usePermissionsContext();\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Uniqueness analysis')}\n data={[\n {\n label: `${i18n.text('Unique')}:`,\n value: i18n.text('Number of values that only appear once and have no duplicates')\n },\n {\n label: `${i18n.text('Not unique')}:`,\n value: i18n.text('Number of values that have at least one duplicate in the list')\n },\n ...(isTimeSeries && showErrorBands\n ? [\n {\n value: i18n.text(\n 'Anomaly detection is the process of analyzing company data to\\nfind data points that don\\'t align with standard data patterns. The \"Error Band\" depicts the expected range.'\n )\n }\n ]\n : [])\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n return (\n <>\n {isTimeSeries ? (\n <UniquenessAnalysisTimeSeriesChart infoTooltipTitle={infoTooltipTitle} config={config} />\n ) : (\n <UniquenessAnalysisChartToday config={config} infoTooltipTitle={infoTooltipTitle} />\n )}\n </>\n );\n};\n\nexport default UniquenessAnalysisChart;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#6663F6\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.4 14.4h2.411c.016-.205.047-.405.093-.6H8.4v-1.2h3.012c.137-.215.296-.416.472-.6H8.4v-1.2h6v.011a3.896 3.896 0 011.8.287V8.4c0-.66-.54-1.2-1.2-1.2H7.8c-.66 0-1.2.54-1.2 1.2v7.8c0 .66.54 1.2 1.2 1.2h4.083a3.892 3.892 0 01-.979-1.8H8.4v-1.2zm6-4.2h-6V9h6v1.2zm2.58 5.934L18.852 18l-.852.852-1.872-1.872a2.66 2.66 0 01-1.434.42A2.695 2.695 0 0112 14.7c0-1.494 1.206-2.7 2.7-2.7 1.494 0 2.7 1.206 2.7 2.7 0 .528-.156 1.014-.42 1.434zm-2.28.066a1.5 1.5 0 10-.001-3.001A1.5 1.5 0 0014.7 16.2z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#1DACF5\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M11.4 9.6H9.3L12 6.9l2.7 2.7h-2.1v3.846l-3.6 3.6-.846-.846 3.246-3.246V9.6zm4.446 6.6l-.846.846L12.954 15l.846-.846 2.046 2.046z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#7F22FD\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M8.4 9v1.2h1.2V9H8.4zm0 2.4v1.2h1.2v-1.2H8.4zm0 2.4V15h1.2v-1.2H8.4zM10.8 9v1.2h4.8V9h-4.8zm0 2.4v1.2h4.8v-1.2h-4.8zm0 2.4V15h4.8v-1.2h-4.8zm6-6v8.4H7.2V7.8h9.6zm1.2 9V6.6H6V17.4h12v-.6z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#4B31E9\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M10.8 15.6h1.8V15a.6.6 0 01.6-.6h2.4a.6.6 0 01.6.6v2.4a.6.6 0 01-.6.6h-2.4a.6.6 0 01-.6-.6v-.6h-3V9.6H8.4a.6.6 0 01-.6-.6V6.6a.6.6 0 01.6-.6H12a.6.6 0 01.6.6V9a.6.6 0 01-.6.6h-1.2v1.8h1.8v-.6a.6.6 0 01.6-.6h2.4a.6.6 0 01.6.6v2.4a.6.6 0 01-.6.6h-2.4a.6.6 0 01-.6-.6v-.6h-1.8v3z\",\n fill: \"#fff\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"12\",\n fill: \"#80D2FC\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M12 6c-3.312 0-6 2.688-6 6s2.688 6 6 6 6-2.688 6-6-2.688-6-6-6zm-.6 4.96V9h1.2v1.96l1.698-.98.6 1.04L13.2 12l1.698.98-.6 1.04-1.698-.98V15h-1.2v-1.96l-1.698.98-.6-1.04L10.8 12l-1.698-.98.6-1.04 1.698.98zM7.2 12c0 2.646 2.154 4.8 4.8 4.8s4.8-2.154 4.8-4.8-2.154-4.8-4.8-4.8A4.806 4.806 0 007.2 12z\",\n fill: \"#fff\"\n})));","import {makeStyles} from '@mui/styles';\n\nexport type IconSize = {\n width: number;\n height: number;\n};\nexport const useStyles = makeStyles({\n icon: ({width, height}: IconSize) => ({\n width,\n height\n }),\n loading: {\n '& circle': {\n fill: '#AAAAAA'\n }\n },\n badQuality: {\n '& circle': {\n fill: '#FF1744'\n }\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {IconProps} from '@mui/material/Icon';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport DVFIcon from './icons/dvf.svg';\nimport IncludedInMatchingIcon from './icons/includedInMatching.svg';\nimport RDMIcon from './icons/rdm.svg';\nimport ReferenceIcon from './icons/reference.svg';\nimport RequiredIcon from './icons/required.svg';\n\nimport {useStyles, IconSize} from './styles';\n\nexport const AttributeTypeDetailIconSizes = {\n SMALL: {\n width: 22,\n height: 22\n },\n NORMAL: {\n width: 24,\n height: 24\n }\n};\n\nexport enum AttributeTypeDetailIconVariant {\n LOADING = 'loading',\n BAD_QUALITY = 'badQuality',\n NORMAL = 'normal'\n}\n\ntype Props = IconProps & {\n detailType: AttrTypeDetailsType;\n size?: IconSize;\n variant?: AttributeTypeDetailIconVariant;\n};\n\nexport const AttributeTypeDetailIcon = ({\n detailType,\n size = AttributeTypeDetailIconSizes.NORMAL,\n variant = AttributeTypeDetailIconVariant.NORMAL\n}: Props) => {\n const styles = useStyles(size);\n const className = classnames(styles.icon, styles[variant]);\n switch (detailType) {\n case AttrTypeDetailsType.RDM_LOOKUP:\n return <RDMIcon className={className} />;\n case AttrTypeDetailsType.CONTAIN_VF:\n return <DVFIcon className={className} />;\n case AttrTypeDetailsType.INCLUDED_IN_MATCHING:\n return <IncludedInMatchingIcon className={className} />;\n case AttrTypeDetailsType.REFERENCE:\n return <ReferenceIcon className={className} />;\n case AttrTypeDetailsType.REQUIRED:\n return <RequiredIcon className={className} />;\n default:\n return null;\n }\n};\n","import {makeStyles} from '@mui/styles';\n\nconst margin = 4;\nexport const useStyles = makeStyles({\n root: {\n height: '24px',\n maxWidth: `calc(100% - ${margin * 2}px)`,\n margin: `0 ${margin}px ${margin}px 0`,\n borderRadius: '12px',\n backgroundColor: 'rgb(224, 224, 224)'\n },\n label: {\n fontSize: '12px',\n paddingLeft: '8px',\n paddingRight: '9px'\n },\n badQuality: {\n backgroundColor: 'rgba(255, 23, 68, 0.12)'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@mui/material/Chip';\n\nimport {RequestStates} from '@reltio/components';\n\nimport {getDetailLabel, checkIsDataQualitativeForSummary} from '../../services/attributeDetails';\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\n\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\n\nimport {useStyles} from './styles';\n\ntype Props = ChipProps & {\n detailType: AttrTypeDetailsType;\n};\n\nconst AttributeTypeDetailChip = ({detailType, classes, ...chipProps}: Props) => {\n const styles = useStyles();\n const {\n chartsData: {data, state}\n } = useChartsDataContext();\n let iconVariant = AttributeTypeDetailIconVariant.NORMAL;\n const isDataLoading = state === RequestStates.LOADING;\n const isDataQualitative = checkIsDataQualitativeForSummary(data);\n if (detailType === AttrTypeDetailsType.REQUIRED) {\n if (isDataLoading) {\n iconVariant = AttributeTypeDetailIconVariant.LOADING;\n }\n if (!isDataLoading && !isDataQualitative) {\n iconVariant = AttributeTypeDetailIconVariant.BAD_QUALITY;\n }\n }\n\n return (\n <Chip\n classes={{\n root: classnames(styles.root, {\n [styles.badQuality]:\n detailType === AttrTypeDetailsType.REQUIRED &&\n !isDataLoading &&\n state !== RequestStates.INIT &&\n !isDataQualitative\n }),\n label: styles.label,\n ...classes\n }}\n label={getDetailLabel(detailType)}\n icon={<AttributeTypeDetailIcon detailType={detailType} variant={iconVariant} />}\n {...chipProps}\n />\n );\n};\n\nexport default AttributeTypeDetailChip;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n flexGrow: 1\n },\n rootTimeRange: {\n marginLeft: '40px'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {ChipProps} from '@mui/material/Chip';\n\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport AttributeTypeDetailChip from '../AttributeTypeDetailChip/AttributeTypeDetailChip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n details: AttrTypeDetails;\n chipClasses?: ChipProps['classes'];\n};\n\nconst AttributeTypeDetails = ({details, chipClasses = {}}: Props) => {\n const styles = useStyles();\n const {period} = useDQDashboardState();\n\n return (\n <div className={classnames(styles.root, {[styles.rootTimeRange]: hasTimeRange(period)})}>\n {Object.entries(details || {})\n .filter(([, value]) => value)\n .map(([detailType]) => (\n <AttributeTypeDetailChip\n key={detailType}\n detailType={detailType as AttrTypeDetailsType}\n classes={chipClasses}\n />\n ))}\n </div>\n );\n};\n\nexport default AttributeTypeDetails;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n header: {\n display: 'flex',\n paddingBottom: '16px'\n },\n info: {\n display: 'flex',\n flexDirection: 'column',\n '&:not(:last-child)': {\n borderRight: '1px solid rgba(0,0,0,0.12)'\n }\n },\n entitySummary: {\n '&:not(:last-child)': {\n paddingRight: '48px',\n marginRight: '16px'\n }\n },\n attributeTypeSummary: {\n '&:not(:last-child)': {\n paddingRight: '24px',\n marginRight: '24px'\n }\n },\n infoTitle: {\n color: 'rgba(0,0,0,0.54)',\n fontSize: '12px',\n lineHeight: '16px'\n },\n infoContent: {\n fontSize: '30px',\n lineHeight: '35px',\n padding: '4px 0 0',\n display: 'flex',\n alignItems: 'center'\n },\n attributeTypeIconWrapper: {\n width: '32px',\n height: '33px',\n background: 'rgba(0, 0, 0, 0.05)',\n borderRadius: '4px',\n position: 'relative',\n marginRight: '12px',\n flexShrink: 0,\n '& svg': {\n position: 'absolute',\n transform: 'translate(-50%, -50%)',\n top: '50%',\n left: '50%'\n }\n },\n totalLoading: {\n padding: '4px 8px'\n },\n clickable: {\n color: '#000066',\n cursor: 'pointer'\n },\n summaryWrapper: {\n display: 'flex'\n }\n});\n","import classnames from 'classnames';\nimport React from 'react';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n children: React.ReactNode;\n className?: string;\n onClick?: () => void;\n dataReltioId?: string;\n};\n\nexport const HeaderInfo = ({title, children, className, onClick, dataReltioId}: Props) => {\n const styles = useStyles();\n\n return (\n <div className={classnames(styles.info, className)} onClick={onClick} data-reltio-id={dataReltioId}>\n <div className={styles.infoTitle}>{title}</div>\n <div className={styles.infoContent}>{children}</div>\n </div>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg1279746712a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"15\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M11.667 4H5C2.793 4 1 5.793 1 8s1.793 4 4 4h6.667c2.206 0 4-1.793 4-4s-1.794-4-4-4zm0 6.667H5a2.666 2.666 0 110-5.334h6.667a2.666 2.666 0 110 5.334zm0-4.667c-1.107 0-2 .893-2 2s.893 2 2 2c1.106 0 2-.893 2-2s-.894-2-2-2z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1279746712a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg208732808a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"1\",\n width: \"14\",\n height: \"14\"\n}, React.createElement(\"path\", {\n d: \"M7.992 1.333A6.663 6.663 0 001.332 8c0 3.68 2.98 6.667 6.66 6.667A6.67 6.67 0 0014.665 8a6.67 6.67 0 00-6.673-6.667zm.007 12A5.332 5.332 0 012.665 8 5.332 5.332 0 018 2.667 5.332 5.332 0 0113.332 8a5.332 5.332 0 01-5.333 5.333zm.333-8.666h-1v4l3.5 2.1.5-.82-3-1.78v-3.5z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg208732808a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg1638934380a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"2\",\n y: \"4\",\n width: \"13\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.948 10.02V12h-.88v-1.98h-.88V12h-.88v-1.98h-.77v-.825h.77v-2.2h-.77V6.17h.77V4.3h.88v1.87h.88V4.3h.88v1.87h.77v.825h-.77v2.2h.77v.825h-.77zm-.88-3.025h-.88v2.2h.88v-2.2zM7.947 12v-1.1h1.1V12h-1.1zM13.65 10.02V12h-.88v-1.98h-.88V12h-.88v-1.98h-.77v-.825h.77v-2.2h-.77V6.17h.77V4.3h.88v1.87h.88V4.3h.88v1.87h.77v.825h-.77v2.2h.77v.825h-.77zm-.88-3.025h-.88v2.2h.88v-2.2z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1638934380a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"path\", {\n d: \"M2.11 12v-.825h1.331V5.169L2 5.741v-.89L3.331 4.3h1.045v6.875h1.089V12H2.11zM5.968 11.032l1.65-2.508c.242-.367.403-.62.484-.759.08-.147.136-.29.165-.429.03-.14.044-.341.044-.605v-.77a.778.778 0 00-.253-.583c-.169-.161-.389-.242-.66-.242h-1.21V4.3h1.1c.638 0 1.126.158 1.463.473.345.308.517.774.517 1.397v.462c0 .367-.018.645-.055.836-.037.19-.103.37-.198.539-.088.169-.264.455-.528.858l-1.518 2.299h2.519V12h-3.52v-.968zM13.544 10.262c0 .609-.147 1.052-.44 1.331-.293.271-.77.407-1.43.407h-1.298v-.825h1.397c.279 0 .484-.062.616-.187.132-.132.198-.337.198-.616V9.239c0-.242-.073-.433-.22-.572-.147-.147-.341-.22-.583-.22h-1.067v-.825h.957a.797.797 0 00.572-.22.768.768 0 00.231-.583v-.902c0-.279-.066-.48-.198-.605-.125-.125-.326-.187-.605-.187h-1.298V4.3h1.166c.623 0 1.093.14 1.408.418.323.271.484.704.484 1.298v.693c0 .565-.202.99-.605 1.276.477.264.715.715.715 1.353v.924z\",\n fill: \"#000\",\n fillOpacity: \".541\"\n})));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg924767730a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"13\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.463 10.13c0 .623-.173 1.093-.517 1.408-.338.308-.825.462-1.463.462H2.03v-.836h1.562c.271 0 .491-.08.66-.242a.778.778 0 00.253-.583V9.195c0-.22-.059-.396-.176-.528-.11-.14-.279-.209-.506-.209h-.22c-.543 0-.972-.158-1.287-.473-.316-.323-.473-.788-.473-1.397V6.17c0-.623.168-1.089.506-1.397.344-.315.836-.473 1.474-.473h1.463v.836H3.714c-.272 0-.492.08-.66.242a.778.778 0 00-.253.583v.836c0 .227.073.418.22.572.146.147.337.22.572.22h.22c.52 0 .924.15 1.21.451.293.3.44.755.44 1.364v.726zM9.136 10.13c0 .623-.173 1.093-.517 1.408-.338.308-.825.462-1.463.462H5.704v-.836h1.562c.27 0 .49-.08.66-.242a.778.778 0 00.253-.583V9.195c0-.22-.06-.396-.176-.528-.11-.14-.28-.209-.506-.209h-.22c-.543 0-.972-.158-1.287-.473-.316-.323-.473-.788-.473-1.397V6.17c0-.623.168-1.089.506-1.397.344-.315.836-.473 1.474-.473H8.96v.836H7.387c-.272 0-.492.08-.66.242a.778.778 0 00-.253.583v.836c0 .227.073.418.22.572.146.147.337.22.572.22h.22c.52 0 .924.15 1.21.451.293.3.44.755.44 1.364v.726zM12.255 12l-1.683-6.886V12H9.68V4.3h1.562l1.694 6.886V4.3h.89V12h-1.572z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg924767730a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"16\",\n height: \"16\",\n viewBox: \"0 0 16 16\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"mask\", {\n id: \"svg3578961193a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"1\",\n y: \"4\",\n width: \"14\",\n height: \"8\"\n}, React.createElement(\"path\", {\n d: \"M5.345 12l-.418-1.947H2.782L2.353 12h-.979l1.86-7.7h1.264L6.324 12h-.979zM3.85 5.026l-.89 4.202H4.75L3.85 5.026zM10.494 10.262c0 .63-.146 1.078-.44 1.342-.286.264-.763.396-1.43.396h-2.09V4.3h1.958c.653 0 1.13.132 1.43.396.308.264.462.704.462 1.32v.627c0 .565-.202.99-.605 1.276.477.264.715.715.715 1.353v.99zM9.427 5.917c0-.279-.066-.48-.198-.605-.125-.125-.326-.187-.605-.187H7.491v2.431h1.133a.797.797 0 00.572-.22.768.768 0 00.231-.583v-.836zm.11 3.256c0-.242-.073-.433-.22-.572-.147-.147-.34-.22-.583-.22H7.491v2.794h1.232c.279 0 .484-.062.616-.187.132-.132.198-.337.198-.616V9.173zM13.119 12c-.638 0-1.13-.154-1.474-.462-.337-.315-.506-.785-.506-1.408V6.17c0-.623.169-1.089.506-1.397.345-.315.836-.473 1.474-.473h1.342v.836h-1.452c-.271 0-.491.08-.66.242a.778.778 0 00-.253.583v4.378c0 .227.084.422.253.583.169.161.389.242.66.242h1.452V12h-1.342z\",\n fill: \"#000\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg3578961193a)\"\n}, React.createElement(\"path\", {\n fill: \"#000\",\n fillOpacity: \".541\",\n d: \"M0 0h16v16H0z\"\n}))));","import {makeStyles} from '@mui/styles';\n\nexport type IconSize = {\n width: number;\n height: number;\n};\nexport const useStyles = makeStyles({\n icon: ({width, height}: IconSize) => ({\n width,\n height\n })\n});\n","import React from 'react';\nimport BooleanIcon from './icons/boolean.svg';\nimport DateIcon from './icons/date.svg';\nimport FloatIcon from './icons/float.svg';\nimport IntegerIcon from './icons/integer.svg';\nimport SSNIcon from './icons/ssn.svg';\nimport StringIcon from './icons/string.svg';\nimport {getChartDataTypeByAttributeType} from '../../services/charts';\nimport {ChartDataType} from '../../constants/ChartDataType';\n\nimport {useStyles, IconSize} from './styles';\n\ntype Props = {\n type: string;\n size?: IconSize;\n};\n\nexport const AttributeTypeIconSizes = {\n SMALL: {\n width: 16,\n height: 16\n },\n NORMAL: {\n width: 24,\n height: 24\n }\n};\n\nconst AttributeTypeIcon = ({type, size = AttributeTypeIconSizes.SMALL}: Props) => {\n const styles = useStyles(size);\n const chartDataType = getChartDataTypeByAttributeType(type);\n switch (chartDataType) {\n case ChartDataType.STRING:\n return <StringIcon className={styles.icon} />;\n case ChartDataType.FLOAT:\n return <FloatIcon className={styles.icon} />;\n case ChartDataType.INTEGER:\n return <IntegerIcon className={styles.icon} />;\n case ChartDataType.BOOLEAN:\n return <BooleanIcon className={styles.icon} />;\n case ChartDataType.DATE:\n return <DateIcon className={styles.icon} />;\n case ChartDataType.SSN:\n return <SSNIcon className={styles.icon} />;\n default:\n return <StringIcon className={styles.icon} />;\n }\n};\n\nexport default AttributeTypeIcon;\n","import React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport Tooltip from '@mui/material/Tooltip';\nimport classnames from 'classnames';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {useEntityCount} from '../../hooks/useEntityCount';\nimport {hasTimeRange} from '../../services/mlDq';\n\nimport AttributeTypeDetails from '../AttributeTypeDetails/AttributeTypeDetails';\nimport {HeaderInfo} from './HeaderInfo';\nimport AttributeTypeIcon, {AttributeTypeIconSizes} from '../AttributeTypeIcon/AttributeTypeIcon';\nimport ChartDataTooltip from '../ChartDataTooltip/ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\nexport type AttributeTypeSummaryProps = {\n detailedAttributeType: DetailedAttributeType;\n};\n\nconst AttributeTypeSummary = ({detailedAttributeType}: AttributeTypeSummaryProps) => {\n const styles = useStyles();\n const {entityType, period} = useDQDashboardState();\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const total = useEntityCount(entityTypesArray).getEntityCount(entityType.uri);\n const renderDataTypeInfo = (type: string) => {\n return (\n <>\n <div className={styles.attributeTypeIconWrapper}>\n <AttributeTypeIcon type={type} size={AttributeTypeIconSizes.NORMAL} />\n </div>\n {i18n.text(type)}\n </>\n );\n };\n\n const recordsInfo = total ? i18n.number(total) : <CircularProgress size={24} className={styles.totalLoading} />;\n\n return (\n <div className={classnames({[styles.summaryWrapper]: hasTimeRange(period)})}>\n <div className={styles.header}>\n <HeaderInfo title={i18n.text('Active profiles')} className={styles.attributeTypeSummary}>\n <Tooltip\n title={\n <ChartDataTooltip\n data={[\n {\n label: i18n.text('Entities with exists attribute'),\n value: i18n.number(total)\n }\n ]}\n />\n }\n >\n <div>{recordsInfo}</div>\n </Tooltip>\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Data type')} className={styles.attributeTypeSummary}>\n {renderDataTypeInfo(detailedAttributeType.type)}\n </HeaderInfo>\n </div>\n <AttributeTypeDetails details={detailedAttributeType.details} />\n </div>\n );\n};\n\nexport default AttributeTypeSummary;\n","import classnames from 'classnames';\nimport React from 'react';\nimport {useSelector} from 'react-redux';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nimport i18n from 'ui-i18n';\nimport {RequestStates} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {ActivityFilter, Metadata, TEntityType} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {countEntityTypeAttributes} from '../../services/attributes';\nimport {getEntityTypeSummarySearchState} from '../../services/charts';\n\nimport {HeaderInfo} from './HeaderInfo';\n\nimport {useStyles} from './styles';\n\nexport type EntityTypeSummaryProps = {\n entityType: TEntityType;\n};\n\nconst EntityTypeSummary = ({entityType}: EntityTypeSummaryProps) => {\n const {\n chartsData: {data, state}\n } = useChartsDataContext();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attributeTypesCount = countEntityTypeAttributes(metadata, entityType);\n const {activeProfiles = 0, inactiveProfiles = 0, sourceSystems = 0} = data?.summary || {};\n const getValue = (value: number) =>\n state === RequestStates.LOADING ? (\n <CircularProgress size={24} className={styles.totalLoading} />\n ) : (\n i18n.number(value)\n );\n const styles = useStyles();\n const searchProfiles = useSearchRedirect(getEntityTypeSummarySearchState);\n\n return (\n <div className={styles.header}>\n <HeaderInfo\n title={i18n.text('Active profiles')}\n className={classnames(styles.entitySummary, styles.clickable)}\n onClick={() => searchProfiles(ActivityFilter.ACTIVE_ONLY, ActivityFilter.ACTIVE_ONLY)}\n dataReltioId=\"reltio-dq-dashboard-entitylevel-summary-activeProfiles\"\n >\n {getValue(activeProfiles)}\n </HeaderInfo>\n <HeaderInfo\n title={i18n.text('Inactive profiles')}\n className={classnames(styles.entitySummary, styles.clickable)}\n onClick={() => searchProfiles(ActivityFilter.INACTIVE_ONLY, ActivityFilter.INACTIVE_ONLY)}\n dataReltioId=\"reltio-dq-dashboard-entitylevel-summary-inactiveProfiles\"\n >\n {getValue(inactiveProfiles)}\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Attributes')} className={styles.entitySummary}>\n {i18n.number(attributeTypesCount)}\n </HeaderInfo>\n <HeaderInfo title={i18n.text('Source systems')} className={styles.entitySummary}>\n {getValue(sourceSystems)}\n </HeaderInfo>\n </div>\n );\n};\n\nexport default EntityTypeSummary;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n content: {\n padding: '0 16px',\n marginTop: '4px'\n }\n});\n","import React, {useContext} from 'react';\n\nimport {getLabel, DQDataLevel} from '@reltio/mdm-sdk';\nimport {BasicViewContent} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../types/ViewProps';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\n\nimport AttributeTypeSummary from '../../components/Summary/AttributeTypeSummary';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../components/DQLayoutItemView/DQLayoutItemView';\nimport EntityTypeSummary from '../../components/Summary/EntityTypeSummary';\n\nimport {useStyles} from './styles';\n\nconst Summary = ({config}: ViewProps) => {\n const styles = useStyles();\n const {detailedAttributeType, entityType} = useDQDashboardState();\n const dataLevel = useContext(DataLevelContext);\n const isAttributeTypeLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const title = isAttributeTypeLevel\n ? getLabel(detailedAttributeType.label)\n : `${i18n.text('Entity')}: ${getLabel(entityType.label)}`;\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} />\n <BasicViewContent className={styles.content}>\n {isAttributeTypeLevel ? (\n <AttributeTypeSummary detailedAttributeType={detailedAttributeType} />\n ) : (\n <EntityTypeSummary entityType={entityType} />\n )}\n </BasicViewContent>\n </DQLayoutItemView>\n );\n};\n\nexport default Summary;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n }\n});\n","import React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {BasicViewContent} from '@reltio/components';\nimport {DashboardLayoutItemView} from '@reltio/dashboard';\nimport DQLayoutItemHeader from '../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport {ViewProps} from '../../types/ViewProps';\nimport DQDashboardError from '../../components/DQDashboardError/DQDashboardError';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\nimport {ErrorData} from '../../types/ErrorData';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {useStyles} from './styles';\n\ntype Props = ViewProps & {\n errorData: ErrorData;\n titleChildren?: React.ReactNode;\n infoTooltipTitle?: React.ReactElement | string;\n onRefresh?: () => void;\n};\n\nconst DefaultIcon = EMPTY_STATE_ICONS.ERROR;\n\nconst DQDashboardErrorView = ({config, errorData, titleChildren, infoTooltipTitle, onRefresh}: Props) => {\n const {id, title: viewTitle} = config;\n const styles = useStyles();\n return (\n <DashboardLayoutItemView id={id}>\n <DQLayoutItemHeader title={viewTitle} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n </DQLayoutItemHeader>\n <BasicViewContent className={styles.viewContent}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth handleHeight>\n <DQDashboardError\n errorData={{Icon: DefaultIcon, ...errorData}}\n onRefresh={onRefresh}\n variant={EmptyStateVariants.SMALL}\n />\n </ReactResizeDetector>\n </BasicViewContent>\n </DashboardLayoutItemView>\n );\n};\n\nexport default DQDashboardErrorView;\n","import {always, cond, curry, identity, join, map, pipe, propOr, propEq, slice} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n getAttributeTypesHierarchyByUri,\n isDateType,\n isTimestampBasedType,\n DataValidationFunction,\n DQChartsData,\n FilterOptions,\n Metadata,\n SearchState,\n AttributeType,\n isBooleanType,\n parseBoolean\n} from '@reltio/mdm-sdk';\nimport {getSearchState, localizeChartValues, facetFiltersToSearchState} from './charts';\nimport {getEqualsRawFilterSearchState, RawFilterFields} from './rawFilters';\nimport {getAttributeLabel} from './attributes';\nimport {GetSearchStateProps} from '../types/GetSearchStateProps';\n\ntype GetFormattedDataForTableChartFn = (chartType: string) => (chartsData: DQChartsData) => ChartData[];\nconst getFormattedDataForTableChart: GetFormattedDataForTableChartFn = (chartType: string) =>\n pipe(\n propOr({}, chartType),\n Object.entries,\n map(([item, value]) => ({label: item, group: item, value})),\n localizeChartValues\n );\n\nexport const valueComparator =\n ({sortDirection, sortField}: {sortDirection: 'asc' | 'desc'; sortField: string}) =>\n (a: ChartData, b: ChartData) => {\n if (sortDirection === 'asc') {\n return a[sortField] > b[sortField] ? 1 : -1;\n } else return a[sortField] < b[sortField] ? 1 : -1;\n };\n\nconst filterExistedDVF = (dvfs: DataValidationFunction[], chartData: ChartData[]) =>\n chartData.filter((chartDataItem: ChartData) => dvfs.find(propEq('uri', chartDataItem.group)));\n\nexport const findDVFByUri = (dvfs: DataValidationFunction[], uri: string) => dvfs.find(propEq('uri', uri));\n\nconst enrichDVFDataWithFunctionLabel = curry((dvfs: DataValidationFunction[], chartData: ChartData[]) =>\n pipe(\n filterExistedDVF,\n map((chartDataItem: ChartData) => {\n const functionName = findDVFByUri(dvfs, chartDataItem.group)?.name;\n return {...chartDataItem, label: functionName};\n })\n )(dvfs, chartData)\n);\n\nconst getAttributeTypeLabelFromHierarhy: (attributeHierarhy: AttributeType[]) => string = pipe(\n map(getAttributeLabel),\n slice(1, Infinity),\n join(' / ')\n);\n\nconst enrichEntityLevelDVFData = curry((dvfs: DataValidationFunction[], metadata: Metadata, chartData: ChartData[]) =>\n pipe(\n filterExistedDVF,\n map((chartDataItem: ChartData) => {\n const {name, attribute: attributeUri} = findDVFByUri(dvfs, chartDataItem.group);\n const attributeTypesHierarhy = getAttributeTypesHierarchyByUri(metadata, attributeUri);\n return {\n ...chartDataItem,\n label: name,\n attributeLabel: getAttributeTypeLabelFromHierarhy(attributeTypesHierarhy)\n };\n })\n )(dvfs, chartData)\n);\n\ntype GetValidationChartDataFn = (chartsData: DQChartsData) => ChartData[];\nexport const getValidationChartData = (dvfs: DataValidationFunction[]): GetValidationChartDataFn =>\n pipe(getFormattedDataForTableChart('dataValidationFunctions'), enrichDVFDataWithFunctionLabel(dvfs));\n\nexport const getEntityLevelValidationChartData = (\n dvfs: DataValidationFunction[],\n metadata: Metadata\n): GetValidationChartDataFn =>\n pipe(getFormattedDataForTableChart('dataValidationFunctions'), enrichEntityLevelDVFData(dvfs, metadata));\nexport const getFrequencyChartData = getFormattedDataForTableChart('frequency');\nexport const getPatternAnalisysData = getFormattedDataForTableChart('pattern');\n\nconst getDVFAnalyticAttribtuteUri = (entityTypeUri: string, attributeName: string) =>\n `${entityTypeUri}/analyticsAttributes/AttributeValidations/analyticsAttributes/${attributeName}`;\nconst getValidationFilter = ({name, uri}: DataValidationFunction, entityTypeUri: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [[name]],\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionName',\n uri: getDVFAnalyticAttribtuteUri(entityTypeUri, 'FunctionName')\n },\n {\n filter: FilterOptions.EQUALS,\n values: [[uri]],\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionURI',\n uri: getDVFAnalyticAttribtuteUri(entityTypeUri, 'FunctionURI')\n }\n];\n\nconst getFrequencyAnalysisStateForTimestamp = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, attributeValue: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}`,\n value: attributeValue,\n entityTypeUri\n })\n);\nconst getFrequencyAnalysisFilterForDate = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.ON,\n values: [attributeValue],\n fieldName\n }\n]);\nconst getFrequencyAnalysisFilter = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [[attributeValue]],\n fieldName\n }\n]);\nconst getFrequencyAnalysisFilterForBoolean = curry(({fieldName}: {fieldName: string}, attributeValue: string) => [\n {\n filter: FilterOptions.EQUALS,\n values: [parseBoolean(attributeValue)],\n fieldName\n }\n]);\n\nexport const getFrequencyAnalysisSearchState = ({detailedAttributeType, entityTypeUri}: GetSearchStateProps) =>\n cond([\n [isTimestampBasedType, always(getFrequencyAnalysisStateForTimestamp)],\n [isDateType, always(getSearchState(getFrequencyAnalysisFilterForDate))],\n [isBooleanType, always(getSearchState(getFrequencyAnalysisFilterForBoolean))],\n [identity, always(getSearchState(getFrequencyAnalysisFilter))]\n ])(detailedAttributeType.type)({detailedAttributeType, entityTypeUri});\n\nexport const getValidationSearchState =\n (dvfs: DataValidationFunction[]) =>\n ({entityTypeUri}: GetSearchStateProps): ((dvfUri: string) => SearchState) =>\n (dvfUri) => {\n const dvf = findDVFByUri(dvfs, dvfUri);\n return pipe(getValidationFilter, facetFiltersToSearchState(null, entityTypeUri))(dvf, entityTypeUri);\n };\n\nexport const getPatternAnalysisSearchState = curry(\n ({detailedAttributeType, entityTypeUri}: GetSearchStateProps, pattern: string) =>\n getEqualsRawFilterSearchState({\n fieldName: `${detailedAttributeType.fieldName}.${RawFilterFields.PATTERN}`,\n value: `\"${pattern}\"`,\n entityTypeUri\n })\n);\nexport const getRowsCounterLabel = (chartData: ChartData[]) =>\n `(${chartData.length >= 100 ? i18n.text('top') + ' 100' : chartData.length})`;\n","import i18n from 'ui-i18n';\nimport {always, either, isEmpty, isNil, propOr, when} from 'ramda';\n\nimport {DatePeriod, DQDataLevel, TimeSeriesStatisticValues, getDvfColor} from '@reltio/mdm-sdk';\n\nimport {LineChartData} from '../../../types/LineChartData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {hasTimeRange} from '../../../services/mlDq';\n\nexport const NO_DATA_FIELD = 'noData';\n\nconst getEntityLevelColumnsOptions = ({functionsCount, period}: {functionsCount: number; period: DatePeriod}) => [\n {\n id: 'attributeLabel',\n label: i18n.text('Attribute'),\n width: 0.23,\n sortable: true\n },\n {\n id: 'label',\n label: i18n.text('Validation function'),\n secondLabel: `(${functionsCount})`,\n width: 0.37,\n sortable: true\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.4,\n sortable: true,\n ...(hasTimeRange(period) ? {getBarColor: getDvfColor} : {})\n }\n];\n\nconst getAttributeLevelColumnsOptions = ({functionsCount, period}: {functionsCount: number; period: DatePeriod}) => [\n {\n id: 'label',\n label: i18n.text('Validation function'),\n secondLabel: `(${functionsCount})`,\n width: 0.4,\n sortable: true\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.6,\n sortable: true,\n ...(hasTimeRange(period) ? {getBarColor: getDvfColor} : {})\n }\n];\n\nexport const getColumnsOptions = (dataLevel: DQDataLevel, chartData: TableChartData[], period: DatePeriod) => {\n return (dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? getAttributeLevelColumnsOptions : getEntityLevelColumnsOptions)({\n functionsCount: chartData.length,\n period\n });\n};\n\nexport const getViolatedValidationData = (timeSeriesData: TimeSeriesStatisticValues): LineChartData => {\n const {data} = propOr({}, 'violatedProfiles', timeSeriesData);\n return when(either(isNil, isEmpty), always({[NO_DATA_FIELD]: null}))(data);\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg1830866123a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1830866123a)\"\n}, React.createElement(\"g\", {\n opacity: \".9\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"#fff\"\n}, React.createElement(\"path\", {\n d: \"M12.375 18.688a7 7 0 017-7h75.742a7 7 0 017 7v49.02a7 7 0 01-7 7H19.375a7 7 0 01-7-7v-49.02z\"\n}), React.createElement(\"path\", {\n opacity: \".4\",\n d: \"M16.844 22.813a7 7 0 017-7h75.741a7 7 0 017 7v49.02a7 7 0 01-7 7H23.844a7 7 0 01-7-7v-49.02z\"\n})), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"29.318\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.854 31.381a3.562 3.562 0 013.552-3.563 3.562 3.562 0 013.552 3.563 3.562 3.562 0 01-3.552 3.564 3.562 3.562 0 01-3.552-3.564z\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 29.052c0-.726.588-1.313 1.313-1.313h23.983a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 33.553c0-.518.42-.938.938-.938h43.37a.938.938 0 010 1.876h-43.37a.938.938 0 01-.938-.938z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 36.554c0-.31.252-.563.563-.563h13.993a.563.563 0 110 1.126H31.26a.563.563 0 01-.563-.563z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"rect\", {\n opacity: \".5\",\n x: \"19.854\",\n y: \"17.689\",\n width: \"29.914\",\n height: \"4.126\",\n rx: \"2.063\",\n fill: \"#645F6D\"\n}), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"43.573\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"rect\", {\n x: \"19.854\",\n y: \"42.072\",\n width: \"7.105\",\n height: \"7.127\",\n rx: \"3.552\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 43.306c0-.725.588-1.313 1.313-1.313h28.41a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 47.808c0-.518.42-.938.938-.938h48.23a.938.938 0 110 1.876h-48.23a.938.938 0 01-.938-.938z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 50.809c0-.31.252-.563.563-.563h38.884a.563.563 0 110 1.125H31.26a.563.563 0 01-.563-.562z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"ellipse\", {\n opacity: \".5\",\n cx: \"87.908\",\n cy: \"57.828\",\n rx: \"1.496\",\n ry: \"1.5\",\n fill: \"#6DBCFF\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.854 59.891a3.562 3.562 0 013.552-3.564 3.562 3.562 0 013.552 3.564 3.562 3.562 0 01-3.552 3.564 3.562 3.562 0 01-3.552-3.564z\",\n fill: \"#E3EBF4\"\n}), React.createElement(\"path\", {\n opacity: \".5\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 57.561c0-.725.588-1.313 1.313-1.313h38.132a1.313 1.313 0 110 2.626H32.01a1.313 1.313 0 01-1.313-1.313z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".43\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 62.063c0-.518.42-.938.938-.938h31.778a.938.938 0 110 1.875H31.635a.938.938 0 01-.938-.937z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M30.697 65.064c0-.311.252-.563.563-.563h13.993a.563.563 0 110 1.125H31.26a.563.563 0 01-.563-.562z\",\n fill: \"#B1AABD\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M0 3.094h88V88H0V3.094z\",\n fill: \"url(#paint0_linear_3200_4362)\"\n}), React.createElement(\"path\", {\n d: \"M79.893 76.85H21.308v14.184h58.585V76.85z\",\n fill: \"#F5C056\"\n}), React.createElement(\"path\", {\n d: \"M79.893 76.85H74.6v14.184h5.293V76.85z\",\n fill: \"#E99B00\"\n}), React.createElement(\"path\", {\n d: \"M48.73 76.893H26.283v14.184H48.73V76.893z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M44.894 57.829c-1.687-4.26 13.113-4.043 11.413 0-1.353 3.218-1.353 7.53 0 12.934H44.894C46 64.93 46 60.618 44.894 57.83z\",\n fill: \"#FFD264\"\n}), React.createElement(\"path\", {\n d: \"M61.253 70.383H39.949v2.663h21.304v-2.663z\",\n fill: \"#FFD264\"\n}), React.createElement(\"path\", {\n d: \"M47.938 70.383h-4.185v2.663h4.185v-2.663z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n d: \"M64.676 73.046h-28.15v3.804h28.15v-3.804z\",\n fill: \"#795D1A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M35.764 16.363v5.325H15.602v.143c0 13.634 8.992 24.714 20.162 24.961v2.994c-14-.986-25.108-15.488-25.108-33.233v-.19h25.108z\",\n fill: \"#FFCB64\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.677 16.363v5.325h20.161v.143c0 13.634-8.991 24.714-20.161 24.961v2.994c13.999-.986 25.107-15.488 25.107-33.233v-.19H64.677z\",\n fill: \"#ED985C\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M56.307 57.829c-1.353 3.218-1.353 7.53 0 12.934h-5.706V54.715c3.278.026 6.556 1.091 5.706 3.114z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.676 73.046v3.804H50.601v-3.804h14.075z\",\n fill: \"#4F350B\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M61.253 70.383v2.663H50.6v-2.663h10.652z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M74.933 10.656a102.429 102.429 0 01.01 2.663h-1.897l-.38 3.044h2.193c-1.138 25.55-13.019 45.65-24.448 45.65-11.43 0-23.311-20.1-24.449-45.65h2.194l-.38-3.044h-1.898a91.212 91.212 0 01.01-2.663h49.045z\",\n fill: \"#FFCE66\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M45.937 10.656c.006.569.01 1.14.01 1.712v.952h-.044l-.241 3.043h.294c.126 24.948 1.435 39.335 3.123 45.65-8.89-3.2-15.661-20.403-16.308-45.65h1.465l-.241-3.044h-1.271a158.252 158.252 0 01.006-2.663h13.207z\",\n fill: \"#FFEA5A\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M70.284 16.363h-3.91l.422-3.044h3.581a81.301 81.301 0 00-.01-2.663h4.566a102.429 102.429 0 01.01 2.663h-1.897l-.38 3.044h2.193c-1.138 25.55-13.019 45.65-24.448 45.65-.414 0-.828-.026-1.241-.078 11.92-1.382 19.899-20.946 21.114-45.572zm.083-5.707h-44.48 44.48z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n opacity: \".519\",\n d: \"M72.665 13.32h-44.51v3.043h44.51v-3.044z\",\n fill: \"#F4B046\"\n}), React.createElement(\"path\", {\n d: \"M48.318 73.046h-5.706v3.804h5.706v-3.804z\",\n fill: \"#96691F\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M65.526 10.656h4.235L58.973 35.935h-4.235l10.788-25.279z\",\n fill: \"url(#paint1_linear_3200_4362)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_3200_4362)\"\n}, React.createElement(\"path\", {\n d: \"M56.909 56.472c5.993 0 10.85-4.858 10.85-10.85 0-5.994-4.857-10.852-10.85-10.852-5.993 0-10.852 4.858-10.852 10.851 0 5.993 4.859 10.851 10.852 10.851z\",\n fill: \"#000\"\n})), React.createElement(\"path\", {\n d: \"M56.909 56.472c5.993 0 10.85-4.858 10.85-10.85 0-5.994-4.857-10.852-10.85-10.852-5.993 0-10.852 4.858-10.852 10.851 0 5.993 4.859 10.851 10.852 10.851z\",\n fill: \"#DD612C\"\n}), React.createElement(\"path\", {\n d: \"M56.909 54.302a8.681 8.681 0 100-17.362 8.681 8.681 0 000 17.362z\",\n fill: \"#FFCE66\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M56.909 36.94a8.685 8.685 0 018.347 6.291c-5.74.351-10.312 5.02-10.51 10.8a8.699 8.699 0 01-6.008-5.47A11.212 11.212 0 0054.9 37.174a8.684 8.684 0 012.008-.234z\",\n fill: \"#FFF18C\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M48.202 10.656l10.862 25.341H54.83L43.646 10.705l4.556-.049z\",\n fill: \"#F83D3D\"\n})), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_3200_4362\",\n x1: \"0\",\n y1: \"3.094\",\n x2: \"0\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_3200_4362\",\n x1: \"62.25\",\n y1: \"10.656\",\n x2: \"62.25\",\n y2: \"35.935\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#B93131\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#831616\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_3200_4362\",\n x: \"40.057\",\n y: \"30.77\",\n width: \"33.702\",\n height: \"33.703\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"3\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.0335613 0 0 0 0 0.334579 0 0 0 0 0.412601 0 0 0 0.5 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_3200_4362\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_3200_4362\",\n result: \"shape\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg355575424a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg355575424a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.5 3.094h88V88h-88V3.094z\",\n fill: \"url(#paint0_linear_3488_11934)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.543 19.547L84.7 39.704V90.88H32.1L17.875 77.372V19.547h46.668z\",\n fill: \"url(#paint1_linear_3488_11934)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.156 19.938h69.438A2.406 2.406 0 0188 22.343v53.968a2.406 2.406 0 01-2.406 2.407H16.156a2.406 2.406 0 01-2.406-2.406v-53.97a2.406 2.406 0 012.406-2.405z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 19.25H86.28c.95 0 1.719.77 1.719 1.719v53.968c0 .95-.77 1.72-1.719 1.72H17.187c-.949 0-1.718-.77-1.718-1.72V20.97c0-.95.77-1.719 1.719-1.719z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 24.968c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 29.093c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 010 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 56.031c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 60.156c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 010 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 66.344c0-.57.462-1.031 1.031-1.031h28.059a1.031 1.031 0 010 2.062H37.254c-.57 0-1.031-.462-1.031-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 70.469c0-.57.462-1.031 1.031-1.031h25.508a1.031 1.031 0 010 2.062H37.125c-.57 0-1.031-.462-1.031-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 35.406c0-.57.461-1.031 1.03-1.031h28.06a1.031 1.031 0 110 2.063h-28.06c-.569 0-1.03-.462-1.03-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 39.531c0-.57.461-1.031 1.03-1.031H70.54a1.031 1.031 0 010 2.063H48.47c-.57 0-1.032-.462-1.032-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"36.438\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"46.75\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"58.094\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"68.406\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 45.719c0-.57.461-1.032 1.03-1.032h28.06a1.031 1.031 0 110 2.063h-28.06c-.569 0-1.03-.462-1.03-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 49.844c0-.57.461-1.032 1.03-1.032h25.509a1.031 1.031 0 010 2.063H48.469c-.57 0-1.032-.462-1.032-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.802 37.125v-2.75h-.688V48.251h3.843v-.688h-3.155v-9.75h3.155v-.688h-3.155z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.68 26.469l-1.215 1.215-1.215-1.215h2.43z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 7.563h63.937c1.14 0 2.063.923 2.063 2.062v6.188c0 1.139-.924 2.062-2.063 2.062H17.187a2.062 2.062 0 01-2.062-2.063V9.625c0-1.14.923-2.063 2.063-2.063z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.938 12.719c0-1.14.923-2.063 2.062-2.063h24.063a2.063 2.063 0 010 4.125H22a2.062 2.062 0 01-2.063-2.062zM50.875 12.719c0-1.14.923-2.063 2.063-2.063h3.437a2.063 2.063 0 010 4.125h-3.438a2.062 2.062 0 01-2.062-2.062z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n d: \"M37.687 66.48l8.942 8.309v.958l19.925 19.702 31.064-.552 7.006-25.47-34.487-34.144-11.2.567c-3.238-1.86-5.34-3.02-6.306-3.48-.54-.258-.383 5.565-2.755 7.725-1.243 1.133-3.462 4.104-6.657 8.914l-5.532 17.47z\",\n fill: \"url(#paint2_linear_3488_11934)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_3488_11934)\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n}, React.createElement(\"path\", {\n d: \"M67.338 33.427a22.7 22.7 0 013.043 1.642l-.913 4.312a18.719 18.719 0 014.236 4.554l4.28-.699a23.425 23.425 0 012.392 6.47l-3.639 2.443c.262 2.058.2 4.18-.216 6.285l3.466 2.572a24.254 24.254 0 01-2.838 6.375l-4.231-.855a19.61 19.61 0 01-4.526 4.366l.62 4.34a23.426 23.426 0 01-6.409 2.551l-2.345-3.649a18.72 18.72 0 01-6.219-.1l-2.593 3.564a22.7 22.7 0 01-6.224-2.757l.912-4.304a18.715 18.715 0 01-4.281-4.567l-4.285.7a23.424 23.424 0 01-2.4-6.438l3.633-2.44a19.607 19.607 0 01.21-6.384l-3.465-2.57a24.263 24.263 0 012.823-6.34l4.229.855a19.605 19.605 0 014.604-4.429l-.618-4.332c2-1.154 4.155-2.005 6.39-2.524l2.347 3.652a18.713 18.713 0 016.259.125l2.588-3.557c1.069.296 2.128.675 3.17 1.14zM60.075 49.74c-2.804-1.248-6.112.064-7.388 2.93-1.276 2.867-.038 6.203 2.766 7.452 2.804 1.248 6.112-.064 7.388-2.93 1.276-2.867.038-6.203-2.766-7.452z\",\n fill: \"#6B93AC\"\n}), React.createElement(\"path\", {\n d: \"M67.338 33.427a22.7 22.7 0 013.043 1.642l-.913 4.312c.779.597 1.503 1.25 2.168 1.95l-10.07 9.392a5.444 5.444 0 00-1.491-.983c-2.804-1.248-6.112.064-7.388 2.93a5.7 5.7 0 00.626 5.749l-10.071 9.39c-.502-.585-.965-1.2-1.39-1.84l-4.284.7a23.424 23.424 0 01-2.4-6.437l3.633-2.44a19.607 19.607 0 01.21-6.384l-3.465-2.57a24.263 24.263 0 012.823-6.34l4.229.855a19.605 19.605 0 014.604-4.429l-.618-4.332c2-1.154 4.155-2.005 6.39-2.524l2.347 3.652a18.713 18.713 0 016.259.125l2.588-3.557c1.069.296 2.128.675 3.17 1.14z\",\n fill: \"#7CA6BF\"\n}), React.createElement(\"path\", {\n d: \"M62.886 42.644c6.409 2.854 9.24 10.479 6.322 17.03-2.917 6.553-10.478 9.552-16.887 6.698-6.409-2.853-9.24-10.478-6.322-17.03 2.917-6.553 10.478-9.551 16.887-6.698zm-1.32 2.966c-4.808-2.14-10.478.109-12.666 5.023-2.188 4.914-.065 10.633 4.742 12.773 4.806 2.14 10.477-.108 12.665-5.023 2.188-4.914.065-10.633-4.742-12.773z\",\n fill: \"#AAC4D5\"\n}), React.createElement(\"path\", {\n d: \"M62.886 42.644a12.424 12.424 0 014.22 3.075l-2.366 2.207a9.317 9.317 0 00-3.175-2.316c-4.807-2.14-10.477.109-12.665 5.023-1.635 3.673-.863 7.795 1.638 10.536l-2.367 2.208c-3.325-3.656-4.35-9.145-2.172-14.035 2.917-6.553 10.478-9.551 16.887-6.698z\",\n fill: \"#CBDDE9\"\n}))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_3488_11934\",\n x1: \"-5.5\",\n y1: \"3.094\",\n x2: \"-5.5\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_3488_11934\",\n x1: \"91.478\",\n y1: \"62.257\",\n x2: \"53.241\",\n y2: \"26.703\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_3488_11934\",\n x1: \"86.975\",\n y1: \"77.519\",\n x2: \"49.809\",\n y2: \"46.968\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#90A4AE\",\n stopOpacity: \"0\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopOpacity: \".75\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_3488_11934\",\n x: \"32.168\",\n y: \"30.067\",\n width: \"53.209\",\n height: \"53.716\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dx: \"1\",\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_3488_11934\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_3488_11934\",\n result: \"shape\"\n})))));","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"88\",\n height: \"88\",\n viewBox: \"0 0 88 88\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#0072CE\",\n fillOpacity: \".1\"\n}), React.createElement(\"mask\", {\n id: \"svg1954152798a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"88\",\n height: \"88\"\n}, React.createElement(\"circle\", {\n cx: \"44\",\n cy: \"44\",\n r: \"44\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1954152798a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-5.5 3.094h88V88h-88V3.094z\",\n fill: \"url(#paint0_linear_4523_4542)\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M64.543 19.547L84.7 39.704V90.88H32.1L17.875 77.372V19.547h46.668z\",\n fill: \"url(#paint1_linear_4523_4542)\"\n}), React.createElement(\"path\", {\n opacity: \".06\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M16.156 19.938h69.438A2.406 2.406 0 0188 22.343v53.968a2.406 2.406 0 01-2.406 2.407H16.156a2.406 2.406 0 01-2.406-2.406v-53.97a2.406 2.406 0 012.406-2.405z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 19.25H86.28c.95 0 1.719.77 1.719 1.719v53.968c0 .95-.77 1.72-1.719 1.72H17.187c-.949 0-1.718-.77-1.718-1.72V20.97c0-.95.77-1.719 1.719-1.719z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 24.968c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 29.093c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 110 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 56.031c0-.57.462-1.031 1.031-1.031h14.309a1.031 1.031 0 010 2.063H37.254c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 60.156c0-.57.462-1.031 1.031-1.031h22.07a1.031 1.031 0 110 2.063h-22.07c-.57 0-1.031-.462-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.223 66.344c0-.57.462-1.031 1.031-1.031h28.059a1.031 1.031 0 010 2.063H37.254c-.57-.001-1.031-.463-1.031-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M36.094 70.469c0-.57.462-1.031 1.031-1.031h25.508a1.031 1.031 0 010 2.063H37.125c-.57-.001-1.031-.463-1.031-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 35.406c0-.57.461-1.031 1.03-1.031h28.06a1.031 1.031 0 010 2.063h-28.06c-.569 0-1.03-.462-1.03-1.032z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 39.531c0-.57.461-1.031 1.03-1.031H70.54a1.031 1.031 0 010 2.063H48.47c-.57 0-1.032-.462-1.032-1.032z\",\n fill: \"#979797\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"27.156\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"36.438\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"41.25\",\n cy: \"46.75\",\n r: \"2.063\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"58.094\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"circle\", {\n cx: \"23.031\",\n cy: \"68.406\",\n r: \"3.094\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.567 45.719c0-.57.461-1.032 1.03-1.032h28.06a1.031 1.031 0 010 2.063h-28.06c-.569 0-1.03-.462-1.03-1.031z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M47.438 49.844c0-.57.461-1.032 1.03-1.032h25.509a1.031 1.031 0 010 2.063H48.469c-.57 0-1.032-.462-1.032-1.031z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M31.802 37.125v-2.75h-.688V48.251h3.843v-.688h-3.155v-9.75h3.155v-.688h-3.155z\",\n fill: \"#2B98F0\"\n}), React.createElement(\"path\", {\n opacity: \".54\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M32.68 26.469l-1.215 1.215-1.215-1.215h2.43z\",\n fill: \"#000\"\n}), React.createElement(\"path\", {\n opacity: \".6\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M17.188 7.563h63.937c1.14 0 2.063.923 2.063 2.062v6.188c0 1.139-.924 2.062-2.063 2.062H17.187a2.062 2.062 0 01-2.062-2.063V9.625c0-1.14.923-2.063 2.063-2.063z\",\n fill: \"#fff\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M19.938 12.719c0-1.14.923-2.063 2.062-2.063h24.063a2.062 2.062 0 010 4.125H22a2.062 2.062 0 01-2.063-2.062zM50.875 12.719c0-1.14.923-2.063 2.063-2.063h3.437a2.062 2.062 0 110 4.125h-3.438a2.062 2.062 0 01-2.062-2.062z\",\n fill: \"#979797\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter0_d_4523_4542)\"\n}, React.createElement(\"path\", {\n d: \"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\",\n fill: \"#000\"\n})), React.createElement(\"path\", {\n d: \"M57.406 74.25c9.493 0 17.188-7.695 17.188-17.188 0-9.492-7.695-17.187-17.188-17.187-9.492 0-17.187 7.695-17.187 17.188 0 9.492 7.695 17.187 17.187 17.187z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".15\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 34.719c12.34 0 22.344 10.003 22.344 22.343S69.746 79.406 57.406 79.406c-12.34 0-22.343-10.003-22.343-22.344 0-12.34 10.003-22.343 22.343-22.343zm-.172 2.406c-10.916 0-19.765 8.85-19.765 19.766 0 10.916 8.85 19.765 19.765 19.765C68.151 76.656 77 67.806 77 56.891c0-10.917-8.85-19.766-19.766-19.766z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".3\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 38.844c10.062 0 18.219 8.157 18.219 18.218 0 10.062-8.157 18.22-18.219 18.22-10.062 0-18.218-8.158-18.218-18.22 0-10.061 8.156-18.218 18.218-18.218zm0 2.043c-8.933 0-16.175 7.242-16.175 16.175 0 8.934 7.242 16.176 16.175 16.176 8.934 0 16.176-7.242 16.176-16.175 0-8.934-7.242-16.176-16.176-16.176z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M57.406 26.469C74.303 26.469 88 40.166 88 57.062c0 16.897-13.697 30.594-30.594 30.594-16.896 0-30.593-13.697-30.593-30.594 0-16.896 13.697-30.593 30.593-30.593zm-.172 3.437c-14.903 0-26.984 12.082-26.984 26.985 0 14.903 12.081 26.984 26.984 26.984 14.903 0 26.985-12.081 26.985-26.984 0-14.903-12.082-26.985-26.985-26.985z\",\n fill: \"#4A90E2\"\n}), React.createElement(\"path\", {\n d: \"M57.406 71.844c8.164 0 14.782-6.618 14.782-14.781 0-8.164-6.618-14.782-14.782-14.782-8.163 0-14.781 6.618-14.781 14.782 0 8.163 6.618 14.78 14.781 14.78z\",\n fill: \"#61A3F1\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M58.298 46.448L75.18 63.33 66.066 75.41h-2.029l-7.582-7.582 1.006-3.178.837-18.201z\",\n fill: \"url(#paint2_linear_4523_4542)\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter1_d_4523_4542)\"\n}, React.createElement(\"circle\", {\n cx: \"57.406\",\n cy: \"47.781\",\n r: \"1.719\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter2_d_4523_4542)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M55.688 53.969a1.719 1.719 0 113.438 0v12.375a1.719 1.719 0 11-3.438 0V53.969z\",\n fill: \"#fff\"\n}))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_4523_4542\",\n x1: \"-5.5\",\n y1: \"3.094\",\n x2: \"-5.5\",\n y2: \"88\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_4523_4542\",\n x1: \"91.478\",\n y1: \"62.257\",\n x2: \"53.241\",\n y2: \"26.703\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_4523_4542\",\n x1: \"77.079\",\n y1: \"63.788\",\n x2: \"62.929\",\n y2: \"54.707\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_4523_4542\",\n x: \"36.219\",\n y: \"37.875\",\n width: \"42.375\",\n height: \"42.375\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter1_d_4523_4542\",\n x: \"51.688\",\n y: \"44.063\",\n width: \"11.438\",\n height: \"11.438\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter2_d_4523_4542\",\n x: \"51.688\",\n y: \"50.25\",\n width: \"11.438\",\n height: \"23.813\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_4523_4542\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_4523_4542\",\n result: \"shape\"\n})))));","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n title: {\n whiteSpace: 'nowrap',\n height: '24px',\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n titleCount: {\n fontSize: '14px',\n overflow: 'hidden',\n lineHeight: '20px',\n textOverflow: 'ellipsis'\n },\n viewContent: {\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n padding: '0 16px 10px'\n },\n countProfiles: {\n color: theme.palette.text.primary,\n fontWeight: 700\n },\n chartInfoPanel: {\n padding: '0 12px'\n }\n}));\n","import React, {ReactElement} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport Link from '@mui/material/Link';\nimport i18n from 'ui-i18n';\nimport {BasicViewContent, EMPTY_STATE_ICONS} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\nimport NiceOneIcon from '../icons/niceOne.svg';\nimport SettingsIcon from '../icons/settingsIcon.svg';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport NotSupportedIcon from '../icons/notSupportedIcon.svg';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport DQDashboardError from '../../../components/DQDashboardError/DQDashboardError';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {useStyles} from './styles';\n\nexport enum VVFNoDataChartType {\n DVF_NOT_SUPPORTED = 'dvfNotSupported',\n DVF_NOT_CONFIGURE = 'dvfNotConfigured',\n DATA_VALID = 'dataValid',\n PERMISSION_DENIED = 'permissionDenied'\n}\ntype Props = {\n chartType?: VVFNoDataChartType;\n dataLevel: DQDataLevel;\n title: string;\n infoTooltipTitle?: ReactElement | string;\n titleChildren?: React.ReactNode;\n dvfConfigLink: string;\n config: DQDashboardView;\n};\n\nconst VVFChartNoData = ({\n chartType,\n dataLevel,\n title: chartTitle,\n infoTooltipTitle,\n titleChildren,\n dvfConfigLink,\n config\n}: Props) => {\n const styles = useStyles();\n let icon, message, title;\n const dataSourceLabel =\n dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? i18n.text('attribute type') : i18n.text('entity type');\n switch (chartType) {\n case VVFNoDataChartType.DVF_NOT_SUPPORTED: {\n icon = NotSupportedIcon;\n title = i18n.text('Data validation functions are not supported for\\nReference attributes at this time.');\n break;\n }\n case VVFNoDataChartType.DVF_NOT_CONFIGURE: {\n icon = SettingsIcon;\n message = i18n.text('If we spot any validation issues, we’ll display them here.');\n title = (\n <>\n <Link\n href={dvfConfigLink}\n target=\"_blank\"\n component={dvfConfigLink ? 'a' : 'span'}\n color={dvfConfigLink ? 'primary' : 'inherit'}\n underline={dvfConfigLink ? 'hover' : 'none'}\n data-reltio-id=\"reltio-dq-dashboard-define-dvf-link\"\n >\n {`${i18n.text('Define some data validation functions')} `}\n </Link>\n {i18n.text('for this ${dataSourceLabel} (or ask your Tenant Admin).', {dataSourceLabel})}\n </>\n );\n break;\n }\n case VVFNoDataChartType.DATA_VALID: {\n icon = NiceOneIcon;\n message = i18n.text(\n 'We didn’t spot any validation issues for this ${dataSourceLabel}.\\nYou can kick back and enjoy a cold one.',\n {dataSourceLabel}\n );\n title = i18n.text('Nice one!');\n break;\n }\n case VVFNoDataChartType.PERMISSION_DENIED: {\n icon = EMPTY_STATE_ICONS.ERROR;\n message = i18n.text('Please contact your Tenant Admin to change permissions');\n title = i18n.text('You don’t currently have permission to view this chart');\n }\n }\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={chartTitle} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n </DQLayoutItemHeader>\n <BasicViewContent className={styles.viewContent}>\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleHeight>\n {({height = 0}) => (\n <DQDashboardError\n height={height}\n errorData={{\n Icon: icon,\n title,\n message\n }}\n />\n )}\n </ReactResizeDetector>\n </BasicViewContent>\n </DQLayoutItemView>\n );\n};\n\nexport default VVFChartNoData;\n","import {useContext, useCallback} from 'react';\n\nimport {RequestStates} from '@reltio/components';\nimport {ApiErrorCode, DataValidationFunction, DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../../../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {isReferenceChild} from '../../../../services/attributeDetails';\n\nimport {VVFNoDataChartType} from '../VVFChartNodata';\n\ntype Props = {\n dvfs: DataValidationFunction[];\n errorCode: ApiErrorCode;\n state: RequestStates;\n};\n\nexport const useNoDataDvfType = ({dvfs: activeDvfs, errorCode, state: dvfsState}: Props) => {\n const dataLevel = useContext(DataLevelContext);\n const {detailedAttributeType} = useDQDashboardState();\n\n const getNoDataStatus = useCallback(\n (chartDataState: RequestStates, hasData: boolean) => {\n const chartState =\n dvfsState === RequestStates.LOADED && chartDataState === RequestStates.LOADED\n ? RequestStates.LOADED\n : dvfsState === RequestStates.ERROR || chartDataState === RequestStates.ERROR\n ? RequestStates.ERROR\n : RequestStates.LOADING;\n\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const isPermissionDenied = errorCode === ApiErrorCode.ACCESS_DENIED;\n const isDVFNotSupported = isAttributeDataLevel && isReferenceChild(detailedAttributeType);\n const isDVFNotConfigured =\n errorCode === ApiErrorCode.DVF_NOT_CONFIGURED ||\n (activeDvfs?.length === 0 && chartState !== RequestStates.ERROR && dvfsState === RequestStates.LOADED);\n const isDataValid = chartState === RequestStates.LOADED && activeDvfs?.length > 0 && !hasData;\n\n const getNoDataType = () => {\n if (isDVFNotSupported) return VVFNoDataChartType.DVF_NOT_SUPPORTED;\n if (isDVFNotConfigured) return VVFNoDataChartType.DVF_NOT_CONFIGURE;\n if (isDataValid) return VVFNoDataChartType.DATA_VALID;\n if (isPermissionDenied) return VVFNoDataChartType.PERMISSION_DENIED;\n };\n\n return {\n type: getNoDataType(),\n chartState\n };\n },\n [activeDvfs, errorCode, dvfsState, dataLevel, detailedAttributeType]\n );\n\n return getNoDataStatus;\n};\n","import {useContext, useMemo} from 'react';\nimport {propEq} from 'ramda';\n\nimport {DataValidationFunction, DQDataLevel, StatusVF} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../../../../contexts/DQDashboardStateContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {DVFContext} from '../../../../contexts/DVFContext';\nimport {getDVFsForAttribute} from '../../../../services/attributes';\n\ntype Props = {\n onlyActive?: boolean;\n};\n\nexport const useDvfs = ({onlyActive = true}: Props) => {\n const {dvfs, dvfConfigLink} = useContext(DVFContext);\n const dataLevel = useContext(DataLevelContext);\n const {detailedAttributeType} = useDQDashboardState();\n\n const {data: dvfsData, state, reload, errorCode} = dvfs;\n\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const currentDvfs: DataValidationFunction[] = useMemo(\n () => (isAttributeDataLevel ? getDVFsForAttribute(dvfsData, detailedAttributeType?.uri) : dvfsData) || [],\n [isAttributeDataLevel, dvfsData, detailedAttributeType?.uri]\n );\n const resultDvfs = useMemo(\n () => (onlyActive ? currentDvfs.filter(propEq('status', StatusVF.ACTIVE)) : currentDvfs),\n [currentDvfs, onlyActive]\n );\n\n return {\n dvfs: resultDvfs,\n dvfConfigLink,\n state,\n reload,\n errorCode\n };\n};\n","import {pipe, split, is} from 'ramda';\nimport i18n from 'ui-i18n';\nimport {TableChartData} from '../../types/TableChartData';\n\nexport const getLabelAndMaxValue = pipe(split('|'), ([label, maxValue]) => ({label, maxValue}));\nexport const getValueByColumnId = (id: string, rowValue: TableChartData) =>\n is(Number, rowValue[id]) ? i18n.number(rowValue[id]) : rowValue[id];\n","import React, {useRef} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\ntype Props = {\n children: React.ReactElement;\n handler: (isOverflow: boolean) => void;\n handleWidth?: boolean;\n};\nconst OverflowingHandler = ({children, handler, handleWidth = true}: Props) => {\n const checkOverflow = (el: HTMLElement) => el && el.children[0].clientWidth < el.children[0].scrollWidth;\n const resizeHandler = () => handler(checkOverflow(childrenRef.current));\n const childrenRef = useRef();\n return (\n <ReactResizeDetector handleWidth={handleWidth} onResize={resizeHandler}>\n <div style={{overflow: 'hidden'}} ref={childrenRef}>\n {children}\n </div>\n </ReactResizeDetector>\n );\n};\nexport default OverflowingHandler;\n","import {makeStyles} from '@mui/styles';\n\nconst NUMBER_CELL_WIDTH = 90;\nconst SORT_ICON_WIDTH = 22;\nconst BAR_PADDING_WIDHT = 32;\nconst textOverflow = {\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n content: '\"\"',\n height: '100%',\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px'\n};\nconst BarAxis = {\n background: 'rgba(0, 0, 0, 0.38)',\n bottom: 0,\n content: '\"\"',\n height: '3px',\n left: 0,\n position: 'absolute',\n width: '1px'\n};\n\nexport const useStyles = makeStyles((theme) => ({\n attribute: {\n '&:after': textOverflow,\n alignItems: 'center',\n color: theme.palette.text.primary,\n display: 'flex',\n fontSize: '13px',\n fontWeight: 'normal',\n height: '100%',\n lineHeight: '15px',\n overflow: 'hidden',\n padding: '0 16px',\n whiteSpace: 'pre'\n },\n headCell: {\n '&>div': {\n display: 'flex',\n flexDirection: (isFirstColumn) => (isFirstColumn ? 'row' : 'row-revers'),\n flexGrow: 1,\n justifyContent: 'flex-start',\n marginLeft: (isFirstColumn) => !isFirstColumn && '-26px',\n paddingLeft: '16px',\n paddingRight: (isFirstColumn) => isFirstColumn && '0'\n },\n '&>div>span': {\n flexGrow: 1,\n justifyContent: (isFirstColumn) => (isFirstColumn ? 'flex-start' : 'flex-end'),\n marginLeft: '0!important',\n width: '100%'\n },\n height: '100%',\n lineHeight: '47px'\n },\n headCellWithRange: {\n '&>div': {\n display: 'flex',\n flexDirection: 'row-revers',\n flexGrow: 1,\n justifyContent: 'flex-start',\n padding: '0 10px 0 16px'\n },\n '&>div>span': {\n flexGrow: 1,\n justifyContent: 'flex-start!important',\n width: '100%'\n },\n height: '100%',\n lineHeight: '47px'\n },\n headLabel: {\n color: theme.palette.text.primary,\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: '47px',\n overflow: 'hidden',\n position: 'relative',\n whiteSpace: 'nowrap',\n '&.overflowed:after': textOverflow\n },\n labelWrapper: {\n maxWidth: `${NUMBER_CELL_WIDTH}px`,\n '&.sortable': {\n maxWidth: `${NUMBER_CELL_WIDTH - SORT_ICON_WIDTH}px`\n }\n },\n rangeLabel: {\n '&:first-child': {\n flexGrow: 1\n },\n color: theme.palette.text.secondary,\n fontSize: '12px'\n },\n rangeWrapper: {\n '&:after': {\n ...BarAxis,\n left: 'initial',\n right: 0\n },\n '&:before': BarAxis,\n alignItems: 'flex-end',\n display: 'flex',\n flexGrow: 1,\n lineHeight: '24px',\n marginLeft: '32px',\n maxWidth: `calc(100% - ${NUMBER_CELL_WIDTH + BAR_PADDING_WIDHT}px)`,\n position: 'relative',\n '&.sortable': {\n height: '100%',\n maxWidth: `calc(100% - ${BAR_PADDING_WIDHT + NUMBER_CELL_WIDTH + SORT_ICON_WIDTH}px)`\n }\n },\n tooltipTitle: {\n color: 'rgba(255, 255, 255, 0.6)'\n },\n tooltipValue: {\n whiteSpace: 'pre-wrap'\n },\n popper: {\n paddingTop: '6px'\n }\n}));\n\nexport const useNumberCellStyles = makeStyles((theme) => ({\n bar: ({barColor}: {barColor: string}) => ({\n borderRadius: '0 !important',\n minHeight: '16px !important',\n position: 'initial !important' as 'initial',\n background: barColor || theme.palette.secondary.main\n }),\n colorBarContainer: {\n '&>div': {\n opacity: 1\n },\n boxSizing: 'border-box',\n height: '100%',\n padding: '5px 0 6px',\n position: 'relative',\n width: '100%'\n },\n numberContainer: {\n alignItems: 'center',\n display: 'flex',\n height: '100%',\n padding: '0 10px 0 16px'\n },\n number: {\n color: theme.palette.text.primary,\n flexShrink: 0,\n fontSize: '13px',\n fontWeight: 'normal',\n lineHeight: '15px',\n marginRight: '32px',\n overflow: 'hidden',\n textAlign: 'right',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: `${NUMBER_CELL_WIDTH}px`\n },\n popper: {\n paddingTop: '6px'\n }\n}));\n","import classnames from 'classnames';\nimport React, {useState} from 'react';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport DefaultHeadCellRenderer from 'react-components/dist/Table/DefaultHeadCellRenderer/DefaultHeadCellRenderer';\nimport {getLabelAndMaxValue} from '../helpers';\nimport OverflowingHandler from './OverflowingHandler';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport {useStyles} from './styles';\n\ntype HeadCellRendererProps = {\n headCellData: {\n label: string;\n sortable?: boolean;\n };\n headIndex?: number;\n};\n\nconst HeadCellRenderer = ({headCellData, headIndex, ...otherProps}: HeadCellRendererProps) => {\n const isFirstColumn = headIndex === 0;\n const styles = useStyles(isFirstColumn);\n const {label, maxValue} = getLabelAndMaxValue(headCellData.label);\n const formattedMaxValue = formatNumberAsMetric(Number(maxValue), 999);\n const hasRange = !!maxValue;\n const [isOverflowing, setIsOverflowing] = useState<boolean>(false);\n const labelElement = (\n <OverflowingHandler handler={setIsOverflowing}>\n <Tooltip title={isOverflowing ? label : ''}>\n <div className={classnames(styles.headLabel, {overflowed: isOverflowing})}>{label}</div>\n </Tooltip>\n </OverflowingHandler>\n );\n\n return (\n <div className={classnames({[styles.headCell]: !hasRange, [styles.headCellWithRange]: hasRange})}>\n <DefaultHeadCellRenderer\n {...otherProps}\n headCellData={{\n ...headCellData,\n label: hasRange ? (\n <>\n <div\n className={classnames(styles.rangeWrapper, {\n sortable: headCellData.sortable\n })}\n >\n <span className={styles.rangeLabel}>0</span>\n <span className={styles.rangeLabel}>{formattedMaxValue}</span>\n </div>\n <div\n className={classnames({\n [styles.labelWrapper]: !headCellData.sortable,\n sortable: headCellData.sortable\n })}\n >\n {labelElement}\n </div>\n </>\n ) : (\n labelElement\n )\n }}\n />\n </div>\n );\n};\n\nexport default HeadCellRenderer;\n","import React from 'react';\n\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {getValueByColumnId} from '../helpers';\n\nimport ChartDataTooltip from '../../ChartDataTooltip/ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n columnsHeaders: TableColumnHeader[];\n chartData: TableChartData;\n};\n\nconst TableCellTooltip = ({columnsHeaders, chartData}: Props) => {\n const styles = useStyles();\n return (\n <ChartDataTooltip\n data={columnsHeaders.map(({label, id}) => ({\n label: <span className={styles.tooltipValue}>{label}</span>,\n value: getValueByColumnId(id, chartData)\n }))}\n />\n );\n};\nexport default TableCellTooltip;\n","import classnames from 'classnames';\nimport React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport {useClickableStyle, withTableContext} from '@reltio/components';\nimport {utils} from '@reltio/mdm-sdk';\n\nimport {TableChartData} from '../../../types/TableChartData';\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\n\nimport TableCellTooltip from './TableCellTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n value?: string;\n rowValue?: TableChartData;\n onClick?: () => void;\n columnData: {\n cellClassName?: string;\n labelRenderer?: React.ComponentType<{chartData: TableChartData; variant?: string}>;\n variant?: string;\n };\n columnsHeaders: TableColumnHeader[];\n};\n\nexport const LabelCellRenderer = ({value = '', columnData, rowValue: chartData, columnsHeaders, onClick}: Props) => {\n const {cellClassName, variant, labelRenderer: LabelRenderer} = columnData;\n const styles = useStyles();\n const clickable = useClickableStyle(onClick);\n const hasCustomRenderer = !!LabelRenderer;\n\n return (\n <Tooltip\n title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}\n followCursor={true}\n classes={{popper: styles.popper}}\n >\n <div className={classnames(styles.attribute, clickable, cellClassName)} onClick={onClick}>\n {hasCustomRenderer ? (\n <LabelRenderer variant={variant} chartData={chartData} />\n ) : (\n utils.strings.removeLineBreaks(value)\n )}\n </div>\n </Tooltip>\n );\n};\n\nexport default withTableContext(({onItemClick, columnsHeaders}, {rowValue: {group}}) => {\n return {\n onClick:\n onItemClick &&\n (() => {\n onItemClick(group);\n }),\n columnsHeaders\n };\n})(LabelCellRenderer);\n","import classnames from 'classnames';\nimport {isNil} from 'ramda';\nimport React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport {ChartData, ColorBar, useClickableStyle, withTableContext} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {TableColumnHeader} from '../../../types/TableColumnHeader';\n\nimport TableCellTooltip from './TableCellTooltip';\n\nimport {useNumberCellStyles} from './styles';\n\ntype Props = {\n value: number;\n columnData: {\n maxValue?: number;\n getBarColor?: (group: string) => string;\n };\n rowValue?: ChartData;\n onClick?: () => void;\n columnsHeaders: TableColumnHeader[];\n};\n\nexport const NumberCellValueRenderer = ({\n value,\n columnData: {maxValue, getBarColor},\n rowValue: chartData,\n columnsHeaders,\n onClick\n}: Props) => {\n const styles = useNumberCellStyles({barColor: getBarColor && getBarColor(chartData.group)});\n const clickable = useClickableStyle(onClick);\n const formattedValue = value === 0 ? '0' : formatNumberAsMetric(value, 999);\n return (\n <Tooltip\n title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}\n followCursor={true}\n classes={{popper: styles.popper}}\n >\n <div className={classnames(styles.numberContainer, clickable)} onClick={onClick}>\n <Typography className={styles.number}>{formattedValue}</Typography>\n {!isNil(maxValue) && (\n <div className={styles.colorBarContainer}>\n <ColorBar width={value} maxWidth={maxValue} className={styles.bar} />\n </div>\n )}\n </div>\n </Tooltip>\n );\n};\n\nexport default withTableContext(({onItemClick, columnsHeaders}, {rowValue: {group}}) => {\n return {\n onClick:\n onItemClick &&\n (() => {\n onItemClick(group);\n }),\n columnsHeaders\n };\n})(NumberCellValueRenderer);\n","import {makeStyles} from '@mui/styles';\n\ntype Dimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const useStyles = makeStyles({\n tableContainer: ({width}: Dimensions) => ({\n width: width,\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n '& .hoveredRow': {\n background: 'transparent'\n },\n '& .hoveredRow:after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none'\n }\n }),\n cellBorder: {\n borderLeft: 'none',\n borderRight: 'none!important'\n }\n});\n","import React, {useMemo} from 'react';\nimport {omit, pick, pluck} from 'ramda';\nimport {BasicTable} from '@reltio/components';\nimport HeadCellRenderer from './cell-renderers/HeadCellRenderer';\nimport LabelCellRenderer from './cell-renderers/LabelCellRenderer';\nimport NumberCellValueRenderer from './cell-renderers/NumberCellValueRenderer';\nimport {TableChartData} from '../../types/TableChartData';\n\nimport {useStyles} from './styles';\n\nexport type ColumnsOptions = {\n id: string;\n label: string;\n width?: number;\n secondLabel?: string;\n sortable?: boolean;\n resizable?: boolean;\n cellClassName?: string;\n labelRenderer?: React.ComponentType<{chartData: TableChartData}>;\n getBarColor?: (group: string) => string;\n variant?: string;\n};\n\ntype Props = {\n data: TableChartData[];\n width: number;\n height: number;\n onItemClick?: (group: string) => void;\n columnsOptions: ColumnsOptions[];\n basicTableRef?: React.MutableRefObject<any> | null;\n dataReltioId?: string;\n};\n\nconst ROW_HEIGHT = 28;\n\nconst getExtendedLabel = (label: string, secondLabel: string) => (secondLabel ? `${label} ${secondLabel}` : label);\n\nconst TableWithBars = ({\n width,\n height,\n data,\n columnsOptions,\n basicTableRef,\n onItemClick,\n dataReltioId,\n ...otherProps\n}: Props) => {\n const styles = useStyles({width, height});\n\n const tableClasses = useMemo(() => ({cellBorder: styles.cellBorder}), [styles]);\n const maxValue = useMemo(() => Math.max(...pluck('value', data)), [data]);\n\n const headData = useMemo(\n () =>\n columnsOptions.map((columnOptions) => ({\n resizable: false,\n sortable: false,\n headCellRenderer: HeadCellRenderer,\n rowCellValueRenderer: LabelCellRenderer,\n label: getExtendedLabel(columnOptions.label, columnOptions.secondLabel),\n initialWidth: width * columnOptions.width,\n ...(columnOptions.id === 'value'\n ? {\n label: getExtendedLabel(columnOptions.label, columnOptions.secondLabel).concat(\n `|${maxValue}`\n ),\n maxValue,\n rowCellValueRenderer: NumberCellValueRenderer\n }\n : {}),\n ...omit(['label', 'width'], columnOptions)\n })),\n [columnsOptions, maxValue, width]\n );\n\n const columnsHeaders = useMemo(() => columnsOptions.map(pick(['id', 'label'])), [columnsOptions]);\n\n const context = useMemo(\n () => ({\n onItemClick,\n columnsHeaders\n }),\n [onItemClick, columnsHeaders]\n );\n\n return (\n <div className={styles.tableContainer} data-reltio-id={dataReltioId}>\n <BasicTable\n columnsData={headData}\n rowsData={data}\n headRowHeight={48}\n getRowCellHeight={() => ROW_HEIGHT}\n classes={tableClasses}\n defaultColumnWidth={100}\n defaultColumnMinWidth={100}\n ref={basicTableRef}\n context={context}\n hoverStateEnabled\n {...otherProps}\n />\n </div>\n );\n};\n\nexport default TableWithBars;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n layoutItemContent: {\n padding: '0 0 10px',\n display: 'flex',\n flexDirection: 'column'\n }\n}));\n","import React, {ReactElement, useCallback, useMemo, useState} from 'react';\nimport {nanoid} from 'nanoid';\nimport {has} from 'ramda';\n\nimport {RequestStates, toggleSortOrder, withPercents} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {hasTimeRange} from '../../../services/mlDq';\nimport {valueComparator as defaultComparator} from '../../../services/tableCharts';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {ErrorData} from '../../../types/ErrorData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\n\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n data: TableChartData[];\n columnsOptions: ColumnsOptions[];\n title: string;\n state: RequestStates;\n onRefresh: () => void;\n infoTooltipTitle?: ReactElement | string;\n customComparator?: ({\n sortDirection,\n sortField\n }: {\n sortDirection: 'asc' | 'desc';\n sortField: string;\n }) => (a: TableChartData, b: TableChartData) => number;\n onItemClick?: (group: string) => void;\n contentChildren?: React.ReactNode;\n noDataComponentData?: ErrorData;\n dataLevel?: DQDataLevel;\n};\n\nconst CustomTableWithBarsChart = ({\n config,\n data,\n title,\n columnsOptions,\n infoTooltipTitle,\n customComparator,\n onItemClick,\n contentChildren,\n state,\n onRefresh,\n dataLevel = DQDataLevel.ATTRIBUTE_TYPE\n}: Props) => {\n const styles = useStyles();\n const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('desc');\n const [sortField, setSortField] = useState<string>('value');\n const comparator = useCallback(\n (a: TableChartData, b: TableChartData) =>\n customComparator\n ? customComparator({sortDirection, sortField})(a, b)\n : defaultComparator({sortDirection, sortField})(a, b),\n [sortDirection, sortField, customComparator]\n );\n const handleSort = (field: string) => {\n setSortDirection(() => (sortField === field ? toggleSortOrder(sortDirection) : sortDirection));\n setSortField(field);\n };\n const sortedData = useMemo(() => [...data.sort(comparator)], [comparator, data]);\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n\n const {period, exportLoadingIds} = useDQDashboardState();\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && dataLevel === DQDataLevel.ATTRIBUTE_TYPE && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent\n className={styles.layoutItemContent}\n data={sortedData}\n loadingState={state}\n onRefresh={onRefresh}\n >\n {({data, width = 0, height = 0}) => {\n return (\n <>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n {contentChildren}\n <TableWithBars\n {...{\n data,\n width,\n height,\n columnsOptions,\n sorting: {\n field: sortField,\n order: sortDirection\n },\n onSort: handleSort,\n onItemClick\n }}\n />\n </>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default withPercents(CustomTableWithBarsChart);\n","import {isNil} from 'ramda';\nimport React from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport i18n from 'ui-i18n';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n isDataValid: boolean;\n totalProfiles: number;\n invalidProfiles: number;\n};\nexport const TotalInfo = ({isDataValid, totalProfiles, invalidProfiles}: Props) => {\n const styles = useStyles();\n\n const getTotalInfo = () => {\n if (isDataValid) {\n return i18n.text('0 profiles');\n }\n\n return !isNil(invalidProfiles) ? (\n <>\n <span className={styles.countProfiles}>{formatNumberAsMetric(invalidProfiles)}</span>\n {` (${Math.round((invalidProfiles / totalProfiles) * 100)}% ${i18n.text(\n 'out of'\n )} ${formatNumberAsMetric(totalProfiles)})`}\n </>\n ) : null;\n };\n const totalInfo = getTotalInfo();\n return totalInfo && <Typography className={styles.titleCount}>{totalInfo}</Typography>;\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {pluck} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport mdmModule from '@reltio/mdm-module';\nimport {ApiErrorCode, DQDataLevel, Metadata} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\n\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useEntityCount} from '../../../hooks/useEntityCount';\nimport {useInvalidProfiles} from '../../../hooks/useInvalidProfiles';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {\n getValidationChartData,\n getEntityLevelValidationChartData,\n getValidationSearchState,\n valueComparator\n} from '../../../services/tableCharts';\nimport {getColumnsOptions} from './helpers';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\nimport {useDvfs} from './hooks/useDvfs';\n\nimport CustomTableWithBarsChart from '../CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport ChartInfoPanel from '../../../components/ChartInfoPanel/ChartInfoPanel';\nimport {TotalInfo} from './TotalInfo';\n\nimport {useStyles} from './styles';\n\nconst ViolatedValidationFuncChart = (props: ViewProps) => {\n const styles = useStyles();\n const {config} = props;\n\n const dvfData = useDvfs({});\n const {dvfs, dvfConfigLink, errorCode: dvfErrorCode, reload: dvfsReload, state: dvfsState} = dvfData;\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const dataLevel = useContext(DataLevelContext);\n const isAttributeDataLevel = dataLevel === DQDataLevel.ATTRIBUTE_TYPE;\n const {period, entityType} = useDQDashboardState();\n const entityTypeUri = entityType.uri;\n\n const {\n data: chartData,\n state,\n reload\n } = useChartData(\n isAttributeDataLevel ? getValidationChartData(dvfs) : getEntityLevelValidationChartData(dvfs, metadata)\n );\n const hasData = !!chartData.length;\n const {type: noDataType, chartState} = getNoDataStatus(state, hasData);\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const dvfUris = useMemo(() => pluck('uri', dvfs), [dvfs]);\n const invalidProfiles = useInvalidProfiles({entityTypeUri, dvfUris});\n const {getEntityCount} = useEntityCount(entityTypesArray);\n const totalProfiles = getEntityCount(entityTypeUri);\n const searchProfiles = useSearchRedirect(getValidationSearchState(dvfs));\n\n const isLoadingError = chartState === RequestStates.ERROR && dvfErrorCode !== ApiErrorCode.DVF_NOT_CONFIGURED;\n\n const totalInfo = !isLoadingError &&\n noDataType !== VVFNoDataChartType.DVF_NOT_CONFIGURE &&\n chartState !== RequestStates.LOADING && (\n <TotalInfo\n isDataValid={VVFNoDataChartType.DATA_VALID === noDataType}\n totalProfiles={totalProfiles}\n invalidProfiles={invalidProfiles}\n />\n );\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Profiles with invalid data')}\n data={[{value: i18n.text('Shows the number of profiles that violate active validation functions')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const contentChildren = (\n <div className={styles.chartInfoPanel}>\n <ChartInfoPanel label={`${i18n.text('Profiles with invalid data')}:`} info={totalInfo} />\n </div>\n );\n\n const columnsOptions = getColumnsOptions(dataLevel, chartData, period);\n\n const reloadFunction = useCallback(() => {\n dvfsState === RequestStates.ERROR && dvfsReload();\n state === RequestStates.ERROR && reload();\n }, [dvfsState, dvfsReload, state, reload]);\n\n return noDataType ? (\n <VVFChartNoData\n config={config}\n chartType={noDataType}\n title={i18n.text(config.title)}\n infoTooltipTitle={infoTooltipTitle}\n dvfConfigLink={dvfConfigLink}\n dataLevel={dataLevel}\n />\n ) : (\n <CustomTableWithBarsChart\n config={config}\n title={i18n.text(config.title)}\n data={chartData}\n onItemClick={searchProfiles}\n state={chartState}\n onRefresh={reloadFunction}\n customComparator={valueComparator}\n infoTooltipTitle={infoTooltipTitle}\n columnsOptions={columnsOptions}\n contentChildren={contentChildren}\n dataLevel={dataLevel}\n />\n );\n};\n\nexport default ViolatedValidationFuncChart;\n","import {useEffect, useState} from 'react';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useInvalidProfiles = ({entityTypeUri, dvfUris}: {entityTypeUri: string; dvfUris: string[]}) => {\n const [invalidProfilesCount, setInvalidProfilesCount] = useState<number>(null);\n const safePromise = useSafePromise();\n\n useEffect(() => {\n const filter = [\n {\n fieldName: 'type',\n filter: FilterOptions.EQUALS,\n values: [entityTypeUri]\n },\n {\n fieldName: 'analyticsAttributes.AttributeValidations.FunctionURI',\n filter: FilterOptions.EQUALS,\n values: dvfUris\n }\n ];\n safePromise(getTotals(filter))\n .then(({total}) => setInvalidProfilesCount(total))\n .catch(() => setInvalidProfilesCount(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypeUri, dvfUris]);\n\n return invalidProfilesCount;\n};\n","import React, {useCallback, useContext, useMemo} from 'react';\nimport {TooltipProps} from 'recharts';\nimport {isNil, map, pipe, propSatisfies, keys, reduce, reject, uniq, without, has} from 'ramda';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {DataValidationFunction, DQDataLevel, DQMetric, getDvfColor, getLabel, TimeSeriesMetric} from '@reltio/mdm-sdk';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {\n getTimeSeriesData,\n getChartTooltipDateTitle,\n enrichTimeSeriesDataWithTodayData,\n filterValidDVFs\n} from '../../../services/mlDq';\nimport {getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {findDVFByUri, getValidationChartData} from '../../../services/tableCharts';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {VIOLATED_PROFILES_METRIC} from '../../../constants/ValidationMetric';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {getViolatedValidationData, NO_DATA_FIELD} from './helpers';\nimport {useDvfs} from './hooks/useDvfs';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\n\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\nimport {ChartDataTooltip, InfoDataRenderer, TooltipWithSquares} from '../../../components/ChartDataTooltip';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport {getZoomedData} from '../../../components/LineChart/helpers';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n// TODO get rid of hardcoded metric\nconst metrics = [VIOLATED_PROFILES_METRIC as TimeSeriesMetric];\n\nconst getTooltip =\n (dvfs: DataValidationFunction[], dataKeys: string[]) =>\n ({active, payload}: TooltipProps) => {\n if (active && payload && payload.length) {\n const {payload: currentPayload} = payload[0];\n const data: ChartData[] = pipe(\n map((functionId: string) => {\n const dvf = findDVFByUri(dvfs, functionId);\n return {\n label: getLabel(dvf?.label || dvf?.name),\n value: currentPayload[functionId],\n group: functionId\n };\n }),\n reject(propSatisfies(isNil, 'value'))\n )(dataKeys);\n const title = getChartTooltipDateTitle(currentPayload, dataKeys);\n return <TooltipWithSquares title={title} data={data} getColor={getDvfColor} />;\n }\n };\n\nconst ViolatedValidationFuncTimeSeriesChart = (props: ViewProps) => {\n const {config} = props;\n const {title} = config;\n const {period, dateRange, entityType, detailedAttributeType, exportLoadingIds} = useDQDashboardState();\n\n const dvfData = useDvfs({onlyActive: true});\n const {dvfs, dvfConfigLink, reload: reloadDvf, state: stateDvf} = dvfData;\n const {changeZoom} = useDQDashboardStateActions();\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const dataLevel = useContext(DataLevelContext);\n const entityTypeUri = entityType.uri;\n const attributeFieldName = detailedAttributeType?.fieldName;\n const {\n data: dataMlDq,\n state: stateMlDq,\n reload: reloadMlDq\n } = useMlDqDataRequest({\n entityTypeUri,\n attributeFieldName,\n period,\n metrics\n });\n const {data: dataToday, state: stateToday, reload: reloadToday} = useChartData(getValidationChartData(dvfs));\n const chartData: LineChartData[] = useMemo(\n () =>\n pipe(\n getTimeSeriesData(getViolatedValidationData),\n enrichTimeSeriesDataWithTodayData(period, dataToday, DQMetric.DATA_VALIDATION),\n filterValidDVFs(dvfs)\n )(dataMlDq),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataMlDq, dataToday]\n );\n\n useReloadFacet({\n state: stateMlDq,\n reload: reloadMlDq,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n\n const dataKeys = pipe(\n reduce((acc: string[], data: LineChartData) => acc.concat(keys(data)), []),\n uniq,\n without(['label', 'group'])\n )(chartData);\n\n const hasData = dataKeys.toString() !== NO_DATA_FIELD;\n\n const {type: noDataType, chartState} = getNoDataStatus(getChartState([stateMlDq, stateToday]), hasData);\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Profiles with invalid data over time')}\n data={[{value: i18n.text('Shows the number of profiles that violate active validation functions')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const reloadFunction = useCallback(() => {\n stateDvf === RequestStates.ERROR && reloadDvf();\n stateMlDq === RequestStates.ERROR && reloadMlDq();\n stateToday === RequestStates.ERROR && reloadToday();\n }, [stateDvf, reloadDvf, stateMlDq, reloadMlDq, stateToday, reloadToday]);\n\n const titleChildren = <PeriodChip />;\n const loadingState =\n chartState === RequestStates.LOADING ? RequestStates.LOADING : getChartState([stateMlDq, stateToday]);\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && stateMlDq === RequestStates.LOADED && getZoomedData(chartData, dateRange).length > 0,\n [chartData, dateRange, showExportButton, stateMlDq]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n return noDataType === VVFNoDataChartType.DVF_NOT_SUPPORTED ||\n noDataType === VVFNoDataChartType.PERMISSION_DENIED ? (\n <VVFChartNoData\n config={config}\n chartType={noDataType}\n title={i18n.text(title)}\n infoTooltipTitle={infoTooltipTitle}\n titleChildren={titleChildren}\n dvfConfigLink={dvfConfigLink}\n dataLevel={dataLevel}\n />\n ) : (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {titleChildren}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={chartData} loadingState={loadingState} onRefresh={reloadFunction}>\n {({data, width, height}) => (\n <div>\n {has(exportLoadingId, exportLoadingIds) && <DashboardLinearLoader />}\n <LineChart\n width={width}\n height={height}\n data={data}\n lineKeys={dataKeys}\n getTooltip={getTooltip(dvfs, dataKeys)}\n getColor={getDvfColor}\n yAxisLabel={i18n.text('No. of profiles')}\n isPercent={false}\n dateRange={dateRange}\n changeZoom={changeZoom}\n />\n </div>\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default ViolatedValidationFuncTimeSeriesChart;\n","import React from 'react';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {checkIsTimeSeries} from '../../../services/mlDq';\n\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport ViolatedValidationFuncChartToday from './ViolatedValidationFuncChart';\nimport ViolatedValidationFuncTimeSeriesChart from './ViolatedValidationFuncTimeSeriesChart';\n\nconst ViolatedValidationFuncChart = (props: ViewProps) => {\n const {config} = props;\n const isTimeSeries = checkIsTimeSeries(config);\n return (\n <DQLayoutItemView config={config}>\n {isTimeSeries ? (\n <ViolatedValidationFuncTimeSeriesChart {...props} />\n ) : (\n <ViolatedValidationFuncChartToday {...props} />\n )}\n </DQLayoutItemView>\n );\n};\n\nexport default ViolatedValidationFuncChart;\n","import classnames from 'classnames';\nimport React, {useMemo} from 'react';\nimport i18n from 'ui-i18n';\n\nimport {isDateType, isSSNType} from '@reltio/mdm-sdk';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {convertDateLabelsInChartData} from '../../services/charts';\nimport {getFrequencyAnalysisSearchState, getFrequencyChartData, getRowsCounterLabel} from '../../services/tableCharts';\nimport {ViewProps} from '../../types/ViewProps';\n\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\n\nimport {useStyles} from './styles';\n\nconst FrequencyAnalysisChart = ({config}: ViewProps) => {\n const styles = useStyles();\n\n const {data: chartData, state, reload} = useChartData(getFrequencyChartData);\n const attributeType: string = useDQDashboardState().detailedAttributeType?.type;\n const preparedData = useMemo(\n () => (isDateType(attributeType) ? convertDateLabelsInChartData(chartData, attributeType) : chartData),\n [chartData]\n );\n const searchProfiles = useSearchRedirect(getFrequencyAnalysisSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Frequency analysis')}\n data={[{value: i18n.text('Shows the number of times each value occurs')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Value'),\n secondLabel: getRowsCounterLabel(chartData),\n width: 0.4,\n cellClassName: classnames({[styles.monoFontCell]: isSSNType(attributeType)})\n },\n {\n id: 'value',\n label: i18n.text('Count'),\n width: 0.6\n }\n ];\n\n return (\n <CustomTableWithBarsChart\n config={config}\n data={preparedData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n columnsOptions={columnsOptions}\n />\n );\n};\n\nexport default FrequencyAnalysisChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n labelWrapper: ({width}: {width: number}) => ({\n overflow: 'hidden',\n width: `${width}px`,\n marginTop: '-3px'\n }),\n xAxisLabel: {\n textAlign: 'center',\n whiteSpace: 'nowrap',\n fontSize: '12px',\n paddingTop: '3px',\n '&::first-letter': {textTransform: 'capitalize'},\n '&:after': {\n top: '0',\n right: '0',\n width: '10px',\n height: '100%',\n content: '\"\"',\n position: 'absolute',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n }\n }\n}));\n","import React from 'react';\nimport {ExpandedValueTooltip} from '@reltio/components';\nimport {ContentRenderer} from 'recharts';\nimport {TickProps} from '../../../../types/TickProps';\nimport {useStyles} from './styles';\n\nconst SPACE_BETWEEN_LABELS = 4;\n\ntype Props = {\n width: number;\n height: number;\n label: string;\n x: number;\n y: number;\n};\nexport const XAxisLabel = ({width, height, label, x, y}: Props) => {\n const styles = useStyles({width});\n\n const xCoord = x - width / 2;\n\n return (\n <foreignObject x={xCoord} y={y} width={width} height={height}>\n <div className={styles.labelWrapper}>\n <ExpandedValueTooltip value={label}>\n <div className={styles.xAxisLabel}>{label}</div>\n </ExpandedValueTooltip>\n </div>\n </foreignObject>\n );\n};\n\nexport const renderXAxis: ContentRenderer<TickProps> = (tickProps) => {\n const {x, y, width, height, payload, visibleTicksCount} = tickProps;\n const {value} = payload;\n const maxTickWidth = width / visibleTicksCount - SPACE_BETWEEN_LABELS;\n\n return <XAxisLabel width={maxTickWidth} height={height} label={value} x={x} y={y} />;\n};\n","import {BarProps, CartesianGridProps, XAxisProps, YAxisProps, LabelProps, BarChartProps} from 'recharts';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport {tickFormatter} from '../../../services/barCharts';\nimport {MIN_CHART_BAR_SIZE} from '../../../services/charts';\nimport {renderXAxis} from './XAxisLabel/XAxisLabel';\n\ntype BarChartSettings = {\n barChart: BarChartProps;\n bar: BarProps;\n xAxis: XAxisProps;\n yAxis: YAxisProps;\n cartesianGrid: CartesianGridProps;\n labelForX: LabelProps;\n labelForY: LabelProps;\n};\n\nconst getBarChartSettings = ({\n showCategories = false,\n interval,\n barCategoryGap,\n maxBarSize,\n yTickRenderer,\n tickCount\n}: BarChartOptions): BarChartSettings => {\n return {\n barChart: {\n barCategoryGap: barCategoryGap || '10%'\n },\n bar: {\n dataKey: 'value',\n fill: '#0072CE',\n minPointSize: MIN_CHART_BAR_SIZE,\n maxBarSize: maxBarSize || 50\n },\n xAxis: {\n tick: showCategories && renderXAxis,\n tickLine: false,\n interval: interval ? interval : 0,\n dataKey: 'label'\n },\n yAxis: {\n axisLine: false,\n tickLine: false,\n tick: yTickRenderer || {fill: '#000', fontSize: 12},\n width: 60,\n tickFormatter: tickFormatter,\n tickCount: tickCount || 5\n },\n cartesianGrid: {\n stroke: '#000',\n strokeOpacity: '0.05',\n vertical: false\n },\n labelForX: {\n position: 'insideBottom',\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)'\n },\n offset: showCategories ? 0 : 3\n },\n labelForY: {\n angle: 270,\n position: 'left',\n offset: -3,\n style: {\n textAnchor: 'middle',\n fontSize: '10px',\n fill: 'rgba(0, 0, 0, 0.54)'\n }\n }\n };\n};\n\nexport default getBarChartSettings;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React from 'react';\nimport {TooltipProps} from 'recharts';\nimport i18n from 'ui-i18n';\nimport ChartDataTooltip from '../../../../components/ChartDataTooltip/ChartDataTooltip';\nimport {useStyles} from './styles';\n\ntype Props = TooltipProps & {\n name?: string;\n};\n\nexport const BarTooltip = ({payload, active, name}: Props) => {\n const tooltipPayload = payload?.[0]?.payload;\n const value = tooltipPayload?.value;\n const tooltipLabel = tooltipPayload?.label;\n const propertiesName = name ? `${name}` : '';\n const styles = useStyles();\n return (\n active && (\n <div className={styles.tooltipWrapper}>\n <ChartDataTooltip\n data={[\n {label: propertiesName, value: tooltipLabel},\n {label: i18n.text('No of profiles'), value: i18n.number(value)}\n ]}\n />\n </div>\n )\n );\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n chartInfoLabel: {\n fontSize: '13px',\n lineHeight: '15px',\n color: 'rgba(0, 0, 0, 0.54)',\n paddingRight: '8px'\n },\n chartInfoValue: {\n fontSize: '13px',\n lineHeight: '15px',\n color: 'rgba(0, 0, 0, 0.87)'\n },\n chartInfoWrapper: {\n display: 'flex',\n backgroundColor: 'rgba(0, 0, 0, 0.05)',\n margin: '0 12px 12px',\n padding: '9px 12px 8px'\n },\n chartInfoItem: {\n marginRight: '16px'\n },\n clickable: {\n cursor: 'pointer'\n },\n title: {\n marginRight: '50px',\n fontSize: '16px'\n },\n root: {\n padding: '0 0 0 16px',\n minHeight: 'auto',\n marginTop: '12px',\n marginBottom: '12px'\n }\n}));\n","import React from 'react';\nimport Tooltip from '@mui/material/Tooltip';\nimport {InfoPanelData} from '../../../types/InfoPanelData';\nimport {useStyles} from './styles';\n\ntype Props = {\n data: InfoPanelData[];\n};\n\nexport const InfoPanel = ({data}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.chartInfoWrapper}>\n {data.map(({label, value, localizedValue}) => (\n <div key={label} className={styles.chartInfoItem}>\n <span className={styles.chartInfoLabel}>{label}: </span>\n {value !== localizedValue ? (\n <Tooltip title={localizedValue}>\n <span className={styles.chartInfoValue}>{value}</span>\n </Tooltip>\n ) : (\n <span className={styles.chartInfoValue}>{value}</span>\n )}\n </div>\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport {Rectangle, RectangleProps} from 'recharts';\nimport {useStyles} from './styles';\n\ntype Props = RectangleProps & {\n isClickable: boolean;\n};\n\nconst CustomBackgroundOnHover = ({isClickable, ...rectangleProps}: Props) => {\n const styles = useStyles();\n const className = isClickable ? styles.clickable : undefined;\n return (\n <Rectangle {...rectangleProps} className={className} fill=\"#000\" opacity=\"0.1\" pointerEvents=\"visibleFill\" />\n );\n};\nexport default CustomBackgroundOnHover;\n","import React from 'react';\nimport {Rectangle, RectangleProps} from 'recharts';\n\ntype Props = RectangleProps & {\n value?: number;\n};\n\nconst CustomBar = (props: Props) => {\n const {value} = props;\n return value > 0 ? <Rectangle {...props} /> : null;\n};\nexport default CustomBar;\n","import React, {useMemo} from 'react';\nimport {has} from 'ramda';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {nanoid} from 'nanoid';\n\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DashboardLinearLoader} from '@reltio/dashboard';\n\nimport {useDQDashboardState} from '../../../contexts/DQDashboardStateContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport getBarChartSettings from './getBarChartSettings';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {InfoPanelData} from '../../../types/InfoPanelData';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport {hasTimeRange} from '../../../services/mlDq';\n\nimport {BarTooltip} from './BarTooltip/BarTooltip';\nimport {InfoPanel} from './InfoPanel';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport CustomBackgroundOnHover from './CustomBackgroundOnHover';\nimport CustomBar from './CustomBar';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardView;\n data: ChartData[];\n xAxisLabel: string;\n yAxisLabel: string;\n state: RequestStates;\n onRefresh: () => void;\n onItemClick?: (group: string) => void;\n infoPanelData?: InfoPanelData[];\n infoTooltipTitle?: React.ReactElement | string;\n barTooltipTitle?: string;\n options?: BarChartOptions;\n};\n\nconst CustomBarChart = ({\n data,\n config,\n xAxisLabel,\n yAxisLabel,\n barTooltipTitle,\n infoPanelData,\n infoTooltipTitle,\n onItemClick,\n options = {},\n state,\n onRefresh\n}: Props) => {\n const styles = useStyles();\n const {title} = config;\n const {cartesianGrid, bar, xAxis, yAxis, labelForX, labelForY, barChart} = getBarChartSettings(options);\n const onBarClick = onItemClick && (({activePayload}) => onItemClick(activePayload[0].payload.group));\n const clickable = onBarClick ? styles.clickable : undefined;\n const showInfoPanel = state === RequestStates.LOADED && infoPanelData.length > 0;\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && data.length > 0,\n [state, data]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n\n const {period, exportLoadingIds} = useDQDashboardState();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n {has(exportLoadingId, exportLoadingIds) && (\n <div style={{position: 'relative'}}>\n <DashboardLinearLoader />\n </div>\n )}\n {showInfoPanel && <InfoPanel data={infoPanelData} />}\n <DQLayoutItemContent data={data} loadingState={state} onRefresh={onRefresh}>\n {({data, width = 0, height = 0}) => {\n return (\n <div>\n <BarChart width={width} height={height} data={data} onClick={onBarClick} {...barChart}>\n <CartesianGrid {...cartesianGrid} />\n <ChartTooltip\n content={<BarTooltip name={barTooltipTitle} />}\n cursor={<CustomBackgroundOnHover isClickable={!!onBarClick} />}\n />\n <Bar {...bar} shape={<CustomBar className={clickable} />} />\n <YAxis {...yAxis}>\n <Label {...labelForY} value={yAxisLabel} />\n </YAxis>\n <XAxis {...xAxis}>\n <Label {...labelForX} value={xAxisLabel} />\n </XAxis>\n </BarChart>\n </div>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default CustomBarChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getLengthChartData, getLengthStatisticsSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\nimport i18n from 'ui-i18n';\n\nconst LengthStatisticsChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getLengthChartData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getLengthStatisticsSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Length statistics')}\n data={[{value: i18n.text('Measures the string length of values')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Length of values')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Length')}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default LengthStatisticsChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useLabelStyles = makeStyles({\n icon: {\n width: '20px',\n height: '20px',\n borderRadius: '4px',\n fontSize: '14px',\n marginRight: '8px'\n },\n text: ({color}: {color: string}) => ({\n backgroundColor: color\n }),\n label: ({color}: {color: string}) => ({\n backgroundColor: color,\n flexShrink: 0,\n fontSize: '14px',\n height: '12px',\n margin: ' 0 8px 0 0',\n width: '12px'\n })\n});\n","import React from 'react';\n\nimport {getSourceColor} from '@reltio/mdm-sdk';\nimport {SourceIcon} from '@reltio/components';\n\nimport {TableChartData} from '../../types/TableChartData';\n\nimport {useLabelStyles} from './styles';\n\ntype Props = {\n chartData: TableChartData;\n variant?: string;\n};\n\nexport const INCLUDE_SOURCE_ICON = 'includeSourceIcon';\n\nconst SourceLabelRenderer = ({chartData, variant}: Props) => {\n const {group, label} = chartData;\n const styles = useLabelStyles({color: getSourceColor(group)});\n return (\n <>\n {variant === INCLUDE_SOURCE_ICON ? (\n <SourceIcon sourceType={group} className={styles.icon} classes={{textRoot: styles.text}} />\n ) : (\n <div className={styles.label} />\n )}\n {label}\n </>\n );\n};\n\nexport default SourceLabelRenderer;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport i18n from 'ui-i18n';\nimport {Metadata} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\n\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {getCrosswalkAnalysisData, getCrosswalkAnalysisSearchState} from '../../../services/barCharts';\nimport {valueComparator} from '../../../services/tableCharts';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport CustomTableWithBarsChart from '../CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport SourceLabelRenderer, {INCLUDE_SOURCE_ICON} from '../../../components/SourceLabelRenderer/SourceLabelRenderer';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst CrosswalkAnalysisChart = ({config}: ViewProps) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const {data, state, reload} = useChartData(getCrosswalkAnalysisData(metadata));\n const {chartData} = data;\n const searchProfiles = useSearchRedirect(getCrosswalkAnalysisSearchState);\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Source system analysis')}\n data={[{value: i18n.text('Distribution of source systems contributing to profiles')}]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Source system'),\n secondLabel: `(${chartData.length})`,\n width: 0.4,\n sortable: true,\n labelRenderer: SourceLabelRenderer,\n variant: INCLUDE_SOURCE_ICON\n },\n {\n id: 'value',\n label: i18n.text('Profiles'),\n width: 0.6,\n sortable: true\n }\n ];\n return (\n <CustomTableWithBarsChart\n config={{...config}}\n data={chartData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n customComparator={valueComparator}\n columnsOptions={columnsOptions}\n />\n );\n};\nexport default CrosswalkAnalysisChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getValueDistributionData, getValueDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\n\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\n\nconst ValueDistributionChart = ({config}: ViewProps) => {\n const attributeType: string = useDQDashboardState().detailedAttributeType?.type;\n const {data, state, reload} = useChartData(getValueDistributionData(attributeType));\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getValueDistributionSearchState(attributeType));\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Value')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Value')}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default ValueDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getMonthDistributionData, getMonthDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst MonthDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getMonthDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getMonthDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Months of the year')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Months of the year')}\n options={{showCategories: true, barCategoryGap: '20%', interval: 'preserveStartEnd'}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default MonthDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getDayOfWeekDistributionData, getDayOfweekDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst DayOfWeekDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getDayOfWeekDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getDayOfweekDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Days of the week')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Days of the week')}\n options={{showCategories: true, barCategoryGap: '25%', interval: 'preserveStartEnd'}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default DayOfWeekDistributionChart;\n","import React from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getDayOfMonthDistributionData, getDayOfMonthDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport i18n from 'ui-i18n';\n\nconst DayOfMonthDistributionChart = ({config}: ViewProps) => {\n const {data, state, reload} = useChartData(getDayOfMonthDistributionData);\n const {chartData, infoPanelData} = data;\n const searchProfiles = useSearchRedirect(getDayOfMonthDistributionSearchState);\n\n return (\n <CustomBarChart\n config={config}\n data={chartData}\n xAxisLabel={i18n.text('Days of the month')}\n yAxisLabel={i18n.text('No. of profiles')}\n infoPanelData={infoPanelData}\n barTooltipTitle={i18n.text('Days of the month')}\n options={{showCategories: true, interval: 1}}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n />\n );\n};\nexport default DayOfMonthDistributionChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {getPatternAnalisysData, getPatternAnalysisSearchState} from '../../services/tableCharts';\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../types/ViewProps';\nimport ChartDataTooltip from '../../components/ChartDataTooltip/ChartDataTooltip';\nimport {getRowsCounterLabel} from '../../services/tableCharts';\nimport {useStyles} from './styles';\n\nconst PatternAnalysisChart = ({config}: ViewProps) => {\n const styles = useStyles();\n const {data: chartData, state, reload} = useChartData(getPatternAnalisysData);\n const searchProfiles = useSearchRedirect(getPatternAnalysisSearchState);\n const infoTooltipTitle = <ChartDataTooltip title={i18n.text('Pattern analysis')} data={[]} />;\n const columnsOptions = [\n {\n id: 'label',\n label: i18n.text('Value'),\n secondLabel: getRowsCounterLabel(chartData),\n width: 0.4,\n cellClassName: styles.monoFontCell\n },\n {\n id: 'value',\n label: i18n.text('Count'),\n width: 0.6\n }\n ];\n return (\n <CustomTableWithBarsChart\n config={config}\n data={chartData}\n title={config.title}\n infoTooltipTitle={infoTooltipTitle}\n onItemClick={searchProfiles}\n state={state}\n onRefresh={reload}\n columnsOptions={columnsOptions}\n />\n );\n};\n\nexport default PatternAnalysisChart;\n","import {curry, keys, mergeAll, omit, pipe} from 'ramda';\nimport React from 'react';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport BarChartOptions from '../../../types/BarChartOptions';\nimport getBarChartSettings from './getBarChartSettings';\nimport {useStyles} from './styles';\n\ntype StackedBarChartData = {\n label: string;\n group: string;\n} & {[index: string]: number | string};\n\ntype Props = {\n data: StackedBarChartData[];\n xAxisLabel?: string;\n yAxisLabel?: string;\n onItemClick?: (key: string) => void;\n getTooltip?: (payload: {active: boolean}) => React.ReactNode;\n getBarOpacity?: (key: string) => number;\n getBarColor: (key: string) => string;\n onBarSelect?: (key: string) => (data: unknown) => void;\n showTopLabel?: boolean;\n width: number;\n height: number;\n options?: BarChartOptions;\n dataReltioId?: string;\n};\n\nconst StackedBarChart = ({\n xAxisLabel,\n yAxisLabel,\n data,\n getTooltip,\n getBarOpacity,\n onBarSelect,\n width,\n height,\n showTopLabel = false,\n options = {},\n onItemClick,\n getBarColor,\n dataReltioId\n}: Props) => {\n const styles = useStyles();\n const {cartesianGrid, xAxis, yAxis, labelForX, labelForY, barChart, bar} = getBarChartSettings(options);\n const onBarClick = curry((key, _) => onItemClick && onItemClick(key));\n const clickable = onItemClick ? styles.clickable : undefined;\n const getBars = (chartData: StackedBarChartData[]) => {\n const uniqueDataKeys = pipe(mergeAll, omit(['label', 'group']), keys)(chartData);\n const getBarLabel = curry((index: number, {x, y, width, value}) =>\n showTopLabel && index === uniqueDataKeys.length - 1 ? (\n <text x={x + width / 2} textAnchor=\"middle\" y={y - 5} fontSize=\"12px\">\n {formatNumberAsMetric(value, 999)}\n </text>\n ) : null\n );\n return uniqueDataKeys.map((key: string, index: number) => (\n <Bar\n stackId={'all'}\n dataKey={key}\n opacity={getBarOpacity ? getBarOpacity(key) : 1}\n fill={getBarColor(key)}\n onMouseOver={onBarSelect(key)}\n onMouseLeave={onBarSelect(null)}\n key={key}\n label={getBarLabel(index)}\n maxBarSize={bar.maxBarSize}\n onClick={onBarClick(key)}\n className={clickable}\n />\n ));\n };\n\n return (\n <div data-reltio-id={dataReltioId}>\n <BarChart width={width} height={height} data={data} {...barChart} margin={{top: 15}}>\n <CartesianGrid {...cartesianGrid} />\n <ChartTooltip content={getTooltip} cursor={null} />\n {getBars(data)}\n <YAxis {...yAxis}>\n <Label {...labelForY} value={yAxisLabel} />\n </YAxis>\n <XAxis {...xAxis}>\n <Label {...labelForX} value={xAxisLabel} />\n </XAxis>\n </BarChart>\n </div>\n );\n};\nexport default StackedBarChart;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n consolidationRateWrapper: {\n display: 'flex'\n },\n ratePercent: {\n fontWeight: 700,\n lineHeight: '20px',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n tableWithSelectedRow: {\n '& .Table__grid__cell_wrapper_EWDDh': {\n opacity: 0.12\n },\n '& .Table__grid__cell_wrapper_EWDDh.hoveredRow': {\n opacity: 1\n }\n },\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\n\nimport {DQChartsData, formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nexport const ConsolidationPercentage = ({data}: {data: DQChartsData}) => {\n const styles = useStyles();\n const {totalCrosswalks, totalEntities} = data.consolidationRate;\n const reltioCleanser = data.consolidationRate.totalCrosswalksBySource['ReltioCleanser'] || 0;\n const percent = ((1 - totalEntities / (totalCrosswalks - reltioCleanser)) * 100).toFixed(1);\n const formattedPercent = percent.split('.')[1] == '0' ? percent.split('.')[0] : i18n.number(Number(percent));\n\n return (\n <>\n <span className={styles.ratePercent}>{formattedPercent}% </span>\n <span>\n {`(${formatNumberAsMetric(totalCrosswalks - reltioCleanser, 999)} ${i18n.text(\n 'to'\n )} ${formatNumberAsMetric(totalEntities, 999)} ${i18n.text('profiles')})`}\n </span>\n </>\n );\n};\n","import React from 'react';\nimport {ContentRenderer} from 'recharts';\nimport {tickFormatter} from '../../../services/barCharts';\nimport {TickProps} from '../../../types/TickProps';\n\nexport const YAxisTickRenderer: ContentRenderer<TickProps> = (tickProps) => {\n const {\n x,\n y,\n payload: {value},\n index\n } = tickProps;\n if (index % 2 === 0)\n return (\n <text fill=\"#000\" x={x} y={y} textAnchor=\"middle\" fontSize=\"12px\">\n {tickFormatter(Number(value))}\n </text>\n );\n return null;\n};\n","import classnames from 'classnames';\nimport {isNil, pick, propEq} from 'ramda';\nimport React, {useCallback, useMemo, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {nanoid} from 'nanoid';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {getSourceColor, getSourceSystemLabel, Metadata} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../../contexts/ChartsDataProvider';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {\n getBarOpacity,\n getConsolidationRateChartData,\n getConsolidationRateSearchState,\n getConsolidationRateTableData\n} from '../../../services/barCharts';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport StackedBarChart from '../CustomBarChart/StackedBarChart';\nimport {ConsolidationPercentage} from './ConsolidationPercentage';\nimport ChartDataTooltip from '../../../components/ChartDataTooltip/ChartDataTooltip';\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport SourceLabelRenderer from '../../../components/SourceLabelRenderer/SourceLabelRenderer';\nimport ChartInfoPanel from '../../../components/ChartInfoPanel/ChartInfoPanel';\nimport {YAxisTickRenderer} from './YAxisTickRenderer';\nimport DQDashboardPopupMenu from '../../../components/DQDashboardPopupMenu/DQDashboardPopupMenu';\n\nimport {useStyles} from './styles';\n\nconst STACKED_BAR_CHART_WIDTH = 256;\nconst CHART_INFO_PANEL_HEIGHT = 34;\n\nconst getBarColor = (key: string) => (key === 'Reltio profiles' ? '#0072CE' : getSourceColor(key));\nconst infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('Consolidation rate')}\n data={[\n {\n value: i18n.text(\n 'Consolidation rate is the measurement of the total number source profiles versus the number of Reltio profiles after removing duplicates.'\n )\n },\n {value: i18n.text('Consolidation rate helps to understand the data reduction achieved by matching.')}\n ]}\n />\n);\n\nconst ConsolidationRateChart = ({config}: ViewProps) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const styles = useStyles();\n const {title} = config;\n const [selectedSource, setSelectedSource] = useState<{rowIndex: number; key: string}>();\n const {data: barChartData, state, reload} = useChartData<ChartData[]>(getConsolidationRateChartData);\n const {data: tableChartData} = useChartData<ChartData[]>(getConsolidationRateTableData(metadata));\n const {\n chartsData: {data: chartsData}\n } = useChartsDataContext();\n const searchProfiles = useSearchRedirect(getConsolidationRateSearchState);\n const sortedBarChartData = useMemo(() => {\n const sortedSourceData = pick(['group', 'label'], barChartData[0]);\n for (let key = tableChartData.length - 1; key >= 0; key--) {\n sortedSourceData[tableChartData[key].group] = barChartData[0][tableChartData[key].group];\n }\n return [sortedSourceData, barChartData[1]];\n }, [tableChartData, barChartData]);\n const getTooltip = useCallback(\n ({active}) => {\n if (!(selectedSource && active)) return '';\n let data = [];\n if (selectedSource?.key === 'Reltio profiles') {\n data = [\n {\n label: i18n.text('Reltio profiles'),\n value: i18n.number(chartsData.consolidationRate.totalEntities)\n }\n ];\n } else {\n data = [\n {\n label: i18n.text('Source system'),\n value: getSourceSystemLabel(metadata, selectedSource.key)\n },\n {\n label: i18n.text('Source profiles'),\n value: i18n.number(chartsData.consolidationRate.totalCrosswalksBySource[selectedSource.key])\n }\n ];\n }\n return (\n <div className={styles.tooltipWrapper}>\n <ChartDataTooltip data={data} />\n </div>\n );\n },\n [selectedSource, chartsData, metadata]\n );\n\n const barSelectHandler = useCallback(\n (key: string) => () => {\n if (key) {\n const rowIndex = tableChartData.findIndex(propEq('group', key));\n setSelectedSource({rowIndex, key});\n } else setSelectedSource(null);\n },\n [setSelectedSource, tableChartData]\n );\n\n const rowSelectHandler = useCallback(\n (rowIndex: number) => {\n if (!isNil(rowIndex)) {\n const key = tableChartData[rowIndex]?.group;\n setSelectedSource({rowIndex, key});\n } else setSelectedSource(null);\n },\n [setSelectedSource, tableChartData]\n );\n\n const rowClickHandler = (rowIndex: number) => {\n if (!isNil(rowIndex)) {\n const key = tableChartData[rowIndex]?.group;\n searchProfiles(key);\n }\n };\n\n const columnsOptions: ColumnsOptions[] = [\n {\n id: 'label',\n label: i18n.text('Source system'),\n secondLabel: `(${i18n.number(tableChartData.length)})`,\n resizable: false,\n labelRenderer: SourceLabelRenderer,\n width: 0.3\n },\n {\n id: 'value',\n resizable: false,\n label: i18n.text('Source profiles'),\n width: 0.7\n }\n ];\n const {showExportButton} = usePermissionsContext();\n const isExportAvailable = useMemo(\n () => showExportButton && state === RequestStates.LOADED && tableChartData.length > 0,\n [state, tableChartData]\n );\n const exportLoadingId = useMemo(() => nanoid(), []);\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {isExportAvailable && <DQDashboardPopupMenu config={config} exportLoadingId={exportLoadingId} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={tableChartData} loadingState={state} onRefresh={reload}>\n {({height = 0, width = 0}) => {\n const chartHeight = chartsData.consolidationRate ? height - CHART_INFO_PANEL_HEIGHT : height;\n return (\n <>\n {chartsData.consolidationRate && (\n <ChartInfoPanel\n label={`${i18n.text('Consolidation rate')}:`}\n info={<ConsolidationPercentage data={chartsData} />}\n />\n )}\n <div\n className={classnames(styles.consolidationRateWrapper, {\n [styles.tableWithSelectedRow]:\n !isNil(selectedSource?.rowIndex) && selectedSource?.rowIndex !== -1\n })}\n >\n <StackedBarChart\n yAxisLabel={i18n.text('No. of profiles')}\n data={sortedBarChartData}\n getTooltip={getTooltip}\n getBarOpacity={getBarOpacity(selectedSource)}\n getBarColor={getBarColor}\n onBarSelect={barSelectHandler}\n width={STACKED_BAR_CHART_WIDTH}\n height={chartHeight}\n options={{\n showCategories: true,\n maxBarSize: 40,\n yTickRenderer: YAxisTickRenderer,\n tickCount: 8\n }}\n onItemClick={searchProfiles}\n dataReltioId=\"reltio-dq-dashboard-consolidation-rate-barchart\"\n showTopLabel\n />\n <TableWithBars\n {...{\n data: tableChartData,\n width: width - STACKED_BAR_CHART_WIDTH,\n height: chartHeight,\n columnsOptions: columnsOptions,\n sorting: {\n field: 'value',\n order: 'desc'\n },\n onRowClick: rowClickHandler,\n onRowHover: rowSelectHandler,\n hoverRowIndex: selectedSource?.rowIndex,\n hoverStateEnabled: true,\n dataReltioId: 'reltio-dq-dashboard-consolidation-rate-tablechart'\n }}\n />\n </div>\n </>\n );\n }}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\nexport default ConsolidationRateChart;\n","import {any, map, pipe} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {ChartData} from '@reltio/components';\nimport {\n FilterOptions,\n getChartItemColor,\n isRDMLookupAttrType,\n Metadata,\n TEntityType,\n getAttributeTypesTree\n} from '@reltio/mdm-sdk';\n\nimport {getSearchState, localizeChartValues} from './charts';\nimport {DetailedAttributeType} from '../types/DetailedAttributeType';\n\nexport enum RDMTranscodeStatus {\n RESOLVED = 'resolved',\n UNRESOLVED = 'unresolved'\n}\n\nconst RDMChartColors = {\n [RDMTranscodeStatus.RESOLVED]: '#7F22FD',\n [RDMTranscodeStatus.UNRESOLVED]: '#F085F2'\n};\n\nexport const getRDMChartColors: (chartsData: ChartData[]) => string[] = map(\n ({group}) => RDMChartColors[group] || getChartItemColor(group)\n);\n\nexport const formatRDMTranscodeData = ([resolveCount, unresolveCount]: Record<'total', number>[]): ChartData[] => {\n return localizeChartValues([\n {\n value: resolveCount.total,\n label: i18n.text('Mapped values'),\n group: RDMTranscodeStatus.RESOLVED,\n dataReltioId: 'reltio-dq-dashboard-transcode-mapped'\n },\n {\n value: unresolveCount.total,\n label: i18n.text('Unmapped values'),\n group: RDMTranscodeStatus.UNRESOLVED,\n dataReltioId: 'reltio-dq-dashboard-transcode-unmapped'\n }\n ]);\n};\n\nexport const getRDMTranscodeFilter = (rdmTranscodeStatus: RDMTranscodeStatus) => [\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'rdmLookups.resolved',\n values: [rdmTranscodeStatus !== RDMTranscodeStatus.RESOLVED]\n }\n];\n\nexport const getRDMTranscodeSearchState = getSearchState(() => getRDMTranscodeFilter);\n\nexport const checkEntityTypeHasRDMLookup = (metadata: Metadata, entityType: TEntityType) => {\n const isAttrTreeHasRDMLookup = (item: DetailedAttributeType) => {\n return isRDMLookupAttrType(item) || item.children?.some(isAttrTreeHasRDMLookup);\n };\n return pipe(getAttributeTypesTree, any(isAttrTreeHasRDMLookup))(metadata, entityType);\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n legendWrapper: {\n marginTop: '-13px'\n },\n bar: {\n height: '16px'\n }\n});\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\n\nimport {useRDMChartDataRequest} from '../../../hooks/useRDMChartDataRequest';\nimport {useSearchRedirect} from '../../../hooks/useSearchRedirect';\nimport {getRDMTranscodeSearchState} from '../../../services/rdmTranscode';\nimport {getRDMChartColors} from '../../../services/rdmTranscode';\nimport {ViewProps} from '../../../types/ViewProps';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport StackedHorizontalBarChart from '../../StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nimport {useStyles} from './styles';\n\nconst RDMTranscodeChart = ({config}: ViewProps) => {\n const searchProfiles = useSearchRedirect(getRDMTranscodeSearchState);\n const {data, state, reload} = useRDMChartDataRequest();\n const colors = getRDMChartColors(data);\n const styles = useStyles();\n\n const infoTooltipTitle = (\n <ChartDataTooltip\n title={i18n.text('RDM value mapping status')}\n data={[\n {\n value: i18n.text(\n 'The relative number and percentage of reference data values that have been mapped to canonical values and transcoded for use by Reltio Reference Data Management.'\n )\n },\n {\n label: `${i18n.text('Mapped values')}:`,\n value: i18n.text('Values that have been mapped and transcoded')\n },\n {\n label: `${i18n.text('Unmapped values')}:`,\n value: i18n.text('Values that have not been mapped and transcoded')\n }\n ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n return (\n <StackedHorizontalBarChart\n data={data}\n colors={colors}\n onItemClick={searchProfiles}\n classes={{bar: styles.bar, legendWrapper: styles.legendWrapper}}\n config={config}\n onRefresh={reload}\n state={state}\n infoTooltipTitle={infoTooltipTitle}\n />\n );\n};\n\nexport default RDMTranscodeChart;\n","import {useCallback, useEffect, useState} from 'react';\n\nimport {ChartData, RequestStates, useSafePromise} from '@reltio/components';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {formatRDMTranscodeData} from '../services/rdmTranscode';\n\nexport const useRDMChartDataRequest = () => {\n const {entityType} = useDQDashboardState();\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [data, setData] = useState<ChartData[]>([]);\n const safePromise = useSafePromise();\n\n const getRDMData = useCallback(\n (isRDMLoolupResolve: boolean) => {\n return getTotals([\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'type',\n values: [entityType.uri]\n },\n {\n filter: FilterOptions.EQUALS,\n fieldName: 'rdmLookups.resolved',\n values: [isRDMLoolupResolve]\n }\n ]);\n },\n [entityType]\n );\n\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setData([]);\n };\n\n const onRequestFinished = (data: ChartData[]) => {\n setData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n const loadRDMChartData = useCallback(() => {\n setRequestState(RequestStates.LOADING);\n setData([]);\n return safePromise(Promise.all([getRDMData(true), getRDMData(false)]))\n .then(formatRDMTranscodeData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [getRDMData]);\n\n useEffect(() => {\n loadRDMChartData();\n }, [loadRDMChartData]);\n\n return {data: data, state: requestState, reload: loadRDMChartData};\n};\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewType} from '../constants/ViewType';\n\nimport FillRateChart from './charts/FillRateChart';\nimport UniquenessAnalysisChart from './charts/UniquenessAnalysisChart';\nimport Summary from './Summary/Summary';\nimport DQDashboardErrorView from './DQDashboardErrorView/DQDashboardErrorView';\nimport ViolatedValidationFuncChart from './charts/ViolatedValidationFuncChart';\nimport FrequencyAnalysisChart from './charts/FrequencyAnalysisChart';\nimport LengthStatisticsChart from './charts/LengthStatisticsChart';\nimport CrosswalkAnalysisChart from './charts/CrosswalkAnalysisChart/CrosswalkAnalysisChart';\nimport ValueDistributionChart from './charts/ValueDistributionChart';\nimport MonthDistributionChart from './charts/MonthDistributionChart';\nimport DayOfWeekDistributionChart from './charts/DayOfWeekDistributionChart';\nimport DayOfMonthDistributionChart from './charts/DayOfMonthDistributionChart';\nimport PatternAnalysisChart from './charts/PatternAnalysisChart';\nimport ConsolidationRateChart from './charts/ConsolidationRateChart/ConsolidationRateChart';\nimport RDMTranscodeChart from './charts/RDMTranscodeChart/RDMTranscodeChart';\n\nclass ViewsFactory {\n static getComponent = ({type, config, isFullscreen, onToggleFullscreen}) => {\n const props = {\n config,\n isFullscreen,\n onToggleFullscreen\n };\n switch (type) {\n case ViewType.FILL_RATE:\n return <FillRateChart {...props} />;\n case ViewType.UNIQUENESS:\n return <UniquenessAnalysisChart {...props} />;\n case ViewType.SUMMARY:\n return <Summary {...props} />;\n case ViewType.DATA_VALIDATION:\n return <ViolatedValidationFuncChart {...props} />;\n case ViewType.FREQUENCY:\n return <FrequencyAnalysisChart {...props} />;\n case ViewType.LENGTH_STATISTIC:\n return <LengthStatisticsChart {...props} />;\n case ViewType.CROSSWALK_ANALYSIS:\n return <CrosswalkAnalysisChart {...props} />;\n case ViewType.VALUE_DISTRIBUTION:\n return <ValueDistributionChart {...props} />;\n case ViewType.MONTH_DISTRIBUTION:\n return <MonthDistributionChart {...props} />;\n case ViewType.DAY_OF_WEEK_DISTRIBUTION:\n return <DayOfWeekDistributionChart {...props} />;\n case ViewType.DAY_OF_MONTH_DISTRIBUTION:\n return <DayOfMonthDistributionChart {...props} />;\n case ViewType.PATTERN:\n return <PatternAnalysisChart {...props} />;\n case ViewType.CONSOLIDATION_RATE:\n return <ConsolidationRateChart {...props} />;\n case ViewType.RDM_TRANSCODE:\n return <RDMTranscodeChart {...props} />;\n default:\n return (\n <DQDashboardErrorView\n {...props}\n errorData={{message: i18n.text(\"Chart isn't supported for this data type\")}}\n />\n );\n }\n };\n}\n\nexport default ViewsFactory;\n","import React from 'react';\nimport ViewsFactory from '../../views/ViewsFactory';\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {ReactGridLayoutItem} from '@reltio/components';\n\ntype Props = {\n className?: string;\n isFullscreen: boolean;\n style: React.CSSProperties;\n views: DQDashboardView[];\n onToggleFullscreen: (id: string) => void;\n layoutItemConfig: ReactGridLayoutItem;\n children: React.ReactNode;\n};\n\nexport const DQDashboardLayoutItem = ({\n layoutItemConfig,\n views,\n onToggleFullscreen,\n isFullscreen,\n className,\n children: ResizeComponent,\n style\n}: Props) => {\n const config = views.find(({id}) => layoutItemConfig.i === id);\n\n if (!config) {\n return null;\n }\n const {type} = config;\n\n return (\n <div style={style} className={className}>\n {ViewsFactory.getComponent({\n type,\n config,\n onToggleFullscreen,\n isFullscreen\n })}\n {ResizeComponent}\n </div>\n );\n};\n","import {assoc, map} from 'ramda';\nimport React, {memo, useMemo} from 'react';\n\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReltioGridLayout, ReltioGridLayoutOptions} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DQDashboardLayoutItem} from '../DQDashboardLayoutItem/DQDashboardLayoutItem';\n\nexport type DQDashboardLayoutProps = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n layoutOptions?: ReltioGridLayoutOptions;\n};\n\nconst reltioGridLayoutToStaticLayout = map(assoc('isStatic', true));\nconst DEFAULT_LAYOUT_OPTIONS = {\n cols: 6,\n rowHeight: 10,\n margin: [12, 12] as [number, number]\n};\n\nconst DQDashboardLayout = ({views, layout, layoutOptions = DEFAULT_LAYOUT_OPTIONS}: DQDashboardLayoutProps) => {\n const staticLayout = useMemo(() => reltioGridLayoutToStaticLayout(layout), [layout]);\n return (\n <ReltioGridLayout\n LayoutItem={DQDashboardLayoutItem}\n views={views}\n layout={staticLayout}\n layoutOptions={layoutOptions}\n />\n );\n};\n\nexport default memo(DQDashboardLayout);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n warning: {\n fontSize: '13px',\n color: 'rgba(0, 0, 0, 0.54)',\n height: '47px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n margin: '14px 11px 0 12px',\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '18px',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n errorIcon: {\n color: 'rgba(0, 0, 0, 0.54)',\n marginRight: '14px'\n }\n});\n","import React from 'react';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport {useStyles} from './styles';\n\nconst Warning = ({text}) => {\n const styles = useStyles();\n return (\n text && (\n <div className={styles.warning} data-reltio-id=\"dq-warning\">\n <ErrorIcon className={styles.errorIcon} />\n {text}\n </div>\n )\n );\n};\n\nexport default Warning;\n","import {CSSProperties} from 'react';\nimport {makeStyles} from '@mui/styles';\n\nconst scrollTopShadow: CSSProperties = {\n position: 'absolute',\n content: '\"\"',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1\n};\n\nexport const useStyles = makeStyles(() => ({\n perspectiveView: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflowX: 'hidden',\n overflowY: 'auto',\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\n display: 'flex',\n flexDirection: 'column',\n background: '#EEEEEE'\n },\n content: {\n height: 'calc(100% - 56px)',\n position: 'relative'\n },\n attributeLevelWrapper: {\n verticalAlign: 'top',\n width: 'auto',\n height: '100%',\n flexGrow: 1,\n position: 'relative',\n marginTop: '-12px',\n '&:before': {\n ...scrollTopShadow,\n top: '8px',\n height: '4px',\n background: 'linear-gradient(180deg, #EEEEEE 0%, rgba(238, 238, 238, 0) 100%)',\n zIndex: 1\n },\n '&:after': {\n ...scrollTopShadow,\n height: '8px',\n background: '#EEEEEE'\n }\n },\n navigationWrapper: {\n display: 'flex',\n padding: '18px 14px 18px 18px',\n alignItems: 'center',\n gap: '16px'\n },\n headerRightSide: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row-reverse',\n alignItems: 'center'\n },\n periodSelector: {\n position: 'relative',\n margin: '0 8px 0 16px',\n height: '30px',\n borderRadius: '6px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n flexBasis: '196px',\n overflow: 'hidden'\n },\n paper: {\n boxShadow:\n '0px 12px 17px 2px rgba(0, 0, 102, 0.06), 0px 5px 32px 4px rgba(0, 0, 102, 0.06), 0px 7px 8px -4px rgba(0, 0, 204, 0.1)',\n '& ul>div': {\n minWidth: '300px'\n }\n },\n input: {\n fontSize: '13px',\n height: '100%',\n padding: '1px 0 0 16px'\n },\n inputRoot: {\n backgroundColor: 'transparent',\n paddingRight: 4,\n height: '100%'\n },\n dropdownIndicator: {\n width: '18px',\n height: '18px',\n '& svg': {\n width: '18px',\n height: '18px'\n }\n },\n layoutRoot: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n}));\n","import React, {useEffect, useMemo} from 'react';\nimport {equals, pipe, reject} from 'ramda';\n\nimport {DQDataLevel, DQMetric, ReltioGridLayoutItem, TEntityType} from '@reltio/mdm-sdk';\nimport i18n from 'ui-i18n';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {useDQDashboardState} from '../../contexts/DQDashboardStateContext';\nimport {useReloadFacet} from '../../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {getLayoutByAttributeType, getMetricsFromViews, getAttributeLevelViews} from '../../services/charts';\nimport {isReferenceChild} from '../../services/attributeDetails';\nimport {useChartsDataRequest} from '../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../DQDashboardLayout/DQDashboardLayout';\nimport Warning from '../Warning/Warning';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n entityType?: TEntityType;\n};\n\nconst AttributeLevelLayout = ({config, entityType}: Props) => {\n const styles = useStyles();\n const {detailedAttributeType, searchByOv} = useDQDashboardState();\n const {hasRestrictions, isTimeSeriesAvailable} = usePermissionsContext();\n const customAttributeLayouts = config.layoutsByDataLevel?.[DQDataLevel.ATTRIBUTE_TYPE];\n const layout = useMemo(\n (): ReltioGridLayoutItem[] =>\n getLayoutByAttributeType(\n customAttributeLayouts,\n detailedAttributeType?.type,\n isTimeSeriesAvailable && !searchByOv\n ),\n [detailedAttributeType?.type, customAttributeLayouts, searchByOv]\n );\n\n const views = useMemo(\n () => getAttributeLevelViews(config.viewsByDataLevel, detailedAttributeType?.type, layout),\n [config.viewsByDataLevel, detailedAttributeType?.type, layout]\n );\n\n const attributeLevelMetrics = useMemo(\n () =>\n pipe(getMetricsFromViews, (metrics: DQMetric[]) =>\n isReferenceChild(detailedAttributeType) ? reject(equals(DQMetric.DATA_VALIDATION))(metrics) : metrics\n )(views),\n [views, detailedAttributeType]\n );\n\n const chartsData = useChartsDataRequest({\n entityType,\n detailedAttributeType,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: attributeLevelMetrics\n });\n const {changeChartsData} = useChartsDataContext();\n useEffect(() => changeChartsData(chartsData), [chartsData]);\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\n return (\n <DataLevelContext.Provider value={DQDataLevel.ATTRIBUTE_TYPE}>\n <div className={styles.layoutRoot}>\n {hasRestrictions && (\n <Warning\n text={i18n.text(\n 'Not seeing the data you expected for this attribute? Contact your tenant admin to verify permissions.'\n )}\n />\n )}\n <DQDashboardLayout views={views} layout={layout} />\n </div>\n </DataLevelContext.Provider>\n );\n};\n\nexport default AttributeLevelLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n breadcrumb: {\n fontSize: '16px',\n color: theme.palette.text.primary\n },\n active: {\n color: 'rgba(0, 0, 102, 1)'\n },\n clickable: {\n cursor: 'pointer'\n }\n}));\n","import React from 'react';\nimport Breadcrumbs from '@mui/material/Breadcrumbs';\nimport classnames from 'classnames';\nimport NavigateNextIcon from '@mui/icons-material/NavigateNext';\nimport Typography from '@mui/material/Typography';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dataLevel: DQDataLevel;\n onChange: (dataLevel: DQDataLevel) => void;\n};\nconst DataLevelBreadcrumbs = ({dataLevel, onChange}: Props) => {\n const styles = useStyles();\n const {detailedAttributeType} = useDQDashboardState();\n const {setDetailedAttributeType} = useDQDashboardStateActions();\n const handleChangeDataLevel = (dataLevel: DQDataLevel) => () => {\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n setDetailedAttributeType(null);\n }\n onChange(dataLevel);\n };\n\n return (\n <Breadcrumbs separator={<NavigateNextIcon fontSize=\"small\" />} aria-label=\"breadcrumb\">\n {[\n <Typography\n key={DQDataLevel.ENTITY_TYPE}\n className={classnames(styles.breadcrumb, {\n [styles.active]: dataLevel === DQDataLevel.ENTITY_TYPE,\n [styles.clickable]: dataLevel === DQDataLevel.ATTRIBUTE_TYPE\n })}\n onClick={handleChangeDataLevel(DQDataLevel.ENTITY_TYPE)}\n data-reltio-id=\"reltio-dq-dashboard-breadcrumb-entity-level\"\n >\n {i18n.text('Entity overview')}\n </Typography>\n ].concat(\n dataLevel === DQDataLevel.ATTRIBUTE_TYPE ? (\n <Typography\n key={DQDataLevel.ATTRIBUTE_TYPE}\n className={classnames(styles.breadcrumb, styles.active)}\n data-reltio-id=\"reltio-dq-dashboard-breadcrumb-attribute-level\"\n >\n {detailedAttributeType?.label}\n </Typography>\n ) : (\n []\n )\n )}\n </Breadcrumbs>\n );\n};\n\nexport default DataLevelBreadcrumbs;\n","import {find, map, pipe, pluck, propOr, propEq, sum, without} from 'ramda';\n\nexport type PageSettings = {\n index: number;\n width?: number;\n}[];\n\nexport const calculatePagePartsWidth = ({pages, width: allWidth}: {pages: PageSettings[]; width: number}) => {\n return pages.reduce((acc: PageSettings[], pagesettings: PageSettings) => {\n const fixedWidth = pagesettings.reduce((width, pagePart) => {\n return width + (pagePart?.width || 0);\n }, 0);\n\n acc.push(\n pagesettings.map(({width: partWidth, index}) =>\n partWidth\n ? {\n index,\n width: partWidth\n }\n : {\n index,\n width: allWidth - fixedWidth\n }\n )\n );\n return acc;\n }, []);\n};\n\nconst getPagePartWidth = (pagePartIndex: number) => pipe(find(propEq('index', pagePartIndex)), propOr(0, 'width'));\n\nexport const getPageIndexes = pluck('index');\n\nexport const getPagePartStyleWidth = ({\n pagesSettings,\n page,\n pagePartIndex\n}: {\n pagePartIndex: number;\n page: number;\n pagesSettings: PageSettings[];\n}) => {\n const pageIndexes = getPageIndexes(pagesSettings[page]);\n const minCurrentIndex = Math.min(...pageIndexes);\n const maxCurrentIndex = Math.max(...pageIndexes);\n\n if (pagePartIndex < minCurrentIndex || pagePartIndex > maxCurrentIndex) {\n return pipe(\n find((pageSettings, indexPage) => indexPage !== page),\n getPagePartWidth(pagePartIndex)\n )(pagesSettings);\n } else return getPagePartWidth(pagePartIndex)(pagesSettings[page]);\n};\n\nexport const getLeftPageOffset = ({page, pagesSettings}: {page: number; pagesSettings: PageSettings[]}) => {\n const pageIndexes = getPageIndexes(pagesSettings[page]);\n const prevPageIndexes = page === 0 ? [] : getPageIndexes(pagesSettings[page - 1]);\n const leftPagesIndexes = without(pageIndexes, prevPageIndexes);\n\n return page === 0\n ? 0\n : -pipe(\n map((pagePartIndex) => getPagePartWidth(pagePartIndex)(pagesSettings[page - 1])),\n sum\n )(leftPagesIndexes);\n};\n","import {makeStyles} from '@mui/styles';\n\ntype StyleProps = {\n transitionTime: number;\n pagesCount: number;\n};\n\nexport const useStyles = makeStyles(() => ({\n root: ({transitionTime}: StyleProps) => ({\n transition: `left ${transitionTime}s ease 0s`,\n height: '100%',\n width: '100%',\n position: 'absolute'\n }),\n pagesWrapper: ({pagesCount}: StyleProps) => ({\n display: 'flex',\n height: '100%',\n width: `${100 * pagesCount}%`\n }),\n page: {\n display: 'flex'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {\n PageSettings,\n calculatePagePartsWidth,\n getPagePartStyleWidth,\n getLeftPageOffset,\n getPageIndexes\n} from './helpers';\n\nimport {useStyles} from './styles';\n\nconst TRANSITION_TIMEOUT_MS = 300;\n\nexport type ContentSliderProps = {\n page: number;\n pages: PageSettings[];\n children?: React.ReactNodeArray;\n startSliding?: () => void;\n endSliding?: () => void;\n};\n\nconst ContentSlider = ({page, children, pages, startSliding, endSliding}: ContentSliderProps) => {\n const styles = useStyles({\n transitionTime: TRANSITION_TIMEOUT_MS / 1000,\n pagesCount: pages.length\n });\n\n const [savedPage, setSavedPage] = useState(0);\n useEffect(() => {\n startSliding && startSliding();\n setTimeout(() => {\n setSavedPage(page);\n endSliding && endSliding();\n }, TRANSITION_TIMEOUT_MS);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [page]);\n\n const currentPageIndexes = getPageIndexes(pages[page]);\n\n return (\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleWidth>\n {({width = 250}: {width: number}) => {\n const pagesSettings = calculatePagePartsWidth({pages, width});\n const left = getLeftPageOffset({page, pagesSettings});\n\n return (\n <div className={styles.root} style={{left}}>\n <div className={styles.pagesWrapper}>\n {children.map((component, index) => {\n const showComponent = page !== savedPage || currentPageIndexes.includes(index);\n const styleWidth = getPagePartStyleWidth({\n pagesSettings,\n page: page,\n pagePartIndex: index\n });\n\n return (\n <section className={styles.page} style={{width: styleWidth}} key={index}>\n {showComponent && component}\n </section>\n );\n })}\n </div>\n </div>\n );\n }}\n </ReactResizeDetector>\n );\n};\n\nexport default ContentSlider;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n width: '100%',\n height: '100%',\n verticalAlign: 'top',\n position: 'relative',\n boxSizing: 'border-box'\n },\n entityLevelBar: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: '16px',\n width: '28px',\n background: 'linear-gradient(0deg, rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)), #FFFFFF',\n boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.14), 0px 2px 1px rgba(0, 0, 0, 0.12), 0px 1px 3px rgba(0, 0, 0, 0.2)',\n color: theme.palette.text.secondary,\n fontWeight: 500,\n fontSize: '14px',\n writingMode: 'vertical-rl',\n textTransform: 'uppercase',\n cursor: 'pointer',\n padding: '52px 0',\n marginBottom: '8px',\n lineHeight: '28px'\n },\n expandButton: {\n position: 'absolute',\n top: '15px',\n left: '6px',\n writingMode: 'initial',\n textTransform: 'none',\n maxWidth: '24px',\n height: '24px',\n borderRadius: '12px',\n background: '#fff',\n boxShadow: '0px 2px 2px rgba(0, 0, 0, 0.14), 0px 3px 1px rgba(0, 0, 0, 0.12), 0px 1px 5px rgba(0, 0, 0, 0.2)',\n transition: 'max-width 0.3s linear',\n zIndex: 2,\n overflow: 'hidden',\n display: 'flex',\n lineHeight: '28px',\n '&:hover': {\n maxWidth: '500px'\n }\n },\n expandButtonText: {\n paddingRight: '8px',\n fontSize: '12px',\n lineHeight: '24px',\n whiteSpace: 'nowrap'\n }\n}));\n","import React from 'react';\nimport RightArrowIcon from '@mui/icons-material/ChevronRight';\n\nimport i18n from 'ui-i18n';\nimport {getLabel, TEntityType} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n showEntityLevel: () => void;\n entityType: TEntityType;\n};\n\nconst DataLevelSwitcher = ({showEntityLevel, entityType}: Props) => {\n const styles = useStyles();\n\n const expandButtonTitle = `${i18n.text('Entity')}: ${getLabel(entityType.label)} ${i18n.text('overview')}`;\n return (\n <div className={styles.root} onClick={showEntityLevel}>\n <div className={styles.entityLevelBar} data-reltio-id=\"reltio-dq-dashboard-entity-level-bar-button\">\n <div className={styles.expandButton}>\n <RightArrowIcon />\n <span className={styles.expandButtonText}>{expandButtonTitle}</span>\n </div>\n {i18n.text('Entity')}\n </div>\n </div>\n );\n};\n\nexport default DataLevelSwitcher;\n","import {useState, useEffect, useMemo, useContext} from 'react';\nimport {useSelector} from 'react-redux';\nimport {evolve} from 'ramda';\nimport {TEntityType, Metadata, getEntityTypeMatchAttributes} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {getAttrTypeDetails} from '../services/attributeDetails';\nimport {AttributeItemType, DetailedAttributeType} from '../types/DetailedAttributeType';\nimport {collectFilteredAttributeItems} from '../services/attributeDetails';\nimport {DVFContext} from '../contexts/DVFContext';\n\nexport const useAttrTypeDetails = (entityType: TEntityType, filterText: string) => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attrTypeItems = useMemo(\n () => collectFilteredAttributeItems(filterText)(metadata, entityType),\n [metadata, entityType, filterText]\n );\n const [itemsWithDetails, setItemsWithDetails] = useState<AttributeItemType[]>([]);\n\n const entityTypeUri = entityType.uri;\n const matchAttributes = useMemo(\n () => getEntityTypeMatchAttributes(metadata, entityTypeUri),\n [metadata, entityTypeUri]\n );\n const dvf = useContext(DVFContext)?.dvfs?.data;\n useEffect(() => {\n setItemsWithDetails([]);\n dvf &&\n setItemsWithDetails(\n attrTypeItems.map(\n evolve({\n attributeItem: (attrTypeItem: DetailedAttributeType) => ({\n ...attrTypeItem,\n details: getAttrTypeDetails({attrTypeItem, dvf, matchAttributes}),\n ...(attrTypeItem.children && {\n children: attrTypeItem.children.map((child) => {\n child.details = getAttrTypeDetails({attrTypeItem: child, dvf, matchAttributes});\n child.details.reference = attrTypeItem.isAttributeReference;\n return child;\n })\n })\n })\n })\n )\n );\n }, [attrTypeItems, matchAttributes, dvf]);\n\n return itemsWithDetails;\n};\n","import {isComplexAttribute, isImage} from '@reltio/mdm-sdk';\nimport {\n __,\n assoc,\n both,\n curry,\n either,\n filter,\n find,\n findIndex,\n head,\n identity,\n includes,\n map,\n not,\n pipe,\n pluck,\n prop,\n propEq,\n propOr\n} from 'ramda';\nimport {ChartData} from '@reltio/components';\nimport {DetailedAttributeType, AttributeItemType, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {\n filterAttributeByNotEmpty,\n filterAttributeByDetails,\n filterAttributeTreeByDetails\n} from '../../services/attributeFilters';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\nimport {getDetailLabel} from '../../services/attributeDetails';\nimport i18n from 'ui-i18n';\n\nconst getAttrTypeFromItem = propOr({}, 'attributeItem');\ntype GetFirstSimpleDetailedAttrTypeFn = (items: AttributeItemType[]) => DetailedAttributeType;\nexport const getFirstSimpleDetailedAttrType: GetFirstSimpleDetailedAttrTypeFn = pipe(\n find(pipe(getAttrTypeFromItem, either(isComplexAttribute, isImage), not)),\n getAttrTypeFromItem\n);\n\nconst filterDetailedAttrTypeByFieldName = (fieldName: string) =>\n pipe(getAttrTypeFromItem, propEq('fieldName', fieldName));\n\ntype GetDetailedAttrTypeByFieldNameFn = (items: AttributeItemType[], uri: string) => DetailedAttributeType;\nexport const getDetailedAttrTypeByFieldName: GetDetailedAttrTypeByFieldNameFn = (items, fieldName) =>\n pipe(find(filterDetailedAttrTypeByFieldName(fieldName)), propOr(null, 'attributeItem'))(items);\n\nexport const getIndexByFieldName = (items: AttributeItemType[], fieldName: string): number =>\n findIndex(filterDetailedAttrTypeByFieldName(fieldName))(items);\n\nexport const getFillRateByAttributeType = (\n fillRates: Record<string, ChartData[]>,\n attributeType: DetailedAttributeType\n) => fillRates[attributeType.fieldName];\n\nexport const rejectCollapsedItemsChildren = (\n items: AttributeItemType[],\n collapsedFieldNames: string[]\n): AttributeItemType[] =>\n items.filter(\n ({attributeItem}) =>\n !collapsedFieldNames.some(\n (collapsedFieldName) =>\n attributeItem.fieldName.startsWith(collapsedFieldName) &&\n attributeItem.fieldName !== collapsedFieldName\n )\n );\n\nconst getFilterOptionsByGroup = (group: string) => filter(propEq('group', group));\n\nconst getDetailsOptionCount = (items: AttributeItemType[], option: FilterOption) =>\n items.filter((item) => filterAttributeByDetails([option], item.attributeItem)).length;\n\nexport enum EmptinessFilterValue {\n SHOW_EMPTY = 'showEmpty'\n}\n\nexport const noDataFilterOptions = [\n {\n label: i18n.text('Show attributes with no data'),\n value: EmptinessFilterValue.SHOW_EMPTY,\n group: 'emptiness'\n }\n];\n\nexport const getNoDataOptions = (): FilterOptionsGroup => {\n return {\n label: '',\n options: noDataFilterOptions\n };\n};\n\nexport const getDetailsOptions = (items: AttributeItemType[]): FilterOptionsGroup => {\n const options = Object.values(AttrTypeDetailsType)\n .map((value) => ({\n value,\n label: getDetailLabel(value),\n group: 'details'\n }))\n .map((option) => assoc('count', getDetailsOptionCount(items, option), option));\n\n return {\n label: i18n.text('Attribute properties'),\n options\n };\n};\n\nexport const filterItemsByEmptiness = curry(\n (options: FilterOption[], fillRates: Record<string, ChartData[]>, items: AttributeItemType[]) => {\n const firstEmptinessOption = head(getFilterOptionsByGroup('emptiness')(options));\n switch (firstEmptinessOption?.value) {\n case EmptinessFilterValue.SHOW_EMPTY:\n return items;\n default:\n return items.filter(pipe(getAttrTypeFromItem, filterAttributeByNotEmpty(fillRates)));\n }\n }\n);\n\nconst filterValidDetailsOptions = (options: FilterOption[]) => {\n const validOptionValues = Object.values(AttrTypeDetailsType);\n return options.filter(pipe(prop('value'), includes(__, validOptionValues)));\n};\nconst getFieldNameFromItem: (item: AttributeItemType) => string = pipe(getAttrTypeFromItem, prop('fieldName'));\nconst getFilteredNestedFieldNames = (options: FilterOption[]): ((items: AttributeItemType[]) => string[]) =>\n pipe(\n filter(pipe(getAttrTypeFromItem, both(prop('children'), filterAttributeByDetails(options)))),\n map(getFieldNameFromItem)\n );\n\nexport const filterItemsByDetails = curry((options: FilterOption[], items: AttributeItemType[]) => {\n const detailsOptions = pipe(getFilterOptionsByGroup('details'), filterValidDetailsOptions)(options);\n const filteredNestedFieldNames = getFilteredNestedFieldNames(detailsOptions)(items);\n return items.filter(\n ({attributeItem}) =>\n filteredNestedFieldNames.some((fieldName) => attributeItem.fieldName.startsWith(fieldName)) ||\n filterAttributeTreeByDetails(detailsOptions, attributeItem)\n );\n});\n\nexport const getAtrributeFieldNames: (items: AttributeItemType[]) => string[] = pipe(\n map(getAttrTypeFromItem),\n pluck('fieldName'),\n identity\n);\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n paddingRight: '12px',\n paddingLeft: '20px',\n display: 'flex',\n flexDirection: 'row-reverse'\n },\n detailIcon: {\n marginLeft: '-5px',\n borderRadius: '50%',\n padding: '2px',\n width: '26px',\n height: '26px',\n boxSizing: 'border-box'\n },\n activeIcon: {\n background: 'white'\n }\n});\n","import React from 'react';\nimport {prop} from 'ramda';\nimport classnames from 'classnames';\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconSizes,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport Tooltip from '@mui/material/Tooltip';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {getDetailLabel, checkIsDataQualitativeForAttributeList} from '../../services/attributeDetails';\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {useStyles} from './styles';\n\ntype Props = {\n fillRateData?: ChartData[];\n fillRateState?: RequestStates;\n details: AttrTypeDetails;\n classes?: {\n iconRoot: string;\n iconsWrapper: string;\n };\n};\n\nconst AttributeTypeDetailsIcons = ({details, classes, fillRateData, fillRateState}: Props) => {\n const styles = useStyles();\n const iconRoot = prop('iconRoot', classes);\n const iconsWrapper = prop('iconsWrapper', classes);\n\n return (\n <div className={classnames(styles.root, iconsWrapper)}>\n {Object.entries(details || {})\n .reverse()\n .map(([detailType, value]) => {\n let iconVariant = AttributeTypeDetailIconVariant.NORMAL;\n if (detailType === AttrTypeDetailsType.REQUIRED) {\n const isDataLoading = fillRateState === RequestStates.LOADING;\n const isDataQualitative = checkIsDataQualitativeForAttributeList(fillRateData);\n if (isDataLoading) {\n iconVariant = AttributeTypeDetailIconVariant.LOADING;\n }\n if (!isDataLoading && !isDataQualitative) {\n iconVariant = AttributeTypeDetailIconVariant.BAD_QUALITY;\n }\n }\n return (\n <div\n key={detailType}\n className={classnames(value && (iconRoot || styles.activeIcon), styles.detailIcon)}\n >\n {value && (\n <Tooltip title={getDetailLabel(detailType)}>\n <span>\n <AttributeTypeDetailIcon\n detailType={detailType as AttrTypeDetailsType}\n variant={iconVariant}\n size={AttributeTypeDetailIconSizes.SMALL}\n />\n </span>\n </Tooltip>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default AttributeTypeDetailsIcons;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n bar: {\n width: '100%',\n display: 'flex',\n flexWrap: 'nowrap'\n },\n barPart: {\n height: '8px',\n flexGrow: 1\n },\n fillRateSquare: {\n height: '8px',\n width: '8px',\n display: 'inline-block',\n marginRight: '5px',\n verticalAlign: 'middle'\n },\n inactiveBarPart: {\n background: '#EFEFEF'\n },\n popper: {\n paddingTop: '6px'\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, withPercents} from '@reltio/components';\n\nimport {isEmptyData, getBarWidthStyle} from '../../services/charts';\nimport {getFillRateColorByState, getFillRateColors} from '../../services/fillRate';\n\nimport {TooltipWithSquares} from '../ChartDataTooltip';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: ChartData[];\n};\n\nconst FillRateLine = ({data}: Props) => {\n const styles = useStyles();\n const colors = getFillRateColors(data);\n\n return !isEmptyData(data) ? (\n <Tooltip\n followCursor={true}\n classes={{popper: styles.popper}}\n title={<TooltipWithSquares title={i18n.text('Fill rate')} data={data} getColor={getFillRateColorByState} />}\n >\n <div className={styles.bar}>\n {data.map((chartData, index) => (\n <div\n key={chartData.group}\n className={styles.barPart}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n />\n ))}\n </div>\n </Tooltip>\n ) : (\n <div className={styles.bar}>\n <div className={classnames(styles.barPart, styles.inactiveBarPart)} />\n </div>\n );\n};\n\nexport default withPercents(FillRateLine);\n","import {makeStyles} from '@mui/styles';\n\nconst levelLineColor = 'rgba(0, 114, 206, 0.12)';\nexport const useStyles = makeStyles({\n linesWrapper: {\n position: 'absolute',\n left: '9px',\n top: 0,\n bottom: 0\n },\n line: {\n position: 'absolute',\n width: '2px',\n background: levelLineColor,\n bottom: 0,\n zIndex: 2,\n left: 0,\n top: 0\n },\n horizontalLine: {\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n left: '2px',\n top: '15px',\n width: '3px',\n height: '2px',\n background: levelLineColor\n }\n },\n parentLine: {\n left: '20px',\n top: '34px'\n },\n lastLevel: {\n bottom: '31px'\n },\n lastLevelSelected: {\n '&:after': {top: '13px'}\n }\n});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {range} from 'ramda';\nimport {Marginator} from '@reltio/components';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n level: number;\n margin: number;\n hasChildren: boolean;\n isLastLevelItem: boolean;\n isCollapsed: boolean;\n isSelected: boolean;\n};\n\nconst getLevelsRange = (hasChildren: boolean, level: number): number[] => {\n if (level > 0 && hasChildren) return range(1, level + 1);\n\n if (level > 1) return range(1, level);\n return [];\n};\n\nconst TreeLines = ({level, margin, hasChildren, isLastLevelItem, isCollapsed, isSelected = false}: Props) => {\n const styles = useStyles();\n const drawLine = !isCollapsed && (level > 0 || hasChildren);\n\n return (\n <div className={styles.linesWrapper}>\n {getLevelsRange(hasChildren, level).map((level: number) => (\n <Marginator key={level} margin={margin} level={level} className={styles.line} />\n ))}\n {drawLine && (\n <Marginator\n margin={margin}\n level={level}\n className={classnames(\n styles.line,\n !hasChildren && level > 0 && styles.horizontalLine,\n hasChildren && styles.parentLine,\n isLastLevelItem && styles.lastLevel,\n isSelected && isLastLevelItem && styles.lastLevelSelected\n )}\n />\n )}\n </div>\n );\n};\n\nexport default TreeLines;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n listItem: {\n padding: '0 0 0 15px',\n '&:after': {\n content: '\"\"',\n left: 0,\n right: 0,\n position: 'absolute',\n bottom: 0,\n height: '1px',\n background: 'rgba(0, 0, 0, 0.05)'\n }\n },\n selectedItem: {\n background: 'white!important',\n border: '1px solid #000066',\n boxShadow:\n '0px 12px 17px -2px rgba(0, 0, 102, 0.06), 0px 5px 32px -4px rgba(0, 0, 102, 0.06), 0px 7px 8px -4px rgba(0, 0, 204, 0.1)',\n borderRadius: '6px',\n zIndex: 1,\n paddingLeft: '14px',\n '&:after': {\n display: 'none'\n }\n },\n clickableItem: {\n cursor: 'pointer',\n '&:hover::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none',\n zIndex: 1\n }\n },\n content: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n position: 'relative'\n },\n attribute: {\n paddingLeft: '9px',\n boxSizing: 'border-box',\n width: '100%',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n height: '100%',\n position: 'relative',\n fontSize: '13px'\n },\n marginWrapper: {\n display: 'inline-block',\n height: '100%',\n position: 'relative',\n width: '100%'\n },\n attributeType: {\n position: 'absolute',\n left: 0,\n top: '8px'\n },\n fillRate: {\n position: 'absolute',\n bottom: '8px',\n left: 0,\n right: 0,\n zIndex: 1\n },\n attributeLabel: {\n padding: '8px 0 0 15px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n right: 0,\n top: 0,\n width: '40px',\n height: '100%',\n background: 'linear-gradient(to right, rgba(255, 255, 255, 0.2), #fff 100%)',\n pointerEvents: 'none'\n }\n },\n parentAttributeLabel: {\n padding: '14px 0 0 13px'\n },\n detailsIcon: {\n background: 'white'\n },\n collapseIcon: {\n marginRight: '6px'\n },\n iconLoader: {\n width: '22px',\n height: '22px',\n border: '2px solid white',\n background: 'rgba(196, 196, 196, 0.4)',\n borderRadius: '50%'\n },\n iconsLoaderWrapper: {\n paddingRight: '23px',\n paddingLeft: '28px',\n display: 'flex'\n },\n iconLoaderWrapper: {\n width: '24px',\n height: '24px',\n backgroundColor: 'white',\n borderRadius: '50%',\n marginRight: '-3px'\n },\n fillRateLineLoader: {\n height: '8px',\n width: '100%',\n background: 'rgba(196, 196, 196, 0.4)',\n left: 0,\n right: 0,\n bottom: '8px',\n zIndex: 1,\n position: 'absolute'\n },\n iconsWrapper: {\n paddingRight: '11px'\n },\n noData: {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n height: '100%',\n backgroundColor: 'rgba(0,0,0,0.07)',\n pointerEvents: 'none',\n zIndex: 1\n }\n },\n noDataLabel: {\n fontSize: '12px',\n color: theme.palette.text.secondary,\n lineHeight: '16px',\n marginTop: '4px'\n }\n}));\n","import classnames from 'classnames';\nimport {times} from 'ramda';\nimport React from 'react';\nimport ListItem from '@mui/material/ListItem';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight';\nimport i18n from 'ui-i18n';\nimport {ChartData, ExpandedValueTooltip, Marginator, noop, RequestStates, SmallIconButton} from '@reltio/components';\n\nimport {getAttributeLabel} from '../../services/attributes';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nimport AttributeTypeDetailsIcons from '../AttributeTypeDetailsIcons/AttributeTypeDetailsIcons';\nimport AttributeTypeIcon from '../AttributeTypeIcon/AttributeTypeIcon';\nimport FillRateLine from '../FillRateLine/FillRateLine';\nimport TreeLines from './TreeLines/TreeLines';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n detailedAttributeType: DetailedAttributeType;\n level: number;\n onClick: (detailedAttributeType: DetailedAttributeType) => void;\n fillRateData?: ChartData[];\n fillRateState?: RequestStates;\n style?: React.CSSProperties;\n selected?: boolean;\n onCollapse?: () => void;\n isCollapsed?: boolean;\n isLastLevelItem?: boolean;\n isLoading?: boolean;\n};\n\nconst MARGIN_LEFT = 20;\nconst AttributeListItem = ({\n detailedAttributeType,\n fillRateData,\n fillRateState,\n style,\n level,\n selected = false,\n onClick,\n onCollapse = noop,\n isCollapsed = false,\n isLastLevelItem = false,\n isLoading\n}: Props) => {\n const styles = useStyles();\n const handleItemClick = () => {\n onClick(detailedAttributeType);\n };\n const hasChildren = !!detailedAttributeType.children;\n const hasFillRate = !!fillRateData;\n const noData = !hasFillRate && !isLoading;\n const attributeLabel = getAttributeLabel(detailedAttributeType);\n const CollapseIcon = isCollapsed ? ArrowRightIcon : ArrowDropDownIcon;\n\n return (\n <ListItem\n style={style}\n selected={selected}\n classes={{\n selected: styles.selectedItem\n }}\n onClick={hasChildren ? undefined : handleItemClick}\n component=\"div\"\n className={classnames(styles.listItem, {[styles.clickableItem]: !hasChildren, [styles.noData]: noData})}\n >\n <div className={styles.content}>\n {!hasChildren && (\n <div className={styles.attributeType}>\n <AttributeTypeIcon type={detailedAttributeType.type} />\n </div>\n )}\n <div className={styles.attribute}>\n <TreeLines\n level={level}\n margin={MARGIN_LEFT}\n hasChildren={hasChildren}\n isLastLevelItem={isLastLevelItem}\n isCollapsed={isCollapsed}\n isSelected={selected}\n />\n <Marginator margin={MARGIN_LEFT} level={level} className={styles.marginWrapper}>\n <ExpandedValueTooltip value={attributeLabel}>\n <div\n className={classnames(\n styles.attributeLabel,\n hasChildren && styles.parentAttributeLabel\n )}\n >\n {hasChildren && (\n <SmallIconButton\n size=\"XXS\"\n icon={CollapseIcon}\n onClick={onCollapse}\n className={styles.collapseIcon}\n />\n )}\n {attributeLabel}\n {noData && !hasChildren && (\n <div className={styles.noDataLabel}>{i18n.text('No data')}</div>\n )}\n </div>\n </ExpandedValueTooltip>\n </Marginator>\n {!isLoading && hasFillRate && !hasChildren && (\n <div className={styles.fillRate}>\n <FillRateLine data={fillRateData} />\n </div>\n )}\n {isLoading && !hasChildren && <div className={styles.fillRateLineLoader}></div>}\n </div>\n\n {isLoading ? (\n <div className={styles.iconsLoaderWrapper}>\n {times(\n (key: number) => (\n <div className={styles.iconLoaderWrapper} key={`unloadedIcon-${key}`}>\n <div className={styles.iconLoader}></div>\n </div>\n ),\n 5\n )}\n </div>\n ) : (\n <AttributeTypeDetailsIcons\n details={detailedAttributeType.details}\n classes={{iconRoot: styles.detailsIcon, iconsWrapper: selected && styles.iconsWrapper}}\n fillRateData={fillRateData}\n fillRateState={fillRateState}\n />\n )}\n </div>\n </ListItem>\n );\n};\n\nexport default AttributeListItem;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n searchWrapper: {\n padding: '8px 0px 8px 16px',\n alignItems: 'center',\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n marginLeft: '-105px'\n },\n filterByDetails: {\n width: '32px',\n height: '32px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n marginLeft: '9px'\n },\n searchInput: {\n borderRadius: '4px',\n width: '202px',\n minHeight: '32px!important',\n justifyContent: 'flex-end',\n alignItems: 'center',\n padding: '0 2px',\n boxSizing: 'border-box',\n '& input': {fontSize: '13px'},\n '& button': {padding: '2px'}\n },\n filledInput: {\n '& button:last-child': {\n backgroundColor: 'rgba(0, 0, 0, 0.0509804)'\n }\n },\n menu: {\n width: '300px',\n paddingTop: '8px'\n },\n filterIcon: {\n color: theme.palette.text.secondary\n },\n filterIconFilterApplied: {\n color: '#0072CE'\n },\n filterIconWrapper: {\n width: '32px',\n height: '32px',\n borderRadius: '4px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n cursor: 'pointer',\n position: 'relative',\n '&:after': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n borderRadius: '4px',\n background: 'rgba(0, 0, 0, 0.04)'\n },\n '&:hover': {\n '&:after': {\n content: '\"\"'\n }\n }\n },\n filterIconWrapperActive: {\n background: 'rgba(0, 0, 0, 0.04)',\n '&:after': {\n content: '\"\"',\n background: 'rgba(0, 0, 0, 0.04)'\n }\n },\n filterIconWrapperSelected: {\n background: 'rgba(0, 114, 206, 0.12)'\n },\n dropdownMenuTitle: {\n lineHeight: '48px',\n height: '48px',\n paddingLeft: '16px'\n },\n option: {\n paddingLeft: '5px',\n fontSize: '13px',\n height: '28px',\n lineHeight: '16px',\n letterSpacing: 'normal',\n paddingRight: '19px',\n filter: (isActive) => (isActive ? 'grayscale(0)' : 'grayscale(1)'),\n opacity: (isActive) => (isActive ? 1 : 0.5)\n },\n typeIconWrapper: {\n width: '28px',\n marginLeft: '1px',\n '& svg': {\n width: '20px',\n height: '20px'\n }\n },\n valueContainer: {\n marginLeft: 0\n },\n counter: {\n marginLeft: '5px'\n },\n\n optionLabel: {\n flexGrow: 1\n },\n groupLabel: {\n textTransform: 'uppercase',\n margin: '15px 16px 5px',\n letterSpacing: '0.1px',\n display: 'block'\n },\n actionsContainer: {\n display: 'flex',\n padding: '12px 5px 8px 12px'\n },\n clearAllButton: {\n marginRight: 'auto'\n }\n}));\n","import React from 'react';\nimport {isNil} from 'ramda';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport {ExpandedValueTooltip} from '@reltio/components';\nimport {FilterOption} from '../../types/FilterOption';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {AttributeTypeDetailIcon} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\nimport {useStyles} from './styles';\n\ntype Props = {\n data: FilterOption;\n isSelected: boolean;\n onChange: (data: FilterOption) => void;\n};\n\nconst Option = ({isSelected, data, onChange}: Props) => {\n const {count, label, value} = data;\n const showCounter = !isNil(count);\n const isOptionActive = !showCounter || count > 0;\n const styles = useStyles(isOptionActive);\n const handleClick = () => onChange(data);\n return (\n <MenuItem\n className={styles.option}\n component=\"div\"\n onClick={handleClick}\n data-reltio-id={`reltio-dq-dashboard-option-${data.value}`}\n >\n <Checkbox color=\"primary\" checked={isSelected} />\n <span className={styles.typeIconWrapper}>\n <AttributeTypeDetailIcon detailType={value as AttrTypeDetailsType} />\n </span>\n <ExpandedValueTooltip value={label}>\n <div className={styles.optionLabel}>{label}</div>\n </ExpandedValueTooltip>\n {showCounter && <span className={styles.counter}>{formatNumberAsMetric(count, 999)}</span>}\n </MenuItem>\n );\n};\n\nexport default Option;\n","import {curry, flatten, pipe, pluck, propEq, remove} from 'ramda';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\n\nexport const containsOption = curry(\n (option: FilterOption, options: FilterOption[]) => !!options.find(propEq('value', option.value))\n);\n\nexport const withoutOption = curry((option: FilterOption, options: FilterOption[]) => {\n const optionIndex = options.findIndex(propEq('value', option.value));\n return optionIndex !== -1 ? remove(optionIndex, 1, options) : options;\n});\n\nexport const getValidFilterOptions = (\n options: FilterOption[],\n filterOptionsGroups: FilterOptionsGroup[]\n): FilterOption[] => {\n const allValidFilterOptions: FilterOption[] = pipe(pluck('options'), flatten)(filterOptionsGroups);\n return options.filter(({value}) => allValidFilterOptions.find(propEq('value', value)));\n};\n","import React, {useEffect, useState} from 'react';\nimport {always, concat, ifElse} from 'ramda';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport Button from '@mui/material/Button';\nimport FilterListIcon from '@mui/icons-material/FilterList';\nimport Popover from '@mui/material/Popover';\nimport Typography from '@mui/material/Typography';\nimport SearchInput from 'react-components/dist/Form/SearchInput';\nimport {FilterOption} from '../../types/FilterOption';\nimport {FilterOptionsGroup} from '../../types/FilterOptionsGroup';\nimport Option from './Option';\nimport {containsOption, getValidFilterOptions, withoutOption} from './helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n filterOptions: FilterOptionsGroup[];\n onChangeFilterOptions: (filterOptions: FilterOption[]) => void;\n onChangeFilterText: (filterText: string) => void;\n defaultFilterOptions?: FilterOption[];\n defaultFilterText?: string;\n};\n\nconst SEARCH_INPUT_HEIGHT = 40;\n\nconst AttributesFilters = ({\n defaultFilterOptions = [],\n filterOptions,\n defaultFilterText,\n onChangeFilterText,\n onChangeFilterOptions\n}: Props) => {\n const styles = useStyles();\n\n const [anchorEl, setAnchorEl] = useState(null);\n const [selectedFilterOptions, setSelectedFilterOptions] = useState<FilterOption[]>([]);\n const [valueInFilterTextInput, setValueInFilterTextInput] = useState<string>(defaultFilterText || null);\n useEffect(() => {\n setSelectedFilterOptions(getValidFilterOptions(defaultFilterOptions, filterOptions));\n }, [defaultFilterOptions, filterOptions]);\n\n const openFilter = (event) => setAnchorEl(event.currentTarget);\n const closeFilter = () => setAnchorEl(null);\n\n const handleClearAll = () => {\n setSelectedFilterOptions([]);\n };\n\n const handleCancel = () => {\n setSelectedFilterOptions(defaultFilterOptions);\n closeFilter();\n };\n\n const handleApply = () => {\n onChangeFilterOptions(selectedFilterOptions);\n closeFilter();\n };\n\n const handleClose = () => {\n setSelectedFilterOptions(always(defaultFilterOptions));\n closeFilter();\n };\n\n const handleChangeFilterText = (filterText: string) => {\n setValueInFilterTextInput(filterText);\n onChangeFilterText(filterText || '');\n };\n\n const handleOptionChange = (option: FilterOption) => {\n setSelectedFilterOptions(ifElse(containsOption(option), withoutOption(option), concat([option])));\n };\n\n const hasSelectedOptions = !!selectedFilterOptions.length;\n const isPopupOpen = !!anchorEl;\n const indicatorClassname = classnames(styles.filterIconWrapper, {\n [styles.filterIconWrapperActive]: isPopupOpen,\n [styles.filterIconWrapperSelected]: hasSelectedOptions\n });\n const indicatorIconClassname = hasSelectedOptions ? styles.filterIconFilterApplied : styles.filterIcon;\n\n return (\n <div className={styles.searchWrapper}>\n <div data-reltio-id=\"reltio-dq-dashboard-attributes-search-input\">\n <SearchInput\n autofocus\n onChange={handleChangeFilterText}\n initialValue={defaultFilterText || null}\n height={SEARCH_INPUT_HEIGHT}\n placeholder={i18n.text('Search attribute name')}\n classes={{root: classnames(styles.searchInput, {[styles.filledInput]: !!valueInFilterTextInput})}}\n />\n </div>\n <div className={styles.filterByDetails} data-reltio-id=\"reltio-dq-dashboard-attributes-filter\">\n <div className={indicatorClassname} onClick={openFilter}>\n <FilterListIcon className={indicatorIconClassname} />\n </div>\n <Popover\n open={!!anchorEl}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n PaperProps={{\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n ['data-reltio-id']: 'reltio-dq-dashboard-attributes-filter-popup'\n }}\n >\n <div className={styles.menu}>\n <Typography variant=\"h6\" className={styles.dropdownMenuTitle}>\n {i18n.text('Filter')}\n </Typography>\n <div className={styles.valueContainer}>\n {filterOptions.map(({label, options}) => {\n return (\n <div key={label}>\n {label && (\n <Typography variant=\"caption\" className={styles.groupLabel}>\n {label}\n </Typography>\n )}\n {options.map((option) => {\n const isSelected = containsOption(option, selectedFilterOptions);\n\n return (\n <Option\n key={option.label}\n data={option}\n isSelected={isSelected}\n onChange={handleOptionChange}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n </div>\n <div className={styles.actionsContainer}>\n <Button\n onClick={handleClearAll}\n className={styles.clearAllButton}\n disabled={!hasSelectedOptions}\n data-reltio-id=\"reltio-dq-dashboard-filter-clear-all-button\"\n >\n {i18n.text('Clear all')}\n </Button>\n <Button onClick={handleCancel} data-reltio-id=\"reltio-dq-dashboard-filter-cancel-button\">\n {i18n.text('Cancel')}\n </Button>\n <Button\n color=\"primary\"\n onClick={handleApply}\n data-reltio-id=\"reltio-dq-dashboard-filter-apply-button\"\n >\n {i18n.text('Apply')}\n </Button>\n </div>\n </Popover>\n </div>\n </div>\n );\n};\n\nexport default AttributesFilters;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n width: '360px',\n minWidth: '360px',\n maxWidth: '360px',\n display: 'flex',\n flexDirection: 'column',\n background: '#fff',\n zIndex: 1,\n marginBottom: '8px',\n borderRadius: '4px',\n boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.14), 0px 2px 1px rgba(0, 0, 0, 0.12), 0px 1px 3px rgba(0, 0, 0, 0.2)'\n },\n title: {\n height: '24px',\n margin: '16px',\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n lineHeight: '24px',\n color: theme.palette.text.primary\n },\n itemCount: {\n color: theme.palette.text.primary,\n borderLeft: '1px solid rgba(0, 0, 0, 0.12)',\n marginLeft: '16px',\n paddingLeft: '16px'\n },\n listWrapper: {\n flexGrow: 1,\n overflow: 'hidden',\n position: 'relative'\n },\n loadingAnimation: {\n '&:before': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: '50%',\n zIndex: 1,\n width: '500%',\n marginLeft: '-250%',\n background:\n 'linear-gradient(to right, rgba(255, 255, 255, 0) 46%, rgba(255, 255, 255, 0.35) 50%, rgba(255, 255, 255, 0) 54%) 50% 50%;',\n animation: '$loaderAnimation 0.8s linear infinite',\n content: '\"\"',\n pointerEvents: 'none'\n }\n },\n columnsTitle: {\n height: '48px',\n display: 'grid',\n gridGap: '32px',\n gridTemplateColumns: '308px 108px',\n alignItems: 'center',\n padding: '0 16px',\n background: 'rgba(0, 0, 0, 0.06)',\n borderBottom: '1px solid rgba(0, 0, 0, 0.1)',\n fontWeight: 500,\n fontSize: '12px',\n lineHeight: '16px',\n color: theme.palette.text.secondary\n },\n loaderWrapper: {\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n height: '4px',\n zIndex: 1\n },\n '@keyframes loaderAnimation': {\n '0%': {\n transform: 'translate(-30%, 0)'\n },\n '100%': {\n transform: 'translate(30%, 0)'\n }\n }\n}));\n","import classnames from 'classnames';\nimport {assoc, equals, isEmpty, pathOr} from 'ramda';\nimport React, {useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {FixedSizeList as List} from 'react-window';\n\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nimport {useChartsDataContext} from '../../contexts/ChartsDataProvider';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {useAttrTypeDetails} from '../../hooks/useAttrTypeDetails';\nimport {useFillRateRequest} from '../../hooks/useFillRateRequest';\nimport {formatFillRateData} from '../../services/fillRate';\nimport {AttributeItemType, DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {FilterOption} from '../../types/FilterOption';\nimport {\n noDataFilterOptions,\n filterItemsByDetails,\n filterItemsByEmptiness,\n getAtrributeFieldNames,\n getDetailedAttrTypeByFieldName,\n getDetailsOptions,\n getNoDataOptions,\n getFillRateByAttributeType,\n getFirstSimpleDetailedAttrType,\n getIndexByFieldName,\n rejectCollapsedItemsChildren\n} from './helpers';\n\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport AttributesFilters from '../AttributesFilters/AttributesFilters';\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\n\nimport {useStyles} from './styles';\n\nexport type DQDashboardAttributesListProps = {\n entityType: TEntityType;\n onAttributesListChange: ({\n selectedDetailedAttributeType,\n filterText,\n filterOptions\n }: {\n selectedDetailedAttributeType: DetailedAttributeType;\n filterText: string;\n filterOptions: FilterOption[];\n }) => void;\n defaultFieldName?: string;\n defaultFilterText?: string;\n defaultFilterOptions?: FilterOption[];\n disableAttributeSelection: boolean;\n};\n\ntype RenderAttributeProps = {\n data: AttributeItemType[];\n style: React.CSSProperties;\n index: number;\n};\n\nconst LIST_ITEM_HEIGHT = 48;\nconst NO_DATA_HEIGHT = 349;\n\nconst getItemsLabel = (count: number) => (count === 1 ? i18n.text('item') : i18n.text('items'));\n\nconst DQDashboardAttributesList = ({\n entityType,\n onAttributesListChange,\n defaultFieldName,\n defaultFilterOptions,\n defaultFilterText,\n disableAttributeSelection\n}: DQDashboardAttributesListProps) => {\n const styles = useStyles();\n const listRef = useRef<List>();\n const listWrapper = useRef<HTMLDivElement>();\n const [filterText, setFilterText] = useState(defaultFilterText || '');\n const [collapsedFieldNames, setCollapsedFieldNames] = useState<string[]>([]);\n const [selectedFilterOptions, setSelectedFilterOptions] = useState<FilterOption[]>(\n defaultFilterOptions || noDataFilterOptions\n );\n const [selectedFieldName, setSelectedFieldName] = useState(defaultFieldName);\n const [fillRates, setFillRates] = useState({});\n const {\n chartsData: {data: chartsData}\n } = useChartsDataContext();\n const dvfState = useContext(DVFContext)?.dvfs?.state;\n const items = useAttrTypeDetails(entityType, filterText);\n\n const attributeFieldNames = getAtrributeFieldNames(items);\n const memoizedAttributeFieldNames = useMemo(\n () => attributeFieldNames,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [attributeFieldNames.toString()]\n );\n const {data: initialFillRates, state: fillRatesState} = useFillRateRequest(\n entityType.uri,\n memoizedAttributeFieldNames\n );\n useEffect(() => setFillRates(initialFillRates), [initialFillRates]);\n useEffect(() => {\n const fillRateFromChartsData = chartsData?.fillRate && formatFillRateData(chartsData?.fillRate);\n const fillRateForSelectedAttribute = fillRates[selectedFieldName];\n setFillRates((fillRates) =>\n !fillRateFromChartsData || equals(fillRateForSelectedAttribute, fillRateFromChartsData)\n ? fillRates\n : assoc(selectedFieldName, fillRateFromChartsData, fillRates)\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [chartsData?.fillRate]);\n\n const isFillRateNotLoaded = fillRatesState === RequestStates.INIT || fillRatesState === RequestStates.LOADING;\n const isLoading = isFillRateNotLoaded || dvfState === RequestStates.LOADING || dvfState === RequestStates.INIT;\n\n const isDVFLoaded = dvfState === RequestStates.LOADED || dvfState === RequestStates.ERROR;\n const isFillRateLoaded = fillRatesState === RequestStates.LOADED;\n\n const {filteredItems, filterOptions} = useMemo(() => {\n const filteredByEmptinessItems = isFillRateLoaded\n ? filterItemsByEmptiness(selectedFilterOptions, fillRates, items)\n : items;\n const detailsFilterOptions = getDetailsOptions(filteredByEmptinessItems);\n\n const filteredItems = isDVFLoaded\n ? filterItemsByDetails(selectedFilterOptions, filteredByEmptinessItems)\n : filteredByEmptinessItems;\n const noDataFilterOptions = getNoDataOptions();\n const filterOptions = [noDataFilterOptions, detailsFilterOptions];\n\n return {filteredItems, filterOptions};\n }, [items, selectedFilterOptions, fillRates, isFillRateLoaded, isDVFLoaded]);\n\n const visibleItems = useMemo(\n () => rejectCollapsedItemsChildren(filteredItems, collapsedFieldNames),\n [filteredItems, collapsedFieldNames]\n );\n const countAttrTypes = filteredItems.length;\n\n const handleAttrTypeDetailsChange = (selectedDetailedAttributeType: DetailedAttributeType) => {\n onAttributesListChange({selectedDetailedAttributeType, filterText, filterOptions: selectedFilterOptions});\n setSelectedFieldName(selectedDetailedAttributeType.fieldName);\n };\n\n const selectedDetailedAttributeType = useMemo(() => {\n const selectedDetailedAttributeType =\n getDetailedAttrTypeByFieldName(filteredItems, selectedFieldName) ||\n getFirstSimpleDetailedAttrType(filteredItems);\n return isEmpty(selectedDetailedAttributeType) || disableAttributeSelection\n ? null\n : selectedDetailedAttributeType;\n }, [filteredItems, selectedFieldName, disableAttributeSelection]);\n\n useEffect(() => {\n if (disableAttributeSelection) {\n listRef.current?.scrollTo(0);\n return;\n }\n if (filteredItems.length) {\n if (selectedDetailedAttributeType?.fieldName) setSelectedFieldName(selectedDetailedAttributeType.fieldName);\n }\n const indexOfSelectedFieldName = getIndexByFieldName(filteredItems, selectedFieldName);\n indexOfSelectedFieldName > -1\n ? listRef.current?.scrollToItem(indexOfSelectedFieldName, 'center')\n : listRef.current?.scrollTo(0);\n }, [filteredItems, selectedDetailedAttributeType]); // eslint-disable-line\n\n useEffect(() => {\n onAttributesListChange({selectedDetailedAttributeType, filterText, filterOptions: selectedFilterOptions});\n }, [filterText, selectedFilterOptions, selectedDetailedAttributeType]); // eslint-disable-line\n\n useEffect(() => {\n setSelectedFieldName((fieldName) => (disableAttributeSelection ? null : fieldName));\n }, [disableAttributeSelection]);\n\n const handleScroll = ({scrollOffset}) => {\n if (listWrapper.current) {\n const currentBorderTop = listWrapper.current?.style?.borderTop;\n if (scrollOffset === 0) {\n listWrapper.current.style.borderTop = '';\n }\n if (scrollOffset > 0 && currentBorderTop === '') {\n listWrapper.current.style.borderTop = '1px solid rgba(0, 0, 0, 0.05)';\n }\n }\n };\n\n const handleCollapse = (fieldName: string) => () => {\n setCollapsedFieldNames((collapsedFieldNames) =>\n collapsedFieldNames.includes(fieldName)\n ? collapsedFieldNames.filter((collapsedFieldName) => collapsedFieldName !== fieldName)\n : collapsedFieldNames.concat(fieldName)\n );\n };\n\n const renderAttribute = ({data, index, style}: RenderAttributeProps) => {\n const {attributeItem, level = 0} = data[index];\n const selected = selectedFieldName === attributeItem.fieldName;\n const fillRateData = getFillRateByAttributeType(fillRates, attributeItem);\n\n const isLastLevelItem = index > 0 && level > pathOr(-1, [index + 1, 'level'], visibleItems);\n\n return (\n <AttributeListItem\n fillRateData={fillRateData}\n fillRateState={fillRatesState}\n isLoading={isLoading}\n style={style}\n detailedAttributeType={attributeItem}\n level={level}\n onClick={handleAttrTypeDetailsChange}\n selected={selected}\n onCollapse={handleCollapse(attributeItem.fieldName)}\n isCollapsed={collapsedFieldNames.includes(attributeItem.fieldName)}\n isLastLevelItem={isLastLevelItem}\n />\n );\n };\n\n const itemCount = visibleItems.length;\n const hasData = !!itemCount;\n const showNoData = !hasData && (items.length === 0 || (filteredItems.length === 0 && isDVFLoaded));\n return (\n <div className={styles.root}>\n <div className={styles.title}>\n {i18n.text('Attributes')}\n <span className={styles.itemCount}>{`${countAttrTypes} ${getItemsLabel(countAttrTypes)}`}</span>\n <AttributesFilters\n defaultFilterText={defaultFilterText}\n defaultFilterOptions={selectedFilterOptions}\n onChangeFilterOptions={setSelectedFilterOptions}\n onChangeFilterText={setFilterText}\n filterOptions={filterOptions}\n />\n </div>\n <div\n ref={listWrapper}\n className={classnames(styles.listWrapper, {[styles.loadingAnimation]: isLoading && !showNoData})}\n data-reltio-id=\"reltio-dq-dashboard-attributes-list\"\n >\n {hasData ? (\n <ReactResizeDetector refreshMode=\"debounce\" refreshRate={100} handleHeight>\n {({height = 250}: {height: number}) => (\n <List\n ref={listRef}\n itemCount={itemCount}\n width=\"100%\"\n height={height}\n itemData={visibleItems}\n itemSize={LIST_ITEM_HEIGHT}\n onScroll={handleScroll}\n >\n {renderAttribute}\n </List>\n )}\n </ReactResizeDetector>\n ) : (\n showNoData && (\n <DQDashboardError\n height={NO_DATA_HEIGHT}\n errorData={{\n Icon: EMPTY_STATE_ICONS.SEARCH_RESULTS,\n title: i18n.text('No results found'),\n message: i18n.text(\n 'Try adjusting your search or filter to find\\nwhat you’re looking for'\n )\n }}\n variant={EmptyStateVariants.MEDIUM}\n />\n )\n )}\n </div>\n </div>\n );\n};\n\nexport default DQDashboardAttributesList;\n","import {useCallback, useEffect, useState} from 'react';\nimport {ChartData, useSafePromise, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, getDQChartsData} from '@reltio/mdm-sdk';\nimport {useDQDashboardState} from '../contexts/DQDashboardStateContext';\nimport {formatFillRatesData} from '../services/fillRate';\n\nexport const useFillRateRequest = (entityTypeUri: string, attributeFieldNames: string[]) => {\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [fillRateData, setFillRateData] = useState<Record<string, ChartData[]>>({});\n const safePromise = useSafePromise();\n const {searchByOv} = useDQDashboardState();\n\n const onError = (error) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setFillRateData({});\n };\n\n const loadFillRateData = useCallback(() => {\n if (!attributeFieldNames.length) return;\n setRequestState(RequestStates.LOADING);\n setFillRateData({});\n\n const onRequestFinished = (data: Record<string, ChartData[]>) => {\n setFillRateData(data);\n setRequestState(RequestStates.LOADED);\n };\n\n return safePromise(\n getDQChartsData({\n entityTypeUri,\n attributes: attributeFieldNames,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: [DQMetric.FILL_RATE],\n searchByOv\n })\n )\n .then(formatFillRatesData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safePromise, setRequestState, setFillRateData, attributeFieldNames, searchByOv]);\n\n const refreshAction = useCallback(() => {\n try {\n loadFillRateData();\n } catch (e) {\n onError(e);\n }\n }, [loadFillRateData]);\n\n useEffect(() => {\n refreshAction();\n }, [refreshAction]);\n\n return {data: fillRateData, state: requestState, reload: refreshAction};\n};\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles({\n root: {\n display: 'flex',\n alignItems: 'center',\n width: '100%'\n },\n title: {\n flexShrink: 0,\n paddingLeft: '20px'\n },\n content: {\n overflow: 'hidden',\n flexGrow: 1\n }\n});\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n children: React.ReactNode;\n};\nconst DQDashboardHeader = ({title, children}: Props) => {\n const styles = useStyles();\n return (\n <div className={styles.root}>\n <Typography variant=\"h6\" className={styles.title}>\n {title}\n </Typography>\n <div className={styles.content}>{children}</div>\n </div>\n );\n};\n\nexport default DQDashboardHeader;\n","import React from 'react';\n\nimport i18n from 'ui-i18n';\nimport {EMPTY_STATE_ICONS} from '@reltio/components';\n\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\n\nimport DQDashboardError from '../DQDashboardError/DQDashboardError';\n\nexport const NO_DATA_HEIGHT = 359;\n\nconst DQDashboardNoContent = () => {\n const {canGetDQStatistic} = usePermissionsContext();\n const errorData = canGetDQStatistic\n ? {\n Icon: EMPTY_STATE_ICONS.NO_DATA,\n title: i18n.text('Give us something to go on!'),\n message: i18n.text(\n 'Go ahead and load some data. We’ll put it on the scales and\\nlet you know here if it measures up.'\n )\n }\n : {\n title: i18n.text('You don’t currently have permission to view this page'),\n message: i18n.text(' Please contact your Tenant Admin to change permissions')\n };\n return <DQDashboardError height={NO_DATA_HEIGHT} errorData={errorData} variant={EmptyStateVariants.LARGE} />;\n};\n\nexport default DQDashboardNoContent;\n","import {CSSProperties} from 'react';\nimport {makeStyles} from '@mui/styles';\n\nconst scrollTopShadow: CSSProperties = {\n position: 'absolute',\n content: '\"\"',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 1\n};\n\nexport const useStyles = makeStyles(() => ({\n root: {\n width: '100%',\n height: '100%',\n position: 'relative',\n marginTop: '-12px',\n '&:before': {\n ...scrollTopShadow,\n top: '8px',\n height: '4px',\n background: 'linear-gradient(180deg, #EEEEEE 0%, rgba(238, 238, 238, 0) 100%)',\n zIndex: 1\n },\n '&:after': {\n ...scrollTopShadow,\n height: '8px',\n background: '#EEEEEE'\n }\n },\n layoutRoot: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n}));\n","import React, {useMemo, useEffect} from 'react';\nimport classnames from 'classnames';\nimport {useSelector} from 'react-redux';\n\nimport {DQDataLevel, Metadata, TEntityType} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport i18n from 'ui-i18n';\n\nimport {getMetricsFromViews, getEntityLevelViews} from '../../../services/charts';\nimport {DQDashboardPerspectiveConfig} from '../../../types/DQDashboardPerspectiveConfig';\nimport {defaultLayoutsByDataLevel} from '../../../constants/defaultConfig';\nimport {checkEntityTypeHasRDMLookup} from '../../../services/rdmTranscode';\nimport {useChartsDataContext} from '../../../contexts/ChartsDataProvider';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {usePermissionsContext} from '../../../contexts/PermissionsProvider';\nimport {RDMLookupState} from '../../../constants/RdmLookupState';\nimport {useChartsDataRequest} from '../../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../../DQDashboardLayout/DQDashboardLayout';\nimport Warning from '../../Warning/Warning';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n entityType?: TEntityType;\n};\n\nconst EntityLevelLayout = ({config, entityType}: Props) => {\n const styles = useStyles();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const hasRDMLookup = metadata && entityType && checkEntityTypeHasRDMLookup(metadata, entityType);\n const currentRDMLookupState = hasRDMLookup ? RDMLookupState.RDM_LOOKUP_EXIST : RDMLookupState.RDM_LOOKUP_NOT_EXIST;\n const {hasRestrictions} = usePermissionsContext();\n const layout =\n config.layoutsByDataLevel?.[DQDataLevel.ENTITY_TYPE]?.[currentRDMLookupState] ||\n defaultLayoutsByDataLevel[DQDataLevel.ENTITY_TYPE][currentRDMLookupState];\n\n const views = useMemo(\n () => (layout ? getEntityLevelViews(config.viewsByDataLevel, layout) : []),\n [config.viewsByDataLevel, layout]\n );\n const metrics = useMemo(() => getMetricsFromViews(views), [views]);\n\n const chartsData = useChartsDataRequest({\n entityType,\n dataLevel: DQDataLevel.ENTITY_TYPE,\n metrics\n });\n const {changeChartsData} = useChartsDataContext();\n useEffect(() => changeChartsData(chartsData), [chartsData]);\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ENTITY_TYPE\n });\n\n return (\n <div className={classnames(styles.root)}>\n <DataLevelContext.Provider value={DQDataLevel.ENTITY_TYPE}>\n <div className={styles.layoutRoot}>\n {hasRestrictions && (\n <Warning\n text={i18n.text(\n 'Not seeing the data you expected for this entity type? Contact your tenant admin to verify permissions.'\n )}\n />\n )}\n <DQDashboardLayout views={views} layout={layout} />\n </div>\n </DataLevelContext.Provider>\n </div>\n );\n};\n\nexport default EntityLevelLayout;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n counter: {\n fontSize: '10px',\n lineHeight: '12px',\n height: '12px',\n background: 'rgba(0, 0, 0, 0.05)',\n padding: '1px 4px',\n borderRadius: '2px'\n },\n selectRoot: {\n '&>fieldset': {\n border: 'none !important',\n outline: 'none !important'\n }\n },\n select: {\n borderRadius: '6px !important',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n padding: '3px 29px 3px 15px !important',\n fontSize: '18px',\n lineHeight: '24px',\n paddingRight: '30px',\n color: theme.palette.text.primary,\n minWidth: '128px',\n boxSizing: 'border-box',\n '&:hover,&:focus': {\n background: 'rgba(0, 0, 0, 0.05)',\n border: 'none',\n padding: '4px 30px 4px 16px !important'\n }\n },\n selectValue: {\n display: 'flex',\n alignItems: 'center',\n gap: '9px'\n },\n arrowIcon: {\n height: '16px',\n top: 'calc(50% - 8px)',\n right: '1px'\n },\n menu: {\n padding: '4px 0',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px'\n },\n optionRoot: {\n maxWidth: '184px',\n minWidth: '140px',\n display: 'flex',\n paddingRight: '8px'\n },\n optionLabel: {\n flexGrow: 1,\n fontSize: '13px',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n paddingRight: '10px',\n minWidth: 0\n }\n}));\n","import React from 'react';\nimport {isNil, find, pipe, propEq} from 'ramda';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select, {SelectProps} from '@mui/material/Select';\nimport Typography from '@mui/material/Typography';\nimport {mergeClasses} from '@reltio/components';\n\nimport {ExpandedValueTooltip, getValue} from '@reltio/components';\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {useStyles} from './styles';\n\nexport type Option = {\n value: string;\n label: string;\n count?: number;\n};\ntype Props = {\n options: Option[];\n value: string;\n onChange: (value: string) => void;\n dataReltioId?: string;\n dataReltioOptionId?: string;\n} & Omit<SelectProps, 'onChange' | 'value'>;\nconst Selector = ({\n options,\n value,\n onChange,\n dataReltioId,\n dataReltioOptionId,\n classes: classesProps = {},\n ...selectProps\n}: Props) => {\n const styles = useStyles();\n\n const renderCount = (count: number) => <span className={styles.counter}>{formatNumberAsMetric(count, 999)}</span>;\n\n const renderValue = (value: string) => {\n const {label, count}: Option = find(propEq('value', value))(options);\n return (\n <div className={styles.selectValue}>\n {label}\n {!isNil(count) && renderCount(count)}\n </div>\n );\n };\n\n const classes = mergeClasses(classesProps, {\n outlined: styles.select,\n icon: styles.arrowIcon\n });\n\n const renderOption = ({value, label, count}: Option, index: number) => (\n <MenuItem\n key={value}\n value={value}\n classes={{\n root: styles.optionRoot\n }}\n data-reltio-id={`${dataReltioOptionId}-${index}`}\n >\n <ExpandedValueTooltip value={label}>\n <Typography className={styles.optionLabel}>{label}</Typography>\n </ExpandedValueTooltip>\n {!isNil(count) && renderCount(count)}\n </MenuItem>\n );\n\n return (\n <Select\n variant=\"outlined\"\n MenuProps={{\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'left'\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'left'\n },\n classes: {\n list: styles.menu\n }\n }}\n value={value}\n onChange={pipe(getValue, onChange)}\n renderValue={renderValue}\n className={styles.selectRoot}\n classes={classes}\n autoWidth\n data-reltio-id={dataReltioId}\n {...selectProps}\n >\n {options.map(renderOption)}\n </Select>\n );\n};\n\nexport default Selector;\n","import React from 'react';\nimport {map, pipe} from 'ramda';\n\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nimport Selector, {Option} from '../Selector/Selector';\n\nexport type TEntityTypeWithCount = TEntityType & {\n entityCount: number;\n};\ntype Props = {\n entityTypes: TEntityTypeWithCount[];\n entityTypeUri: string;\n onChange: (entityTypeUri: string) => void;\n};\nconst EntityTypeSelector = ({entityTypes, entityTypeUri, onChange}: Props) => {\n const options: Option[] = pipe(\n map(({label, uri, entityCount}: {label: string; uri: string; entityCount: number}) => ({\n label,\n count: entityCount,\n value: uri\n }))\n )(entityTypes);\n\n return (\n <Selector\n options={options}\n value={entityTypeUri}\n onChange={onChange}\n dataReltioOptionId=\"reltio-dq-dashboard-entity-type-selector-option\"\n dataReltioId=\"reltio-dq-dashboard-entity-type-selector\"\n />\n );\n};\n\nexport default EntityTypeSelector;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => React.createElement(\"svg\", _extends({\n width: \"256\",\n height: \"256\",\n viewBox: \"0 0 256 256\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n}, props), React.createElement(\"g\", null, React.createElement(\"g\", null, React.createElement(\"circle\", {\n cx: \"128\",\n cy: \"128\",\n r: \"128\",\n fill: \"#0072CE\",\n fillOpacity: \".03\"\n}), React.createElement(\"mask\", {\n id: \"svg1824010396a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"256\",\n height: \"256\"\n}, React.createElement(\"circle\", {\n cx: \"128\",\n cy: \"128\",\n r: \"128\",\n fill: \"#fff\"\n})), React.createElement(\"g\", {\n mask: \"url(#svg1824010396a)\"\n}, React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M-16 9h256v247H-16V9z\",\n fill: \"url(#paint0_linear_2978_41880)\"\n}), React.createElement(\"g\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n}, React.createElement(\"path\", {\n d: \"M40.755 44.17C40.755 38.002 45.76 33 51.92 33h251.675c6.167 0 11.166 5.001 11.166 11.17v160.596H40.755V44.171z\",\n fill: \"#5E7282\"\n}), React.createElement(\"path\", {\n d: \"M50.371 43.106h255.685V195.71H50.371V43.106z\",\n fill: \"url(#paint1_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n d: \"M15.545 208.914c2.321.469 4.723.716 7.183.716H338.75c.22 0 .439-.002.658-.006-7.061 8.445-17.67 13.816-29.524 13.816H45.655c-12.111 0-22.916-5.597-29.968-14.349l-.142-.177z\",\n fill: \"#BDCBD8\"\n}), React.createElement(\"path\", {\n d: \"M339.015 204.883v4.966H15v-4.966h324.015z\",\n fill: \"#D4DCDF\"\n}), React.createElement(\"path\", {\n d: \"M201.107 213.991h-45.221a11.176 11.176 0 01-11.046-9.449h67.314a11.172 11.172 0 01-11.047 9.449z\",\n fill: \"url(#paint2_linear_2978_41880)\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter0_d_2978_41880)\"\n}, React.createElement(\"rect\", {\n x: \"81.703\",\n y: \"99\",\n width: \"170\",\n height: \"26\",\n rx: \"8\",\n fill: \"#D1E6FF\"\n}), React.createElement(\"rect\", {\n x: \"84.703\",\n y: \"102\",\n width: \"164\",\n height: \"20\",\n rx: \"5\",\n stroke: \"#fff\",\n strokeWidth: \"6\"\n})), React.createElement(\"g\", {\n filter: \"url(#filter1_d_2978_41880)\"\n}, React.createElement(\"mask\", {\n id: \"svg1824010396b\",\n fill: \"#fff\"\n}, React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\"\n})), React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\",\n fill: \"#61A3F1\"\n}), React.createElement(\"rect\", {\n x: \"81\",\n y: \"105\",\n width: \"108\",\n height: \"14\",\n rx: \"2\",\n stroke: \"#4A90E2\",\n strokeWidth: \"8\",\n mask: \"url(#svg1824010396b)\"\n})), React.createElement(\"g\", null, React.createElement(\"path\", {\n opacity: \".8\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M122.703 74a3 3 0 013-3h81.625a3 3 0 010 6h-81.625a3 3 0 01-3-3z\",\n fill: \"#B6C7DB\"\n}), React.createElement(\"path\", {\n opacity: \".2\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M146.703 86a3 3 0 013-3h34a3 3 0 110 6h-34a3 3 0 01-3-3zM136.703 139a3 3 0 013-3h54a3 3 0 110 6h-54a3 3 0 01-3-3z\",\n fill: \"#979797\"\n}), React.createElement(\"path\", {\n opacity: \".1\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M112.703 151a3 3 0 013-3h103a3 3 0 110 6h-103a3 3 0 01-3-3zM124.703 163a3 3 0 013-3h79a3 3 0 110 6h-79a3 3 0 01-3-3z\",\n fill: \"#979797\"\n}), React.createElement(\"g\", {\n filter: \"url(#filter2_ddd_2978_41880)\"\n}, React.createElement(\"g\", null, React.createElement(\"g\", null, React.createElement(\"path\", {\n fill: \"#A0C1D7\",\n d: \"M70.703 64h11v8h-11z\"\n}), React.createElement(\"rect\", {\n x: \"62\",\n y: \"59\",\n width: \"28\",\n height: \"8\",\n rx: \"1\",\n fill: \"#BDD4E3\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M38.23 160.5c20.704 20.703 54.27 20.703 74.973 0 20.703-20.703 20.703-54.27 0-74.973-20.703-20.703-54.27-20.703-74.973 0-20.703 20.703-20.703 54.27 0 74.973z\",\n fill: \"#BDD4E3\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M113.427 85.988c20.463 20.652 20.404 53.981-.175 74.561-20.432 20.431-53.432 20.635-74.115.613l-.446-.439 74.736-74.735z\",\n fill: \"#A0C1D7\"\n}), React.createElement(\"path\", {\n opacity: \".144\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M75.037 175.385c29.402 0 53.236-23.834 53.236-53.236a54.67 54.67 0 00-.106-3.399L100.45 91.037l-55.142 58.396 25.814 25.811c1.293.094 2.598.141 3.915.141z\",\n fill: \"url(#paint3_linear_2978_41880)\"\n}), React.createElement(\"circle\", {\n cx: \"75.94\",\n cy: \"123.237\",\n r: \"44.723\",\n fill: \"#91B0C2\"\n}), React.createElement(\"g\", null, React.createElement(\"g\", {\n filter: \"url(#filter3_d_2978_41880)\"\n}, React.createElement(\"circle\", {\n r: \"42.793\",\n transform: \"matrix(-1 0 0 1 75.94 123.237)\",\n fill: \"#F7F4FF\"\n}))), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M105.043 175.309l-10.298.861-20.313-20.152.863-2.292-9.973-9.982 18.679-6.882h-4.308l-8.943-8.951 4.545-10.532L94.35 90.74l37.888 37.162c-.343 20.088-11.146 37.627-27.195 47.407z\",\n fill: \"url(#paint4_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M67.703 123a8 8 0 0112.362-6.707l14.477-25.145A36.828 36.828 0 0075.703 86c-20.434 0-37 16.565-37 37h29z\",\n fill: \"url(#paint5_angular_2978_41880)\"\n}), React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M94.297 90.6l.24.138s-12.45 35.125-12.811 35.752a6.92 6.92 0 01-11.985-6.92c.361-.626 24.556-28.97 24.556-28.97z\",\n fill: \"#323232\"\n}), React.createElement(\"circle\", {\n cx: \"75.94\",\n cy: \"123.237\",\n r: \"2.896\",\n fill: \"#EEEBF6\"\n}), React.createElement(\"circle\", {\n cx: \"96.211\",\n cy: \"148.655\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"107.15\",\n cy: \"131.924\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"rect\", {\n x: \"62.427\",\n y: \"135.592\",\n width: \"27.027\",\n height: \"10.039\",\n rx: \"3\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"path\", {\n opacity: \".05\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M85.914 170.534H75.112l-21.605-21.472 2.126-2.775v-1.01L42.8 132.523l2.853-2.529 40.261 40.54z\",\n fill: \"url(#paint6_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M96.362 136.555h-4.988l-38.126-38.01 2.853-2.53 40.261 40.54z\",\n fill: \"url(#paint7_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M116.746 129.006h-4.988L73.632 90.995l2.853-2.53 40.261 40.541z\",\n fill: \"url(#paint8_linear_2978_41880)\"\n}), React.createElement(\"path\", {\n opacity: \".02\",\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M85.793 152.41h-4.988l-38.126-38.011 2.852-2.53 40.262 40.541z\",\n fill: \"url(#paint9_linear_2978_41880)\"\n}), React.createElement(\"circle\", {\n cx: \"75.618\",\n cy: \"155.734\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"55.026\",\n cy: \"148.655\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"circle\", {\n cx: \"44.73\",\n cy: \"131.924\",\n r: \"2.574\",\n fill: \"#A0C3D7\"\n}), React.createElement(\"g\", {\n fill: \"#A0C3D7\"\n}, React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 96.21 97.363)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 107.149 114.094)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 75.618 90.284)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 55.026 97.363)\"\n}), React.createElement(\"circle\", {\n r: \"2.574\",\n transform: \"matrix(1 0 0 -1 44.73 114.094)\"\n}))))))))), React.createElement(\"defs\", null, React.createElement(\"linearGradient\", {\n id: \"paint0_linear_2978_41880\",\n x1: \"-16\",\n y1: \"9\",\n x2: \"-16\",\n y2: \"256\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#FAFAFA\",\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#F4F4F4\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint1_linear_2978_41880\",\n x1: \"178.214\",\n y1: \"43.106\",\n x2: \"178.214\",\n y2: \"195.709\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#F2F9FB\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#fff\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint2_linear_2978_41880\",\n x1: \"178.497\",\n y1: \"204.542\",\n x2: \"178.497\",\n y2: \"213.991\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopColor: \"#90AABF\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopColor: \"#869DAE\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint3_linear_2978_41880\",\n x1: \"154.275\",\n y1: \"146.574\",\n x2: \"96.683\",\n y2: \"91.352\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint4_linear_2978_41880\",\n x1: \"60.762\",\n y1: \"143.327\",\n x2: \"114.747\",\n y2: \"176.019\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".87\"\n}), React.createElement(\"stop\", {\n offset: \"1\",\n stopOpacity: \".01\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint6_linear_2978_41880\",\n x1: \"90.287\",\n y1: \"154.267\",\n x2: \"68.53\",\n y2: \"131.301\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint7_linear_2978_41880\",\n x1: \"100.735\",\n y1: \"120.288\",\n x2: \"78.978\",\n y2: \"97.322\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint8_linear_2978_41880\",\n x1: \"121.119\",\n y1: \"112.739\",\n x2: \"99.362\",\n y2: \"89.773\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"linearGradient\", {\n id: \"paint9_linear_2978_41880\",\n x1: \"90.166\",\n y1: \"136.143\",\n x2: \"68.409\",\n y2: \"113.177\",\n gradientUnits: \"userSpaceOnUse\"\n}, React.createElement(\"stop\", {\n stopOpacity: \".01\"\n}), React.createElement(\"stop\", {\n offset: \"1\"\n})), React.createElement(\"filter\", {\n id: \"filter0_d_2978_41880\",\n x: \"77.703\",\n y: \"96\",\n width: \"178\",\n height: \"34\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"1\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter1_d_2978_41880\",\n x: \"77\",\n y: \"102\",\n width: \"116\",\n height: \"22\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"1\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter2_ddd_2978_41880\",\n x: \"-13.297\",\n y: \"28\",\n width: \"181.534\",\n height: \"189.17\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"4\",\n operator: \"erode\",\n in: \"SourceAlpha\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"7\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"4\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0.600156 0 0 0 0 0.745337 0 0 0 0 0.8625 0 0 0 0.1 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"4\",\n operator: \"dilate\",\n in: \"SourceAlpha\",\n result: \"effect2_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"5\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"16\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0.447059 0 0 0 0 0.807843 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"effect2_dropShadow_2978_41880\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feMorphology\", {\n radius: \"2\",\n operator: \"dilate\",\n in: \"SourceAlpha\",\n result: \"effect3_dropShadow_2978_41880\"\n}), React.createElement(\"feOffset\", {\n dy: \"12\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"8.5\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0.447059 0 0 0 0 0.807843 0 0 0 0.06 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"effect2_dropShadow_2978_41880\",\n result: \"effect3_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect3_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"filter\", {\n id: \"filter3_d_2978_41880\",\n x: \"29.148\",\n y: \"78.444\",\n width: \"93.585\",\n height: \"93.585\",\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n}, React.createElement(\"feFlood\", {\n floodOpacity: \"0\",\n result: \"BackgroundImageFix\"\n}), React.createElement(\"feColorMatrix\", {\n in: \"SourceAlpha\",\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n}), React.createElement(\"feOffset\", {\n dy: \"2\"\n}), React.createElement(\"feGaussianBlur\", {\n stdDeviation: \"2\"\n}), React.createElement(\"feColorMatrix\", {\n type: \"matrix\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2978_41880\"\n}), React.createElement(\"feBlend\", {\n mode: \"normal\",\n in: \"SourceGraphic\",\n in2: \"effect1_dropShadow_2978_41880\",\n result: \"shape\"\n})), React.createElement(\"radialGradient\", {\n id: \"paint5_angular_2978_41880\",\n cx: \"0\",\n cy: \"0\",\n r: \"1\",\n gradientUnits: \"userSpaceOnUse\",\n gradientTransform: \"rotate(-56.035 152.55 -12.515) scale(43.4058 65.5062)\"\n}, React.createElement(\"stop\", {\n stopColor: \"#CFE8FF\"\n}), React.createElement(\"stop\", {\n offset: \".599\",\n stopColor: \"#D1F2F9\",\n stopOpacity: \"0\"\n})))));","import React from 'react';\nimport i18n from 'ui-i18n';\nimport {EmptyState} from '@reltio/components';\nimport LoadingIcon from './icons/Loading.svg';\n\nconst LoadingComponent = () => {\n return (\n <EmptyState\n LogoRenderer={LoadingIcon}\n text={i18n.text('Loading...')}\n secondaryText={i18n.text('Please give us a moment while we load the page')}\n />\n );\n};\n\nexport default LoadingComponent;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center'\n },\n updateTime: {\n color: theme.palette.text.secondary,\n fontSize: '13px',\n paddingRight: '16px'\n }\n}));\n","import React, {useEffect, useState} from 'react';\nimport moment from 'moment';\nimport RefreshIcon from '@mui/icons-material/Refresh';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\nimport {SmallIconButtonWithTooltip} from '@reltio/components';\n\nimport {useReloadAllFacets, useUpdateTime} from '../../contexts/ReloadFacetContext';\n\nimport {useStyles} from './styles';\n\nconst DATE_UPDATE_TIME_MS = 10000;\n\ntype Props = {\n dataLevel: DQDataLevel;\n};\n\nconst UpdateTimeHeader = ({dataLevel}: Props) => {\n const styles = useStyles();\n const [, setTick] = useState(0);\n const refreshAll = useReloadAllFacets();\n const {updateTime} = useUpdateTime(dataLevel);\n\n const handleRefreshAll = () => {\n refreshAll(dataLevel);\n };\n\n useEffect(() => {\n const intervalId = setInterval(() => setTick((timer) => timer + 1), DATE_UPDATE_TIME_MS);\n return () => clearInterval(intervalId);\n }, []);\n\n const date = moment(updateTime);\n return (\n date.isValid() && (\n <div className={styles.root}>\n <span className={styles.updateTime}>{`${i18n.text('Last updated')} ${date.fromNow()}`}</span>\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Refresh')}\n icon={RefreshIcon}\n onClick={handleRefreshAll}\n size=\"S\"\n />\n </div>\n )\n );\n};\n\nexport default UpdateTimeHeader;\n","import {makeStyles} from '@mui/styles';\n\nexport const useStyles = makeStyles(() => ({\n settingsAttributeLevel: {\n marginLeft: '2px',\n marginRight: '2px'\n },\n settingsEntityLevel: {\n marginRight: '-8px',\n marginLeft: '8px'\n }\n}));\n","import classnames from 'classnames';\nimport React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {SettingsMenu} from '@reltio/components';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\n\nimport {useStyles} from './styles';\n\nconst SearchByOVSwitcher = ({dataLevel}: {dataLevel: DQDataLevel}) => {\n const styles = useStyles();\n const {searchByOv} = useDQDashboardState();\n const {changeSearchByOv} = useDQDashboardStateActions();\n const DropDownMenuItem = [\n {\n id: 'ov',\n active: true,\n onClick: () => changeSearchByOv(!searchByOv),\n text: i18n.text('Show OV only'),\n selected: searchByOv\n }\n ];\n return (\n <div\n className={classnames({\n [styles.settingsEntityLevel]: dataLevel === DQDataLevel.ENTITY_TYPE,\n [styles.settingsAttributeLevel]: dataLevel === DQDataLevel.ATTRIBUTE_TYPE\n })}\n >\n <SettingsMenu items={DropDownMenuItem} menuId=\"dqSettingsMenu\"></SettingsMenu>\n </div>\n );\n};\n\nexport default SearchByOVSwitcher;\n","import {equals, pick} from 'ramda';\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport moment from 'moment';\nimport i18n from 'ui-i18n';\nimport {DateRangeEditor, RequestStates, useSavedState} from '@reltio/components';\nimport {getEntityType, DQDataLevel, DateRangeValue, getDateRangeOptions} from '@reltio/mdm-sdk';\n\nimport {useDQDashboardState, useDQDashboardStateActions} from '../../contexts/DQDashboardStateContext';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {useUpdateTime} from '../../contexts/ReloadFacetContext';\nimport {ChartsDataProvider} from '../../contexts/ChartsDataProvider';\nimport {usePermissionsContext} from '../../contexts/PermissionsProvider';\nimport {useDVF} from '../../hooks/useDVF';\nimport {useDvfConfigLink} from '../../hooks/useDvfConfigLink';\nimport {useEntityCount} from '../../hooks/useEntityCount';\nimport {useEntityTypes} from '../../hooks/useEntityTypes';\nimport {useDebounceFunction} from '../../hooks/useDebounceFunction';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {FilterOption} from '../../types/FilterOption';\nimport {ATTRIBUTE_LIST_WIDTH, ENTITY_LEVEL_BAR_WIDTH} from './constants';\nimport {getTimeRangeDates, getPeriodValue} from '../../services/mlDq';\nimport {dateRangeValues, getFirstEntityTypeUri, getValuesDateRange, sortEntityTypesWithCount} from './helpers';\n\nimport AttributeLevelLayout from './AttributeLevelLayout';\nimport DataLevelBreadcrumbs from '../DataLevelBreadcrumbs/DataLevelBreadcrumbs';\nimport ContentSlider from '../ContentSlider/ContentSlider';\nimport DataLevelSwitcher from './DataLevelSwitcher/DataLevelSwitcher';\nimport DQDashboardAttributesList from '../DQDashboardAttributesList/DQDashboardAttributesList';\nimport DQDashboardHeader from '../DQDashboardHeader/DQDashboardHeader';\nimport DQDashboardNoContent from '../DQDashboardNoContent/DQDashboardNoContent';\nimport EntityLevelLayout from './EntityLevelLayout/EntityLevelLayout';\nimport EntityTypeSelector from '../EntityTypeSelector/EntityTypeSelector';\nimport LoadingComponent from '../LoadingComponent/LoadingComponent';\nimport UpdateTimeHeader from '../UpdateTimeHeader/UpdateTimeHeader';\nimport SearchByOVSwitcher from '../SearchByOVSwitcher/SearchByOVSwitcher';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n config: DQDashboardPerspectiveConfig;\n saveState: (state: DQDashboardSavedState) => void;\n getSavedState: () => Promise<DQDashboardSavedState>;\n};\n\nconst DQDashboardPerspectiveView = ({config, saveState, getSavedState}: Props) => {\n const styles = useStyles();\n const entityTypes = useEntityTypes();\n const {zoom, period, entityType, detailedAttributeType, searchByOv} = useDQDashboardState();\n const {\n changeZoom,\n changePeriod,\n setEntityType,\n setDetailedAttributeType: setSelectedAttributeType,\n changeSearchByOv\n } = useDQDashboardStateActions();\n const [entityTypeUri, setEntityTypeUri] = useState<string>('');\n\n const {getEntityCount, state: entityCountRequestState} = useEntityCount(entityTypes);\n const {canGetDQStatistic, permissionsLoadingState, isTimeSeriesAvailable} = usePermissionsContext();\n\n const [dataLevel, setDataLevel] = useState<DQDataLevel>();\n const {resetUpdateTimes} = useUpdateTime(dataLevel);\n\n const dvfConfigLink = useDvfConfigLink(entityType);\n const dvfs = useDVF(entityType?.uri);\n const dvfContext = useMemo(() => ({dvfs, dvfConfigLink}), [dvfs, dvfConfigLink]);\n\n const dqDashboardSavedState = useRef<DQDashboardSavedState>();\n const {isLoaded: isSavedStateLoaded, savedState} = useSavedState<DQDashboardSavedState>(getSavedState);\n const getNewSavedState = (state: DQDashboardSavedState): DQDashboardSavedState => ({\n fieldName: null,\n zoom: zoom || null,\n entityTypeUri,\n period,\n searchByOv,\n ...dqDashboardSavedState?.current,\n ...state\n });\n const isPermissionsRequestFinished =\n permissionsLoadingState === RequestStates.ERROR || permissionsLoadingState === RequestStates.LOADED;\n\n useEffect(() => {\n saveStateHandler({searchByOv});\n }, [searchByOv]);\n\n useEffect(() => {\n const selectedEntityType = entityTypes && entityTypeUri ? getEntityType({entityTypes}, entityTypeUri) : null;\n setEntityType(selectedEntityType);\n }, [entityTypeUri]);\n\n useEffect(() => {\n if (isSavedStateLoaded && isPermissionsRequestFinished) {\n dqDashboardSavedState.current = savedState;\n changeSearchByOv(!!savedState.searchByOv && config.showOVSwitcher);\n const isEntityTypeExists = !!getEntityType({entityTypes}, savedState.entityTypeUri);\n setEntityTypeUri(\n isEntityTypeExists ? savedState.entityTypeUri : getFirstEntityTypeUri(sortedEntityTypesWithCount)\n );\n\n setDataLevel((savedState.fieldName && savedState.dataLevel) || DQDataLevel.ENTITY_TYPE);\n const defaultPeriod = isTimeSeriesAvailable ? DateRangeValue.LAST_WEEK : DateRangeValue.LAST_DAY;\n const newPeriod =\n isTimeSeriesAvailable &&\n (dateRangeValues.includes(savedState?.period as DQDateRangeValue) || Array.isArray(savedState?.period))\n ? savedState.period\n : defaultPeriod;\n changePeriod(newPeriod);\n if (savedState.zoom) {\n changeZoom(savedState.zoom);\n }\n }\n }, [isSavedStateLoaded, isPermissionsRequestFinished]); // eslint-disable-line\n\n useEffect(() => {\n if (dataLevel === DQDataLevel.ENTITY_TYPE) {\n saveStateHandler({\n fieldName: null,\n dataLevel: DQDataLevel.ENTITY_TYPE,\n entityTypeUri\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dataLevel, entityTypeUri]);\n\n useEffect(() => {\n if (isSavedStateLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) {\n const {startDate, endDate} = getTimeRangeDates(period);\n saveStateHandler({\n period: [new Date(startDate), new Date(endDate)],\n zoom\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [zoom]);\n\n useEffect(() => {\n if (isSavedStateLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) saveStateHandler({period});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [period]);\n\n const saveStateDebounce = useDebounceFunction<DQDashboardSavedState>(saveState);\n const saveStateHandler = (state: DQDashboardSavedState) => {\n const newSavedState = getNewSavedState(state);\n saveStateDebounce(newSavedState, dqDashboardSavedState.current);\n dqDashboardSavedState.current = newSavedState;\n };\n const sortedEntityTypesWithCount = useMemo(\n () => sortEntityTypesWithCount({entityTypes, getEntityCount}),\n [entityTypes, getEntityCount]\n );\n\n const handleSetEntityTypeByUri = useCallback(\n (entityTypeUri: string) => {\n if (entityType?.uri !== entityTypeUri) {\n resetUpdateTimes(DQDataLevel.ENTITY_TYPE);\n setSelectedAttributeType(null);\n setEntityTypeUri(entityTypeUri);\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n }\n },\n [entityType?.uri] // eslint-disable-line\n );\n\n const handleAttributesListChange = ({\n selectedDetailedAttributeType,\n filterText,\n filterOptions\n }: {\n selectedDetailedAttributeType: DetailedAttributeType;\n filterText: string;\n filterOptions: FilterOption[];\n }) => {\n const fieldName = selectedDetailedAttributeType?.fieldName;\n if (\n fieldName ||\n !equals({filterText, filterOptions}, pick([filterText, filterOptions], dqDashboardSavedState.current))\n )\n saveStateHandler({\n fieldName: fieldName || null,\n filterOptions,\n filterText,\n dataLevel: fieldName ? DQDataLevel.ATTRIBUTE_TYPE : dataLevel\n });\n\n fieldName && setDataLevel(DQDataLevel.ATTRIBUTE_TYPE);\n\n if (!equals(detailedAttributeType, selectedDetailedAttributeType)) {\n resetUpdateTimes(DQDataLevel.ATTRIBUTE_TYPE);\n selectedDetailedAttributeType && setSelectedAttributeType(selectedDetailedAttributeType);\n }\n };\n\n const showEntityLevel = () => {\n setSelectedAttributeType(null);\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n resetUpdateTimes(DQDataLevel.ENTITY_TYPE);\n };\n\n const showDashboard =\n entityCountRequestState !== RequestStates.LOADING && isSavedStateLoaded && isPermissionsRequestFinished;\n const showContent = entityType && canGetDQStatistic && !!getEntityCount(entityTypeUri);\n const showTimeRange = dataLevel === DQDataLevel.ATTRIBUTE_TYPE && isTimeSeriesAvailable;\n const dateRangeEditorValue = getPeriodValue(zoom, period);\n\n return showDashboard ? (\n <div className={styles.perspectiveView}>\n <DQDashboardHeader title={i18n.text('Data Quality')}>\n {entityType && (\n <div className={styles.navigationWrapper}>\n <EntityTypeSelector\n entityTypes={sortedEntityTypesWithCount}\n entityTypeUri={entityType.uri}\n onChange={handleSetEntityTypeByUri}\n />\n <DataLevelBreadcrumbs dataLevel={dataLevel} onChange={setDataLevel} />\n <div className={styles.headerRightSide}>\n {config.showOVSwitcher && <SearchByOVSwitcher dataLevel={dataLevel} />}\n {showTimeRange && (\n <DateRangeEditor\n values={dateRangeEditorValue}\n options={getDateRangeOptions(dateRangeValues)}\n getValuesDateRange={getValuesDateRange}\n onChange={changePeriod}\n className={styles.periodSelector}\n TextFieldProps={{\n InputProps: {\n classes: {input: styles.input, root: styles.inputRoot},\n disableUnderline: true\n }\n }}\n MenuProps={{classes: {paper: styles.paper}}}\n classes={{dropdownIndicator: styles.dropdownIndicator}}\n DateRangePickerProps={{\n maxDate: moment().startOf('day').toDate()\n }}\n />\n )}\n <UpdateTimeHeader dataLevel={dataLevel} />\n </div>\n </div>\n )}\n </DQDashboardHeader>\n {showContent ? (\n <div className={styles.content}>\n <DVFContext.Provider value={dvfContext}>\n <ChartsDataProvider>\n <ContentSlider\n page={dataLevel === DQDataLevel.ENTITY_TYPE ? 0 : 1}\n pages={[\n [{index: 0}, {index: 2, width: ATTRIBUTE_LIST_WIDTH + 12}],\n [\n {index: 1, width: ENTITY_LEVEL_BAR_WIDTH},\n {index: 2, width: ATTRIBUTE_LIST_WIDTH},\n {index: 3}\n ]\n ]}\n >\n <ChartsDataProvider>\n <EntityLevelLayout config={config} entityType={entityType} />\n </ChartsDataProvider>\n <DataLevelSwitcher showEntityLevel={showEntityLevel} entityType={entityType} />\n <DQDashboardAttributesList\n entityType={entityType}\n onAttributesListChange={handleAttributesListChange}\n defaultFieldName={dqDashboardSavedState.current?.fieldName}\n defaultFilterText={dqDashboardSavedState.current?.filterText}\n defaultFilterOptions={dqDashboardSavedState.current?.filterOptions}\n disableAttributeSelection={dataLevel === DQDataLevel.ENTITY_TYPE}\n />\n <div className={styles.attributeLevelWrapper}>\n {detailedAttributeType && (\n <AttributeLevelLayout config={config} entityType={entityType} />\n )}\n </div>\n </ContentSlider>\n </ChartsDataProvider>\n </DVFContext.Provider>\n </div>\n ) : (\n entityType && <DQDashboardNoContent />\n )}\n </div>\n ) : (\n <LoadingComponent />\n );\n};\n\nexport default DQDashboardPerspectiveView;\n","import {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {isAvailableEntityType, Metadata} from '@reltio/mdm-sdk';\n\nexport const useEntityTypes = () => {\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const entityTypes = useMemo(() => metadata.entityTypes.filter(isAvailableEntityType), [metadata.entityTypes]);\n return entityTypes;\n};\n","import {insert, join, pipe, propEq, split} from 'ramda';\nimport {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport mdmModule from '@reltio/mdm-module';\nimport {getLastUriPart, TEntityType, getConsoleApps} from '@reltio/mdm-sdk';\nimport {useSafePromise} from '@reltio/components';\n\nexport const useDvfConfigLink = (selectedEntityType: TEntityType) => {\n const [consoleLink, setConsoleLink] = useState<string>(null);\n const [dvfConfigLink, setDVFConfigLink] = useState<string>(null);\n const safePromise = useSafePromise();\n const servicesPath = useSelector(mdmModule.selectors.getServicesPath);\n const environment = useSelector(mdmModule.selectors.getEnvironment) as string;\n const tenant = useSelector(mdmModule.selectors.getTenant) as string;\n useEffect(() => {\n safePromise(getConsoleApps({servicesPath, tenant, environment}))\n .then((response) => {\n const consoleLink = response?.data?.apps.find(propEq('name', 'Console')).uri;\n setConsoleLink(consoleLink);\n })\n .catch(() => setConsoleLink(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [environment, tenant, servicesPath]);\n useEffect(() => {\n const dvfConfigLink =\n consoleLink && selectedEntityType?.uri\n ? pipe(\n split('?'),\n insert(1, `datamodeler/entityDetails/${getLastUriPart(selectedEntityType.uri)}/validation?`),\n join('')\n )(consoleLink)\n : null;\n setDVFConfigLink(dvfConfigLink);\n }, [selectedEntityType, consoleLink]);\n\n return dvfConfigLink;\n};\n","import {useState, useEffect, useCallback, useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {getDVF, DataValidationFunction, ApiErrorCode} from '@reltio/mdm-sdk';\nimport mdmModule from '@reltio/mdm-module';\nimport {useSafePromise, RequestStates} from '@reltio/components';\n\nexport const useDVF = (entityTypeUri: string) => {\n const [dvfs, setDvfs] = useState<DataValidationFunction[]>([]);\n const [requestState, setRequestState] = useState<RequestStates>(RequestStates.INIT);\n const [errorCode, setErrorCode] = useState<number>();\n const tenant: string = useSelector(mdmModule.selectors.getTenant);\n const dvfPath: string = useSelector(mdmModule.selectors.getDVFPath);\n const safePromise = useSafePromise();\n const env: string = useSelector(mdmModule.selectors.getEnvironment);\n const canUserReadDVF = useSelector(mdmModule.selectors.getCanUserReadDVF);\n const onError = (error: {errorCode: number}) => {\n console.error(error); // eslint-disable-line\n setRequestState(RequestStates.ERROR);\n setDvfs([]);\n setErrorCode(error?.errorCode);\n };\n const onRequestFinished = (dvf: {functions: DataValidationFunction[]}) => {\n setDvfs(dvf?.functions || []);\n setErrorCode(undefined);\n setRequestState(RequestStates.LOADED);\n };\n const loadDVFs = useCallback(() => {\n if (!canUserReadDVF) {\n onError({errorCode: ApiErrorCode.ACCESS_DENIED});\n return;\n }\n if (entityTypeUri && env) {\n setErrorCode(undefined);\n setRequestState(RequestStates.LOADING);\n return safePromise(getDVF({dvfPath, tenant, entityTypeUri, env})).then(onRequestFinished).catch(onError);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dvfPath, tenant, entityTypeUri, env]);\n\n useEffect(() => {\n loadDVFs();\n }, [loadDVFs]);\n\n const result = useMemo(\n () => ({data: dvfs, state: requestState, reload: loadDVFs, errorCode}),\n [dvfs, requestState, loadDVFs, errorCode]\n );\n return result;\n};\n","import {useCallback, useRef} from 'react';\nimport {equals} from 'ramda';\n\nconst DEBOUNCE_TIMEOUT = 200;\n\nexport const useDebounceFunction = <T extends unknown>(fn: (params: T) => void) => {\n const timer = useRef<ReturnType<typeof setTimeout>>();\n const lastParams = useRef<T>(null);\n\n return useCallback(\n (params: T, startParams: T) => {\n timer?.current && clearTimeout(timer?.current);\n if (!lastParams?.current) lastParams.current = startParams;\n if (!equals(params, lastParams?.current)) {\n timer.current = setTimeout(() => {\n lastParams.current = params;\n fn(params);\n }, DEBOUNCE_TIMEOUT);\n }\n },\n [fn]\n );\n};\n","export const NO_DATA_HEIGHT = 359;\nexport const ATTRIBUTE_LIST_WIDTH = 360;\nexport const ENTITY_LEVEL_BAR_WIDTH = 60;\n","import React, {useCallback} from 'react';\nimport {Provider} from 'react-redux';\nimport {Store} from 'redux';\nimport {StyledEngineProvider, createTheme} from '@mui/material/styles';\nimport {ThemeProvider} from '@mui/styles';\nimport createGenerateClassName from '@mui/styles/createGenerateClassName';\nimport StylesProvider from '@mui/styles/StylesProvider';\nimport {LocalizationProvider} from '@mui/x-date-pickers/LocalizationProvider';\nimport {AdapterMoment} from '@mui/x-date-pickers/AdapterMoment';\n\nimport {promisifyCallback} from '@reltio/mdm-sdk';\n\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {ReloadFacetProvider} from '../../contexts/ReloadFacetContext';\nimport {PermissionsProvider} from '../../contexts/PermissionsProvider';\nimport {DQDashboardStateProvider} from '../../contexts/DQDashboardStateContext';\nimport {theme} from '../../theme';\n\nimport DQDashboardPerspectiveView from './DQDashboardPerspectiveView';\n\nconst dqDashboardTheme = createTheme(theme);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'DQDashboardPerspective',\n disableGlobal: true,\n seed: 'dash'\n});\n\ntype Props = {\n store: Store<unknown>;\n config: DQDashboardPerspectiveConfig;\n saveState: (state: DQDashboardSavedState) => void;\n getSavedState: (clb: (state: DQDashboardSavedState) => void) => void;\n};\n\nconst DQDashboardPerspective = ({store, config, saveState, getSavedState}: Props) => {\n const getSavedStatePromisified: () => Promise<DQDashboardSavedState> = useCallback(\n promisifyCallback(getSavedState),\n [getSavedState]\n );\n return (\n <Provider store={store}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={dqDashboardTheme}>\n <StylesProvider generateClassName={generateClassName}>\n <ReloadFacetProvider>\n <DQDashboardStateProvider>\n <PermissionsProvider config={config}>\n <DQDashboardPerspectiveView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n </PermissionsProvider>\n </DQDashboardStateProvider>\n </ReloadFacetProvider>\n </StylesProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </LocalizationProvider>\n </Provider>\n );\n};\n\nexport default DQDashboardPerspective;\n","import {DQDashboardView} from '@reltio/dq-dashboard';\n\nexport default DQDashboardView;\n"],"names":["AvatarStates","className","icon","avatarText","rootClasses","otherProps","state","setState","useState","useEffect","ICON_MODE","TEXT_MODE","onImageLoadFail","ERROR_MODE","classnames","iconRoot","src","onError","textRoot","contextSelector","CellRenderer","withContext","TableContext","useStyles","makeStyles","theme","basicViewPaper","display","flexDirection","basicView","BasicView","forwardRef","ref","children","styles","Paper","classes","root","displayName","flex","padding","paddingTop","toolbar","minHeight","lineHeight","title","fontSize","minWidth","fontWeight","whiteSpace","overflow","textOverflow","Toolbar","Typography","variant","i18n","bar","backgroundColor","palette","secondary","main","opacity","position","borderRadius","top","left","height","widthIsNumber","width","is","Number","maxWidth","getBarColorWidth","useCallback","style","buttonRoot","color","action","active","alpha","selected","paper","menuItem","menuText","text","primary","letterSpacing","MenuItemWithTooltip","withTooltip","MenuItem","MenuItemRenderer","item","onMenuClose","identity","disabled","tooltip","onClick","id","selectable","tooltipTitle","showForDisabled","e","Checkbox","checked","DropDownMenuButton","menuId","buttonComponent","Button","buttonContent","menuItems","buttonProps","popoverProps","onMenuOpen","DefaultMenuItemRenderer","ButtonComponent","buttonRef","useRef","isOpen","setIsOpen","useDidUpdateEffect","handleToggle","stopPropagation","open","undefined","Menu","autoFocus","anchorEl","current","onClose","anchorOrigin","vertical","horizontal","transformOrigin","elevation","MenuListProps","autoFocusItem","map","index","key","flexWrap","alignItems","justifyContent","boxSizing","textAlign","root_small","embedded","flexShrink","full","textBox","marginTop","secondaryText","button","boxShadow","EMPTY_STATE_VARIANTS","EMPTY_STATE_ICONS","SEARCH_RESULTS","props","viewBox","xmlns","xmlnsXlink","cx","cy","fx","fy","r","gradientTransform","stopColor","stopOpacity","offset","x1","y1","x2","y2","x","y","filterUnits","stdDeviation","in","stroke","strokeWidth","fill","fillRule","xlinkHref","fillOpacity","mask","transform","d","rx","ry","filter","SELECT_ATTRIBUTES","maskType","maskUnits","clipRule","gradientUnits","NO_DATA","dx","dy","result","values","type","mixBlendMode","ERROR","colorInterpolationFilters","floodOpacity","mode","in2","LogoRenderer","buttonTitle","access","showButton","h5","subtitle1","ErrorBoundary","React","constructor","super","this","error","componentDidCatch","console","render","EmptyStub","widthToHide","handleWidth","reltioLayoutItemToReactGridLayoutItem","maxHeight","isStatic","w","h","minW","minH","maxW","maxH","i","static","reactGridLayoutItemToReltioLayoutItem","reactGridLayoutToReltioLayout","layout","getReltioLayoutItemById","curry","find","propEq","updateExtraPropsInLayoutItem","from","to","mergeAll","pick","copyPropsFromPreviousLayout","oldReltioLayout","reltioLayout","layoutItem","pipe","prop","defaultTo","__","alignGroupedItemsHeights","heightsMap","oneRowItemsHeights","autosizing","newHeight","Math","max","minMaxHeights","calcLayoutItemsHeight","_","gridLayout","background","border","transitionDuration","zIndex","userSelect","transitionProperty","transition","willChange","backgroundImage","bottom","right","svg2Url","backgroundRepeat","backgroundOrigin","cursor","visibility","gridFullscreen","overflowY","isResizing","pointerEvents","DEFAULT_LAYOUT_OPTIONS","cols","rowHeight","margin","ReltioGridLayout","views","layoutOptions","onLayoutChanged","noop","draggableHandle","LayoutItem","onRemove","onDrop","droppingItem","isDroppable","resizingItemId","setResizingItemId","fullscreenItemId","setFullscreenItemId","setWidth","processedLayout","useMemo","reltioLayoutToReactGridLayout","onReltioLayoutChanged","ifElse","always","onToggleFullscreen","prevId","isFullscreenEnabled","refreshMode","refreshRate","onResize","innerRef","autoSize","onLayoutChange","isResizable","isDraggable","onResizeStart","onResizeStop","isItemFullscreen","autosizeComponent","AutosizeComponent","layoutItemId","handleHeight","options","ceil","calcHeight","layoutItemConfig","fullscreen","isFullscreen","memo","checkbox","marginRight","SettingsMenuItemRenderer","items","SmallIconButtonWithTooltip","SettingsIcon","size","sourceType","metadata","useSelector","mdmModule","uri","findSourceSystemByUri","getSourceSystemLabel","sourceIcon","getAbsoluteImageUrl","VerticalDivider","borderLeft","propTypes","PropTypes","enrichDataWithPercents","data","percents","countPercents","pluck","percent","Component","WithPercents","dataWithPercents","clickable","useClickableStyle","useActions","actions","dispatch","Object","entries","reduce","acc","actionName","actionCreator","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","then","catch","RequestStates","loader","LinearProgress","menuItemTitle","openIcon","setAnchorEl","isMenuOpen","Boolean","handleMenuClose","handleItemClick","IconButton","currentTarget","MoreVert","ListItemIcon","ListItemText","view","DashboardViewIdContext","value","ReloadFacetSignalContext","createContext","ReloadFacetActionContext","RequestsUpdateTimeContext","ReloadFacetProvider","refreshSignals","setRefreshSignals","updateTimes","setUpdateTimes","resetUpdateTimes","dataLevel","assoc","refreshAll","signals","nextSignal","propOr","Provider","updateTime","actionId","time","Date","now","assocPath","useReloadFacet","reload","useContext","Error","refreshSignal","useRefreshAction","nanoid","useUpdateTime","min","DQDateRangeValue","omit","DateRangeValue","getDQDateRangeByValue","currentDate","moment","subtract","valueOf","getDateRangeByValue","getFirstEntityTypeUri","path","dateRangeValues","getValuesDateRange","DQDashboardStateContext","DQDashboardDispatchContext","SET_ENTITY_TYPE","SET_ATTRIBUTE_TYPE","CHANGE_PERIOD","CHANGE_ZOOM","CHANGE_OV_STATE","ADD_EXPORT_LOADING_ID","DELETE_EXPORT_LOADING_ID","setEntityType","createStandardAction","setDetailedAttributeType","changeZoom","changePeriod","changeSearchByOv","addExportLoadingId","deleteExportLoadingId","getValidZoom","zoom","dqDashboardStateReducer","detailedAttributeType","payload","entityType","period","dateRange","searchByOv","exportLoadingIds","dissoc","DQDashboardStateProvider","useReducer","dqDashboardStateActions","useDQDashboardState","viewStateContext","useDQDashboardStateActions","viewStateActions","PermissionsContext","PermissionsProvider","config","permissions","tenantPermissions","requestState","permissionsLoadingState","setPermissions","setRequestState","safePromise","useSafePromise","apiPath","tenant","onRequestFinished","loadPermissions","getTenantPermissions","usePermissionsRequest","entityTypeUri","roles","canGetDQStatistic","noMetaDataRestrictions","canReadWithoutFilter","includes","getPermissionsForRoles","getPermissionByUri","configurationLevelPermission","entityLevelPermission","isEmpty","some","checkPermissions","hasRestrictions","showTimeSeries","showErrorBands","showExportButton","isTimeSeriesAvailable","usePermissionsContext","defaultTheme","DVFContext","ChartsDataContext","ChartsDataProvider","chartsData","setChartsData","changeChartsData","useChartsDataContext","useEntityCount","entityTypes","entitiesCountMap","setEntitiesCountMap","getEntityCount","buildFilterQueryString","fieldName","FilterOptions","getFacets","query","generateValuableQueryString","activeness","body","pageSize","pageNo","getLastUriPart","ChartDataType","CustomViewType","ViewType","DQMetric","RDMLookupState","defaultViewsByDataLevel","DQDataLevel","FILL_RATE","UNIQUENESS","SUMMARY","DATA_VALIDATION","FREQUENCY","LENGTH_STATISTIC","PATTERN","CROSSWALK_ANALYSIS","VALUE_DISTRIBUTION","UNSUPPORTED","timeSeries","CONSOLIDATION_RATE","RDM_TRANSCODE","defaultLayoutsByDataLevel","today","default","SSN","BOOLEAN","DATE","INTEGER","FLOAT","timeRange","boolean","date","integer","float","RDM_LOOKUP_EXIST","RDM_LOOKUP_NOT_EXIST","getAdvancedSearchFilter","filters","attributes","operator","SearchOperator","localizeChartValues","chartData","localizedValue","getPercentLabel","isNil","isEmptyData","facetFiltersToSearchState","advanced","when","isDateType","evolve","mapFilterValue","parseTimestamp","version","getSearchState","getFilter","getChartDataTypeByAttributeType","DataTypes","STRING","UNKNOWN","getValidViews","allViews","supportedViews","viewType","viewIndex","findIndex","concat","getMetricsFromViews","metric","uniq","getBarWidthStyle","enrichChartDataWithSourceLabel","group","label","getEntityTypeSummarySearchState","formatPercent","toFixed","transformTimeSeriesChartData","getChartState","states","all","equals","any","NO_DATA_AVAILABLE","NO_PROFILES","prependZeroIfNeeds","number","getTimeSeriesData","getData","timeSeriesData","_max_date","sortBy","getStatisticData","anomalyData","dataValues","anomaly","getAnomalyData","getTimeRangeDates","startTimestamp","endTimeStamp","getDateRangeByDatePeriod","startDate","endDate","getFullYear","getMonth","getDate","checkIsTimeSeries","getChartTooltipDateTitle","dataKeys","cond","either","keys","allValuesEqualZero","T","hasTimeRange","enrichTimeSeriesDataWithTodayData","todayChartData","format","reject","append","todayData","currentData","todayChartDataWithPercent","todayOption","FillRateState","UniquenessAnalysisState","getStateFromMetric","todayDataForTimeSeries","dataItem","getTodayData","filterValidDVFs","dvfs","activeDVFUris","isNoProfiles","lineKeys","areaKeys","F","isNoDataAvailable","DataLevelContext","isContainActiveVF","dvf","attributeTypeUri","allPass","StatusVF","isFloatingType","getAttributeLabel","getLabel","name","AttrTypeDetailsType","filterAttributeByDetails","filterOptions","detail","details","filterAttributeTreeByDetails","length","child","filterAttributeByNotEmpty","fillRates","fillRate","filterAttributesTypesByName","filterText","array","resultArray","currentItem","isCurrentItemMatch","toLowerCase","filterAttributeByName","push","assign","getAttrTypeDetails","attrTypeItem","matchAttributes","required","isAttributeReference","INCLUDED_IN_MATCHING","CONTAIN_VF","REQUIRED","REFERENCE","RDM_LOOKUP","isRDMLookupAttrType","getDetailLabel","attributeDetailType","buildItems","parents","level","chain","childrenItems","isReference","attributeItem","attributeUriToSearchUri","isReferenceChild","useChartsDataRequest","metrics","attributeFieldName","loadChartsData","async","getActiveProfiles","ActivityFilters","getInactiveProfiles","getDqChartsData","getDQChartsData","Promise","activeProfiles","inactiveProfiles","dqChartsData","has","sourceSystems","summary","pathOr","refreshAction","paddingRight","infoDataLabel","chartDataLabel","anomalyTitle","anomalyTitleBackground","anomalyTitleWrapper","anomalyValue","paddingLeft","row","tooltipWrapper","DataRenderer","ChartDataRenderer","fillRateSquare","verticalAlign","getValueLabel","getColor","tooltipData","FillRateChartColors","getFillRateColorByState","getChartItemColor","getFillRateColors","getLabelFromState","formatFillRateData","indexOf","formatFillRatesData","toPairs","getFillRateData","getFillRateChartData","converge","colors","getFillRateFilter","getFillRateSearchState","useChartData","getChartData","getRawFilterSearchState","keyword","isRawFilter","getEqualsRawFilterSearchState","excludeDescendantEntityTypes","searchState","entityTypesFilter","entityTypesUris","AdditionalFilterOptionsValues","join","getExcludedEntityTypesRawFilter","getDescendantEntityTypes","currentRawFilter","newRawFilter","addOVOption","ovOption","ovOnly","useSearchRedirect","useDispatch","globalFilter","activityFilter","ActivityFilter","search","isMuted","ui","legendLabel","legendValue","legendHorizontal","marginBottom","legendVertical","itemColor","dataKey","ANOMALY_DATA_KEY","withPercents","legendProps","align","wrapperStyle","content","formatNumberAsMetric","VIOLATED_PROFILES_METRIC","DIVIDER","_extends","target","arguments","source","prototype","hasOwnProperty","call","apply","menuButton","exportLoadingId","exportData","exportParams","exportDQPath","replace","attributeType","attributeDataType","isTimeseries","utc","getFileName","dataType","useExportDQParams","exportId","exportDQ","res","arrayBuffer","blob","Blob","url","URL","createObjectURL","link","document","createElement","href","download","appendChild","click","removeChild","finally","useExportData","ExportResult","DashboardPopupMenu","EmptyStateVariants","container","paddingBottom","small","medium","large","message","refreshButton","refreshIcon","defaultIcon","onRefresh","errorData","SMALL","Icon","startIcon","Replay","viewContent","loadingState","BasicViewContent","DashboardLinearLoader","infoIcon","infoTooltipTitle","hasInfoIcon","hasChildren","isAttributeLevel","BasicViewHeader","SmallIconButton","InfoIcon","tooltipPlacement","HideOnShrink","dataReltioId","chipProps","isDateRangeValue","getRangeOptionLabel","Chip","BarAxis","stackedBar","flexGrow","inactivePart","tooltipFillRate","legendWrapper","rangeWrapper","rangeValue","popper","Bar","getTooltipData","onItemClick","onBarClick","maxValue","sum","isExportAvailable","Tooltip","followCursor","searchProfiles","ANOMALY_METRICS","useMlDqDataRequest","LAST_WEEK","setTimeSeriesData","mlDqPath","oldRequestDependencies","needRequestErrorBandsData","memoizedRequestDependencies","toString","getMlDqData","attribute","applySpec","statisticData","needRefresh","currentRange","last","head","currentStartTime","currentEndTime","startTime","endTime","needRefreshData","getValuesFromChartData","flatten","roundPercent","round","XAxisTickFormatter","getZoomedData","indexStart","indexEnd","slice","infoPanel","gap","info","dynamicInfo","dynamicInfoPositive","dynamicInfoNegative","dynamicIcon","dynamicPercent","isPositiveDynamic","abs","infoLabel","percentKey","zoomedData","lastChartData","filteredData","Infinity","prevPercent","lastPercent","getDynamicPercent","lastDateOfPeriod","dateLabel","isSame","noPercentLabel","DAYS_OF_WEEK","MONTHS","getFormattedDataForBarChart","chartType","RELTIO_PROFILES","SOURCE_PROFILES","getConsolidationRateChartData","InfoPanelProperties","getLabelForInfoPanel","propName","Properties","lengthStatistics","MEDIAN","AVERAGE","MININMUN","MAXIMUM","valueDistribution","crosswalkAnalysis","NUMBER_OF_SOURCES","AVG_NUMBER_OF_PROFILES","MIN_NUMBER_OF_PROFILES","MAX_NUMBER_OF_PROFILES","getInfoPanelDataForBarChart","getDataForBarChart","infoPanelData","getChartValueLabel","formatDataTypeValue","dataTypeDefinition","convertDataWithInterval","getStartRangeFromChartData","split","chartDataWithRange","sort","ascend","startRange","endRange","isLastItem","addIntervalBrackets","getLengthChartData","getMonthDistributionData","getDayOfWeekDistributionData","getDayOfMonthDistributionData","getDayOfweekDistributionSearchState","dayOfWeek","getMonthDistributionSearchState","month","getDayOfMonthDistributionSearchState","dayOfMonth","getLengthStatisticsSearchState","getRangeRawFilterSearchState","getCrosswalkAnalysisSearchState","getValueDistributionFilterForDate","timestampStart","timestampEnd","getValueDistributionFilterForNumber","getValueDistributionFilterForFloat","lastItem","isSingleValue","getValueDistributionSearchState","getConsolidationRateFilter","getConsolidationRateSearchState","getBarOpacity","selectedBar","tickFormatter","toUpperCase","isPercent","minLineChartData","getMinValueFromLineChartData","maxLineChartData","getMaxValueFromLineChartData","minYAxisValue","maxYAxisValue","updatedMinData","updatedMaxData","getUpdatedEdgeData","xAxis","tick","tickMargin","angle","textAnchor","tickLine","interval","scale","yAxis","tickCount","domain","cartesianGrid","strokeDasharray","strokeOpacity","line","dot","activeDot","referenceLine","isFront","labelForY","area","legend","DEFAULT_LINE_COLOR","getTooltip","getTooltipProp","yAxisLabel","getLineChartSettings","tooltipProps","selectedDots","setSelectedDots","zoomAreaStart","setZoomAreaStart","zoomAreaEnd","setZoomAreaEnd","emptyAreas","getDateByIndex","every","isNaN","isLineChartDataEmpty","areas","lastArea","end","start","extendArea","getEmptyAreas","separateLines","currentValue","currentIndex","dataArray","getSeparateLines","hasZoomArea","onMouseMove","mouseEvent","isTooltipActive","activePayload","activeLabel","onMouseLeave","onMouseDown","onMouseUp","Array","isArray","emptyArea","separateLine","filterNull","renderData","monoFontCell","fontFamily","timeSeriesContent","tooltipKeys","currentPayload","mlDqData","mlDqState","mlDqReload","todayState","todayReload","reloadFunction","isTimeSeries","InfoDataRenderer","UniquenessChartColors","getUniquenessColorByState","getUniquenessColors","formatUniquenessAnalysisData","getUniquenessData","getUniquenessChartData","uniqueness","dataMlDq","stateMlDq","reloadMlDq","dataToday","stateToday","reloadToday","loading","badQuality","AttributeTypeDetailIconSizes","NORMAL","AttributeTypeDetailIconVariant","AttributeTypeDetailIcon","detailType","iconVariant","isDataLoading","isDataQualitative","checkIsDataQualitativeForSummary","LOADING","BAD_QUALITY","rootTimeRange","marginLeft","chipClasses","header","borderRight","entitySummary","attributeTypeSummary","infoTitle","infoContent","attributeTypeIconWrapper","totalLoading","summaryWrapper","HeaderInfo","AttributeTypeIconSizes","entityTypesArray","total","recordsInfo","CircularProgress","attributeTypesCount","getAttributeTypesTree","collectAttributes","attributesCollection","countEntityTypeAttributes","getValue","isAttributeTypeLevel","DefaultIcon","titleChildren","viewTitle","getFormattedDataForTableChart","valueComparator","sortDirection","sortField","a","b","filterExistedDVF","chartDataItem","findDVFByUri","enrichDVFDataWithFunctionLabel","getAttributeTypeLabelFromHierarhy","enrichEntityLevelDVFData","attributeUri","attributeTypesHierarhy","getAttributeTypesHierarchyByUri","attributeLabel","getValidationChartData","getFrequencyChartData","getPatternAnalisysData","getDVFAnalyticAttribtuteUri","attributeName","getValidationFilter","getFrequencyAnalysisStateForTimestamp","attributeValue","getFrequencyAnalysisFilterForDate","getFrequencyAnalysisFilter","getFrequencyAnalysisFilterForBoolean","parseBoolean","getFrequencyAnalysisSearchState","isTimestampBasedType","isBooleanType","getPatternAnalysisSearchState","pattern","getRowsCounterLabel","NO_DATA_FIELD","getEntityLevelColumnsOptions","functionsCount","sortable","secondLabel","getBarColor","getDvfColor","getAttributeLevelColumnsOptions","getColumnsOptions","getViolatedValidationData","titleCount","countProfiles","chartInfoPanel","VVFNoDataChartType","chartTitle","dvfConfigLink","dataSourceLabel","DVF_NOT_SUPPORTED","NotSupportedIcon","DVF_NOT_CONFIGURE","Link","component","underline","DATA_VALID","NiceOneIcon","PERMISSION_DENIED","useNoDataDvfType","activeDvfs","errorCode","dvfsState","chartDataState","hasData","chartState","isAttributeDataLevel","isPermissionDenied","ApiErrorCode","isDVFNotSupported","isDVFNotConfigured","isDataValid","useDvfs","onlyActive","dvfsData","currentDvfs","getDVFsForAttribute","getLabelAndMaxValue","getValueByColumnId","rowValue","handler","childrenRef","el","clientWidth","scrollWidth","headCell","isFirstColumn","headCellWithRange","headLabel","labelWrapper","rangeLabel","tooltipValue","useNumberCellStyles","barColor","colorBarContainer","numberContainer","headCellData","headIndex","formattedMaxValue","hasRange","isOverflowing","setIsOverflowing","labelElement","overflowed","DefaultHeadCellRenderer","columnsHeaders","withTableContext","columnData","cellClassName","labelRenderer","LabelRenderer","hasCustomRenderer","utils","formattedValue","ColorBar","tableContainer","cellBorder","getExtendedLabel","columnsOptions","basicTableRef","tableClasses","headData","columnOptions","resizable","headCellRenderer","HeadCellRenderer","rowCellValueRenderer","LabelCellRenderer","initialWidth","NumberCellValueRenderer","context","BasicTable","columnsData","rowsData","headRowHeight","getRowCellHeight","defaultColumnWidth","defaultColumnMinWidth","hoverStateEnabled","layoutItemContent","customComparator","contentChildren","setSortDirection","setSortField","comparator","defaultComparator","handleSort","field","toggleSortOrder","sortedData","sorting","order","onSort","TotalInfo","totalProfiles","invalidProfiles","totalInfo","dvfData","dvfErrorCode","dvfsReload","getNoDataStatus","getEntityLevelValidationChartData","noDataType","dvfUris","invalidProfilesCount","setInvalidProfilesCount","getTotals","useInvalidProfiles","dvfUri","getValidationSearchState","functionId","propSatisfies","reloadDvf","stateDvf","without","preparedData","convertDateLabelsInChartData","isSSNType","xAxisLabel","textTransform","XAxisLabel","xCoord","ExpandedValueTooltip","renderXAxis","tickProps","visibleTicksCount","maxTickWidth","showCategories","barCategoryGap","maxBarSize","yTickRenderer","barChart","minPointSize","axisLine","labelForX","BarTooltip","tooltipPayload","tooltipLabel","propertiesName","chartInfoLabel","chartInfoValue","chartInfoWrapper","chartInfoItem","InfoPanel","isClickable","rectangleProps","barTooltipTitle","getBarChartSettings","showInfoPanel","shape","useLabelStyles","INCLUDE_SOURCE_ICON","getSourceColor","SourceIcon","getCrosswalkAnalysisData","SourceLabelRenderer","getValueDistributionData","onBarSelect","showTopLabel","uniqueDataKeys","getBarLabel","stackId","onMouseOver","getBars","consolidationRateWrapper","ratePercent","tableWithSelectedRow","ConsolidationPercentage","totalCrosswalks","totalEntities","consolidationRate","reltioCleanser","totalCrosswalksBySource","formattedPercent","YAxisTickRenderer","selectedSource","setSelectedSource","barChartData","tableChartData","crosswalk","descend","getConsolidationRateTableData","sortedBarChartData","sortedSourceData","barSelectHandler","rowIndex","rowSelectHandler","rowClickHandler","chartHeight","onRowClick","onRowHover","hoverRowIndex","RDMTranscodeStatus","RDMChartColors","RESOLVED","UNRESOLVED","getRDMChartColors","formatRDMTranscodeData","resolveCount","unresolveCount","getRDMTranscodeFilter","rdmTranscodeStatus","getRDMTranscodeSearchState","setData","getRDMData","isRDMLoolupResolve","loadRDMChartData","useRDMChartDataRequest","ViewsFactory","getComponent","MONTH_DISTRIBUTION","DAY_OF_WEEK_DISTRIBUTION","DAY_OF_MONTH_DISTRIBUTION","DQDashboardLayoutItem","ResizeComponent","reltioGridLayoutToStaticLayout","staticLayout","warning","errorIcon","scrollTopShadow","perspectiveView","overflowX","attributeLevelWrapper","navigationWrapper","headerRightSide","periodSelector","flexBasis","input","inputRoot","dropdownIndicator","layoutRoot","customAttributeLayouts","layoutsByDataLevel","layouts","timeRangeAvailable","chartDataType","customLayouts","defaultLayouts","mergedLayoutsByType","mergeLeft","getLayoutByAttributeType","uniqBy","getViewsByDataType","getAttributeLevelViews","viewsByDataLevel","attributeLevelMetrics","breadcrumb","onChange","Breadcrumbs","separator","NavigateNext","handleChangeDataLevel","getPagePartWidth","pagePartIndex","getPageIndexes","transitionTime","pagesWrapper","pagesCount","page","pages","startSliding","endSliding","TRANSITION_TIMEOUT_MS","savedPage","setSavedPage","setTimeout","currentPageIndexes","pagesSettings","allWidth","pagesettings","fixedWidth","pagePart","partWidth","calculatePagePartsWidth","pageIndexes","prevPageIndexes","leftPagesIndexes","getLeftPageOffset","showComponent","styleWidth","minCurrentIndex","maxCurrentIndex","pageSettings","indexPage","getPagePartStyleWidth","entityLevelBar","writingMode","expandButton","expandButtonText","showEntityLevel","expandButtonTitle","getAttrTypeFromItem","getFirstSimpleDetailedAttrType","isComplexAttribute","isImage","not","filterDetailedAttrTypeByFieldName","getFilterOptionsByGroup","EmptinessFilterValue","noDataFilterOptions","SHOW_EMPTY","filterItemsByEmptiness","firstEmptinessOption","filterValidDetailsOptions","validOptionValues","getFieldNameFromItem","filterItemsByDetails","detailsOptions","filteredNestedFieldNames","both","getFilteredNestedFieldNames","startsWith","getAtrributeFieldNames","detailIcon","activeIcon","fillRateData","fillRateState","iconsWrapper","reverse","barPart","inactiveBarPart","levelLineColor","linesWrapper","horizontalLine","parentLine","lastLevel","lastLevelSelected","isLastLevelItem","isCollapsed","isSelected","drawLine","range","getLevelsRange","Marginator","listItem","selectedItem","clickableItem","marginWrapper","parentAttributeLabel","detailsIcon","collapseIcon","iconLoader","iconsLoaderWrapper","iconLoaderWrapper","fillRateLineLoader","noData","noDataLabel","onCollapse","isLoading","hasFillRate","CollapseIcon","ArrowRightIcon","ArrowDropDownIcon","ListItem","times","searchWrapper","filterByDetails","searchInput","filledInput","menu","filterIcon","filterIconFilterApplied","filterIconWrapper","filterIconWrapperActive","filterIconWrapperSelected","dropdownMenuTitle","option","isActive","typeIconWrapper","valueContainer","counter","optionLabel","groupLabel","actionsContainer","clearAllButton","count","showCounter","containsOption","withoutOption","optionIndex","remove","defaultFilterOptions","defaultFilterText","onChangeFilterText","onChangeFilterOptions","selectedFilterOptions","setSelectedFilterOptions","valueInFilterTextInput","setValueInFilterTextInput","filterOptionsGroups","allValidFilterOptions","getValidFilterOptions","closeFilter","handleOptionChange","hasSelectedOptions","isPopupOpen","indicatorClassname","indicatorIconClassname","SearchInput","autofocus","initialValue","placeholder","event","FilterList","Popover","PaperProps","itemCount","listWrapper","loadingAnimation","animation","columnsTitle","gridGap","gridTemplateColumns","borderBottom","loaderWrapper","onAttributesListChange","defaultFieldName","disableAttributeSelection","listRef","setFilterText","collapsedFieldNames","setCollapsedFieldNames","selectedFieldName","setSelectedFieldName","setFillRates","dvfState","attrTypeItems","collectFilteredAttributeItems","itemsWithDetails","setItemsWithDetails","getEntityTypeMatchAttributes","reference","useAttrTypeDetails","attributeFieldNames","memoizedAttributeFieldNames","initialFillRates","fillRatesState","setFillRateData","loadFillRateData","useFillRateRequest","fillRateFromChartsData","fillRateForSelectedAttribute","isDVFLoaded","isFillRateLoaded","filteredItems","filteredByEmptinessItems","detailsFilterOptions","getDetailsOptionCount","getDetailsOptions","visibleItems","collapsedFieldName","rejectCollapsedItemsChildren","countAttrTypes","handleAttrTypeDetailsChange","selectedDetailedAttributeType","getDetailedAttrTypeByFieldName","scrollTo","indexOfSelectedFieldName","getIndexByFieldName","scrollToItem","handleScroll","scrollOffset","currentBorderTop","borderTop","renderAttribute","getFillRateByAttributeType","showNoData","itemData","itemSize","onScroll","MEDIUM","LARGE","hasRDMLookup","isAttrTreeHasRDMLookup","checkEntityTypeHasRDMLookup","currentRDMLookupState","getEntityLevelViews","selectRoot","outline","select","selectValue","arrowIcon","optionRoot","dataReltioOptionId","classesProps","selectProps","renderCount","mergeClasses","outlined","Select","MenuProps","list","renderValue","autoWidth","entityCount","radius","EmptyState","LoadingIcon","setTick","useReloadAllFacets","intervalId","setInterval","timer","clearInterval","isValid","fromNow","RefreshIcon","settingsAttributeLevel","settingsEntityLevel","DropDownMenuItem","SettingsMenu","saveState","isAvailableEntityType","useEntityTypes","setSelectedAttributeType","setEntityTypeUri","entityCountRequestState","setDataLevel","selectedEntityType","consoleLink","setConsoleLink","setDVFConfigLink","servicesPath","environment","getConsoleApps","response","apps","insert","useDvfConfigLink","setDvfs","setErrorCode","dvfPath","env","canUserReadDVF","functions","loadDVFs","getDVF","useDVF","dvfContext","dqDashboardSavedState","isSavedStateLoaded","isPermissionsRequestFinished","saveStateHandler","getEntityType","showOVSwitcher","isEntityTypeExists","sortedEntityTypesWithCount","defaultPeriod","newPeriod","saveStateDebounce","fn","lastParams","params","startParams","clearTimeout","useDebounceFunction","newSavedState","getNewSavedState","sortWith","sortEntityTypesWithCount","handleSetEntityTypeByUri","showDashboard","showContent","showTimeRange","dateRangeEditorValue","getPeriodValue","DateRangeEditor","getDateRangeOptions","TextFieldProps","InputProps","disableUnderline","DateRangePickerProps","maxDate","startOf","toDate","ATTRIBUTE_LIST_WIDTH","dqDashboardTheme","createTheme","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","seed","store","getSavedStatePromisified","promisifyCallback","LocalizationProvider","dateAdapter","AdapterMoment","StyledEngineProvider","injectFirst","ThemeProvider","StylesProvider"],"sourceRoot":""}