import { _n, sprintf } from '@wordpress/i18n' import classnames from 'classnames' import React, { useMemo } from 'react' import { InsightsChartViewToggle } from './InsightsChartViewToggle' import type { InsightsChartEntry, InsightsChartKey, InsightsChartViews, InsightsConfigurableChartKey } from '../../types/Insights' const PERCENTAGE_MAX = 100 const DEFAULT_COLOR = '#646970' const TAG_CLOUD_MIN_FONT_SIZE = 0.875 const TAG_CLOUD_FONT_SIZE_RANGE = 0.625 const getPieBackground = ( entries: Readonly>, colors: Readonly> | undefined, totalCount: number ): string => { let start = 0 const segments = Object.entries(entries) .filter(([, entry]) => 0 < Number(entry.count)) .map(([key, entry]) => { const end = start + Number(entry.count) / totalCount * PERCENTAGE_MAX const segment = `${colors?.[key] ?? DEFAULT_COLOR} ${start}% ${end}%` start = end return segment }) return `conic-gradient(${segments.join(', ')})` } interface ChartProps { entries: Readonly> colors?: Readonly> } const EntryLabel: React.FC> = ({ label, url }) => url ? {label} : <>{label} const BarChart: React.FC = ({ colors, entries }) => { const entryCounts = useMemo(() => Object.values(entries) .map(entry => Number(entry.count)), [entries]) return (
    {Object.entries(entries).map(([key, entry]) =>
  • )}
) } const PieChart: React.FC = ({ colors, entries }) => { const totalCount = useMemo(() => Object.values(entries).reduce((count, entry) => count + Number(entry.count), 0), [entries]) return (