import { FC, useCallback, useMemo, useState } from 'react'; import { Integration } from '@prisma/client'; import useSWR from 'swr'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { ChartSocial } from '@gitroom/frontend/components/analytics/chart-social'; import { LoadingComponent } from '@gitroom/frontend/components/layout/loading'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; export const RenderAnalytics: FC<{ integration: Integration; date: number; }> = (props) => { const { integration, date } = props; const [loading, setLoading] = useState(true); const fetch = useFetch(); const load = useCallback(async () => { setLoading(true); const load = ( await fetch(`/analytics/${integration.id}?date=${date}`) ).json(); setLoading(false); return load; }, [integration, date]); const { data } = useSWR(`/analytics-${integration?.id}-${date}`, load, { refreshInterval: 0, refreshWhenHidden: false, revalidateOnFocus: false, revalidateOnReconnect: false, revalidateIfStale: false, refreshWhenOffline: false, revalidateOnMount: true, }); const refreshChannel = useCallback( ( integration: Integration & { identifier: string; } ) => async () => { const { url } = await ( await fetch( `/integrations/social/${integration.identifier}?refresh=${integration.internalId}`, { method: 'GET', } ) ).json(); window.location.href = url; }, [] ); const t = useT(); const total = useMemo(() => { return data?.map((p: any) => { const value = (p?.data.reduce((acc: number, curr: any) => acc + curr.total, 0) || 0) / (p.average ? p.data.length : 1); if (p.average) { return value.toFixed(2) + '%'; } return value; }); }, [data]); if (loading) { return ( <> ); } return (
{data?.length === 0 && (
{t( 'this_channel_needs_to_be_refreshed', 'This channel needs to be refreshed,' )}
{t('click_here_to_refresh', 'click here to refresh')}
)} {data?.map((p: any, index: number) => (
{p.label}
{total[index]}
))}
); };