import {Fragment, useRef} from 'react'; import type { XAxisOptions, YAxisOptions, ChartProps, } from '@shopify/polaris-viz-core'; import { InternalChartType, uniqueId, ChartState, DEFAULT_CHART_PROPS, usePolarisVizContext, } from '@shopify/polaris-viz-core'; import {fillMissingDataPoints} from '../../utilities/fillMissingDataPoints'; import {getLineChartDataWithDefaults} from '../../utilities/getLineChartDataWithDefaults'; import {ChartContainer} from '../../components/ChartContainer'; import {ChartSkeleton} from '../../components/ChartSkeleton'; import {useThemeSeriesColors} from '../../hooks/useThemeSeriesColors'; import { getXAxisOptionsWithDefaults, getYAxisOptionsWithDefaults, normalizeData, } from '../../utilities'; import {SkipLink} from '../SkipLink'; import {useRenderTooltipContent, useTheme} from '../../hooks'; import type { Annotation, LineChartSlotProps, RenderLegendContent, TooltipOptions, } from '../../types'; import {Chart} from './Chart'; export type LineChartProps = { annotations?: Annotation[]; errorText?: string; emptyStateText?: string; renderLegendContent?: RenderLegendContent; showLegend?: boolean; skipLinkText?: string; tooltipOptions?: TooltipOptions; xAxisOptions?: Partial; yAxisOptions?: Partial; slots?: { chart?: (props: LineChartSlotProps) => JSX.Element; }; } & ChartProps; export function LineChart(props: LineChartProps) { const {defaultTheme} = usePolarisVizContext(); const { annotations = [], data: dataSeries, emptyStateText, errorText, id, isAnimated, onError, renderLegendContent, showLegend = true, skipLinkText, state, theme = defaultTheme, tooltipOptions, xAxisOptions, yAxisOptions, } = { ...DEFAULT_CHART_PROPS, ...props, }; const data = fillMissingDataPoints(dataSeries); const selectedTheme = useTheme(theme); const seriesColors = useThemeSeriesColors(data, selectedTheme); const skipLinkAnchorId = useRef(uniqueId('lineChart')); const xAxisOptionsWithDefaults = getXAxisOptionsWithDefaults(xAxisOptions); const yAxisOptionsWithDefaults = getYAxisOptionsWithDefaults(yAxisOptions); const renderTooltip = useRenderTooltipContent({tooltipOptions, theme, data}); const annotationsLookupTable = normalizeData(annotations, 'startKey'); const dataWithDefaults = getLineChartDataWithDefaults(data, seriesColors); return ( {skipLinkText == null || skipLinkText.length === 0 || data.length === 0 ? null : ( {skipLinkText} )} {state !== ChartState.Success ? ( ) : ( )} {skipLinkText == null || skipLinkText.length === 0 ? null : ( )} ); }