import { Grid, Row, Column, Text, Icon, ProgressBar, Dialog } from '@umami/react-zen'; import { ReportEditButton } from '@/components/input/ReportEditButton'; import { useMessages, useResultQuery } from '@/components/hooks'; import { File, LightningSvg, User } from '@/components/icons'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { formatLongNumber } from '@/lib/format'; import { GoalEditForm } from './GoalEditForm'; export interface GoalProps { id: string; name: string; type: string; parameters: { name: string; type: string; value: string; }; websiteId: string; startDate: Date; endDate: Date; } export type GoalData = { num: number; total: number }; export function Goal({ id, name, type, parameters, websiteId, startDate, endDate }: GoalProps) { const { formatMessage, labels } = useMessages(); const { data, error, isLoading, isFetching } = useResultQuery(type, { websiteId, startDate, endDate, ...parameters, }); const isPage = parameters?.type === 'path'; return ( {data && ( {name} {({ close }) => { return ( ); }} {formatMessage(isPage ? labels.viewedPage : labels.triggeredEvent)} {formatMessage(labels.conversionRate)} {parameters.type === 'path' ? : } {parameters.value} {`${formatLongNumber( data?.num, )} / ${formatLongNumber(data?.total)}`} {data?.total ? Math.round((+data?.num / +data?.total) * 100) : '0'}% )} ); }