67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
/**
|
|
* useReportPageData — Guest / User 리포트 페이지가 공통으로 쓰는 데이터 훅.
|
|
*
|
|
* 단순히 기존 `useReport` + `useEnrichment` 조합을 한 곳에 묶어
|
|
* 페이지 wrapper 두 곳에서 동일한 코드를 반복하지 않도록 합니다.
|
|
*/
|
|
import { useMemo } from 'react';
|
|
import { useLocation } from 'react-router';
|
|
import type { MarketingReport } from '@/features/report/types/report';
|
|
import { useReport } from '@/features/report/hooks/useReport';
|
|
import { useEnrichment } from '@/features/channels/hooks/useEnrichment';
|
|
|
|
interface UseReportPageDataResult {
|
|
data: MarketingReport | null;
|
|
isLoading: boolean;
|
|
error: string | null;
|
|
enrichStatus: ReturnType<typeof useEnrichment>['status'];
|
|
}
|
|
|
|
export function useReportPageData(id: string | undefined): UseReportPageDataResult {
|
|
const location = useLocation();
|
|
const {
|
|
data: baseData,
|
|
isLoading,
|
|
error,
|
|
isEnriched,
|
|
socialHandles: dbSocialHandles,
|
|
} = useReport(id);
|
|
|
|
const enrichmentParams = useMemo(() => {
|
|
if (!baseData || isEnriched) return null;
|
|
|
|
const state = location.state as Record<string, unknown> | undefined;
|
|
const metadata = state?.metadata as Record<string, unknown> | undefined;
|
|
const stateSocialHandles = metadata?.socialHandles as Record<string, string | null> | undefined;
|
|
|
|
const handles = stateSocialHandles || dbSocialHandles;
|
|
|
|
const igHandles: string[] = Array.isArray(handles?.instagram)
|
|
? (handles.instagram.filter(Boolean) as string[])
|
|
: handles?.instagram
|
|
? [handles.instagram as string]
|
|
: [];
|
|
|
|
const ytHandle = handles?.youtube || baseData.youtubeAudit?.handle || undefined;
|
|
const fbHandle = handles?.facebook || undefined;
|
|
|
|
return {
|
|
reportId: baseData.id,
|
|
clinicName: baseData.clinicSnapshot.name,
|
|
instagramHandles: igHandles.length > 0 ? igHandles : undefined,
|
|
youtubeChannelId: ytHandle || undefined,
|
|
facebookHandle: fbHandle as string | undefined,
|
|
address: baseData.clinicSnapshot.location || undefined,
|
|
};
|
|
}, [baseData, isEnriched, dbSocialHandles, location.state]);
|
|
|
|
const { status: enrichStatus, enrichedReport } = useEnrichment(baseData, enrichmentParams);
|
|
|
|
return {
|
|
data: enrichedReport || baseData,
|
|
isLoading,
|
|
error,
|
|
enrichStatus,
|
|
};
|
|
}
|