@reltio/remotes 1.4.1360 → 1.4.1362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/5987.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"5987.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.js","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/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.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/helpers.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/icons/ResizeIcon.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/styles.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/ReltioGridLayout.js","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/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/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/contexts/DateRangesProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/theme/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ChartsDataContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DetailedAttributeTypeContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DVFContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/EntityTypeContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartsDataRequest.ts","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/dateRange.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/mlDq.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/charts.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/types/EmptyStateVariants.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/DQDateRangeValue.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DataLevelContext/index.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/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/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/components/DQDashboardError/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/DQDashboardError.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoData/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoData/DQDashboardNoData.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/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/components/StackedHorizontalBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/StackedHorizontalBarChart/Bar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/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/services/barCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/helpers.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/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/views/charts/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateTimeSeriesChart.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/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/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayout/DQDashboardLayout.tsx","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/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/DQDashboardAttributesList/helpers.ts","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/useAttrTypeDetails.ts","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/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/UpdateTimeHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/UpdateTimeHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/styles.ts","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 as Avatar} from '@material-ui/core';\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?: 'circle' | '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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'basic-view__paper': {\n display: 'flex',\n flexDirection: 'column',\n ...theme.basicView\n }\n}));\n","import Paper, {PaperProps} from '@material-ui/core/Paper';\nimport PropTypes from 'prop-types';\nimport React, {forwardRef, Ref} from 'react';\nimport {useStyles} from './styles';\n\nconst BasicView = forwardRef<Ref<typeof Paper>, PaperProps>(({children, className, ...otherProps}, ref) => {\n const styles = useStyles();\n return (\n <Paper ref={ref} className={className} classes={{root: styles['basic-view__paper']}} {...otherProps}>\n {children}\n </Paper>\n );\n});\n\nBasicView.displayName = 'BasicView';\n\nBasicView.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nexport default BasicView;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n '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 '@material-ui/core/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 fontWeight: 'normal',\n lineHeight: 'inherit',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n});\n","import React from 'react';\nimport Toolbar, {ToolbarProps} from '@material-ui/core/Toolbar';\nimport {Typography as Typography} from '@material-ui/core';\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 {title}\n </Typography>\n {children}\n </Toolbar>\n );\n};\n\nexport default BasicViewHeader;\n","import {makeStyles} from '@material-ui/core/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 {makeStyles} from '@material-ui/core/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 as Typography} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\nconst HideOnShrink = ({widthToHide, children}) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nHideOnShrink.propTypes = {\n children: PropTypes.node,\n widthToHide: PropTypes.number.isRequired\n};\n\nexport default HideOnShrink;\n","import {curry, defaultTo, mergeAll, pick, pipe, prop, propEq, __} from 'ramda';\n\nexport const getReltioViewId = (id) => id.split(/\\d+_/)[1];\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}) => ({\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 = ({x, y, w, h, maxW, minW, minH, maxH, i, ...obj}) => ({\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) => (layout || []).map(reltioLayoutItemToReactGridLayoutItem);\n\nexport const reactGridLayoutToReltioLayout = (layout) => (layout || []).map(reactGridLayoutItemToReltioLayoutItem);\n\nexport const getReltioLayoutItemById = curry((layout, id) => (layout || []).find(propEq('id', id)));\n\nconst updateExtraPropsInLayoutItem = curry((props, from, to) => mergeAll([to, pick(props, from)]));\n\nexport const copyPropsFromPreviousLayout = curry((props, oldReltioLayout, reltioLayout) =>\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, options) => {\n const {margin, rowHeight} = options;\n\n return Math.ceil((height + margin[1]) / (rowHeight + margin[1]));\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 '@material-ui/core/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 '&.cssTransforms': {\n transitionProperty: 'transform'\n },\n '&.resizing': {\n zIndex: 9,\n willChange: 'width, height',\n pointerEvents: 'none'\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: '17px',\n height: '17px',\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}));\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useRef, useState, memo} from 'react';\nimport GridLayout from 'react-grid-layout';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {identity, pipe} from 'ramda';\nimport classnames from 'classnames';\nimport {\n reltioLayoutToReactGridLayout,\n reactGridLayoutToReltioLayout,\n reactGridLayoutItemToReltioLayoutItem,\n copyPropsFromPreviousLayout,\n calcHeight,\n getReltioLayoutItemById\n} from './helpers';\n\nimport {useStyles} from './styles';\n\nconst ReltioGridLayout = ({\n views,\n layout,\n layoutOptions,\n onLayoutChanged,\n draggableHandle,\n LayoutItem,\n onRemove,\n onDrop,\n droppingItem,\n isDroppable,\n classes\n}) => {\n const ref = useRef();\n const styles = useStyles();\n const [fullscreenItemId, setFullscreenItemId] = useState(null);\n const [width, setWidth] = useState(0);\n const {cols, rowHeight, margin} = layoutOptions;\n const processedLayout = useMemo(() => reltioLayoutToReactGridLayout(layout), [layout]);\n const onReltioLayoutChanged = pipe(\n reactGridLayoutToReltioLayout,\n copyPropsFromPreviousLayout(['autosizing'], layout),\n onLayoutChanged\n );\n const handleDrop = (layout, layoutItem, e) => {\n if (onDrop) {\n onDrop(reactGridLayoutToReltioLayout(layout), reactGridLayoutItemToReltioLayoutItem(layoutItem), e);\n }\n };\n const onToggleFullscreen = useCallback((id) => setFullscreenItemId((prevId) => (prevId ? null : id)), []);\n const isFullscreenEnabled = fullscreenItemId !== null;\n\n const onItemHeightResize = useCallback(\n (height, layoutId) => {\n let isLayoutChanged = false;\n\n const newLayout = layout.map((layoutItem) => {\n if (layoutItem.id === layoutId && height) {\n const newHeight = calcHeight(height, layoutOptions);\n\n if (layoutItem.height !== newHeight) {\n isLayoutChanged = true;\n return {\n ...layoutItem,\n minHeight: newHeight,\n maxHeight: newHeight,\n height: newHeight\n };\n }\n }\n return layoutItem;\n });\n\n if (isLayoutChanged) {\n onLayoutChanged(newLayout);\n }\n },\n [layout, layoutOptions, onLayoutChanged]\n );\n\n const getAutosizeComponent = (layoutItemId) => {\n return (\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => {\n onItemHeightResize(height, layoutItemId);\n }}\n />\n );\n };\n\n return (\n <>\n <ReactResizeDetector\n refreshMode=\"debounce\"\n refreshRate={50}\n handleWidth={true}\n onResize={(width) => setWidth(width)}\n />\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={onReltioLayoutChanged}\n isResizable={!isFullscreenEnabled}\n isDraggable={!isFullscreenEnabled}\n className={classnames(classes.root, styles.gridLayout, {[styles.gridFullscreen]: isFullscreenEnabled})}\n onDrop={handleDrop}\n droppingItem={droppingItem}\n isDroppable={isDroppable}\n >\n {processedLayout.map((layoutItem) => {\n const isItemFullscreen = fullscreenItemId === layoutItem.i;\n const isAutosize = (getReltioLayoutItemById(layout, layoutItem.i) || {}).autosizing;\n const autosizeComponent = isAutosize ? {AutosizeComponent: getAutosizeComponent(layoutItem.i)} : {};\n return (\n <LayoutItem\n key={layoutItem.i}\n layoutItemConfig={layoutItem}\n views={views}\n onToggleFullscreen={onToggleFullscreen}\n onRemove={onRemove}\n className={classnames({fullscreen: isItemFullscreen}, classes.item)}\n isFullscreen={isItemFullscreen}\n {...autosizeComponent}\n />\n );\n })}\n </GridLayout>\n </>\n );\n};\n\nReltioGridLayout.defaultProps = {\n layoutOptions: {\n cols: 4,\n rowHeight: 30,\n margin: [15, 15]\n },\n onConfigChanged: identity,\n onLayoutChanged: identity,\n classes: {}\n};\nReltioGridLayout.propTypes = {\n views: PropTypes.array,\n layout: PropTypes.array,\n layoutOptions: PropTypes.object,\n onConfigChanged: PropTypes.func,\n onLayoutChanged: PropTypes.func,\n onDrop: PropTypes.func,\n onRemove: PropTypes.func,\n LayoutItem: PropTypes.elementType,\n draggableHandle: PropTypes.string,\n isDroppable: PropTypes.bool,\n droppingItem: PropTypes.object,\n classes: PropTypes.shape({\n root: PropTypes.string,\n item: PropTypes.string\n })\n};\n\nexport default memo(ReltioGridLayout);\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 '@material-ui/core/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 {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 {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n","import {makeStyles} from '@material-ui/core/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 as LinearProgress} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst DashboardLinearLoader = () => {\n const styles = useStyles();\n return <LinearProgress color=\"secondary\" className={styles.loader} />;\n};\n\nexport default DashboardLinearLoader;\n","import {makeStyles} from '@material-ui/core/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 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}>{children}</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 React, {useState, useContext, useCallback} from 'react';\n\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\ntype Props = {\n children: React.ReactNode;\n};\n\ntype Zoom = [string, string];\n\nconst PeriodContext = React.createContext<{\n period?: DatePeriod;\n changePeriod?: (period: DatePeriod) => void;\n }>(null);\n\nconst ZoomContext = React.createContext<{\n zoom?: [string, string];\n getDateRange?: () => DatePeriod;\n changeZoom?: (zoom: [string, string]) => void;\n }>({});\n\nexport const DateRangesProvider = ({children}: Props) => {\n const [zoom, setZoom] = useState<Zoom>(null);\n const [period, setPeriod] = useState<DatePeriod>(null);\n const changePeriod = useCallback(\n (newPeriod: DatePeriod) => {\n setPeriod(newPeriod);\n period && setZoom(null);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [period]\n );\n const changeZoom = useCallback((zoom: Zoom) => {\n if (zoom) {\n const validatedZoom: [string, string] =\n new Date(zoom[0]) > new Date(zoom[1]) ? [zoom[1], zoom[0]] : [zoom[0], zoom[1]];\n setZoom(validatedZoom);\n }\n }, []);\n\n const getDateRange: () => DatePeriod = useCallback(\n () => (zoom ? [new Date(zoom[0]), new Date(zoom[1])] : period),\n [zoom, period]\n );\n return (\n <PeriodContext.Provider value={{period, changePeriod}}>\n <ZoomContext.Provider value={{zoom, getDateRange, changeZoom}}>{children}</ZoomContext.Provider>\n </PeriodContext.Provider>\n );\n};\n\nexport const usePeriod = () => {\n return useContext(PeriodContext);\n};\n\nexport const useZoom = () => {\n return useContext(ZoomContext);\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\nexport const ChartsDataContext = React.createContext(null);\n\nChartsDataContext.displayName = 'ChartsDataContext';\n","import React from 'react';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nexport const DetailedAttributeTypeContext = React.createContext<DetailedAttributeType>(null);\n\nDetailedAttributeTypeContext.displayName = 'DetailedAttributeTypeContext';\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 from 'react';\n\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nexport const EntityTypeContext = React.createContext<TEntityType>(null);\n\nEntityTypeContext.displayName = 'EntityTypeContext';\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {omit, pathOr, pipe, keys, path, length} 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';\n\nconst REFRESH_REQUEST_TIMEOUT_MS = 180 * 1000;\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 [lastRequestTime, setLastRequestTime] = useState<number>(null);\n const attributeFieldName = detailedAttributeType?.fieldName;\n const entityTypeUri = entityType?.uri;\n const safePromise = useSafePromise();\n\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 setLastRequestTime(Date.now());\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 });\n\n safePromise(Promise.all([getActiveProfiles, getInactiveProfiles, getDqChartsData]))\n .then(([activeProfiles, inactiveProfiles, dqChartsData]) => {\n const sourceSystems = pipe(\n path(['consolidationRate', 'totalCrosswalksBySource']),\n omit(['ReltioCleanser']),\n keys,\n length\n )(dqChartsData);\n\n onRequestFinished({\n ...dqChartsData,\n summary: {\n inactiveProfiles: inactiveProfiles.type?.[getLastUriPart(entityTypeUri)],\n activeProfiles: activeProfiles.type?.[getLastUriPart(entityTypeUri)],\n sourceSystems\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 })\n )\n .then(pipe(pathOr({}, ['statistic', attributeFieldName]), onRequestFinished))\n .catch(onError);\n }\n }, [setRequestState, setChartsData, safePromise, attributeFieldName, entityTypeUri, dataLevel, metrics]);\n\n useEffect(() => {\n const needRefresh = lastRequestTime ? Date.now() - lastRequestTime > REFRESH_REQUEST_TIMEOUT_MS : false;\n\n if (dataLevel === DQDataLevel.ENTITY_TYPE && needRefresh) refreshAction();\n });\n\n const refreshAction = useRefreshAction({\n action: loadChartsData,\n dataLevel\n });\n\n useEffect(() => {\n refreshAction();\n }, [refreshAction]);\n\n const chartsDataResult = useMemo(() => ({data: chartsData, state: requestState, reload: refreshAction}), [\n chartsData,\n requestState,\n refreshAction\n ]);\n\n return chartsDataResult;\n};\n","import {pluck} from 'ramda';\nimport {useCallback, useEffect, useState} from 'react';\nimport {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 safePromise = useSafePromise();\n useEffect(() => {\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: filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n })\n )\n .then(({type}) => setEntitiesCountMap(type))\n .catch(() => setEntitiesCountMap(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypes]);\n\n return useCallback((entityTypeUri: string) => Number(entitiesCountMap?.[getLastUriPart(entityTypeUri)] || 0), [\n entitiesCountMap\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: 'ValidationViewTimeSeries',\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: 'MonthDistribution',\n type: ViewType.MONTH_DISTRIBUTION,\n title: i18n.text('Month distribution')\n },\n {\n id: 'DayOfWeekDistribution',\n type: ViewType.DAY_OF_WEEK_DISTRIBUTION,\n title: i18n.text('Day of week distribution')\n },\n {\n id: 'DayOfMonthDistribution',\n type: ViewType.DAY_OF_MONTH_DISTRIBUTION,\n title: i18n.text('Day of month distribution')\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 [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 } 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 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 moment from 'moment';\nimport {append, assoc, curry, defaultTo, map, pipe, prop, propEq, reject, sortBy} from 'ramda';\n\nimport {\n DatePeriod,\n isDateRangeValue,\n TimeSeriesData,\n TimeSeriesDataValues,\n FillRateState,\n UniquenessAnalysisState,\n DQMetric,\n getRangeOptionLabel,\n getDateRangeByDatePeriod,\n DateRangeValue\n} from '@reltio/mdm-sdk';\nimport {ChartData, enrichDataWithPercents} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {LineChartData} from '../types/LineChartData';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {getDQDateRangeByValue} from '../services/dateRange';\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 getTimeSeriesData = <T>(\n getData: (chartsData: TimeSeriesDataValues) => T\n): ((chartsData: TimeSeriesData[]) => LineChartData[]) =>\n pipe(\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 );\n\nexport const getTimeRangeDates = (period: DatePeriod) => {\n const dateFormat = 'YYYY-MM-DD';\n\n const [startTimestamp, endTimeStamp] = getDateRangeByDatePeriod(period, getDQDateRangeByValue);\n return {\n startDate: moment(startTimestamp).format(dateFormat),\n endDate: moment(endTimeStamp).format(dateFormat)\n };\n};\n\nexport const checkIsTimeSeries = (config: DQDashboardView) => config?.options?.timeSeries;\n\nexport const getChartTooltipDateTitle = (hasData: boolean, date: string) =>\n hasData ? i18n.date(date, 'MMM D, YYYY') : i18n.text('No data available');\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","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 DatePeriod,\n DataTypes,\n DQDataLevel,\n DQMetric,\n formatDataTypeValue,\n getSourceSystemLabel,\n isDateType,\n mapFilterValue,\n Metadata,\n parseTimestamp,\n SearchState,\n TimeSeriesDataValues,\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';\nimport {hasTimeRange} from '../services/mlDq';\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 searchOptions: {\n searchByOv: false,\n ovOnly: false\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 ViewType.MONTH_DISTRIBUTION,\n ViewType.DAY_OF_MONTH_DISTRIBUTION,\n ViewType.DAY_OF_WEEK_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 hasTimeRangeLayout = (layouts: LayoutsByAttributeType) => {\n return !!(layouts?.timeRange || defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]?.timeRange);\n};\n\nexport const getLayoutByAttributeType = (layouts: LayoutsByAttributeType, type: string, period: DatePeriod) => {\n const chartDataType = getChartDataTypeByAttributeType(type);\n const customLayouts = hasTimeRange(period) ? layouts?.timeRange : layouts?.today;\n const defaultLayouts =\n defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE][hasTimeRange(period) ? 'timeRange' : 'today'];\n\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: TimeSeriesDataValues[]) =>\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","import {propEq, either, prop, allPass} from 'ramda';\nimport {\n getLabel,\n AttributeType,\n DataTypes,\n DataValidationFunction,\n getAttributeTypeSubAttributes,\n isReadableAttribute,\n Metadata,\n TEntityType,\n StatusVF\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 = entityType.attributes || [];\n const collectAttributes = (attributes: AttributeType[]) => {\n return attributes\n .filter(isReadableAttribute)\n .filter(either(prop('label'), prop('name')))\n .reduce((attributes: AttributeType[], attribute: AttributeType) => {\n const children = getAttributeTypeSubAttributes(metadata, attribute);\n return children?.length\n ? [...attributes, attribute, ...collectAttributes(children)]\n : [...attributes, 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","export enum EmptyStateVariants {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large'\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 {ascend, assoc, defaultTo, map, path, pipe, prop, sortWith} from 'ramda';\n\nimport {TEntityType} 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","import React from 'react';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nexport const DataLevelContext = React.createContext<DQDataLevel>(null);\n\nDataLevelContext.displayName = 'DataLevelContext';\n","import {makeStyles} from '@material-ui/core/styles';\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});\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 '@material-ui/core/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};\n\nconst ChartDataTooltip = ({data, title, DataRenderer = ChartDataRenderer}: 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 </div>\n );\n};\n\nexport default ChartDataTooltip;\n","import {makeStyles} from '@material-ui/core/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 {makeStyles} from '@material-ui/core/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 from 'react';\nimport {BasicViewHeader, SmallIconButtonWithTooltip, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n infoTooltipTitle?: React.ReactNode;\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 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 />\n )}\n {hasChildren && (\n <HideOnShrink widthToHide={250}>\n <VerticalDivider height={24} margin={16} />\n {children}\n </HideOnShrink>\n )}\n </BasicViewHeader>\n );\n};\n\nexport default DQLayoutItemHeader;\n","import {makeStyles} from '@material-ui/core/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 {usePeriod} from '../../contexts/DateRangesProvider';\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} = usePeriod();\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 {always, converge, curry, identity, pipe, propOr, map, reduce, sortBy, toPairs, when} from 'ramda';\nimport {\n getChartItemColor,\n FillRateState,\n DQChartsData,\n FillRateData,\n FilterOptions,\n TimeSeriesData\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) result[key] = formatFillRateData(value.fillRate);\n return result;\n }, {})\n);\n\ntype GetFillRateDataFn = (chartsData: DQChartsData | TimeSeriesData) => FillRateData;\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 {useContext, useMemo} from 'react';\nimport {DQChartsData} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\nimport {ChartsDataContext} from '../contexts/ChartsDataContext';\n\nexport type ChartsDataWithState = {\n data: DQChartsData;\n state: RequestStates;\n reload: () => void;\n};\nexport const useChartData = <T>(getChartData: (chartsData: DQChartsData) => T) => {\n const {data: chartsData, state, reload} = useContext<ChartsDataWithState>(ChartsDataContext);\n const data = useMemo(() => getChartData(chartsData), [chartsData, getChartData]);\n\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 searchOptions: {\n searchByOv: false,\n ovOnly: false\n },\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 {useContext} from 'react';\nimport {assoc, curry, pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {getDescendantEntityTypes, Metadata, SearchState} from '@reltio/mdm-sdk';\nimport {DetailedAttributeTypeContext} from '../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../contexts/EntityTypeContext';\nimport {getExcludedEntityTypesRawFilter} from '../services/rawFilters';\nimport type {DetailedAttributeType} from '../types/DetailedAttributeType';\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});\n\ntype GetSearchStateFn = (props: GetSearchStateProps) => (group?: string) => SearchState;\nexport const useSearchRedirect = (getSearchState: GetSearchStateFn): ((group?: string) => void) => {\n const dispatch = useDispatch();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const detailedAttributeType: DetailedAttributeType = useContext(DetailedAttributeTypeContext);\n const entityType = useContext(EntityTypeContext);\n\n return pipe(\n getSearchState({detailedAttributeType, entityTypeUri: entityType.uri}),\n excludeDescendantEntityTypes(metadata, entityType.uri),\n ui.actions.openSearch,\n dispatch\n );\n};\n","import {makeStyles} from '@material-ui/core/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 as Button} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ReplayIcon from '@material-ui/icons/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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\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 },\n medium: {\n '& $icon': {\n maxHeight: '190px',\n marginBottom: '24px'\n }\n },\n large: {\n '& $icon': {\n maxHeight: '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 whiteSpace: 'pre-wrap'\n }\n});\n","import React from 'react';\nimport {Typography as Typography} from '@material-ui/core';\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 data?: ErrorData;\n height?: number;\n variant?: EmptyStateVariants;\n};\n\nconst defaultIcon = EMPTY_STATE_ICONS.NO_DATA;\n\nconst DQDashboardNoData = ({height, data = {}, variant = EmptyStateVariants.SMALL}: Props) => {\n const {Icon = defaultIcon, message, title} = data;\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 </div>\n );\n};\n\nexport default DQDashboardNoData;\n","import {makeStyles} from '@material-ui/core/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 DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\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 <DQDashboardNoData\n height={height}\n data={{\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 '@material-ui/core/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 legend: {\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 {LegendProps} from 'recharts';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst CustomLegend = ({payload}: LegendProps) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles.legend)}>\n {payload.map((item) => (\n <div key={item.id} className={styles.item}>\n <div style={{background: item.color}} className={styles.itemColor} />\n {item.value}\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","import {makeStyles} from '@material-ui/core/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:\n '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});\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 {pluck, sum, pipe} from 'ramda';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, withPercents, withTooltip} from '@reltio/components';\n\nimport {getBarWidthStyle, getPercentLabel} from '../../services/charts';\n\nimport ChartDataTooltip from '../ChartDataTooltip/ChartDataTooltip';\nimport ChartLegends from '../ChartLegends/ChartLegends';\nimport Bar from './Bar';\n\nimport {useStyles} from './styles';\n\nconst BarWithTooltip = withTooltip(Bar);\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 data: StackedHorizontalBarData[];\n colors: string[];\n onItemClick?: (group: string) => void;\n classes?: Partial<Record<'bar' | 'stackedBar', string>>;\n};\n\nconst StackedHorizontalBarChart = ({data, colors, classes = {}, onItemClick}: 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 return (\n <div className={styles.root}>\n <div className={classnames(styles.stackedBar, classes.stackedBar)}>\n {data.map((chartData: StackedHorizontalBarData, index: number) => (\n <BarWithTooltip\n className={classnames(classes.bar, clickable && styles.clickable)}\n key={chartData.label}\n tooltipTitle={<ChartDataTooltip data={getTooltipData(chartData)} />}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n onClick={() => onBarClick && onBarClick(chartData.group)}\n data-reltio-id={chartData.dataReltioId}\n />\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={styles.legendWrapper}>\n <ChartLegends data={data} colors={colors} />\n </div>\n </div>\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nconst FillRateChart = () => {\n const {data, state, reload} = useChartData(getFillRateChartData);\n const {chartData, colors} = data;\n const searchProfiles = useSearchRedirect(getFillRateSearchState);\n\n return (\n <DQLayoutItemContent data={chartData} loadingState={state} onRefresh={reload}>\n {({data}) => <StackedHorizontalBarChart data={data} colors={colors} onItemClick={searchProfiles} />}\n </DQLayoutItemContent>\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} from 'ramda';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {DatePeriod, DQDataLevel, TimeSeriesMetric, getMlDqData, TimeSeriesData} 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';\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: TimeSeriesData[]) => {\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\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\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 })\n )\n .then(pipe(pathOr({}, ['data', attributeFieldName, 'timeSeries']), onRequestFinished))\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);\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 {\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.AFTER,\n values: [timestampStart],\n fieldName\n },\n {\n filter: FilterOptions.BEFORE,\n values: [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 {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} 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 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","import {\n CartesianGridProps,\n LineProps,\n TooltipProps,\n XAxisProps,\n YAxisProps,\n ReferenceLineProps,\n LabelProps\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};\n\nconst getLineChartSettings = ({keys, data, isPercent}): LineChartSettings => {\n const minLineChartData = getMinValueFromLineChartData(keys, data);\n const maxLineChartData = getMaxValueFromLineChartData(keys, data);\n const {minYAxisValue, maxYAxisValue} = getUpdatedEdgeData({minLineChartData, maxLineChartData, isPercent});\n\n return {\n xAxis: {\n type: 'category',\n dataKey: 'term',\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 },\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 };\n};\n\nexport default getLineChartSettings;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React, {useCallback, useState, useMemo} from 'react';\nimport {\n CartesianGrid,\n Line,\n LineChart as LineChartWidget,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n TooltipProps,\n ReferenceLine,\n ReferenceArea\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} from './helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: LineChartData[];\n width: number;\n height: number;\n keys: 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 keys,\n yAxisLabel,\n isPercent = true,\n dateRange,\n changeZoom\n}: Props) => {\n const styles = useStyles();\n const {cartesianGrid, tooltip, xAxis, yAxis, line, referenceLine, labelForY} = getLineChartSettings({\n keys,\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) {\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 };\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, keys), [zoomedData, keys]);\n const hasZoomArea = zoomAreaStart && zoomAreaEnd;\n return (\n <LineChartWidget\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.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} dataKey=\"group\" />\n <YAxis {...yAxis} label={{...labelForY, value: yAxisLabel}} />\n {keys.map((key: string) => (\n <Line {...line} key={key} dataKey={key} stroke={getColor ? getColor(key) : DEFAULT_LINE_COLOR} />\n ))}\n <ChartTooltip {...tooltip} content={getTooltip} cursor={null} filterNull={false} />\n </LineChartWidget>\n );\n};\n\nexport default LineChart;\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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: 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 from 'react';\nimport {last, pipe, pluck, slice, reject, isNil} from 'ramda';\n\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {TimeSeriesChartData} from '../../types/TimeSeriesChartData';\n\nimport ChartInfoPanel from './ChartInfoPanel';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dateLabel: string;\n infoLabel: string;\n dataKey: string;\n chartData: TimeSeriesChartData[];\n percentKey: 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 = ({dateLabel, infoLabel, percentKey, dataKey, chartData}: Props) => {\n const styles = useStyles();\n\n const lastChartData = last(chartData);\n const data = lastChartData[dataKey];\n const percent = lastChartData[percentKey];\n const dynamicPercent = percentKey && getDynamicPercent(chartData, percentKey);\n\n const label = (\n <>\n <span className={styles.period}>{dateLabel}:</span>\n {infoLabel}\n </>\n );\n const info = (\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 {makeStyles} from '@material-ui/core/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 React, {useContext, useMemo, useCallback} from 'react';\nimport {assoc, map, pipe, pick} from 'ramda';\nimport {TooltipProps} from 'recharts';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQMetric, DQDataLevel, FillRateState, TimeSeriesMetric} from '@reltio/mdm-sdk';\n\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {\n formatFillRateData,\n getFillRateColorByState,\n getFillRateData,\n getFillRateChartData\n} from '../../../services/fillRate';\nimport {getPercentLabel, transformTimeSeriesChartData, getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {usePeriod, useZoom} from '../../../contexts/DateRangesProvider';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\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 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(!!data.length, currentPayload.group);\n return <ChartDataTooltip data={data} title={title} />;\n }\n};\n\nconst FillRateTimeSeriesChart = () => {\n const styles = useStyles();\n const entityType = useContext(EntityTypeContext);\n const {getDateRange, changeZoom} = useZoom();\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\n const {period} = usePeriod();\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\n const infoLabel = `${i18n.text('% of profiles with complete values')}:`;\n const dateLabel = `${i18n.text('Today')}`;\n return (\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([mlDqState, todayState])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateLabel={dateLabel}\n chartData={data}\n percentKey={DQMetric.FILL_RATE}\n dataKey={FillRateState.EXISTS}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n keys={metrics}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of profiles')}\n dateRange={getDateRange()}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n );\n};\n\nexport default FillRateTimeSeriesChart;\n","import {makeStyles} from '@material-ui/core/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 '@material-ui/core/Chip';\n\nimport {useZoom} from '../../contexts/DateRangesProvider';\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 {getDateRange} = useZoom();\n const label = disabled ? i18n.text('Today') : getLabelByTimeRange(getDateRange());\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 React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {checkIsTimeSeries, hasTimeRange} from '../../../services/mlDq';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport FillRateChartToday from './FillRateChart';\nimport FillRateTimeSeriesChart from './FillRateTimeSeriesChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\n\nconst FillRateChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const isTimeSeries = checkIsTimeSeries(config);\n const {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={!isTimeSeries} />}\n </DQLayoutItemHeader>\n {isTimeSeries ? <FillRateTimeSeriesChart /> : <FillRateChartToday />}\n </DQLayoutItemView>\n );\n};\n\nexport default FillRateChart;\n","import {always, converge, identity, pipe, propOr, map, sortBy, when} from 'ramda';\nimport {\n getChartItemColor,\n DQChartsData,\n TimeSeriesData,\n UniquenessAnalysisState,\n UniquenessData\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 = (chartsData: DQChartsData | TimeSeriesData) => UniquenessData;\nexport const getUniquenessData: GetUniquenessDataFn = propOr({}, 'uniqueness');\n\ntype GetUniquenessChartDataFn = (\n chartsData: DQChartsData\n) => {\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nconst UniquenessAnalysisChart = () => {\n const {data, state, reload} = useChartData(getUniquenessChartData);\n const {chartData, colors} = data;\n\n return (\n <DQLayoutItemContent data={chartData} loadingState={state} onRefresh={reload}>\n {({data}) => <StackedHorizontalBarChart data={data} colors={colors} />}\n </DQLayoutItemContent>\n );\n};\n\nexport default UniquenessAnalysisChart;\n","import React, {useContext, useMemo, useCallback} from 'react';\nimport {assoc, map, pipe, pick} from 'ramda';\nimport {TooltipProps} from 'recharts';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQMetric, DQDataLevel, TimeSeriesMetric, UniquenessAnalysisState} from '@reltio/mdm-sdk';\n\nimport {\n getUniquenessColorByState,\n formatUniquenessAnalysisData,\n getUniquenessData,\n getUniquenessChartData\n} from '../../../services/uniquenessAnalysis';\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useZoom, usePeriod} from '../../../contexts/DateRangesProvider';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {getPercentLabel, transformTimeSeriesChartData, getChartState} from '../../../services/charts';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\n\nimport {useStyles} from '../styles';\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 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(!!data.length, currentPayload.group);\n return <ChartDataTooltip data={data} title={title} />;\n }\n};\n\nconst UniquenessAnalysisTimeSeriesChart = () => {\n const styles = useStyles();\n const entityType = useContext(EntityTypeContext);\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\n const {period} = usePeriod();\n\n const entityTypeUri = entityType.uri;\n const {getDateRange, changeZoom} = useZoom();\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\n const infoLabel = `${i18n.text('% of unique distinct values')}:`;\n const dateLabel = `${i18n.text('Today')}`;\n return (\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([stateMlDq, stateToday])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateLabel={dateLabel}\n chartData={data}\n percentKey={DQMetric.UNIQUENESS}\n dataKey={UniquenessAnalysisState.UNIQUE}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n keys={metrics}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of distinct values')}\n dateRange={getDateRange()}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n );\n};\n\nexport default UniquenessAnalysisTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {checkIsTimeSeries, hasTimeRange} from '../../../services/mlDq';\n\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport UniquenessAnalysisChartToday from './UniquenessAnalysisChart';\nimport UniquenessAnalysisTimeSeriesChart from './UniquenessAnalysisTimeSeriesChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst UniquenessAnalysisChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const isTimeSeries = checkIsTimeSeries(config);\n const {period} = usePeriod();\n\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={!isTimeSeries} />}\n </DQLayoutItemHeader>\n {isTimeSeries ? <UniquenessAnalysisTimeSeriesChart /> : <UniquenessAnalysisChartToday />}\n </DQLayoutItemView>\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 '@material-ui/core/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 '@material-ui/core/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 '@material-ui/core/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 },\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, {useContext} from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@material-ui/core/Chip';\nimport {RequestStates} from '@reltio/components';\nimport {getDetailLabel, checkIsDataQualitativeForSummary} from '../../services/attributeDetails';\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\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 {data, state} = useContext<ChartsDataWithState>(ChartsDataContext);\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 '@material-ui/core/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 '@material-ui/core/Chip';\n\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {usePeriod} from '../../contexts/DateRangesProvider';\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} = usePeriod();\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 '@material-ui/core/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 '@material-ui/core/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});","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, {useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport classnames from 'classnames';\n\nimport {usePeriod} from '../../contexts/DateRangesProvider';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\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 = useContext(EntityTypeContext);\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const total = useEntityCount(entityTypesArray)(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 const {period} = usePeriod();\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, {useContext} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\n\nimport i18n from 'ui-i18n';\nimport {RequestStates} from '@reltio/components';\nimport mdmModule, {search} from '@reltio/mdm-module';\nimport {ActivityFilter, Metadata, TEntityType} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\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 {data: chartsData, state} = useContext<ChartsDataWithState>(ChartsDataContext);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attributeTypesCount = countEntityTypeAttributes(metadata, entityType);\n const {activeProfiles = 0, inactiveProfiles = 0, sourceSystems = 0} = chartsData?.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 dispatch = useDispatch();\n const searchRedirect = useSearchRedirect(getEntityTypeSummarySearchState);\n const searchProfiles = (activeness: ActivityFilter) => {\n dispatch(search.actions.activityFilterUpdated(activeness));\n searchRedirect();\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)}\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)}\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 '@material-ui/core/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 {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\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 = useContext(DetailedAttributeTypeContext);\n const dataLevel = useContext(DataLevelContext);\n const entityType = useContext(EntityTypeContext);\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 '@material-ui/core/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.ReactNode;\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} 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 = ({sortDirection, sortField}: {sortDirection: 'asc' | 'desc'; sortField: string}) => (\n a: ChartData,\n b: ChartData\n) => {\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]);\n\nexport const getFrequencyAnalysisSearchState = ({detailedAttributeType, entityTypeUri}: GetSearchStateProps) =>\n cond([\n [isTimestampBasedType, always(getFrequencyAnalysisStateForTimestamp)],\n [isDateType, always(getSearchState(getFrequencyAnalysisFilterForDate))],\n [identity, always(getSearchState(getFrequencyAnalysisFilter))]\n ])(detailedAttributeType.type)({detailedAttributeType, entityTypeUri});\n\nexport const getValidationSearchState = (dvfs: DataValidationFunction[]) => ({\n entityTypeUri\n}: GetSearchStateProps): ((dvfUri: string) => SearchState) => (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, TimeSeriesDataValues, 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: TimeSeriesDataValues): 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 '@material-ui/core/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 as Link} from '@material-ui/core';\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 DQDashboardNoData from '../../../components/DQDashboardNoData/DQDashboardNoData';\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?: string | ReactElement;\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 <DQDashboardNoData\n height={height}\n data={{\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 {DetailedAttributeTypeContext} from '../../../../contexts/DetailedAttributeTypeContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {isReferenceChild} from '../../../../services/attributeDetails';\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 attributeType = useContext(DetailedAttributeTypeContext);\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(attributeType);\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, attributeType]\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 {DetailedAttributeTypeContext} from '../../../../contexts/DetailedAttributeTypeContext';\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 attributeType = useContext(DetailedAttributeTypeContext);\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, attributeType?.uri) : dvfsData) || [],\n [isAttributeDataLevel, dvfsData, attributeType?.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';\nimport {RootRef as RootRef} from '@material-ui/core';\n\ntype Props = {\n children: React.ReactElement;\n handler: (isOverflow: boolean) => void;\n handleWidth?: boolean;\n};\n\nconst OverflowingHandler = ({children, handler, handleWidth = true}: Props) => {\n const checkOverflow = (el: HTMLElement) => el && el.clientWidth < el.scrollWidth;\n const resizeHandler = () => handler(checkOverflow(childrenRef.current));\n const childrenRef = useRef();\n return (\n <ReactResizeDetector handleWidth={handleWidth} onResize={resizeHandler}>\n <>\n <RootRef rootRef={childrenRef}>{children}</RootRef>\n </>\n </ReactResizeDetector>\n );\n};\nexport default OverflowingHandler;\n","import {makeStyles} from '@material-ui/core/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}));\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}));\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 as Tooltip} from '@material-ui/core';\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 as Tooltip} from '@material-ui/core';\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 title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}>\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 as Tooltip} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\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 title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}>\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 '@material-ui/core/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 '@material-ui/core/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';\n\nimport {withPercents, toggleSortOrder, RequestStates} from '@reltio/components';\n\nimport {valueComparator as defaultComparator} from '../../../services/tableCharts';\nimport {hasTimeRange} from '../../../services/mlDq';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {ErrorData} from '../../../types/ErrorData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\n\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\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?: string | ReactElement;\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};\n\nconst CustomTableWithBarsChart = ({\n config,\n data,\n title,\n columnsOptions,\n infoTooltipTitle,\n customComparator,\n onItemClick,\n contentChildren,\n state,\n onRefresh\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 {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\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 {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 as Typography} from '@material-ui/core';\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 {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\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';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\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} = usePeriod();\n const entityType = useContext(EntityTypeContext);\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 getEntityCounts = useEntityCount(entityTypesArray);\n const totalProfiles = getEntityCounts(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 useReloadFacet({\n state,\n reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\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 />\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} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel, DataValidationFunction, TimeSeriesMetric, getLabel, getDvfColor, DQMetric} from '@reltio/mdm-sdk';\nimport {ChartData, RequestStates} from '@reltio/components';\n\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {usePeriod, useZoom} from '../../../contexts/DateRangesProvider';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {getViolatedValidationData, NO_DATA_FIELD} from './helpers';\nimport {findDVFByUri, getValidationChartData} from '../../../services/tableCharts';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useDvfs} from './hooks/useDvfs';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport {ChartDataTooltip, InfoDataRenderer, TooltipWithSquares} from '../../../components/ChartDataTooltip';\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\n\n// TODO get rid of hardcoded metric\nconst VIOLATED_PROFILES_METRIC = 'violatedProfiles';\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(!!data.length, currentPayload.group);\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} = usePeriod();\n\n const dvfData = useDvfs({onlyActive: false});\n const {dvfs, dvfConfigLink, reload: reloadDvf, state: stateDvf} = dvfData;\n const {getDateRange, changeZoom} = useZoom();\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const entityType = useContext(EntityTypeContext);\n const dataLevel = useContext(DataLevelContext);\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\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 )(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 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 </DQLayoutItemHeader>\n <DQLayoutItemContent data={chartData} loadingState={loadingState} onRefresh={reloadFunction}>\n {({data, width, height}) => (\n <div>\n <LineChart\n width={width}\n height={height}\n data={data}\n keys={dataKeys}\n getTooltip={getTooltip(dvfs, dataKeys)}\n getColor={getDvfColor}\n yAxisLabel={i18n.text('No. of profiles')}\n isPercent={false}\n dateRange={getDateRange()}\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 React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isDateType, isSSNType} from '@reltio/mdm-sdk';\nimport {getFrequencyChartData, getFrequencyAnalysisSearchState} from '../../services/tableCharts';\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../types/ViewProps';\nimport {convertDateLabelsInChartData} from '../../services/charts';\nimport {getRowsCounterLabel} from '../../services/tableCharts';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\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 = useContext(DetailedAttributeTypeContext).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 '@material-ui/core/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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\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 '@material-ui/core/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 as Tooltip} from '@material-ui/core';\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 from 'react';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {ChartData, RequestStates} from '@reltio/components';\n\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\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';\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.ReactNode;\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 {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\n </DQLayoutItemHeader>\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 '@material-ui/core/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, {useContext} from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getValueDistributionData} from '../../services/barCharts';\nimport {getValueDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport i18n from 'ui-i18n';\n\nconst ValueDistributionChart = ({config}: ViewProps) => {\n const attributeType: string = useContext(DetailedAttributeTypeContext).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, group: 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, payload) => onItemClick && onItemClick(key, payload.group));\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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n consolidationRateWrapper: {\n display: 'flex'\n },\n ratePercent: {\n fontWeight: 700,\n lineHeight: '24px',\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';\nimport {Typography as Typography} from '@material-ui/core';\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 <Typography>\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 </Typography>\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, useContext, useMemo, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\n\nimport {ChartData} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {getSourceColor, getSourceSystemLabel, Metadata} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../../contexts/ChartsDataContext';\nimport {ChartsDataWithState, 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';\nimport StackedBarChart from '../CustomBarChart/StackedBarChart';\nimport {ConsolidationPercentage} from './ConsolidationPercentage';\n\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 {YAxisTickRenderer} from './YAxisTickRenderer';\n\nimport {useStyles} from './styles';\n\nconst STACKED_BAR_CHART_WIDTH = 256;\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 {data: chartsData} = useContext<ChartsDataWithState>(ChartsDataContext);\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\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {chartsData.consolidationRate && <ConsolidationPercentage data={chartsData} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={tableChartData} loadingState={state} onRefresh={reload}>\n {({height = 0, width = 0}) => {\n return (\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={height}\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,\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 </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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n content: {\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nimport {useStyles} from './styles';\n\nconst RDMTranscodeChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle} />\n <DQLayoutItemContent data={data} loadingState={state} onRefresh={reload} className={styles.content}>\n {({data}) => (\n <StackedHorizontalBarChart\n data={data}\n colors={colors}\n onItemClick={searchProfiles}\n classes={{bar: styles.bar}}\n />\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default RDMTranscodeChart;\n","import {useCallback, useContext, useEffect, useState} from 'react';\n\nimport {ChartData, RequestStates, useSafePromise} from '@reltio/components';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\n\nimport {EntityTypeContext} from '../contexts/EntityTypeContext';\nimport {formatRDMTranscodeData} from '../services/rdmTranscode';\n\nexport const useRDMChartDataRequest = () => {\n const entityType = useContext(EntityTypeContext);\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 {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n});\n","import {assoc, map} from 'ramda';\nimport React, {memo, useMemo} from 'react';\n\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReltioGridLayout} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DQDashboardLayoutItem} from '../DQDashboardLayoutItem/DQDashboardLayoutItem';\n\nimport {useStyles} from './styles';\n\nexport type DQDashboardLayoutProps = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n layoutOptions?: {\n cols: number;\n rowHeight: number;\n margin: [number, number];\n };\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 styles = useStyles();\n\n const staticLayout = useMemo(() => reltioGridLayoutToStaticLayout(layout), [layout]);\n return (\n <div className={styles.root}>\n <ReltioGridLayout\n LayoutItem={DQDashboardLayoutItem}\n views={views}\n layout={staticLayout}\n layoutOptions={layoutOptions}\n />\n </div>\n );\n};\n\nexport default memo(DQDashboardLayout);\n","import React from 'react';\n\nimport {DQDataLevel, ReltioGridLayoutItem} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {DQDashboardView} from '../../types/DQDashboardView';\n\nimport DQDashboardLayout from '../DQDashboardLayout/DQDashboardLayout';\n\ntype Props = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n};\n\nconst AttributeLevelLayout = ({views, layout}: Props) => {\n return (\n <DataLevelContext.Provider value={DQDataLevel.ATTRIBUTE_TYPE}>\n <DQDashboardLayout views={views} layout={layout} />\n </DataLevelContext.Provider>\n );\n};\n\nexport default AttributeLevelLayout;\n","import {makeStyles} from '@material-ui/core/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 as Breadcrumbs} from '@material-ui/core';\nimport classnames from 'classnames';\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dataLevel: DQDataLevel;\n detailedAttributeType: DetailedAttributeType;\n onChange: (dataLevel: DQDataLevel) => void;\n};\nconst DataLevelBreadcrumbs = ({dataLevel, detailedAttributeType, onChange}: Props) => {\n const styles = useStyles();\n\n const handleChangeDataLevel = (dataLevel: DQDataLevel) => () => {\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 '@material-ui/core/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 '@material-ui/core/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 '@material-ui/icons/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 {makeStyles} from '@material-ui/core/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 as Tooltip} from '@material-ui/core';\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 '@material-ui/core/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});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Tooltip as Tooltip} from '@material-ui/core';\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 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 '@material-ui/core/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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\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});\n","import classnames from 'classnames';\nimport {times} from 'ramda';\nimport React from 'react';\nimport {ListItem as ListItem} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\n\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 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, !hasChildren && styles.clickableItem)}\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 </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 {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 emptinessFilterOptions = [\n {\n label: i18n.text('Show attributes with no data'),\n value: EmptinessFilterValue.SHOW_EMPTY,\n group: 'emptiness'\n }\n];\n\nexport const getEmptinessOptions = (): FilterOptionsGroup => {\n return {\n label: '',\n options: emptinessFilterOptions\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 '@material-ui/core/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 as Checkbox} from '@material-ui/core';\nimport {MenuItem as MenuItem} from '@material-ui/core';\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 as Button} from '@material-ui/core';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\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 '@material-ui/core/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 React, {useEffect, useRef, useState, useMemo, useContext} from 'react';\nimport classnames from 'classnames';\nimport {pathOr, isEmpty, assoc, equals} from 'ramda';\nimport {FixedSizeList as List} from 'react-window';\nimport ReactResizeDetector from 'react-resize-detector';\nimport i18n from 'ui-i18n';\nimport {TEntityType} from '@reltio/mdm-sdk';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {\n getAtrributeFieldNames,\n getDetailedAttrTypeByFieldName,\n getIndexByFieldName,\n getFirstSimpleDetailedAttrType,\n getFillRateByAttributeType,\n rejectCollapsedItemsChildren,\n getEmptinessOptions,\n getDetailsOptions,\n filterItemsByEmptiness,\n filterItemsByDetails,\n emptinessFilterOptions\n} from './helpers';\nimport {useAttrTypeDetails} from '../../hooks/useAttrTypeDetails';\nimport {useFillRateRequest} from '../../hooks/useFillRateRequest';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\nimport {FilterOption} from '../../types/FilterOption';\nimport {AttributeItemType, DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport AttributesFilters from '../AttributesFilters/AttributesFilters';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\nimport {EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {formatFillRateData} from '../../services/fillRate';\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 || emptinessFilterOptions\n );\n const [selectedFieldName, setSelectedFieldName] = useState(defaultFieldName);\n const [fillRates, setFillRates] = useState({});\n const {data: chartsData} = useContext<ChartsDataWithState>(ChartsDataContext);\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 emptinessFilterOptions = getEmptinessOptions();\n const filterOptions = [emptinessFilterOptions, detailsFilterOptions];\n\n return {filteredItems, filterOptions};\n }, [items, selectedFilterOptions, fillRates, isFillRateLoaded, isDVFLoaded]);\n\n const visibleItems = useMemo(() => rejectCollapsedItemsChildren(filteredItems, collapsedFieldNames), [\n filteredItems,\n 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 <DQDashboardNoData\n height={NO_DATA_HEIGHT}\n data={{\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 {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(() => collectFilteredAttributeItems(filterText)(metadata, entityType), [\n metadata,\n entityType,\n filterText\n ]);\n const [itemsWithDetails, setItemsWithDetails] = useState<AttributeItemType[]>([]);\n\n const entityTypeUri = entityType.uri;\n const matchAttributes = useMemo(() => getEntityTypeMatchAttributes(metadata, entityTypeUri), [\n metadata,\n 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 {useCallback, useEffect, useState} from 'react';\nimport {ChartData, useSafePromise, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, getDQChartsData} from '@reltio/mdm-sdk';\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\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 })\n )\n .then(formatFillRatesData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safePromise, setRequestState, setFillRateData, attributeFieldNames]);\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 '@material-ui/core/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 as Typography} from '@material-ui/core';\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 {CSSProperties} from 'react';\nimport {makeStyles} from '@material-ui/core/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}));\n","import React, {useMemo} 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';\n\nimport {getMetricsFromViews, getEntityLevelViews} from '../../../services/charts';\nimport {DQDashboardPerspectiveConfig} from '../../../types/DQDashboardPerspectiveConfig';\nimport {defaultLayoutsByDataLevel} from '../../../constants/defaultConfig';\nimport {checkEntityTypeHasRDMLookup} from '../../../services/rdmTranscode';\nimport {ChartsDataContext} from '../../../contexts/ChartsDataContext';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {RDMLookupState} from '../../../constants/RdmLookupState';\nimport {useChartsDataRequest} from '../../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../../DQDashboardLayout/DQDashboardLayout';\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\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\n const layout =\n config.layoutsByDataLevel?.[DQDataLevel.ENTITY_TYPE]?.[currentRDMLookupState] ||\n defaultLayoutsByDataLevel[DQDataLevel.ENTITY_TYPE][currentRDMLookupState];\n\n const views = useMemo(() => (layout ? getEntityLevelViews(config.viewsByDataLevel, layout) : []), [\n config.viewsByDataLevel,\n 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\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ENTITY_TYPE\n });\n\n return (\n <ChartsDataContext.Provider value={chartsData}>\n <div className={classnames(styles.root)}>\n <DataLevelContext.Provider value={DQDataLevel.ENTITY_TYPE}>\n <DQDashboardLayout views={views} layout={layout} />\n </DataLevelContext.Provider>\n </div>\n </ChartsDataContext.Provider>\n );\n};\n\nexport default EntityLevelLayout;\n","import {makeStyles} from '@material-ui/core/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 as MenuItem} from '@material-ui/core';\nimport Select, {SelectProps} from '@material-ui/core/Select';\nimport {Typography as Typography} from '@material-ui/core';\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 getContentAnchorEl: null,\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","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n marginRight: '16px'\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 '@material-ui/icons/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).fromNow();\n return (\n <div className={styles.root}>\n <span className={styles.updateTime}>{`${i18n.text('Last updated')} ${date}`}</span>\n <SmallIconButtonWithTooltip\n tooltipTitle={i18n.text('Refresh')}\n icon={RefreshIcon}\n onClick={handleRefreshAll}\n size=\"S\"\n />\n </div>\n );\n};\n\nexport default UpdateTimeHeader;\n","import {CSSProperties} from 'react';\nimport {makeStyles} from '@material-ui/core/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 gap: '16px',\n padding: '12px',\n alignItems: 'center'\n },\n headerRightSide: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row-reverse',\n marginRight: '4px'\n },\n periodSelector: {\n position: 'relative',\n margin: '0',\n height: '30px',\n borderRadius: '6px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n flexBasis: '196px'\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 padding: '8px 0 8px 16px',\n fontSize: '13px'\n },\n inputRoot: {\n backgroundColor: 'transparent',\n paddingRight: 4\n },\n dropdownIndicator: {\n width: '18px',\n height: '18px',\n '& svg': {\n width: '18px',\n height: '18px'\n }\n }\n}));\n","import {equals, pick, pipe, reject} from 'ramda';\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport moment from 'moment';\nimport {useSelector} from 'react-redux';\n\nimport i18n from 'ui-i18n';\nimport {DateRangeEditor, EMPTY_STATE_ICONS, useSavedState} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n getEntityType,\n DQDataLevel,\n DQMetric,\n ReltioGridLayoutItem,\n DateRangeValue,\n getDateRangeOptions\n} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\nimport {useReloadFacet, useUpdateTime} from '../../contexts/ReloadFacetContext';\nimport {usePeriod, useZoom} from '../../contexts/DateRangesProvider';\nimport {useChartsDataRequest} from '../../hooks/useChartsDataRequest';\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 {\n getLayoutByAttributeType,\n getMetricsFromViews,\n getAttributeLevelViews,\n hasTimeRangeLayout\n} from '../../services/charts';\nimport {isReferenceChild} from '../../services/attributeDetails';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {FilterOption} from '../../types/FilterOption';\nimport {ATTRIBUTE_LIST_WIDTH, ENTITY_LEVEL_BAR_WIDTH, NO_DATA_HEIGHT} 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 DQDashboardError from '../DQDashboardError/DQDashboardError';\nimport DQDashboardHeader from '../DQDashboardHeader/DQDashboardHeader';\nimport DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\nimport EntityLevelLayout from './EntityLevelLayout/EntityLevelLayout';\nimport EntityTypeSelector from '../EntityTypeSelector/EntityTypeSelector';\nimport UpdateTimeHeader from '../UpdateTimeHeader/UpdateTimeHeader';\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\n const canGetDQStatistic = useSelector(mdmModule.selectors.getCanUserGetDQStatistic);\n\n const entityTypes = useEntityTypes();\n const [entityTypeUri, setEntityTypeUri] = useState<string>();\n const entityType = entityTypes && entityTypeUri ? getEntityType({entityTypes}, entityTypeUri) : null;\n const getEntityCount = useEntityCount(entityTypes);\n\n const customAttributeLayouts = config.layoutsByDataLevel?.[DQDataLevel.ATTRIBUTE_TYPE];\n const [detailedAttributeType, setDetailedAttributeType] = useState<DetailedAttributeType>(null);\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, savedState} = useSavedState<DQDashboardSavedState>(getSavedState);\n const {zoom, changeZoom} = useZoom();\n const {period, changePeriod} = usePeriod();\n\n const getNewSavedState = (state: DQDashboardSavedState): DQDashboardSavedState => ({\n fieldName: null,\n zoom: zoom || null,\n entityTypeUri,\n period,\n ...dqDashboardSavedState?.current,\n ...state\n });\n\n useEffect(() => {\n if (isLoaded) {\n dqDashboardSavedState.current = savedState;\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 = hasTimeRangeLayout(customAttributeLayouts)\n ? DateRangeValue.LAST_WEEK\n : DateRangeValue.LAST_DAY;\n const newPeriod =\n dateRangeValues.includes(savedState?.period as DQDateRangeValue) || Array.isArray(savedState?.period)\n ? savedState.period\n : defaultPeriod;\n changePeriod(newPeriod);\n\n if (savedState.zoom) {\n changeZoom(savedState.zoom);\n }\n }\n }, [isLoaded]); // 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 (isLoaded && 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 (isLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) saveStateHandler({period});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [period]);\n\n const attributeLevelLayout = useMemo(\n (): ReltioGridLayoutItem[] =>\n getLayoutByAttributeType(customAttributeLayouts, detailedAttributeType?.type, period),\n [detailedAttributeType?.type, customAttributeLayouts, period]\n );\n\n const attributeLevelViews = useMemo(\n () => getAttributeLevelViews(config.viewsByDataLevel, detailedAttributeType?.type, attributeLevelLayout),\n [config.viewsByDataLevel, detailedAttributeType?.type, attributeLevelLayout]\n );\n\n const attributeLevelMetrics = useMemo(\n () =>\n pipe(getMetricsFromViews, (metrics: DQMetric[]) =>\n isReferenceChild(detailedAttributeType) ? reject(equals(DQMetric.DATA_VALIDATION))(metrics) : metrics\n )(attributeLevelViews),\n [attributeLevelViews, detailedAttributeType]\n );\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\n const attributeLevelChartsData = useChartsDataRequest({\n entityType,\n detailedAttributeType,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: attributeLevelMetrics\n });\n\n useReloadFacet({\n state: attributeLevelChartsData.state,\n reload: attributeLevelChartsData.reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\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 setDetailedAttributeType(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 && setDetailedAttributeType(selectedDetailedAttributeType);\n }\n };\n\n const showEntityLevel = () => {\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n };\n\n const showContent = entityType && canGetDQStatistic && isLoaded && !!getEntityCount(entityTypeUri);\n const showTimeRange = dataLevel === DQDataLevel.ATTRIBUTE_TYPE && hasTimeRangeLayout(customAttributeLayouts);\n const dateRangeEditorValue = getPeriodValue(zoom, period);\n\n return (\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\n dataLevel={dataLevel}\n detailedAttributeType={detailedAttributeType}\n onChange={setDataLevel}\n />\n <div className={styles.headerRightSide}>\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 <EntityTypeContext.Provider value={entityType}>\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 <EntityLevelLayout config={config} entityType={entityType} />\n <DataLevelSwitcher showEntityLevel={showEntityLevel} entityType={entityType} />\n <ChartsDataContext.Provider value={attributeLevelChartsData}>\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 </ChartsDataContext.Provider>\n <ChartsDataContext.Provider value={attributeLevelChartsData}>\n <div className={styles.attributeLevelWrapper}>\n {detailedAttributeType && (\n <DetailedAttributeTypeContext.Provider value={detailedAttributeType}>\n <AttributeLevelLayout\n views={attributeLevelViews}\n layout={attributeLevelLayout}\n />\n </DetailedAttributeTypeContext.Provider>\n )}\n </div>\n </ChartsDataContext.Provider>\n </ContentSlider>\n </EntityTypeContext.Provider>\n </DVFContext.Provider>\n </div>\n )}\n {!canGetDQStatistic && (\n <DQDashboardError\n height={NO_DATA_HEIGHT}\n errorData={{\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 variant={EmptyStateVariants.LARGE}\n />\n )}\n {isLoaded && entityType && !getEntityCount(entityTypeUri) && canGetDQStatistic && (\n <DQDashboardNoData\n height={NO_DATA_HEIGHT}\n data={{\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 variant={EmptyStateVariants.LARGE}\n />\n )}\n </div>\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(() => ({data: dvfs, state: requestState, reload: loadDVFs, errorCode}), [\n dvfs,\n requestState,\n loadDVFs,\n errorCode\n ]);\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 {MuiThemeProvider, createMuiTheme, createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\n\nimport {promisifyCallback} from '@reltio/mdm-sdk';\n\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {ReloadFacetProvider} from '../../contexts/ReloadFacetContext';\nimport {DateRangesProvider} from '../../contexts/DateRangesProvider';\nimport {theme} from '../../theme';\n\nimport DQDashboardPerspectiveView from './DQDashboardPerspectiveView';\n\nconst dqDashboardTheme = createMuiTheme(theme);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'DQDashboardPerspective',\n disableGlobal: true\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\n return (\n <Provider store={store}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <MuiThemeProvider theme={dqDashboardTheme}>\n <StylesProvider generateClassName={generateClassName}>\n <ReloadFacetProvider>\n <DateRangesProvider>\n <DQDashboardPerspectiveView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n </DateRangesProvider>\n </ReloadFacetProvider>\n </StylesProvider>\n </MuiThemeProvider>\n </MuiPickersUtilsProvider>\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","Avatar","classnames","iconRoot","src","onError","textRoot","contextSelector","CellRenderer","withContext","TableContext","useStyles","makeStyles","theme","display","flexDirection","basicView","BasicView","forwardRef","ref","children","styles","Paper","classes","root","displayName","propTypes","PropTypes","flex","padding","paddingTop","toolbar","minHeight","lineHeight","title","fontSize","fontWeight","whiteSpace","overflow","textOverflow","Toolbar","Typography","variant","bar","backgroundColor","palette","secondary","main","opacity","position","minWidth","borderRadius","top","left","height","widthIsNumber","width","is","Number","maxWidth","getBarColorWidth","useCallback","style","flexWrap","alignItems","justifyContent","boxSizing","color","text","primary","letterSpacing","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","id","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","onClick","identity","access","showButton","h5","subtitle1","Button","ErrorBoundary","React","constructor","super","this","error","componentDidCatch","console","render","EmptyStub","HideOnShrink","widthToHide","handleWidth","reltioLayoutItemToReactGridLayoutItem","maxHeight","isStatic","w","h","minW","minH","maxW","maxH","i","static","reactGridLayoutItemToReltioLayoutItem","reactGridLayoutToReltioLayout","layout","map","getReltioLayoutItemById","curry","find","propEq","updateExtraPropsInLayoutItem","from","to","mergeAll","pick","copyPropsFromPreviousLayout","oldReltioLayout","reltioLayout","layoutItem","pipe","prop","defaultTo","__","_","gridLayout","background","border","transitionDuration","zIndex","userSelect","transitionProperty","willChange","pointerEvents","transition","backgroundImage","bottom","right","svg2Url","backgroundRepeat","backgroundOrigin","cursor","visibility","gridFullscreen","overflowY","ReltioGridLayout","views","layoutOptions","onLayoutChanged","draggableHandle","LayoutItem","onRemove","onDrop","droppingItem","isDroppable","useRef","fullscreenItemId","setFullscreenItemId","setWidth","cols","rowHeight","margin","processedLayout","useMemo","reltioLayoutToReactGridLayout","onReltioLayoutChanged","onToggleFullscreen","prevId","isFullscreenEnabled","onItemHeightResize","layoutId","isLayoutChanged","newLayout","newHeight","options","Math","ceil","calcHeight","refreshMode","refreshRate","onResize","innerRef","autoSize","onLayoutChange","isResizable","isDraggable","e","isItemFullscreen","autosizeComponent","autosizing","AutosizeComponent","layoutItemId","handleHeight","key","layoutItemConfig","fullscreen","item","isFullscreen","defaultProps","onConfigChanged","memo","sourceType","metadata","useSelector","mdmModule","uri","findSourceSystemByUri","getSourceSystemLabel","sourceIcon","getAbsoluteImageUrl","VerticalDivider","borderLeft","enrichDataWithPercents","data","percents","countPercents","pluck","percent","Component","WithPercents","dataWithPercents","clickable","useClickableStyle","undefined","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","then","catch","DateRangeTypes","RequestStates","loader","LinearProgress","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","action","nanoid","useUpdateTime","min","Object","PeriodContext","ZoomContext","DateRangesProvider","zoom","setZoom","period","setPeriod","changePeriod","newPeriod","changeZoom","validatedZoom","getDateRange","usePeriod","useZoom","defaultTheme","tooltip","ChartsDataContext","DetailedAttributeTypeContext","DVFContext","EntityTypeContext","useChartsDataRequest","entityType","detailedAttributeType","metrics","requestState","setRequestState","chartsData","setChartsData","lastRequestTime","setLastRequestTime","attributeFieldName","fieldName","entityTypeUri","safePromise","useSafePromise","onRequestFinished","loadChartsData","async","DQDataLevel","buildFilterQueryString","FilterOptions","getActiveProfiles","getFacets","query","generateValuableQueryString","activeness","ActivityFilters","body","pageSize","pageNo","getInactiveProfiles","getDqChartsData","getDQChartsData","Promise","all","activeProfiles","inactiveProfiles","dqChartsData","sourceSystems","path","omit","keys","length","summary","getLastUriPart","attributes","pathOr","needRefresh","refreshAction","useEntityCount","entityTypes","entitiesCountMap","setEntitiesCountMap","ChartDataType","CustomViewType","ViewType","DQMetric","RDMLookupState","defaultViewsByDataLevel","FILL_RATE","i18n","UNIQUENESS","SUMMARY","DATA_VALIDATION","FREQUENCY","LENGTH_STATISTIC","PATTERN","CROSSWALK_ANALYSIS","MONTH_DISTRIBUTION","DAY_OF_WEEK_DISTRIBUTION","DAY_OF_MONTH_DISTRIBUTION","VALUE_DISTRIBUTION","UNSUPPORTED","CONSOLIDATION_RATE","RDM_TRANSCODE","defaultLayoutsByDataLevel","today","default","SSN","BOOLEAN","DATE","INTEGER","FLOAT","RDM_LOOKUP_EXIST","RDM_LOOKUP_NOT_EXIST","getAdvancedSearchFilter","filters","index","operator","SearchOperator","getDQDateRangeByValue","currentDate","moment","DateRangeValue","subtract","valueOf","getDateRangeByValue","getTimeSeriesData","getData","group","_max_date","label","sortBy","getTimeRangeDates","dateFormat","startTimestamp","endTimeStamp","getDateRangeByDatePeriod","startDate","format","endDate","checkIsTimeSeries","config","timeSeries","getChartTooltipDateTitle","hasData","date","hasTimeRange","enrichTimeSeriesDataWithTodayData","todayChartData","metric","timeSeriesData","reject","append","reduce","todayData","currentData","todayChartDataWithPercent","todayOption","FillRateState","UniquenessAnalysisState","getStateFromMetric","todayDataForTimeSeries","dataItem","getTodayData","localizeChartValues","chartData","localizedValue","getPercentLabel","isNil","isEmptyData","isEmpty","facetFiltersToSearchState","advanced","when","isDateType","evolve","mapFilterValue","parseTimestamp","searchOptions","searchByOv","ovOnly","version","getSearchState","getFilter","getChartDataTypeByAttributeType","DataTypes","STRING","UNKNOWN","getValidViews","allViews","supportedViews","viewType","viewIndex","findIndex","includes","concat","getMetricsFromViews","uniq","hasTimeRangeLayout","layouts","timeRange","getBarWidthStyle","enrichChartDataWithSourceLabel","max","getEntityTypeSummarySearchState","transformTimeSeriesChartData","toFixed","getChartState","states","equals","any","isContainActiveVF","dvf","attributeTypeUri","some","allPass","StatusVF","isFloatingType","getAttributeLabel","getLabel","name","AttrTypeDetailsType","filterAttributeByDetails","filterOptions","detail","details","filterAttributeTreeByDetails","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","items","parents","level","chain","childrenItems","isReference","attributeItem","attributeUriToSearchUri","isReferenceChild","EmptyStateVariants","DQDateRangeValue","getFirstEntityTypeUri","dateRangeValues","getValuesDateRange","DataLevelContext","paddingRight","infoDataLabel","chartDataLabel","tooltipWrapper","row","DataRenderer","ChartDataRenderer","fillRateSquare","marginRight","verticalAlign","getValueLabel","getColor","tooltipData","infoIcon","infoTooltipTitle","hasInfoIcon","hasChildren","BasicViewHeader","SmallIconButton","InfoIcon","size","tooltipTitle","dataReltioId","FillRateChartColors","getFillRateColorByState","getChartItemColor","getFillRateColors","getLabelFromState","formatFillRateData","entries","indexOf","formatFillRatesData","toPairs","getFillRateData","getFillRateChartData","always","converge","colors","getFillRateFilter","getFillRateSearchState","useChartData","getChartData","getRawFilterSearchState","keyword","isRawFilter","getEqualsRawFilterSearchState","excludeDescendantEntityTypes","searchState","entityTypesFilter","entityTypesUris","AdditionalFilterOptionsValues","join","getExcludedEntityTypesRawFilter","getDescendantEntityTypes","currentRawFilter","newRawFilter","useSearchRedirect","dispatch","useDispatch","ui","container","paddingBottom","small","marginBottom","medium","large","message","refreshButton","refreshIcon","defaultIcon","onRefresh","errorData","SMALL","Icon","startIcon","Replay","viewContent","loadingState","BasicViewContent","DashboardLinearLoader","legendLabel","legendValue","legend","itemColor","payload","withPercents","legendProps","align","wrapperStyle","content","formatNumberAsMetric","BarAxis","stackedBar","flexGrow","inactivePart","tooltipFillRate","legendWrapper","rangeWrapper","rangeValue","Bar","BarWithTooltip","withTooltip","getTooltipData","onItemClick","onBarClick","maxValue","sum","searchProfiles","useMlDqDataRequest","LAST_WEEK","setTimeSeriesData","tenant","mlDqPath","oldRequestDependencies","memoizedRequestDependencies","toString","getMlDqData","attribute","currentRange","last","head","currentStartTime","currentEndTime","startTime","endTime","needRefreshData","current","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","attributeType","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","source","getValueDistributionFilterForDate","timestampStart","timestampEnd","getValueDistributionFilterForNumber","getValueDistributionFilterForFloat","lastItem","isSingleValue","getValueDistributionSearchState","cond","getConsolidationRateFilter","getConsolidationRateSearchState","getBarOpacity","selectedBar","tickFormatter","toUpperCase","round","getValuesFromChartData","flatten","roundPercent","XAxisTickFormatter","isPercent","minLineChartData","getMinValueFromLineChartData","maxLineChartData","getMaxValueFromLineChartData","minYAxisValue","maxYAxisValue","gap","updatedMinData","updatedMaxData","getUpdatedEdgeData","xAxis","dataKey","tick","tickMargin","angle","textAnchor","tickLine","interval","yAxis","tickCount","domain","cartesianGrid","strokeDasharray","strokeOpacity","line","dot","activeDot","referenceLine","isFront","labelForY","getTooltip","getTooltipProp","yAxisLabel","dateRange","getLineChartSettings","tooltipProps","selectedDots","setSelectedDots","zoomAreaStart","setZoomAreaStart","zoomAreaEnd","setZoomAreaEnd","zoomedData","indexStart","indexEnd","slice","getZoomedData","emptyAreas","getDateByIndex","every","isNaN","isLineChartDataEmpty","areas","lastArea","end","start","extendArea","getEmptyAreas","hasZoomArea","onMouseMove","mouseEvent","isTooltipActive","activeLabel","activePayload","onMouseLeave","onMouseDown","onMouseUp","either","emptyArea","filterNull","_extends","target","arguments","prototype","hasOwnProperty","call","apply","infoPanel","info","dynamicInfo","dynamicInfoPositive","dynamicInfoNegative","dynamicIcon","dynamicPercent","isPositiveDynamic","abs","dateLabel","infoLabel","percentKey","lastChartData","filteredData","Infinity","prevPercent","lastPercent","getDynamicPercent","monoFontCell","fontFamily","timeSeriesContent","tooltipKeys","active","currentPayload","mlDqData","mlDqState","mlDqReload","todayState","todayReload","reloadFunction","disabled","chipProps","isDateRangeValue","getRangeOptionLabel","Chip","InfoDataRenderer","isTimeSeries","UniquenessChartColors","getUniquenessColorByState","getUniquenessColors","formatUniquenessAnalysisData","getUniquenessData","getUniquenessChartData","uniqueness","dataMlDq","stateMlDq","reloadMlDq","dataToday","stateToday","reloadToday","loading","badQuality","AttributeTypeDetailIconSizes","NORMAL","AttributeTypeDetailIconVariant","AttributeTypeDetailIcon","detailType","paddingLeft","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","Tooltip","attributeTypesCount","collectAttributes","isReadableAttribute","getAttributeTypeSubAttributes","countEntityTypeAttributes","getValue","searchRedirect","search","ActivityFilter","isAttributeTypeLevel","DefaultIcon","titleChildren","viewTitle","getFormattedDataForTableChart","valueComparator","sortDirection","sortField","a","b","filterExistedDVF","dvfs","chartDataItem","findDVFByUri","enrichDVFDataWithFunctionLabel","getAttributeTypeLabelFromHierarhy","enrichEntityLevelDVFData","attributeUri","attributeTypesHierarhy","getAttributeTypesHierarchyByUri","attributeLabel","getValidationChartData","getFrequencyChartData","getPatternAnalisysData","getDVFAnalyticAttribtuteUri","attributeName","getValidationFilter","getFrequencyAnalysisStateForTimestamp","attributeValue","getFrequencyAnalysisFilterForDate","getFrequencyAnalysisFilter","getFrequencyAnalysisSearchState","isTimestampBasedType","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","SettingsIcon","Link","href","component","underline","DATA_VALID","NiceOneIcon","PERMISSION_DENIED","useNoDataDvfType","activeDvfs","errorCode","dvfsState","chartDataState","chartState","isAttributeDataLevel","isPermissionDenied","ApiErrorCode","isDVFNotSupported","isDVFNotConfigured","isDataValid","useDvfs","onlyActive","dvfsData","currentDvfs","getDVFsForAttribute","getLabelAndMaxValue","getValueByColumnId","rowValue","handler","childrenRef","el","clientWidth","scrollWidth","RootRef","rootRef","headCell","isFirstColumn","headCellWithRange","headLabel","labelWrapper","rangeLabel","tooltipValue","useNumberCellStyles","barColor","colorBarContainer","numberContainer","number","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","getEntityCounts","dvfUri","getValidationSearchState","dataKeys","functionId","propSatisfies","reloadDvf","stateDvf","acc","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","applySpec","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","onRowClick","onRowHover","hoverRowIndex","RDMTranscodeStatus","RDMChartColors","RESOLVED","UNRESOLVED","getRDMChartColors","formatRDMTranscodeData","resolveCount","unresolveCount","getRDMTranscodeFilter","rdmTranscodeStatus","getRDMTranscodeSearchState","setData","getRDMData","isRDMLoolupResolve","loadRDMChartData","useRDMChartDataRequest","ViewsFactory","getComponent","DQDashboardLayoutItem","ResizeComponent","reltioGridLayoutToStaticLayout","DEFAULT_LAYOUT_OPTIONS","staticLayout","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","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","selected","onCollapse","noop","isLoading","hasFillRate","CollapseIcon","ArrowRightIcon","ArrowDropDownIcon","ListItem","times","getAttrTypeFromItem","getFirstSimpleDetailedAttrType","isComplexAttribute","isImage","not","filterDetailedAttrTypeByFieldName","getFilterOptionsByGroup","EmptinessFilterValue","emptinessFilterOptions","SHOW_EMPTY","filterItemsByEmptiness","firstEmptinessOption","filterValidDetailsOptions","validOptionValues","getFieldNameFromItem","filterItemsByDetails","detailsOptions","filteredNestedFieldNames","both","getFilteredNestedFieldNames","startsWith","getAtrributeFieldNames","searchWrapper","filterByDetails","searchInput","filledInput","menu","filterIcon","filterIconFilterApplied","filterIconWrapper","filterIconWrapperActive","filterIconWrapperSelected","dropdownMenuTitle","option","isActive","typeIconWrapper","valueContainer","counter","optionLabel","groupLabel","actionsContainer","clearAllButton","count","showCounter","MenuItem","Checkbox","checked","containsOption","withoutOption","optionIndex","remove","defaultFilterOptions","defaultFilterText","onChangeFilterText","onChangeFilterOptions","anchorEl","setAnchorEl","selectedFilterOptions","setSelectedFilterOptions","valueInFilterTextInput","setValueInFilterTextInput","filterOptionsGroups","allValidFilterOptions","getValidFilterOptions","closeFilter","handleOptionChange","ifElse","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","getAttributeTypesTree","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","scrollTopShadow","hasRDMLookup","isAttrTreeHasRDMLookup","checkEntityTypeHasRDMLookup","currentRDMLookupState","layoutsByDataLevel","uniqBy","getEntityLevelViews","viewsByDataLevel","selectRoot","outline","select","selectValue","arrowIcon","optionRoot","dataReltioOptionId","classesProps","selectProps","renderCount","mergeClasses","outlined","Select","MenuProps","getContentAnchorEl","list","renderValue","autoWidth","entityCount","setTick","useReloadAllFacets","intervalId","setInterval","timer","clearInterval","fromNow","RefreshIcon","perspectiveView","overflowX","attributeLevelWrapper","navigationWrapper","headerRightSide","periodSelector","flexBasis","paper","input","inputRoot","dropdownIndicator","saveState","canGetDQStatistic","isAvailableEntityType","useEntityTypes","setEntityTypeUri","getEntityType","getEntityCount","customAttributeLayouts","setDetailedAttributeType","setDataLevel","selectedEntityType","consoleLink","setConsoleLink","setDVFConfigLink","servicesPath","environment","getConsoleApps","response","apps","insert","useDvfConfigLink","setDvfs","setErrorCode","dvfPath","env","canUserReadDVF","functions","loadDVFs","getDVF","useDVF","dvfContext","dqDashboardSavedState","isEntityTypeExists","sortedEntityTypesWithCount","defaultPeriod","Array","isArray","saveStateHandler","attributeLevelLayout","chartDataType","customLayouts","defaultLayouts","mergedLayoutsByType","mergeLeft","getLayoutByAttributeType","attributeLevelViews","getViewsByDataType","getAttributeLevelViews","attributeLevelMetrics","saveStateDebounce","fn","lastParams","params","startParams","clearTimeout","useDebounceFunction","newSavedState","getNewSavedState","attributeLevelChartsData","sortWith","sortEntityTypesWithCount","handleSetEntityTypeByUri","showContent","showTimeRange","dateRangeEditorValue","getPeriodValue","DateRangeEditor","getDateRangeOptions","TextFieldProps","InputProps","disableUnderline","DateRangePickerProps","maxDate","startOf","toDate","ATTRIBUTE_LIST_WIDTH","LARGE","dqDashboardTheme","createMuiTheme","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","getSavedStatePromisified","promisifyCallback","MuiPickersUtilsProvider","MomentUtils","StylesProvider"],"sourceRoot":""}
1
+ {"version":3,"file":"5987.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.js","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/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.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/helpers.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/icons/ResizeIcon.svg.ts","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/styles.js","webpack://@reltio/remotes/../components/src/components/ReltioGridLayout/ReltioGridLayout.js","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/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/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/contexts/DateRangesProvider/index.tsx","webpack://@reltio/remotes/../dq-dashboard/src/theme/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/ChartsDataContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DetailedAttributeTypeContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DVFContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/EntityTypeContext/index.ts","webpack://@reltio/remotes/../dq-dashboard/src/hooks/useChartsDataRequest.ts","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/dateRange.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/mlDq.ts","webpack://@reltio/remotes/../dq-dashboard/src/services/charts.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/types/EmptyStateVariants.ts","webpack://@reltio/remotes/../dq-dashboard/src/types/DQDateRangeValue.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/helpers.ts","webpack://@reltio/remotes/../dq-dashboard/src/contexts/DataLevelContext/index.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/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/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/components/DQDashboardError/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardError/DQDashboardError.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoData/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardNoData/DQDashboardNoData.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/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/components/StackedHorizontalBarChart/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/StackedHorizontalBarChart/Bar.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/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/services/barCharts.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/LineChart/helpers.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/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/views/charts/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/views/charts/FillRateChart/FillRateTimeSeriesChart.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/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/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardLayout/DQDashboardLayout.tsx","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/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/DQDashboardAttributesList/helpers.ts","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/useAttrTypeDetails.ts","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/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/UpdateTimeHeader/styles.ts","webpack://@reltio/remotes/../dq-dashboard/src/components/UpdateTimeHeader/UpdateTimeHeader.tsx","webpack://@reltio/remotes/../dq-dashboard/src/components/DQDashboardPerspectiveView/styles.ts","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 as Avatar} from '@material-ui/core';\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?: 'circle' | '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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles((theme) => ({\n 'basic-view__paper': {\n display: 'flex',\n flexDirection: 'column',\n ...theme.basicView\n }\n}));\n","import Paper, {PaperProps} from '@material-ui/core/Paper';\nimport PropTypes from 'prop-types';\nimport React, {forwardRef, Ref} from 'react';\nimport {useStyles} from './styles';\n\nconst BasicView = forwardRef<Ref<typeof Paper>, PaperProps>(({children, className, ...otherProps}, ref) => {\n const styles = useStyles();\n return (\n <Paper ref={ref} className={className} classes={{root: styles['basic-view__paper']}} {...otherProps}>\n {children}\n </Paper>\n );\n});\n\nBasicView.displayName = 'BasicView';\n\nBasicView.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string\n};\n\nexport default BasicView;\n","import {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n '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 '@material-ui/core/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 fontWeight: 'normal',\n lineHeight: 'inherit',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n});\n","import React from 'react';\nimport Toolbar, {ToolbarProps} from '@material-ui/core/Toolbar';\nimport {Typography as Typography} from '@material-ui/core';\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 {title}\n </Typography>\n {children}\n </Toolbar>\n );\n};\n\nexport default BasicViewHeader;\n","import {makeStyles} from '@material-ui/core/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 {makeStyles} from '@material-ui/core/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 as Typography} from '@material-ui/core';\nimport {Button as Button} from '@material-ui/core';\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactResizeDetector from 'react-resize-detector';\n\nconst EmptyStub = () => <div style={{display: 'none'}} />;\n\nconst HideOnShrink = ({widthToHide, children}) => (\n <ReactResizeDetector\n handleWidth={true}\n render={({width}) => (width > widthToHide ? <>{children}</> : <EmptyStub />)}\n />\n);\n\nHideOnShrink.propTypes = {\n children: PropTypes.node,\n widthToHide: PropTypes.number.isRequired\n};\n\nexport default HideOnShrink;\n","import {curry, defaultTo, mergeAll, pick, pipe, prop, propEq, __} from 'ramda';\n\nexport const getReltioViewId = (id) => id.split(/\\d+_/)[1];\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}) => ({\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 = ({x, y, w, h, maxW, minW, minH, maxH, i, ...obj}) => ({\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) => (layout || []).map(reltioLayoutItemToReactGridLayoutItem);\n\nexport const reactGridLayoutToReltioLayout = (layout) => (layout || []).map(reactGridLayoutItemToReltioLayoutItem);\n\nexport const getReltioLayoutItemById = curry((layout, id) => (layout || []).find(propEq('id', id)));\n\nconst updateExtraPropsInLayoutItem = curry((props, from, to) => mergeAll([to, pick(props, from)]));\n\nexport const copyPropsFromPreviousLayout = curry((props, oldReltioLayout, reltioLayout) =>\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, options) => {\n const {margin, rowHeight} = options;\n\n return Math.ceil((height + margin[1]) / (rowHeight + margin[1]));\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 '@material-ui/core/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 '&.cssTransforms': {\n transitionProperty: 'transform'\n },\n '&.resizing': {\n zIndex: 9,\n willChange: 'width, height',\n pointerEvents: 'none'\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: '17px',\n height: '17px',\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}));\n","import PropTypes from 'prop-types';\nimport React, {useCallback, useMemo, useRef, useState, memo} from 'react';\nimport GridLayout from 'react-grid-layout';\nimport ReactResizeDetector from 'react-resize-detector';\nimport {identity, pipe} from 'ramda';\nimport classnames from 'classnames';\nimport {\n reltioLayoutToReactGridLayout,\n reactGridLayoutToReltioLayout,\n reactGridLayoutItemToReltioLayoutItem,\n copyPropsFromPreviousLayout,\n calcHeight,\n getReltioLayoutItemById\n} from './helpers';\n\nimport {useStyles} from './styles';\n\nconst ReltioGridLayout = ({\n views,\n layout,\n layoutOptions,\n onLayoutChanged,\n draggableHandle,\n LayoutItem,\n onRemove,\n onDrop,\n droppingItem,\n isDroppable,\n classes\n}) => {\n const ref = useRef();\n const styles = useStyles();\n const [fullscreenItemId, setFullscreenItemId] = useState(null);\n const [width, setWidth] = useState(0);\n const {cols, rowHeight, margin} = layoutOptions;\n const processedLayout = useMemo(() => reltioLayoutToReactGridLayout(layout), [layout]);\n const onReltioLayoutChanged = pipe(\n reactGridLayoutToReltioLayout,\n copyPropsFromPreviousLayout(['autosizing'], layout),\n onLayoutChanged\n );\n const handleDrop = (layout, layoutItem, e) => {\n if (onDrop) {\n onDrop(reactGridLayoutToReltioLayout(layout), reactGridLayoutItemToReltioLayoutItem(layoutItem), e);\n }\n };\n const onToggleFullscreen = useCallback((id) => setFullscreenItemId((prevId) => (prevId ? null : id)), []);\n const isFullscreenEnabled = fullscreenItemId !== null;\n\n const onItemHeightResize = useCallback(\n (height, layoutId) => {\n let isLayoutChanged = false;\n\n const newLayout = layout.map((layoutItem) => {\n if (layoutItem.id === layoutId && height) {\n const newHeight = calcHeight(height, layoutOptions);\n\n if (layoutItem.height !== newHeight) {\n isLayoutChanged = true;\n return {\n ...layoutItem,\n minHeight: newHeight,\n maxHeight: newHeight,\n height: newHeight\n };\n }\n }\n return layoutItem;\n });\n\n if (isLayoutChanged) {\n onLayoutChanged(newLayout);\n }\n },\n [layout, layoutOptions, onLayoutChanged]\n );\n\n const getAutosizeComponent = (layoutItemId) => {\n return (\n <ReactResizeDetector\n handleHeight\n onResize={(width, height) => {\n onItemHeightResize(height, layoutItemId);\n }}\n />\n );\n };\n\n return (\n <>\n <ReactResizeDetector\n refreshMode=\"debounce\"\n refreshRate={50}\n handleWidth={true}\n onResize={(width) => setWidth(width)}\n />\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={onReltioLayoutChanged}\n isResizable={!isFullscreenEnabled}\n isDraggable={!isFullscreenEnabled}\n className={classnames(classes.root, styles.gridLayout, {[styles.gridFullscreen]: isFullscreenEnabled})}\n onDrop={handleDrop}\n droppingItem={droppingItem}\n isDroppable={isDroppable}\n >\n {processedLayout.map((layoutItem) => {\n const isItemFullscreen = fullscreenItemId === layoutItem.i;\n const isAutosize = (getReltioLayoutItemById(layout, layoutItem.i) || {}).autosizing;\n const autosizeComponent = isAutosize ? {AutosizeComponent: getAutosizeComponent(layoutItem.i)} : {};\n return (\n <LayoutItem\n key={layoutItem.i}\n layoutItemConfig={layoutItem}\n views={views}\n onToggleFullscreen={onToggleFullscreen}\n onRemove={onRemove}\n className={classnames({fullscreen: isItemFullscreen}, classes.item)}\n isFullscreen={isItemFullscreen}\n {...autosizeComponent}\n />\n );\n })}\n </GridLayout>\n </>\n );\n};\n\nReltioGridLayout.defaultProps = {\n layoutOptions: {\n cols: 4,\n rowHeight: 30,\n margin: [15, 15]\n },\n onConfigChanged: identity,\n onLayoutChanged: identity,\n classes: {}\n};\nReltioGridLayout.propTypes = {\n views: PropTypes.array,\n layout: PropTypes.array,\n layoutOptions: PropTypes.object,\n onConfigChanged: PropTypes.func,\n onLayoutChanged: PropTypes.func,\n onDrop: PropTypes.func,\n onRemove: PropTypes.func,\n LayoutItem: PropTypes.elementType,\n draggableHandle: PropTypes.string,\n isDroppable: PropTypes.bool,\n droppingItem: PropTypes.object,\n classes: PropTypes.shape({\n root: PropTypes.string,\n item: PropTypes.string\n })\n};\n\nexport default memo(ReltioGridLayout);\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 '@material-ui/core/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 {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 {AttributeType} from '@reltio/mdm-sdk';\n\nexport type ReactGridLayoutItem = {\n i: string;\n x: number;\n y: number;\n w: number;\n h: number;\n minW?: number;\n minH?: number;\n maxW?: number;\n maxH?: number;\n static?: boolean;\n};\n\nexport type AttributeOption = {\n label: string;\n value: string;\n attrType: AttributeType;\n chipLabel: string;\n level: number;\n};\n\nexport enum DateRangeTypes {\n WITHIN = 'within',\n AGO = 'ago',\n BETWEEN = 'between'\n}\n\nexport type DateRangeFilter = {\n type: DateRangeTypes;\n period: [number, string] | [Date, Date];\n};\n\nexport type QueryBuilderAttributeData = {\n title: string;\n pathToTitle: Array<string>;\n fieldName: string;\n entityTypeUri: string;\n attrType: AttributeType;\n uri: string;\n groupName: string;\n filterOptions: Array<string>;\n};\n\nexport type QueryBuilderAttribute = {\n id: string;\n values: Array<unknown>;\n data: QueryBuilderAttributeData;\n filter: string;\n operator: string;\n};\n\nexport type AttributeSelectorItem = {\n attrType?: AttributeType;\n entityTypeUri?: string;\n fieldName: string;\n groupName?: string;\n title: string;\n uri?: string;\n children?: AttributeSelectorItem[];\n pathToTitle?: string[];\n};\n\nexport type AttributeSelectorItemsGroup = {\n id?: string;\n title: string;\n attributes: AttributeSelectorItem[];\n};\n\nexport type AttributeSelectionInfo = {\n index: number;\n checked: boolean;\n attribute: AttributeSelectorItem;\n selectedAttributes: AttributeSelectorItem[];\n};\n\nexport type BasicAttributeSelectorProps = {\n className?: string;\n itemsGroups: AttributeSelectorItemsGroup[];\n value: AttributeSelectorItem;\n onSelect: (selectInfo: AttributeSelectionInfo) => void;\n onRestoreFocus?: () => void;\n onOpenPopup?: () => void;\n getLabel?: (value: {fieldName?: string; pathToTitle?: string[]; title: string}) => string;\n disableRestoreFocus?: boolean;\n disableEnforceFocus?: boolean;\n single?: boolean;\n ungroup?: boolean;\n disabled?: boolean;\n hideCheckBox?: boolean;\n};\nexport enum RequestStates {\n INIT = 'init',\n LOADING = 'loading',\n LOADED = 'loaded',\n ERROR = 'error'\n}\n\nexport type SelectableItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selected?: boolean;\n};\n\nexport type DropDownMenuItem = {\n text?: string;\n disabled?: boolean;\n tooltip?: string;\n id?: string;\n onClick?: (e) => void;\n selectable?: boolean;\n selected?: boolean;\n};\n","import {makeStyles} from '@material-ui/core/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 as LinearProgress} from '@material-ui/core';\nimport {useStyles} from './styles';\n\nconst DashboardLinearLoader = () => {\n const styles = useStyles();\n return <LinearProgress color=\"secondary\" className={styles.loader} />;\n};\n\nexport default DashboardLinearLoader;\n","import {makeStyles} from '@material-ui/core/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 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}>{children}</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 React, {useState, useContext, useCallback} from 'react';\n\nimport {DatePeriod} from '@reltio/mdm-sdk';\n\ntype Props = {\n children: React.ReactNode;\n};\n\ntype Zoom = [string, string];\n\nconst PeriodContext = React.createContext<{\n period?: DatePeriod;\n changePeriod?: (period: DatePeriod) => void;\n }>(null);\n\nconst ZoomContext = React.createContext<{\n zoom?: [string, string];\n getDateRange?: () => DatePeriod;\n changeZoom?: (zoom: [string, string]) => void;\n }>({});\n\nexport const DateRangesProvider = ({children}: Props) => {\n const [zoom, setZoom] = useState<Zoom>(null);\n const [period, setPeriod] = useState<DatePeriod>(null);\n const changePeriod = useCallback(\n (newPeriod: DatePeriod) => {\n setPeriod(newPeriod);\n period && setZoom(null);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [period]\n );\n const changeZoom = useCallback((zoom: Zoom) => {\n if (zoom) {\n const validatedZoom: [string, string] =\n new Date(zoom[0]) > new Date(zoom[1]) ? [zoom[1], zoom[0]] : [zoom[0], zoom[1]];\n setZoom(validatedZoom);\n }\n }, []);\n\n const getDateRange: () => DatePeriod = useCallback(\n () => (zoom ? [new Date(zoom[0]), new Date(zoom[1])] : period),\n [zoom, period]\n );\n return (\n <PeriodContext.Provider value={{period, changePeriod}}>\n <ZoomContext.Provider value={{zoom, getDateRange, changeZoom}}>{children}</ZoomContext.Provider>\n </PeriodContext.Provider>\n );\n};\n\nexport const usePeriod = () => {\n return useContext(PeriodContext);\n};\n\nexport const useZoom = () => {\n return useContext(ZoomContext);\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\nexport const ChartsDataContext = React.createContext(null);\n\nChartsDataContext.displayName = 'ChartsDataContext';\n","import React from 'react';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nexport const DetailedAttributeTypeContext = React.createContext<DetailedAttributeType>(null);\n\nDetailedAttributeTypeContext.displayName = 'DetailedAttributeTypeContext';\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 from 'react';\n\nimport {TEntityType} from '@reltio/mdm-sdk';\n\nexport const EntityTypeContext = React.createContext<TEntityType>(null);\n\nEntityTypeContext.displayName = 'EntityTypeContext';\n","import {useCallback, useEffect, useMemo, useState} from 'react';\nimport {omit, pathOr, pipe, keys, path, length} 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';\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\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 });\n\n safePromise(Promise.all([getActiveProfiles, getInactiveProfiles, getDqChartsData]))\n .then(([activeProfiles, inactiveProfiles, dqChartsData]) => {\n const sourceSystems = pipe(\n path(['consolidationRate', 'totalCrosswalksBySource']),\n omit(['ReltioCleanser']),\n keys,\n length\n )(dqChartsData);\n\n onRequestFinished({\n ...dqChartsData,\n summary: {\n inactiveProfiles: inactiveProfiles.type?.[getLastUriPart(entityTypeUri)],\n activeProfiles: activeProfiles.type?.[getLastUriPart(entityTypeUri)],\n sourceSystems\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 })\n )\n .then(pipe(pathOr({}, ['statistic', attributeFieldName]), onRequestFinished))\n .catch(onError);\n }\n }, [setRequestState, setChartsData, safePromise, attributeFieldName, entityTypeUri, dataLevel, metrics]);\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 {pluck} from 'ramda';\nimport {useCallback, useEffect, useState} from 'react';\nimport {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 safePromise = useSafePromise();\n useEffect(() => {\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: filter}),\n body: [{fieldName: 'type', pageSize: 101, pageNo: 1}]\n })\n )\n .then(({type}) => setEntitiesCountMap(type))\n .catch(() => setEntitiesCountMap(null));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityTypes]);\n\n return useCallback((entityTypeUri: string) => Number(entitiesCountMap?.[getLastUriPart(entityTypeUri)] || 0), [\n entitiesCountMap\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: 'ValidationViewTimeSeries',\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: 'MonthDistribution',\n type: ViewType.MONTH_DISTRIBUTION,\n title: i18n.text('Month distribution')\n },\n {\n id: 'DayOfWeekDistribution',\n type: ViewType.DAY_OF_WEEK_DISTRIBUTION,\n title: i18n.text('Day of week distribution')\n },\n {\n id: 'DayOfMonthDistribution',\n type: ViewType.DAY_OF_MONTH_DISTRIBUTION,\n title: i18n.text('Day of month distribution')\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 [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 } 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 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 moment from 'moment';\nimport {append, assoc, curry, defaultTo, map, pipe, prop, propEq, reject, sortBy} from 'ramda';\n\nimport {\n DatePeriod,\n isDateRangeValue,\n TimeSeriesData,\n TimeSeriesDataValues,\n FillRateState,\n UniquenessAnalysisState,\n DQMetric,\n getRangeOptionLabel,\n getDateRangeByDatePeriod,\n DateRangeValue\n} from '@reltio/mdm-sdk';\nimport {ChartData, enrichDataWithPercents} from '@reltio/components';\nimport i18n from 'ui-i18n';\n\nimport {DQDateRangeValue} from '../types/DQDateRangeValue';\nimport {LineChartData} from '../types/LineChartData';\nimport {DQDashboardView} from '../types/DQDashboardView';\nimport {getDQDateRangeByValue} from '../services/dateRange';\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 getTimeSeriesData = <T>(\n getData: (chartsData: TimeSeriesDataValues) => T\n): ((chartsData: TimeSeriesData[]) => LineChartData[]) =>\n pipe(\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 );\n\nexport const getTimeRangeDates = (period: DatePeriod) => {\n const dateFormat = 'YYYY-MM-DD';\n\n const [startTimestamp, endTimeStamp] = getDateRangeByDatePeriod(period, getDQDateRangeByValue);\n return {\n startDate: moment(startTimestamp).format(dateFormat),\n endDate: moment(endTimeStamp).format(dateFormat)\n };\n};\n\nexport const checkIsTimeSeries = (config: DQDashboardView) => config?.options?.timeSeries;\n\nexport const getChartTooltipDateTitle = (hasData: boolean, date: string) =>\n hasData ? i18n.date(date, 'MMM D, YYYY') : i18n.text('No data available');\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","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 DatePeriod,\n DataTypes,\n DQDataLevel,\n DQMetric,\n formatDataTypeValue,\n getSourceSystemLabel,\n isDateType,\n mapFilterValue,\n Metadata,\n parseTimestamp,\n SearchState,\n TimeSeriesDataValues,\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';\nimport {hasTimeRange} from '../services/mlDq';\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 searchOptions: {\n searchByOv: false,\n ovOnly: false\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 ViewType.MONTH_DISTRIBUTION,\n ViewType.DAY_OF_MONTH_DISTRIBUTION,\n ViewType.DAY_OF_WEEK_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 hasTimeRangeLayout = (layouts: LayoutsByAttributeType) => {\n return !!(layouts?.timeRange || defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE]?.timeRange);\n};\n\nexport const getLayoutByAttributeType = (layouts: LayoutsByAttributeType, type: string, period: DatePeriod) => {\n const chartDataType = getChartDataTypeByAttributeType(type);\n const customLayouts = hasTimeRange(period) ? layouts?.timeRange : layouts?.today;\n const defaultLayouts =\n defaultLayoutsByDataLevel[DQDataLevel.ATTRIBUTE_TYPE][hasTimeRange(period) ? 'timeRange' : 'today'];\n\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: TimeSeriesDataValues[]) =>\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","import {propEq, either, prop, allPass} from 'ramda';\nimport {\n getLabel,\n AttributeType,\n DataTypes,\n DataValidationFunction,\n getAttributeTypeSubAttributes,\n isReadableAttribute,\n Metadata,\n TEntityType,\n StatusVF\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 = entityType.attributes || [];\n const collectAttributes = (attributes: AttributeType[]) => {\n return attributes\n .filter(isReadableAttribute)\n .filter(either(prop('label'), prop('name')))\n .reduce((attributes: AttributeType[], attribute: AttributeType) => {\n const children = getAttributeTypeSubAttributes(metadata, attribute);\n return children?.length\n ? [...attributes, attribute, ...collectAttributes(children)]\n : [...attributes, 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","export enum EmptyStateVariants {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large'\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 {ascend, assoc, defaultTo, map, path, pipe, prop, sortWith} from 'ramda';\n\nimport {TEntityType} 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","import React from 'react';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nexport const DataLevelContext = React.createContext<DQDataLevel>(null);\n\nDataLevelContext.displayName = 'DataLevelContext';\n","import {makeStyles} from '@material-ui/core/styles';\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});\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 '@material-ui/core/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};\n\nconst ChartDataTooltip = ({data, title, DataRenderer = ChartDataRenderer}: 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 </div>\n );\n};\n\nexport default ChartDataTooltip;\n","import {makeStyles} from '@material-ui/core/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 {makeStyles} from '@material-ui/core/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 from 'react';\nimport {BasicViewHeader, SmallIconButtonWithTooltip, HideOnShrink, VerticalDivider} from '@reltio/components';\nimport InfoIcon from '@material-ui/icons/InfoOutlined';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n title: string;\n infoTooltipTitle?: React.ReactNode;\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 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 />\n )}\n {hasChildren && (\n <HideOnShrink widthToHide={250}>\n <VerticalDivider height={24} margin={16} />\n {children}\n </HideOnShrink>\n )}\n </BasicViewHeader>\n );\n};\n\nexport default DQLayoutItemHeader;\n","import {makeStyles} from '@material-ui/core/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 {usePeriod} from '../../contexts/DateRangesProvider';\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} = usePeriod();\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 {always, converge, curry, identity, pipe, propOr, map, reduce, sortBy, toPairs, when} from 'ramda';\nimport {\n getChartItemColor,\n FillRateState,\n DQChartsData,\n FillRateData,\n FilterOptions,\n TimeSeriesData\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) result[key] = formatFillRateData(value.fillRate);\n return result;\n }, {})\n);\n\ntype GetFillRateDataFn = (chartsData: DQChartsData | TimeSeriesData) => FillRateData;\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 {useContext, useMemo} from 'react';\nimport {DQChartsData} from '@reltio/mdm-sdk';\nimport {RequestStates} from '@reltio/components';\nimport {ChartsDataContext} from '../contexts/ChartsDataContext';\n\nexport type ChartsDataWithState = {\n data: DQChartsData;\n state: RequestStates;\n reload: () => void;\n};\nexport const useChartData = <T>(getChartData: (chartsData: DQChartsData) => T) => {\n const {data: chartsData, state, reload} = useContext<ChartsDataWithState>(ChartsDataContext);\n const data = useMemo(() => getChartData(chartsData), [chartsData, getChartData]);\n\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 searchOptions: {\n searchByOv: false,\n ovOnly: false\n },\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 {useContext} from 'react';\nimport {assoc, curry, pipe} from 'ramda';\nimport {useDispatch, useSelector} from 'react-redux';\nimport mdmModule, {ui} from '@reltio/mdm-module';\nimport {getDescendantEntityTypes, Metadata, SearchState} from '@reltio/mdm-sdk';\nimport {DetailedAttributeTypeContext} from '../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../contexts/EntityTypeContext';\nimport {getExcludedEntityTypesRawFilter} from '../services/rawFilters';\nimport type {DetailedAttributeType} from '../types/DetailedAttributeType';\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});\n\ntype GetSearchStateFn = (props: GetSearchStateProps) => (group?: string) => SearchState;\nexport const useSearchRedirect = (getSearchState: GetSearchStateFn): ((group?: string) => void) => {\n const dispatch = useDispatch();\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const detailedAttributeType: DetailedAttributeType = useContext(DetailedAttributeTypeContext);\n const entityType = useContext(EntityTypeContext);\n\n return pipe(\n getSearchState({detailedAttributeType, entityTypeUri: entityType.uri}),\n excludeDescendantEntityTypes(metadata, entityType.uri),\n ui.actions.openSearch,\n dispatch\n );\n};\n","import {makeStyles} from '@material-ui/core/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 as Button} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\nimport ReplayIcon from '@material-ui/icons/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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\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 },\n medium: {\n '& $icon': {\n maxHeight: '190px',\n marginBottom: '24px'\n }\n },\n large: {\n '& $icon': {\n maxHeight: '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 whiteSpace: 'pre-wrap'\n }\n});\n","import React from 'react';\nimport {Typography as Typography} from '@material-ui/core';\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 data?: ErrorData;\n height?: number;\n variant?: EmptyStateVariants;\n};\n\nconst defaultIcon = EMPTY_STATE_ICONS.NO_DATA;\n\nconst DQDashboardNoData = ({height, data = {}, variant = EmptyStateVariants.SMALL}: Props) => {\n const {Icon = defaultIcon, message, title} = data;\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 </div>\n );\n};\n\nexport default DQDashboardNoData;\n","import {makeStyles} from '@material-ui/core/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 DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\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 <DQDashboardNoData\n height={height}\n data={{\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 '@material-ui/core/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 legend: {\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 {LegendProps} from 'recharts';\nimport classnames from 'classnames';\nimport {useStyles} from './styles';\n\nconst CustomLegend = ({payload}: LegendProps) => {\n const styles = useStyles();\n return (\n <div className={classnames(styles.legend)}>\n {payload.map((item) => (\n <div key={item.id} className={styles.item}>\n <div style={{background: item.color}} className={styles.itemColor} />\n {item.value}\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","import {makeStyles} from '@material-ui/core/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:\n '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});\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 {pluck, sum, pipe} from 'ramda';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, withPercents, withTooltip} from '@reltio/components';\n\nimport {getBarWidthStyle, getPercentLabel} from '../../services/charts';\n\nimport ChartDataTooltip from '../ChartDataTooltip/ChartDataTooltip';\nimport ChartLegends from '../ChartLegends/ChartLegends';\nimport Bar from './Bar';\n\nimport {useStyles} from './styles';\n\nconst BarWithTooltip = withTooltip(Bar);\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 data: StackedHorizontalBarData[];\n colors: string[];\n onItemClick?: (group: string) => void;\n classes?: Partial<Record<'bar' | 'stackedBar', string>>;\n};\n\nconst StackedHorizontalBarChart = ({data, colors, classes = {}, onItemClick}: 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 return (\n <div className={styles.root}>\n <div className={classnames(styles.stackedBar, classes.stackedBar)}>\n {data.map((chartData: StackedHorizontalBarData, index: number) => (\n <BarWithTooltip\n className={classnames(classes.bar, clickable && styles.clickable)}\n key={chartData.label}\n tooltipTitle={<ChartDataTooltip data={getTooltipData(chartData)} />}\n style={{...getBarWidthStyle(chartData), background: colors[index]}}\n onClick={() => onBarClick && onBarClick(chartData.group)}\n data-reltio-id={chartData.dataReltioId}\n />\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={styles.legendWrapper}>\n <ChartLegends data={data} colors={colors} />\n </div>\n </div>\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nconst FillRateChart = () => {\n const {data, state, reload} = useChartData(getFillRateChartData);\n const {chartData, colors} = data;\n const searchProfiles = useSearchRedirect(getFillRateSearchState);\n\n return (\n <DQLayoutItemContent data={chartData} loadingState={state} onRefresh={reload}>\n {({data}) => <StackedHorizontalBarChart data={data} colors={colors} onItemClick={searchProfiles} />}\n </DQLayoutItemContent>\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} from 'ramda';\n\nimport {RequestStates, useSafePromise} from '@reltio/components';\nimport {DatePeriod, DQDataLevel, TimeSeriesMetric, getMlDqData, TimeSeriesData} 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';\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: TimeSeriesData[]) => {\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\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\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 })\n )\n .then(pipe(pathOr({}, ['data', attributeFieldName, 'timeSeries']), onRequestFinished))\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);\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 {\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.AFTER,\n values: [timestampStart],\n fieldName\n },\n {\n filter: FilterOptions.BEFORE,\n values: [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 {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} 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 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","import {\n CartesianGridProps,\n LineProps,\n TooltipProps,\n XAxisProps,\n YAxisProps,\n ReferenceLineProps,\n LabelProps\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};\n\nconst getLineChartSettings = ({keys, data, isPercent}): LineChartSettings => {\n const minLineChartData = getMinValueFromLineChartData(keys, data);\n const maxLineChartData = getMaxValueFromLineChartData(keys, data);\n const {minYAxisValue, maxYAxisValue} = getUpdatedEdgeData({minLineChartData, maxLineChartData, isPercent});\n\n return {\n xAxis: {\n type: 'category',\n dataKey: 'term',\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 },\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 };\n};\n\nexport default getLineChartSettings;\n","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n tooltipWrapper: {\n ...theme.tooltip,\n padding: '4px 8px'\n }\n}));\n","import React, {useCallback, useState, useMemo} from 'react';\nimport {\n CartesianGrid,\n Line,\n LineChart as LineChartWidget,\n Tooltip as ChartTooltip,\n XAxis,\n YAxis,\n TooltipProps,\n ReferenceLine,\n ReferenceArea\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} from './helpers';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n data: LineChartData[];\n width: number;\n height: number;\n keys: 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 keys,\n yAxisLabel,\n isPercent = true,\n dateRange,\n changeZoom\n}: Props) => {\n const styles = useStyles();\n const {cartesianGrid, tooltip, xAxis, yAxis, line, referenceLine, labelForY} = getLineChartSettings({\n keys,\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) {\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 };\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, keys), [zoomedData, keys]);\n const hasZoomArea = zoomAreaStart && zoomAreaEnd;\n return (\n <LineChartWidget\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.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} dataKey=\"group\" />\n <YAxis {...yAxis} label={{...labelForY, value: yAxisLabel}} />\n {keys.map((key: string) => (\n <Line {...line} key={key} dataKey={key} stroke={getColor ? getColor(key) : DEFAULT_LINE_COLOR} />\n ))}\n <ChartTooltip {...tooltip} content={getTooltip} cursor={null} filterNull={false} />\n </LineChartWidget>\n );\n};\n\nexport default LineChart;\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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: 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 from 'react';\nimport {last, pipe, pluck, slice, reject, isNil} from 'ramda';\n\nimport {formatNumberAsMetric} from '@reltio/mdm-sdk';\n\nimport {TimeSeriesChartData} from '../../types/TimeSeriesChartData';\n\nimport ChartInfoPanel from './ChartInfoPanel';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dateLabel: string;\n infoLabel: string;\n dataKey: string;\n chartData: TimeSeriesChartData[];\n percentKey: 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 = ({dateLabel, infoLabel, percentKey, dataKey, chartData}: Props) => {\n const styles = useStyles();\n\n const lastChartData = last(chartData);\n const data = lastChartData[dataKey];\n const percent = lastChartData[percentKey];\n const dynamicPercent = percentKey && getDynamicPercent(chartData, percentKey);\n\n const label = (\n <>\n <span className={styles.period}>{dateLabel}:</span>\n {infoLabel}\n </>\n );\n const info = (\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 {makeStyles} from '@material-ui/core/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 React, {useContext, useMemo, useCallback} from 'react';\nimport {assoc, map, pipe, pick} from 'ramda';\nimport {TooltipProps} from 'recharts';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQMetric, DQDataLevel, FillRateState, TimeSeriesMetric} from '@reltio/mdm-sdk';\n\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {\n formatFillRateData,\n getFillRateColorByState,\n getFillRateData,\n getFillRateChartData\n} from '../../../services/fillRate';\nimport {getPercentLabel, transformTimeSeriesChartData, getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {usePeriod, useZoom} from '../../../contexts/DateRangesProvider';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\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 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(!!data.length, currentPayload.group);\n return <ChartDataTooltip data={data} title={title} />;\n }\n};\n\nconst FillRateTimeSeriesChart = () => {\n const styles = useStyles();\n const entityType = useContext(EntityTypeContext);\n const {getDateRange, changeZoom} = useZoom();\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\n const {period} = usePeriod();\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\n const infoLabel = `${i18n.text('% of profiles with complete values')}:`;\n const dateLabel = `${i18n.text('Today')}`;\n return (\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([mlDqState, todayState])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateLabel={dateLabel}\n chartData={data}\n percentKey={DQMetric.FILL_RATE}\n dataKey={FillRateState.EXISTS}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n keys={metrics}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of profiles')}\n dateRange={getDateRange()}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n );\n};\n\nexport default FillRateTimeSeriesChart;\n","import {makeStyles} from '@material-ui/core/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 '@material-ui/core/Chip';\n\nimport {useZoom} from '../../contexts/DateRangesProvider';\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 {getDateRange} = useZoom();\n const label = disabled ? i18n.text('Today') : getLabelByTimeRange(getDateRange());\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 React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {checkIsTimeSeries, hasTimeRange} from '../../../services/mlDq';\n\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport FillRateChartToday from './FillRateChart';\nimport FillRateTimeSeriesChart from './FillRateTimeSeriesChart';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\n\nconst FillRateChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n const isTimeSeries = checkIsTimeSeries(config);\n const {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={!isTimeSeries} />}\n </DQLayoutItemHeader>\n {isTimeSeries ? <FillRateTimeSeriesChart /> : <FillRateChartToday />}\n </DQLayoutItemView>\n );\n};\n\nexport default FillRateChart;\n","import {always, converge, identity, pipe, propOr, map, sortBy, when} from 'ramda';\nimport {\n getChartItemColor,\n DQChartsData,\n TimeSeriesData,\n UniquenessAnalysisState,\n UniquenessData\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 = (chartsData: DQChartsData | TimeSeriesData) => UniquenessData;\nexport const getUniquenessData: GetUniquenessDataFn = propOr({}, 'uniqueness');\n\ntype GetUniquenessChartDataFn = (\n chartsData: DQChartsData\n) => {\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nconst UniquenessAnalysisChart = () => {\n const {data, state, reload} = useChartData(getUniquenessChartData);\n const {chartData, colors} = data;\n\n return (\n <DQLayoutItemContent data={chartData} loadingState={state} onRefresh={reload}>\n {({data}) => <StackedHorizontalBarChart data={data} colors={colors} />}\n </DQLayoutItemContent>\n );\n};\n\nexport default UniquenessAnalysisChart;\n","import React, {useContext, useMemo, useCallback} from 'react';\nimport {assoc, map, pipe, pick} from 'ramda';\nimport {TooltipProps} from 'recharts';\n\nimport i18n from 'ui-i18n';\nimport {ChartData, RequestStates} from '@reltio/components';\nimport {DQMetric, DQDataLevel, TimeSeriesMetric, UniquenessAnalysisState} from '@reltio/mdm-sdk';\n\nimport {\n getUniquenessColorByState,\n formatUniquenessAnalysisData,\n getUniquenessData,\n getUniquenessChartData\n} from '../../../services/uniquenessAnalysis';\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {useZoom, usePeriod} from '../../../contexts/DateRangesProvider';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {getPercentLabel, transformTimeSeriesChartData, getChartState} from '../../../services/charts';\nimport {useChartData} from '../../../hooks/useChartData';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport TimeSeriesInfoPanel from '../../../components/ChartInfoPanel/TimeSeriesInfoPanel';\nimport {ChartDataTooltip} from '../../../components/ChartDataTooltip';\n\nimport {useStyles} from '../styles';\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 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(!!data.length, currentPayload.group);\n return <ChartDataTooltip data={data} title={title} />;\n }\n};\n\nconst UniquenessAnalysisTimeSeriesChart = () => {\n const styles = useStyles();\n const entityType = useContext(EntityTypeContext);\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\n const {period} = usePeriod();\n\n const entityTypeUri = entityType.uri;\n const {getDateRange, changeZoom} = useZoom();\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\n const infoLabel = `${i18n.text('% of unique distinct values')}:`;\n const dateLabel = `${i18n.text('Today')}`;\n return (\n <DQLayoutItemContent\n data={chartData}\n loadingState={getChartState([stateMlDq, stateToday])}\n onRefresh={reloadFunction}\n className={styles.timeSeriesContent}\n >\n {({data, width, height}) => (\n <>\n <TimeSeriesInfoPanel\n infoLabel={infoLabel}\n dateLabel={dateLabel}\n chartData={data}\n percentKey={DQMetric.UNIQUENESS}\n dataKey={UniquenessAnalysisState.UNIQUE}\n />\n <LineChart\n width={width}\n height={height - INFO_PANEL_HEIGHT}\n data={data}\n keys={metrics}\n getTooltip={getTooltip}\n getColor={getColor}\n yAxisLabel={i18n.text('% of distinct values')}\n dateRange={getDateRange()}\n changeZoom={changeZoom}\n />\n </>\n )}\n </DQLayoutItemContent>\n );\n};\n\nexport default UniquenessAnalysisTimeSeriesChart;\n","import React from 'react';\nimport i18n from 'ui-i18n';\n\nimport {ViewProps} from '../../../types/ViewProps';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {checkIsTimeSeries, hasTimeRange} from '../../../services/mlDq';\n\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport UniquenessAnalysisChartToday from './UniquenessAnalysisChart';\nimport UniquenessAnalysisTimeSeriesChart from './UniquenessAnalysisTimeSeriesChart';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../../components/ChartDataTooltip';\n\nconst UniquenessAnalysisChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 ]}\n DataRenderer={InfoDataRenderer}\n />\n );\n\n const isTimeSeries = checkIsTimeSeries(config);\n const {period} = usePeriod();\n\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={!isTimeSeries} />}\n </DQLayoutItemHeader>\n {isTimeSeries ? <UniquenessAnalysisTimeSeriesChart /> : <UniquenessAnalysisChartToday />}\n </DQLayoutItemView>\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 '@material-ui/core/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 '@material-ui/core/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 '@material-ui/core/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 },\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, {useContext} from 'react';\nimport classnames from 'classnames';\nimport Chip, {ChipProps} from '@material-ui/core/Chip';\nimport {RequestStates} from '@reltio/components';\nimport {getDetailLabel, checkIsDataQualitativeForSummary} from '../../services/attributeDetails';\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {\n AttributeTypeDetailIcon,\n AttributeTypeDetailIconVariant\n} from '../AttributeTypeDetailIcon/AttributeTypeDetailIcon';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\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 {data, state} = useContext<ChartsDataWithState>(ChartsDataContext);\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 '@material-ui/core/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 '@material-ui/core/Chip';\n\nimport {AttrTypeDetails, AttrTypeDetailsType} from '../../types/DetailedAttributeType';\nimport {usePeriod} from '../../contexts/DateRangesProvider';\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} = usePeriod();\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 '@material-ui/core/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 '@material-ui/core/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});","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, {useContext, useMemo} from 'react';\nimport i18n from 'ui-i18n';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\nimport {Tooltip as Tooltip} from '@material-ui/core';\nimport classnames from 'classnames';\n\nimport {usePeriod} from '../../contexts/DateRangesProvider';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\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 = useContext(EntityTypeContext);\n const entityTypesArray = useMemo(() => [entityType], [entityType]);\n const total = useEntityCount(entityTypesArray)(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 const {period} = usePeriod();\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, {useContext} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {CircularProgress as CircularProgress} from '@material-ui/core';\n\nimport i18n from 'ui-i18n';\nimport {RequestStates} from '@reltio/components';\nimport mdmModule, {search} from '@reltio/mdm-module';\nimport {ActivityFilter, Metadata, TEntityType} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\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 {data: chartsData, state} = useContext<ChartsDataWithState>(ChartsDataContext);\n const metadata: Metadata = useSelector(mdmModule.selectors.getMetadata);\n const attributeTypesCount = countEntityTypeAttributes(metadata, entityType);\n const {activeProfiles = 0, inactiveProfiles = 0, sourceSystems = 0} = chartsData?.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 dispatch = useDispatch();\n const searchRedirect = useSearchRedirect(getEntityTypeSummarySearchState);\n const searchProfiles = (activeness: ActivityFilter) => {\n dispatch(search.actions.activityFilterUpdated(activeness));\n searchRedirect();\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)}\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)}\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 '@material-ui/core/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 {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\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 = useContext(DetailedAttributeTypeContext);\n const dataLevel = useContext(DataLevelContext);\n const entityType = useContext(EntityTypeContext);\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 '@material-ui/core/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.ReactNode;\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} 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 = ({sortDirection, sortField}: {sortDirection: 'asc' | 'desc'; sortField: string}) => (\n a: ChartData,\n b: ChartData\n) => {\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]);\n\nexport const getFrequencyAnalysisSearchState = ({detailedAttributeType, entityTypeUri}: GetSearchStateProps) =>\n cond([\n [isTimestampBasedType, always(getFrequencyAnalysisStateForTimestamp)],\n [isDateType, always(getSearchState(getFrequencyAnalysisFilterForDate))],\n [identity, always(getSearchState(getFrequencyAnalysisFilter))]\n ])(detailedAttributeType.type)({detailedAttributeType, entityTypeUri});\n\nexport const getValidationSearchState = (dvfs: DataValidationFunction[]) => ({\n entityTypeUri\n}: GetSearchStateProps): ((dvfUri: string) => SearchState) => (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, TimeSeriesDataValues, 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: TimeSeriesDataValues): 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 '@material-ui/core/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 as Link} from '@material-ui/core';\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 DQDashboardNoData from '../../../components/DQDashboardNoData/DQDashboardNoData';\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?: string | ReactElement;\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 <DQDashboardNoData\n height={height}\n data={{\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 {DetailedAttributeTypeContext} from '../../../../contexts/DetailedAttributeTypeContext';\nimport {DataLevelContext} from '../../../../contexts/DataLevelContext';\nimport {isReferenceChild} from '../../../../services/attributeDetails';\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 attributeType = useContext(DetailedAttributeTypeContext);\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(attributeType);\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, attributeType]\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 {DetailedAttributeTypeContext} from '../../../../contexts/DetailedAttributeTypeContext';\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 attributeType = useContext(DetailedAttributeTypeContext);\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, attributeType?.uri) : dvfsData) || [],\n [isAttributeDataLevel, dvfsData, attributeType?.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';\nimport {RootRef as RootRef} from '@material-ui/core';\n\ntype Props = {\n children: React.ReactElement;\n handler: (isOverflow: boolean) => void;\n handleWidth?: boolean;\n};\n\nconst OverflowingHandler = ({children, handler, handleWidth = true}: Props) => {\n const checkOverflow = (el: HTMLElement) => el && el.clientWidth < el.scrollWidth;\n const resizeHandler = () => handler(checkOverflow(childrenRef.current));\n const childrenRef = useRef();\n return (\n <ReactResizeDetector handleWidth={handleWidth} onResize={resizeHandler}>\n <>\n <RootRef rootRef={childrenRef}>{children}</RootRef>\n </>\n </ReactResizeDetector>\n );\n};\nexport default OverflowingHandler;\n","import {makeStyles} from '@material-ui/core/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}));\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}));\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 as Tooltip} from '@material-ui/core';\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 as Tooltip} from '@material-ui/core';\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 title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}>\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 as Tooltip} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\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 title={<TableCellTooltip columnsHeaders={columnsHeaders} chartData={chartData} />}>\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 '@material-ui/core/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 '@material-ui/core/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';\n\nimport {withPercents, toggleSortOrder, RequestStates} from '@reltio/components';\n\nimport {valueComparator as defaultComparator} from '../../../services/tableCharts';\nimport {hasTimeRange} from '../../../services/mlDq';\nimport {DQDashboardView} from '../../../types/DQDashboardView';\nimport {ErrorData} from '../../../types/ErrorData';\nimport {TableChartData} from '../../../types/TableChartData';\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\n\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport TableWithBars, {ColumnsOptions} from '../../../components/CustomTableWithBars/TableWithBars';\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?: string | ReactElement;\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};\n\nconst CustomTableWithBarsChart = ({\n config,\n data,\n title,\n columnsOptions,\n infoTooltipTitle,\n customComparator,\n onItemClick,\n contentChildren,\n state,\n onRefresh\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 {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\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 {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 as Typography} from '@material-ui/core';\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 {usePeriod} from '../../../contexts/DateRangesProvider';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\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';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\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} = usePeriod();\n const entityType = useContext(EntityTypeContext);\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 getEntityCounts = useEntityCount(entityTypesArray);\n const totalProfiles = getEntityCounts(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 useReloadFacet({\n state,\n reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\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 />\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} from 'ramda';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel, DataValidationFunction, TimeSeriesMetric, getLabel, getDvfColor, DQMetric} from '@reltio/mdm-sdk';\nimport {ChartData, RequestStates} from '@reltio/components';\n\nimport {getTimeSeriesData, getChartTooltipDateTitle, enrichTimeSeriesDataWithTodayData} from '../../../services/mlDq';\nimport {getChartState} from '../../../services/charts';\nimport {useMlDqDataRequest} from '../../../hooks/useMlDqDataRequest';\nimport {DetailedAttributeTypeContext} from '../../../contexts/DetailedAttributeTypeContext';\nimport {EntityTypeContext} from '../../../contexts/EntityTypeContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {LineChartData} from '../../../types/LineChartData';\nimport {usePeriod, useZoom} from '../../../contexts/DateRangesProvider';\nimport {ViewProps} from '../../../types/ViewProps';\nimport {getViolatedValidationData, NO_DATA_FIELD} from './helpers';\nimport {findDVFByUri, getValidationChartData} from '../../../services/tableCharts';\nimport {useNoDataDvfType} from './hooks/useNoDataDvfType';\nimport {useChartData} from '../../../hooks/useChartData';\nimport {useDvfs} from './hooks/useDvfs';\n\nimport DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport LineChart from '../../../components/LineChart/LineChart';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport PeriodChip from '../../../components/PeriodChip/PeriodChip';\nimport {ChartDataTooltip, InfoDataRenderer, TooltipWithSquares} from '../../../components/ChartDataTooltip';\nimport VVFChartNoData, {VVFNoDataChartType} from './VVFChartNodata';\n\n// TODO get rid of hardcoded metric\nconst VIOLATED_PROFILES_METRIC = 'violatedProfiles';\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(!!data.length, currentPayload.group);\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} = usePeriod();\n\n const dvfData = useDvfs({onlyActive: false});\n const {dvfs, dvfConfigLink, reload: reloadDvf, state: stateDvf} = dvfData;\n const {getDateRange, changeZoom} = useZoom();\n const getNoDataStatus = useNoDataDvfType(dvfData);\n const entityType = useContext(EntityTypeContext);\n const dataLevel = useContext(DataLevelContext);\n const detailedAttributeType = useContext(DetailedAttributeTypeContext);\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 )(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 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 </DQLayoutItemHeader>\n <DQLayoutItemContent data={chartData} loadingState={loadingState} onRefresh={reloadFunction}>\n {({data, width, height}) => (\n <div>\n <LineChart\n width={width}\n height={height}\n data={data}\n keys={dataKeys}\n getTooltip={getTooltip(dvfs, dataKeys)}\n getColor={getDvfColor}\n yAxisLabel={i18n.text('No. of profiles')}\n isPercent={false}\n dateRange={getDateRange()}\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 React, {useContext, useMemo} from 'react';\nimport classnames from 'classnames';\nimport i18n from 'ui-i18n';\nimport {isDateType, isSSNType} from '@reltio/mdm-sdk';\nimport {getFrequencyChartData, getFrequencyAnalysisSearchState} from '../../services/tableCharts';\nimport CustomTableWithBarsChart from './CustomTableWithBarsChart/CustomTableWithBarsChart';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {ViewProps} from '../../types/ViewProps';\nimport {convertDateLabelsInChartData} from '../../services/charts';\nimport {getRowsCounterLabel} from '../../services/tableCharts';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {ChartDataTooltip, InfoDataRenderer} from '../../components/ChartDataTooltip';\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 = useContext(DetailedAttributeTypeContext).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 '@material-ui/core/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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\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 '@material-ui/core/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 as Tooltip} from '@material-ui/core';\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 from 'react';\nimport {Bar, BarChart, CartesianGrid, Label, Tooltip as ChartTooltip, XAxis, YAxis} from 'recharts';\nimport {ChartData, RequestStates} from '@reltio/components';\n\nimport {usePeriod} from '../../../contexts/DateRangesProvider';\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';\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.ReactNode;\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 {period} = usePeriod();\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {hasTimeRange(period) && <PeriodChip disabled={true} />}\n </DQLayoutItemHeader>\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 '@material-ui/core/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, {useContext} from 'react';\nimport {useChartData} from '../../hooks/useChartData';\nimport {useSearchRedirect} from '../../hooks/useSearchRedirect';\nimport {getValueDistributionData} from '../../services/barCharts';\nimport {getValueDistributionSearchState} from '../../services/barCharts';\nimport {ViewProps} from '../../types/ViewProps';\nimport CustomBarChart from './CustomBarChart/CustomBarChart';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport i18n from 'ui-i18n';\n\nconst ValueDistributionChart = ({config}: ViewProps) => {\n const attributeType: string = useContext(DetailedAttributeTypeContext).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, group: 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, payload) => onItemClick && onItemClick(key, payload.group));\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 '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme & {tooltip: Record<string, string | number>}) => ({\n consolidationRateWrapper: {\n display: 'flex'\n },\n ratePercent: {\n fontWeight: 700,\n lineHeight: '24px',\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';\nimport {Typography as Typography} from '@material-ui/core';\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 <Typography>\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 </Typography>\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, useContext, useMemo, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport i18n from 'ui-i18n';\n\nimport {ChartData} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {getSourceColor, getSourceSystemLabel, Metadata} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../../contexts/ChartsDataContext';\nimport {ChartsDataWithState, 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';\nimport StackedBarChart from '../CustomBarChart/StackedBarChart';\nimport {ConsolidationPercentage} from './ConsolidationPercentage';\n\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 {YAxisTickRenderer} from './YAxisTickRenderer';\n\nimport {useStyles} from './styles';\n\nconst STACKED_BAR_CHART_WIDTH = 256;\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 {data: chartsData} = useContext<ChartsDataWithState>(ChartsDataContext);\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\n return (\n <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle}>\n {chartsData.consolidationRate && <ConsolidationPercentage data={chartsData} />}\n </DQLayoutItemHeader>\n <DQLayoutItemContent data={tableChartData} loadingState={state} onRefresh={reload}>\n {({height = 0, width = 0}) => {\n return (\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={height}\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,\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 </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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n content: {\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 DQLayoutItemContent from '../../../components/DQLayoutItemContent/DQLayoutItemContent';\nimport DQLayoutItemHeader from '../../../components/DQLayoutItemHeader/DQLayoutItemHeader';\nimport DQLayoutItemView from '../../../components/DQLayoutItemView/DQLayoutItemView';\nimport StackedHorizontalBarChart from '../../../components/StackedHorizontalBarChart/StackedHorizontalBarChart';\n\nimport {useStyles} from './styles';\n\nconst RDMTranscodeChart = ({config}: ViewProps) => {\n const {title} = config;\n\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 <DQLayoutItemView config={config}>\n <DQLayoutItemHeader title={title} infoTooltipTitle={infoTooltipTitle} />\n <DQLayoutItemContent data={data} loadingState={state} onRefresh={reload} className={styles.content}>\n {({data}) => (\n <StackedHorizontalBarChart\n data={data}\n colors={colors}\n onItemClick={searchProfiles}\n classes={{bar: styles.bar}}\n />\n )}\n </DQLayoutItemContent>\n </DQLayoutItemView>\n );\n};\n\nexport default RDMTranscodeChart;\n","import {useCallback, useContext, useEffect, useState} from 'react';\n\nimport {ChartData, RequestStates, useSafePromise} from '@reltio/components';\nimport {FilterOptions, getTotals} from '@reltio/mdm-sdk';\n\nimport {EntityTypeContext} from '../contexts/EntityTypeContext';\nimport {formatRDMTranscodeData} from '../services/rdmTranscode';\n\nexport const useRDMChartDataRequest = () => {\n const entityType = useContext(EntityTypeContext);\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 {makeStyles} from '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\n root: {\n overflow: 'auto',\n backgroundColor: '#EEEEEE',\n height: '100%',\n flexGrow: 1,\n padding: '0 4px',\n boxSizing: 'border-box'\n }\n});\n","import {assoc, map} from 'ramda';\nimport React, {memo, useMemo} from 'react';\n\nimport {ReltioGridLayoutItem} from '@reltio/mdm-sdk';\nimport {ReltioGridLayout} from '@reltio/components';\n\nimport {DQDashboardView} from '../../types/DQDashboardView';\nimport {DQDashboardLayoutItem} from '../DQDashboardLayoutItem/DQDashboardLayoutItem';\n\nimport {useStyles} from './styles';\n\nexport type DQDashboardLayoutProps = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n layoutOptions?: {\n cols: number;\n rowHeight: number;\n margin: [number, number];\n };\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 styles = useStyles();\n\n const staticLayout = useMemo(() => reltioGridLayoutToStaticLayout(layout), [layout]);\n return (\n <div className={styles.root}>\n <ReltioGridLayout\n LayoutItem={DQDashboardLayoutItem}\n views={views}\n layout={staticLayout}\n layoutOptions={layoutOptions}\n />\n </div>\n );\n};\n\nexport default memo(DQDashboardLayout);\n","import React from 'react';\n\nimport {DQDataLevel, ReltioGridLayoutItem} from '@reltio/mdm-sdk';\n\nimport {DataLevelContext} from '../../contexts/DataLevelContext';\nimport {DQDashboardView} from '../../types/DQDashboardView';\n\nimport DQDashboardLayout from '../DQDashboardLayout/DQDashboardLayout';\n\ntype Props = {\n views: DQDashboardView[];\n layout?: ReltioGridLayoutItem[];\n};\n\nconst AttributeLevelLayout = ({views, layout}: Props) => {\n return (\n <DataLevelContext.Provider value={DQDataLevel.ATTRIBUTE_TYPE}>\n <DQDashboardLayout views={views} layout={layout} />\n </DataLevelContext.Provider>\n );\n};\n\nexport default AttributeLevelLayout;\n","import {makeStyles} from '@material-ui/core/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 as Breadcrumbs} from '@material-ui/core';\nimport classnames from 'classnames';\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext';\nimport {Typography as Typography} from '@material-ui/core';\n\nimport i18n from 'ui-i18n';\nimport {DQDataLevel} from '@reltio/mdm-sdk';\n\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\n\nimport {useStyles} from './styles';\n\ntype Props = {\n dataLevel: DQDataLevel;\n detailedAttributeType: DetailedAttributeType;\n onChange: (dataLevel: DQDataLevel) => void;\n};\nconst DataLevelBreadcrumbs = ({dataLevel, detailedAttributeType, onChange}: Props) => {\n const styles = useStyles();\n\n const handleChangeDataLevel = (dataLevel: DQDataLevel) => () => {\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 '@material-ui/core/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 '@material-ui/core/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 '@material-ui/icons/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 {makeStyles} from '@material-ui/core/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 as Tooltip} from '@material-ui/core';\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 '@material-ui/core/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});\n","import React from 'react';\nimport classnames from 'classnames';\nimport {Tooltip as Tooltip} from '@material-ui/core';\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 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 '@material-ui/core/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 '@material-ui/core/styles';\n\nexport const useStyles = makeStyles({\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});\n","import classnames from 'classnames';\nimport {times} from 'ramda';\nimport React from 'react';\nimport {ListItem as ListItem} from '@material-ui/core';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ArrowRightIcon from '@material-ui/icons/ArrowRight';\n\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 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, !hasChildren && styles.clickableItem)}\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 </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 {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 emptinessFilterOptions = [\n {\n label: i18n.text('Show attributes with no data'),\n value: EmptinessFilterValue.SHOW_EMPTY,\n group: 'emptiness'\n }\n];\n\nexport const getEmptinessOptions = (): FilterOptionsGroup => {\n return {\n label: '',\n options: emptinessFilterOptions\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 '@material-ui/core/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 as Checkbox} from '@material-ui/core';\nimport {MenuItem as MenuItem} from '@material-ui/core';\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 as Button} from '@material-ui/core';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport {Popover as Popover} from '@material-ui/core';\nimport {Typography as Typography} from '@material-ui/core';\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 '@material-ui/core/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 React, {useEffect, useRef, useState, useMemo, useContext} from 'react';\nimport classnames from 'classnames';\nimport {pathOr, isEmpty, assoc, equals} from 'ramda';\nimport {FixedSizeList as List} from 'react-window';\nimport ReactResizeDetector from 'react-resize-detector';\nimport i18n from 'ui-i18n';\nimport {TEntityType} from '@reltio/mdm-sdk';\nimport AttributeListItem from '../AttributeListItem/AttributeListItem';\nimport {\n getAtrributeFieldNames,\n getDetailedAttrTypeByFieldName,\n getIndexByFieldName,\n getFirstSimpleDetailedAttrType,\n getFillRateByAttributeType,\n rejectCollapsedItemsChildren,\n getEmptinessOptions,\n getDetailsOptions,\n filterItemsByEmptiness,\n filterItemsByDetails,\n emptinessFilterOptions\n} from './helpers';\nimport {useAttrTypeDetails} from '../../hooks/useAttrTypeDetails';\nimport {useFillRateRequest} from '../../hooks/useFillRateRequest';\nimport {ChartsDataWithState} from '../../hooks/useChartData';\nimport {FilterOption} from '../../types/FilterOption';\nimport {AttributeItemType, DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport AttributesFilters from '../AttributesFilters/AttributesFilters';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\nimport {EMPTY_STATE_ICONS, RequestStates} from '@reltio/components';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {formatFillRateData} from '../../services/fillRate';\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 || emptinessFilterOptions\n );\n const [selectedFieldName, setSelectedFieldName] = useState(defaultFieldName);\n const [fillRates, setFillRates] = useState({});\n const {data: chartsData} = useContext<ChartsDataWithState>(ChartsDataContext);\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 emptinessFilterOptions = getEmptinessOptions();\n const filterOptions = [emptinessFilterOptions, detailsFilterOptions];\n\n return {filteredItems, filterOptions};\n }, [items, selectedFilterOptions, fillRates, isFillRateLoaded, isDVFLoaded]);\n\n const visibleItems = useMemo(() => rejectCollapsedItemsChildren(filteredItems, collapsedFieldNames), [\n filteredItems,\n 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 <DQDashboardNoData\n height={NO_DATA_HEIGHT}\n data={{\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 {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(() => collectFilteredAttributeItems(filterText)(metadata, entityType), [\n metadata,\n entityType,\n filterText\n ]);\n const [itemsWithDetails, setItemsWithDetails] = useState<AttributeItemType[]>([]);\n\n const entityTypeUri = entityType.uri;\n const matchAttributes = useMemo(() => getEntityTypeMatchAttributes(metadata, entityTypeUri), [\n metadata,\n 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 {useCallback, useEffect, useState} from 'react';\nimport {ChartData, useSafePromise, RequestStates} from '@reltio/components';\nimport {DQDataLevel, DQMetric, getDQChartsData} from '@reltio/mdm-sdk';\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\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 })\n )\n .then(formatFillRatesData)\n .then(onRequestFinished)\n .catch(onError);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safePromise, setRequestState, setFillRateData, attributeFieldNames]);\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 '@material-ui/core/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 as Typography} from '@material-ui/core';\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 {CSSProperties} from 'react';\nimport {makeStyles} from '@material-ui/core/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}));\n","import React, {useMemo} 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';\n\nimport {getMetricsFromViews, getEntityLevelViews} from '../../../services/charts';\nimport {DQDashboardPerspectiveConfig} from '../../../types/DQDashboardPerspectiveConfig';\nimport {defaultLayoutsByDataLevel} from '../../../constants/defaultConfig';\nimport {checkEntityTypeHasRDMLookup} from '../../../services/rdmTranscode';\nimport {ChartsDataContext} from '../../../contexts/ChartsDataContext';\nimport {DataLevelContext} from '../../../contexts/DataLevelContext';\nimport {useReloadFacet} from '../../../contexts/ReloadFacetContext';\nimport {RDMLookupState} from '../../../constants/RdmLookupState';\nimport {useChartsDataRequest} from '../../../hooks/useChartsDataRequest';\n\nimport DQDashboardLayout from '../../DQDashboardLayout/DQDashboardLayout';\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\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\n const layout =\n config.layoutsByDataLevel?.[DQDataLevel.ENTITY_TYPE]?.[currentRDMLookupState] ||\n defaultLayoutsByDataLevel[DQDataLevel.ENTITY_TYPE][currentRDMLookupState];\n\n const views = useMemo(() => (layout ? getEntityLevelViews(config.viewsByDataLevel, layout) : []), [\n config.viewsByDataLevel,\n 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\n useReloadFacet({\n state: chartsData.state,\n reload: chartsData.reload,\n dataLevel: DQDataLevel.ENTITY_TYPE\n });\n\n return (\n <ChartsDataContext.Provider value={chartsData}>\n <div className={classnames(styles.root)}>\n <DataLevelContext.Provider value={DQDataLevel.ENTITY_TYPE}>\n <DQDashboardLayout views={views} layout={layout} />\n </DataLevelContext.Provider>\n </div>\n </ChartsDataContext.Provider>\n );\n};\n\nexport default EntityLevelLayout;\n","import {makeStyles} from '@material-ui/core/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 as MenuItem} from '@material-ui/core';\nimport Select, {SelectProps} from '@material-ui/core/Select';\nimport {Typography as Typography} from '@material-ui/core';\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 getContentAnchorEl: null,\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","import {makeStyles} from '@material-ui/core/styles';\nimport {Theme} from '@material-ui/core';\n\nexport const useStyles = makeStyles((theme: Theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n marginRight: '16px'\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 '@material-ui/icons/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 {CSSProperties} from 'react';\nimport {makeStyles} from '@material-ui/core/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 gap: '16px',\n padding: '12px',\n alignItems: 'center'\n },\n headerRightSide: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'row-reverse',\n marginRight: '4px'\n },\n periodSelector: {\n position: 'relative',\n margin: '0',\n height: '30px',\n borderRadius: '6px',\n border: '1px solid rgba(0, 0, 0, 0.12)',\n flexBasis: '196px'\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 padding: '8px 0 8px 16px',\n fontSize: '13px'\n },\n inputRoot: {\n backgroundColor: 'transparent',\n paddingRight: 4\n },\n dropdownIndicator: {\n width: '18px',\n height: '18px',\n '& svg': {\n width: '18px',\n height: '18px'\n }\n }\n}));\n","import {equals, pick, pipe, reject} from 'ramda';\nimport React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';\nimport moment from 'moment';\nimport {useSelector} from 'react-redux';\n\nimport i18n from 'ui-i18n';\nimport {DateRangeEditor, EMPTY_STATE_ICONS, useSavedState} from '@reltio/components';\nimport mdmModule from '@reltio/mdm-module';\nimport {\n getEntityType,\n DQDataLevel,\n DQMetric,\n ReltioGridLayoutItem,\n DateRangeValue,\n getDateRangeOptions\n} from '@reltio/mdm-sdk';\n\nimport {ChartsDataContext} from '../../contexts/ChartsDataContext';\nimport {DetailedAttributeTypeContext} from '../../contexts/DetailedAttributeTypeContext';\nimport {DVFContext} from '../../contexts/DVFContext';\nimport {EntityTypeContext} from '../../contexts/EntityTypeContext';\nimport {useReloadFacet, useUpdateTime} from '../../contexts/ReloadFacetContext';\nimport {usePeriod, useZoom} from '../../contexts/DateRangesProvider';\nimport {useChartsDataRequest} from '../../hooks/useChartsDataRequest';\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 {\n getLayoutByAttributeType,\n getMetricsFromViews,\n getAttributeLevelViews,\n hasTimeRangeLayout\n} from '../../services/charts';\nimport {isReferenceChild} from '../../services/attributeDetails';\nimport {DetailedAttributeType} from '../../types/DetailedAttributeType';\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDateRangeValue} from '../../types/DQDateRangeValue';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {EmptyStateVariants} from '../../types/EmptyStateVariants';\nimport {FilterOption} from '../../types/FilterOption';\nimport {ATTRIBUTE_LIST_WIDTH, ENTITY_LEVEL_BAR_WIDTH, NO_DATA_HEIGHT} 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 DQDashboardError from '../DQDashboardError/DQDashboardError';\nimport DQDashboardHeader from '../DQDashboardHeader/DQDashboardHeader';\nimport DQDashboardNoData from '../DQDashboardNoData/DQDashboardNoData';\nimport EntityLevelLayout from './EntityLevelLayout/EntityLevelLayout';\nimport EntityTypeSelector from '../EntityTypeSelector/EntityTypeSelector';\nimport UpdateTimeHeader from '../UpdateTimeHeader/UpdateTimeHeader';\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\n const canGetDQStatistic = useSelector(mdmModule.selectors.getCanUserGetDQStatistic);\n\n const entityTypes = useEntityTypes();\n const [entityTypeUri, setEntityTypeUri] = useState<string>();\n const entityType = entityTypes && entityTypeUri ? getEntityType({entityTypes}, entityTypeUri) : null;\n const getEntityCount = useEntityCount(entityTypes);\n\n const customAttributeLayouts = config.layoutsByDataLevel?.[DQDataLevel.ATTRIBUTE_TYPE];\n const [detailedAttributeType, setDetailedAttributeType] = useState<DetailedAttributeType>(null);\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, savedState} = useSavedState<DQDashboardSavedState>(getSavedState);\n const {zoom, changeZoom} = useZoom();\n const {period, changePeriod} = usePeriod();\n\n const getNewSavedState = (state: DQDashboardSavedState): DQDashboardSavedState => ({\n fieldName: null,\n zoom: zoom || null,\n entityTypeUri,\n period,\n ...dqDashboardSavedState?.current,\n ...state\n });\n\n useEffect(() => {\n if (isLoaded) {\n dqDashboardSavedState.current = savedState;\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 = hasTimeRangeLayout(customAttributeLayouts)\n ? DateRangeValue.LAST_WEEK\n : DateRangeValue.LAST_DAY;\n const newPeriod =\n dateRangeValues.includes(savedState?.period as DQDateRangeValue) || Array.isArray(savedState?.period)\n ? savedState.period\n : defaultPeriod;\n changePeriod(newPeriod);\n\n if (savedState.zoom) {\n changeZoom(savedState.zoom);\n }\n }\n }, [isLoaded]); // 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 (isLoaded && 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 (isLoaded && dataLevel === DQDataLevel.ATTRIBUTE_TYPE) saveStateHandler({period});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [period]);\n\n const attributeLevelLayout = useMemo(\n (): ReltioGridLayoutItem[] =>\n getLayoutByAttributeType(customAttributeLayouts, detailedAttributeType?.type, period),\n [detailedAttributeType?.type, customAttributeLayouts, period]\n );\n\n const attributeLevelViews = useMemo(\n () => getAttributeLevelViews(config.viewsByDataLevel, detailedAttributeType?.type, attributeLevelLayout),\n [config.viewsByDataLevel, detailedAttributeType?.type, attributeLevelLayout]\n );\n\n const attributeLevelMetrics = useMemo(\n () =>\n pipe(getMetricsFromViews, (metrics: DQMetric[]) =>\n isReferenceChild(detailedAttributeType) ? reject(equals(DQMetric.DATA_VALIDATION))(metrics) : metrics\n )(attributeLevelViews),\n [attributeLevelViews, detailedAttributeType]\n );\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\n const attributeLevelChartsData = useChartsDataRequest({\n entityType,\n detailedAttributeType,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE,\n metrics: attributeLevelMetrics\n });\n\n useReloadFacet({\n state: attributeLevelChartsData.state,\n reload: attributeLevelChartsData.reload,\n dataLevel: DQDataLevel.ATTRIBUTE_TYPE\n });\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 setDetailedAttributeType(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 && setDetailedAttributeType(selectedDetailedAttributeType);\n }\n };\n\n const showEntityLevel = () => {\n setDataLevel(DQDataLevel.ENTITY_TYPE);\n resetUpdateTimes(DQDataLevel.ENTITY_TYPE);\n };\n\n const showContent = entityType && canGetDQStatistic && isLoaded && !!getEntityCount(entityTypeUri);\n const showTimeRange = dataLevel === DQDataLevel.ATTRIBUTE_TYPE && hasTimeRangeLayout(customAttributeLayouts);\n const dateRangeEditorValue = getPeriodValue(zoom, period);\n\n return (\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\n dataLevel={dataLevel}\n detailedAttributeType={detailedAttributeType}\n onChange={setDataLevel}\n />\n <div className={styles.headerRightSide}>\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 <EntityTypeContext.Provider value={entityType}>\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 <EntityLevelLayout config={config} entityType={entityType} />\n <DataLevelSwitcher showEntityLevel={showEntityLevel} entityType={entityType} />\n <ChartsDataContext.Provider value={attributeLevelChartsData}>\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 </ChartsDataContext.Provider>\n <ChartsDataContext.Provider value={attributeLevelChartsData}>\n <div className={styles.attributeLevelWrapper}>\n {detailedAttributeType && (\n <DetailedAttributeTypeContext.Provider value={detailedAttributeType}>\n <AttributeLevelLayout\n views={attributeLevelViews}\n layout={attributeLevelLayout}\n />\n </DetailedAttributeTypeContext.Provider>\n )}\n </div>\n </ChartsDataContext.Provider>\n </ContentSlider>\n </EntityTypeContext.Provider>\n </DVFContext.Provider>\n </div>\n )}\n {!canGetDQStatistic && (\n <DQDashboardError\n height={NO_DATA_HEIGHT}\n errorData={{\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 variant={EmptyStateVariants.LARGE}\n />\n )}\n {isLoaded && entityType && !getEntityCount(entityTypeUri) && canGetDQStatistic && (\n <DQDashboardNoData\n height={NO_DATA_HEIGHT}\n data={{\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 variant={EmptyStateVariants.LARGE}\n />\n )}\n </div>\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(() => ({data: dvfs, state: requestState, reload: loadDVFs, errorCode}), [\n dvfs,\n requestState,\n loadDVFs,\n errorCode\n ]);\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 {MuiThemeProvider, createMuiTheme, createGenerateClassName, StylesProvider} from '@material-ui/core/styles';\nimport {MuiPickersUtilsProvider} from '@material-ui/pickers';\nimport MomentUtils from '@date-io/moment';\n\nimport {promisifyCallback} from '@reltio/mdm-sdk';\n\nimport {DQDashboardPerspectiveConfig} from '../../types/DQDashboardPerspectiveConfig';\nimport {DQDashboardSavedState} from '../../types/DQDashboardSavedState';\nimport {ReloadFacetProvider} from '../../contexts/ReloadFacetContext';\nimport {DateRangesProvider} from '../../contexts/DateRangesProvider';\nimport {theme} from '../../theme';\n\nimport DQDashboardPerspectiveView from './DQDashboardPerspectiveView';\n\nconst dqDashboardTheme = createMuiTheme(theme);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'DQDashboardPerspective',\n disableGlobal: true\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\n return (\n <Provider store={store}>\n <MuiPickersUtilsProvider utils={MomentUtils}>\n <MuiThemeProvider theme={dqDashboardTheme}>\n <StylesProvider generateClassName={generateClassName}>\n <ReloadFacetProvider>\n <DateRangesProvider>\n <DQDashboardPerspectiveView\n config={config}\n saveState={saveState}\n getSavedState={getSavedStatePromisified}\n />\n </DateRangesProvider>\n </ReloadFacetProvider>\n </StylesProvider>\n </MuiThemeProvider>\n </MuiPickersUtilsProvider>\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","Avatar","classnames","iconRoot","src","onError","textRoot","contextSelector","CellRenderer","withContext","TableContext","useStyles","makeStyles","theme","display","flexDirection","basicView","BasicView","forwardRef","ref","children","styles","Paper","classes","root","displayName","propTypes","PropTypes","flex","padding","paddingTop","toolbar","minHeight","lineHeight","title","fontSize","fontWeight","whiteSpace","overflow","textOverflow","Toolbar","Typography","variant","bar","backgroundColor","palette","secondary","main","opacity","position","minWidth","borderRadius","top","left","height","widthIsNumber","width","is","Number","maxWidth","getBarColorWidth","useCallback","style","flexWrap","alignItems","justifyContent","boxSizing","color","text","primary","letterSpacing","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","id","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","onClick","identity","access","showButton","h5","subtitle1","Button","ErrorBoundary","React","constructor","super","this","error","componentDidCatch","console","render","EmptyStub","HideOnShrink","widthToHide","handleWidth","reltioLayoutItemToReactGridLayoutItem","maxHeight","isStatic","w","h","minW","minH","maxW","maxH","i","static","reactGridLayoutItemToReltioLayoutItem","reactGridLayoutToReltioLayout","layout","map","getReltioLayoutItemById","curry","find","propEq","updateExtraPropsInLayoutItem","from","to","mergeAll","pick","copyPropsFromPreviousLayout","oldReltioLayout","reltioLayout","layoutItem","pipe","prop","defaultTo","__","_","gridLayout","background","border","transitionDuration","zIndex","userSelect","transitionProperty","willChange","pointerEvents","transition","backgroundImage","bottom","right","svg2Url","backgroundRepeat","backgroundOrigin","cursor","visibility","gridFullscreen","overflowY","ReltioGridLayout","views","layoutOptions","onLayoutChanged","draggableHandle","LayoutItem","onRemove","onDrop","droppingItem","isDroppable","useRef","fullscreenItemId","setFullscreenItemId","setWidth","cols","rowHeight","margin","processedLayout","useMemo","reltioLayoutToReactGridLayout","onReltioLayoutChanged","onToggleFullscreen","prevId","isFullscreenEnabled","onItemHeightResize","layoutId","isLayoutChanged","newLayout","newHeight","options","Math","ceil","calcHeight","refreshMode","refreshRate","onResize","innerRef","autoSize","onLayoutChange","isResizable","isDraggable","e","isItemFullscreen","autosizeComponent","autosizing","AutosizeComponent","layoutItemId","handleHeight","key","layoutItemConfig","fullscreen","item","isFullscreen","defaultProps","onConfigChanged","memo","sourceType","metadata","useSelector","mdmModule","uri","findSourceSystemByUri","getSourceSystemLabel","sourceIcon","getAbsoluteImageUrl","VerticalDivider","borderLeft","enrichDataWithPercents","data","percents","countPercents","pluck","percent","Component","WithPercents","dataWithPercents","clickable","useClickableStyle","undefined","useSavedState","getSavedState","isLoaded","setIsLoaded","savedState","setSavedState","then","catch","DateRangeTypes","RequestStates","loader","LinearProgress","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","action","nanoid","useUpdateTime","min","Object","PeriodContext","ZoomContext","DateRangesProvider","zoom","setZoom","period","setPeriod","changePeriod","newPeriod","changeZoom","validatedZoom","getDateRange","usePeriod","useZoom","defaultTheme","tooltip","ChartsDataContext","DetailedAttributeTypeContext","DVFContext","EntityTypeContext","useChartsDataRequest","entityType","detailedAttributeType","metrics","requestState","setRequestState","chartsData","setChartsData","attributeFieldName","fieldName","entityTypeUri","safePromise","useSafePromise","onRequestFinished","loadChartsData","async","DQDataLevel","buildFilterQueryString","FilterOptions","getActiveProfiles","getFacets","query","generateValuableQueryString","activeness","ActivityFilters","body","pageSize","pageNo","getInactiveProfiles","getDqChartsData","getDQChartsData","Promise","all","activeProfiles","inactiveProfiles","dqChartsData","sourceSystems","path","omit","keys","length","summary","getLastUriPart","attributes","pathOr","refreshAction","useEntityCount","entityTypes","entitiesCountMap","setEntitiesCountMap","ChartDataType","CustomViewType","ViewType","DQMetric","RDMLookupState","defaultViewsByDataLevel","FILL_RATE","i18n","UNIQUENESS","SUMMARY","DATA_VALIDATION","FREQUENCY","LENGTH_STATISTIC","PATTERN","CROSSWALK_ANALYSIS","MONTH_DISTRIBUTION","DAY_OF_WEEK_DISTRIBUTION","DAY_OF_MONTH_DISTRIBUTION","VALUE_DISTRIBUTION","UNSUPPORTED","CONSOLIDATION_RATE","RDM_TRANSCODE","defaultLayoutsByDataLevel","today","default","SSN","BOOLEAN","DATE","INTEGER","FLOAT","RDM_LOOKUP_EXIST","RDM_LOOKUP_NOT_EXIST","getAdvancedSearchFilter","filters","index","operator","SearchOperator","getDQDateRangeByValue","currentDate","moment","DateRangeValue","subtract","valueOf","getDateRangeByValue","getTimeSeriesData","getData","group","_max_date","label","sortBy","getTimeRangeDates","dateFormat","startTimestamp","endTimeStamp","getDateRangeByDatePeriod","startDate","format","endDate","checkIsTimeSeries","config","timeSeries","getChartTooltipDateTitle","hasData","date","hasTimeRange","enrichTimeSeriesDataWithTodayData","todayChartData","metric","timeSeriesData","reject","append","reduce","todayData","currentData","todayChartDataWithPercent","todayOption","FillRateState","UniquenessAnalysisState","getStateFromMetric","todayDataForTimeSeries","dataItem","getTodayData","localizeChartValues","chartData","localizedValue","getPercentLabel","isNil","isEmptyData","isEmpty","facetFiltersToSearchState","advanced","when","isDateType","evolve","mapFilterValue","parseTimestamp","searchOptions","searchByOv","ovOnly","version","getSearchState","getFilter","getChartDataTypeByAttributeType","DataTypes","STRING","UNKNOWN","getValidViews","allViews","supportedViews","viewType","viewIndex","findIndex","includes","concat","getMetricsFromViews","uniq","hasTimeRangeLayout","layouts","timeRange","getBarWidthStyle","enrichChartDataWithSourceLabel","max","getEntityTypeSummarySearchState","transformTimeSeriesChartData","toFixed","getChartState","states","equals","any","isContainActiveVF","dvf","attributeTypeUri","some","allPass","StatusVF","isFloatingType","getAttributeLabel","getLabel","name","AttrTypeDetailsType","filterAttributeByDetails","filterOptions","detail","details","filterAttributeTreeByDetails","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","items","parents","level","chain","childrenItems","isReference","attributeItem","attributeUriToSearchUri","isReferenceChild","EmptyStateVariants","DQDateRangeValue","getFirstEntityTypeUri","dateRangeValues","getValuesDateRange","DataLevelContext","paddingRight","infoDataLabel","chartDataLabel","tooltipWrapper","row","DataRenderer","ChartDataRenderer","fillRateSquare","marginRight","verticalAlign","getValueLabel","getColor","tooltipData","infoIcon","infoTooltipTitle","hasInfoIcon","hasChildren","BasicViewHeader","SmallIconButton","InfoIcon","size","tooltipTitle","dataReltioId","FillRateChartColors","getFillRateColorByState","getChartItemColor","getFillRateColors","getLabelFromState","formatFillRateData","entries","indexOf","formatFillRatesData","toPairs","getFillRateData","getFillRateChartData","always","converge","colors","getFillRateFilter","getFillRateSearchState","useChartData","getChartData","getRawFilterSearchState","keyword","isRawFilter","getEqualsRawFilterSearchState","excludeDescendantEntityTypes","searchState","entityTypesFilter","entityTypesUris","AdditionalFilterOptionsValues","join","getExcludedEntityTypesRawFilter","getDescendantEntityTypes","currentRawFilter","newRawFilter","useSearchRedirect","dispatch","useDispatch","ui","container","paddingBottom","small","marginBottom","medium","large","message","refreshButton","refreshIcon","defaultIcon","onRefresh","errorData","SMALL","Icon","startIcon","Replay","viewContent","loadingState","BasicViewContent","DashboardLinearLoader","legendLabel","legendValue","legend","itemColor","payload","withPercents","legendProps","align","wrapperStyle","content","formatNumberAsMetric","BarAxis","stackedBar","flexGrow","inactivePart","tooltipFillRate","legendWrapper","rangeWrapper","rangeValue","Bar","BarWithTooltip","withTooltip","getTooltipData","onItemClick","onBarClick","maxValue","sum","searchProfiles","useMlDqDataRequest","LAST_WEEK","setTimeSeriesData","tenant","mlDqPath","oldRequestDependencies","memoizedRequestDependencies","toString","getMlDqData","attribute","needRefresh","currentRange","last","head","currentStartTime","currentEndTime","startTime","endTime","needRefreshData","current","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","attributeType","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","source","getValueDistributionFilterForDate","timestampStart","timestampEnd","getValueDistributionFilterForNumber","getValueDistributionFilterForFloat","lastItem","isSingleValue","getValueDistributionSearchState","cond","getConsolidationRateFilter","getConsolidationRateSearchState","getBarOpacity","selectedBar","tickFormatter","toUpperCase","round","getValuesFromChartData","flatten","roundPercent","XAxisTickFormatter","isPercent","minLineChartData","getMinValueFromLineChartData","maxLineChartData","getMaxValueFromLineChartData","minYAxisValue","maxYAxisValue","gap","updatedMinData","updatedMaxData","getUpdatedEdgeData","xAxis","dataKey","tick","tickMargin","angle","textAnchor","tickLine","interval","yAxis","tickCount","domain","cartesianGrid","strokeDasharray","strokeOpacity","line","dot","activeDot","referenceLine","isFront","labelForY","getTooltip","getTooltipProp","yAxisLabel","dateRange","getLineChartSettings","tooltipProps","selectedDots","setSelectedDots","zoomAreaStart","setZoomAreaStart","zoomAreaEnd","setZoomAreaEnd","zoomedData","indexStart","indexEnd","slice","getZoomedData","emptyAreas","getDateByIndex","every","isNaN","isLineChartDataEmpty","areas","lastArea","end","start","extendArea","getEmptyAreas","hasZoomArea","onMouseMove","mouseEvent","isTooltipActive","activeLabel","activePayload","onMouseLeave","onMouseDown","onMouseUp","either","emptyArea","filterNull","_extends","target","arguments","prototype","hasOwnProperty","call","apply","infoPanel","info","dynamicInfo","dynamicInfoPositive","dynamicInfoNegative","dynamicIcon","dynamicPercent","isPositiveDynamic","abs","dateLabel","infoLabel","percentKey","lastChartData","filteredData","Infinity","prevPercent","lastPercent","getDynamicPercent","monoFontCell","fontFamily","timeSeriesContent","tooltipKeys","active","currentPayload","mlDqData","mlDqState","mlDqReload","todayState","todayReload","reloadFunction","disabled","chipProps","isDateRangeValue","getRangeOptionLabel","Chip","InfoDataRenderer","isTimeSeries","UniquenessChartColors","getUniquenessColorByState","getUniquenessColors","formatUniquenessAnalysisData","getUniquenessData","getUniquenessChartData","uniqueness","dataMlDq","stateMlDq","reloadMlDq","dataToday","stateToday","reloadToday","loading","badQuality","AttributeTypeDetailIconSizes","NORMAL","AttributeTypeDetailIconVariant","AttributeTypeDetailIcon","detailType","paddingLeft","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","Tooltip","attributeTypesCount","collectAttributes","isReadableAttribute","getAttributeTypeSubAttributes","countEntityTypeAttributes","getValue","searchRedirect","search","ActivityFilter","isAttributeTypeLevel","DefaultIcon","titleChildren","viewTitle","getFormattedDataForTableChart","valueComparator","sortDirection","sortField","a","b","filterExistedDVF","dvfs","chartDataItem","findDVFByUri","enrichDVFDataWithFunctionLabel","getAttributeTypeLabelFromHierarhy","enrichEntityLevelDVFData","attributeUri","attributeTypesHierarhy","getAttributeTypesHierarchyByUri","attributeLabel","getValidationChartData","getFrequencyChartData","getPatternAnalisysData","getDVFAnalyticAttribtuteUri","attributeName","getValidationFilter","getFrequencyAnalysisStateForTimestamp","attributeValue","getFrequencyAnalysisFilterForDate","getFrequencyAnalysisFilter","getFrequencyAnalysisSearchState","isTimestampBasedType","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","SettingsIcon","Link","href","component","underline","DATA_VALID","NiceOneIcon","PERMISSION_DENIED","useNoDataDvfType","activeDvfs","errorCode","dvfsState","chartDataState","chartState","isAttributeDataLevel","isPermissionDenied","ApiErrorCode","isDVFNotSupported","isDVFNotConfigured","isDataValid","useDvfs","onlyActive","dvfsData","currentDvfs","getDVFsForAttribute","getLabelAndMaxValue","getValueByColumnId","rowValue","handler","childrenRef","el","clientWidth","scrollWidth","RootRef","rootRef","headCell","isFirstColumn","headCellWithRange","headLabel","labelWrapper","rangeLabel","tooltipValue","useNumberCellStyles","barColor","colorBarContainer","numberContainer","number","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","getEntityCounts","dvfUri","getValidationSearchState","dataKeys","functionId","propSatisfies","reloadDvf","stateDvf","acc","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","applySpec","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","onRowClick","onRowHover","hoverRowIndex","RDMTranscodeStatus","RDMChartColors","RESOLVED","UNRESOLVED","getRDMChartColors","formatRDMTranscodeData","resolveCount","unresolveCount","getRDMTranscodeFilter","rdmTranscodeStatus","getRDMTranscodeSearchState","setData","getRDMData","isRDMLoolupResolve","loadRDMChartData","useRDMChartDataRequest","ViewsFactory","getComponent","DQDashboardLayoutItem","ResizeComponent","reltioGridLayoutToStaticLayout","DEFAULT_LAYOUT_OPTIONS","staticLayout","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","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","selected","onCollapse","noop","isLoading","hasFillRate","CollapseIcon","ArrowRightIcon","ArrowDropDownIcon","ListItem","times","getAttrTypeFromItem","getFirstSimpleDetailedAttrType","isComplexAttribute","isImage","not","filterDetailedAttrTypeByFieldName","getFilterOptionsByGroup","EmptinessFilterValue","emptinessFilterOptions","SHOW_EMPTY","filterItemsByEmptiness","firstEmptinessOption","filterValidDetailsOptions","validOptionValues","getFieldNameFromItem","filterItemsByDetails","detailsOptions","filteredNestedFieldNames","both","getFilteredNestedFieldNames","startsWith","getAtrributeFieldNames","searchWrapper","filterByDetails","searchInput","filledInput","menu","filterIcon","filterIconFilterApplied","filterIconWrapper","filterIconWrapperActive","filterIconWrapperSelected","dropdownMenuTitle","option","isActive","typeIconWrapper","valueContainer","counter","optionLabel","groupLabel","actionsContainer","clearAllButton","count","showCounter","MenuItem","Checkbox","checked","containsOption","withoutOption","optionIndex","remove","defaultFilterOptions","defaultFilterText","onChangeFilterText","onChangeFilterOptions","anchorEl","setAnchorEl","selectedFilterOptions","setSelectedFilterOptions","valueInFilterTextInput","setValueInFilterTextInput","filterOptionsGroups","allValidFilterOptions","getValidFilterOptions","closeFilter","handleOptionChange","ifElse","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","getAttributeTypesTree","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","scrollTopShadow","hasRDMLookup","isAttrTreeHasRDMLookup","checkEntityTypeHasRDMLookup","currentRDMLookupState","layoutsByDataLevel","uniqBy","getEntityLevelViews","viewsByDataLevel","selectRoot","outline","select","selectValue","arrowIcon","optionRoot","dataReltioOptionId","classesProps","selectProps","renderCount","mergeClasses","outlined","Select","MenuProps","getContentAnchorEl","list","renderValue","autoWidth","entityCount","setTick","useReloadAllFacets","intervalId","setInterval","timer","clearInterval","isValid","fromNow","RefreshIcon","perspectiveView","overflowX","attributeLevelWrapper","navigationWrapper","headerRightSide","periodSelector","flexBasis","paper","input","inputRoot","dropdownIndicator","saveState","canGetDQStatistic","isAvailableEntityType","useEntityTypes","setEntityTypeUri","getEntityType","getEntityCount","customAttributeLayouts","setDetailedAttributeType","setDataLevel","selectedEntityType","consoleLink","setConsoleLink","setDVFConfigLink","servicesPath","environment","getConsoleApps","response","apps","insert","useDvfConfigLink","setDvfs","setErrorCode","dvfPath","env","canUserReadDVF","functions","loadDVFs","getDVF","useDVF","dvfContext","dqDashboardSavedState","isEntityTypeExists","sortedEntityTypesWithCount","defaultPeriod","Array","isArray","saveStateHandler","attributeLevelLayout","chartDataType","customLayouts","defaultLayouts","mergedLayoutsByType","mergeLeft","getLayoutByAttributeType","attributeLevelViews","getViewsByDataType","getAttributeLevelViews","attributeLevelMetrics","saveStateDebounce","fn","lastParams","params","startParams","clearTimeout","useDebounceFunction","newSavedState","getNewSavedState","attributeLevelChartsData","sortWith","sortEntityTypesWithCount","handleSetEntityTypeByUri","showContent","showTimeRange","dateRangeEditorValue","getPeriodValue","DateRangeEditor","getDateRangeOptions","TextFieldProps","InputProps","disableUnderline","DateRangePickerProps","maxDate","startOf","toDate","ATTRIBUTE_LIST_WIDTH","LARGE","dqDashboardTheme","createMuiTheme","generateClassName","createGenerateClassName","productionPrefix","disableGlobal","store","getSavedStatePromisified","promisifyCallback","MuiPickersUtilsProvider","MomentUtils","StylesProvider"],"sourceRoot":""}