import { durationFormatted } from 'App/date'; import React from 'react'; import FunnelStepText from './FunnelStepText'; import { Icon } from 'UI'; import { Space } from 'antd'; import { Styles } from 'Components/Dashboard/Widgets/common'; import cn from 'classnames'; interface Props { filter: any; compData?: any; index?: number; focusStage?: (index: number, isFocused: boolean) => void; focusedFilter?: number | null; metricLabel?: string; isHorizontal?: boolean; } function FunnelBar(props: Props) { const { filter, index, focusStage, focusedFilter, compData, isHorizontal } = props; const isFocused = focusedFilter && index ? focusedFilter === index - 1 : false; return (
{compData ? ( ) : null}
); } function FunnelBarData({ data, isComp, isFocused, focusStage, index, isHorizontal, }: { data: any; isComp?: boolean; isFocused?: boolean; focusStage?: (index: number, isComparison: boolean) => void; index?: number; isHorizontal?: boolean; }) { const vertFillBarStyle = { width: `${data.completedPercentageTotal}%`, height: '100%', backgroundColor: isComp ? Styles.compareColors[2] : Styles.compareColors[1], }; const horizontalFillBarStyle = { width: '100%', height: `${data.completedPercentageTotal}%`, backgroundColor: isComp ? Styles.compareColors[2] : Styles.compareColors[1], } const vertEmptyBarStyle = { width: `${100.1 - data.completedPercentageTotal}%`, height: '100%', background: isFocused ? 'rgba(204, 0, 0, 0.3)' : 'repeating-linear-gradient(325deg, lightgray, lightgray 1px, #FFF1F0 1px, #FFF1F0 6px)', cursor: 'pointer', } const horizontalEmptyBarStyle = { height: `${100.1 - data.completedPercentageTotal}%`, width: '100%', background: isFocused ? 'rgba(204, 0, 0, 0.3)' : 'repeating-linear-gradient(325deg, lightgray, lightgray 1px, #FFF1F0 1px, #FFF1F0 6px)', cursor: 'pointer', } const fillBarStyle = isHorizontal ? horizontalFillBarStyle : vertFillBarStyle; const emptyBarStyle = isHorizontal ? horizontalEmptyBarStyle : vertEmptyBarStyle return (
{data.completedPercentageTotal}%
focusStage?.(index! - 1, isComp)} className={'hover:opacity-70'} />
{/* @ts-ignore */}
{`${data.completedPercentage}% . ${data.count}`}
{index && index > 1 && ( 0 ? 'red' : 'gray-light'} size={16} /> 0 ? 'color-red' : 'disabled') } > {data.droppedCount} Skipped )}
); } export function UxTFunnelBar(props: Props) { const { filter } = props; return (
{filter.title}
{( (filter.completed / (filter.completed + filter.skipped)) * 100 ).toFixed(1)} %
{/* @ts-ignore */}
{filter.completed} completed this step
{durationFormatted(filter.avgCompletionTime)} avg. completion time
{/* @ts-ignore */}
{filter.skipped} skipped
); } export default FunnelBar;