import { useCallback, useEffect, useState } from "react"; import { useSearchParams } from "react-router-dom"; import type { ApiSettings } from "../../../types"; import { getCampaignWorkspace } from "../../../api/campaigns"; import type { CampaignWorkspaceData } from "../utils/campaignView"; const initialData: CampaignWorkspaceData = { campaign: null, versions: [], currentVersion: null, summary: null }; type UseCampaignWorkspaceDataOptions = { includeCurrentVersion?: boolean; includeSummary?: boolean; includeVersions?: boolean; }; export function useCampaignWorkspaceData( settings: ApiSettings, campaignId: string, options: UseCampaignWorkspaceDataOptions = {} ) { const { includeCurrentVersion = true, includeSummary = false, includeVersions = false } = options; const [searchParams] = useSearchParams(); const selectedVersionId = searchParams.get("version"); const [data, setData] = useState(initialData); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const reload = useCallback(async () => { if (!campaignId) return; setLoading(true); setError(""); try { const shouldLoadVersions = includeCurrentVersion || includeVersions; const response = await getCampaignWorkspace(settings, campaignId, { versionId: selectedVersionId, includeCurrentVersion, includeSummary, includeVersions: shouldLoadVersions, }); setData({ campaign: response.campaign, versions: response.versions, currentVersion: response.current_version, summary: response.summary }); } catch (err) { setData(initialData); setError(err instanceof Error ? err.message : String(err)); } finally { setLoading(false); } }, [settings, campaignId, includeCurrentVersion, includeSummary, includeVersions, selectedVersionId]); useEffect(() => { reload(); }, [reload]); return { data, loading, error, reload, setError }; }