40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
"use client";
|
|
|
|
import { useEffect, useMemo } from "react";
|
|
import type { FunnelDefinition } from "@/lib/funnel/types";
|
|
import type { IFunnelPaymentPlacement } from "@/entities/session/funnel/types";
|
|
import { usePaymentPlacementContext } from "@/entities/session/payment/PaymentPlacementProvider";
|
|
|
|
interface UsePaymentPlacementArgs {
|
|
funnel: FunnelDefinition;
|
|
paymentId: string;
|
|
}
|
|
|
|
interface UsePaymentPlacementResult {
|
|
placement: IFunnelPaymentPlacement | null;
|
|
isLoading: boolean;
|
|
error: string | null;
|
|
}
|
|
|
|
export function usePaymentPlacement({
|
|
funnel,
|
|
paymentId,
|
|
}: UsePaymentPlacementArgs): UsePaymentPlacementResult {
|
|
const { getPlacement, loadPlacement } = usePaymentPlacementContext();
|
|
|
|
const funnelKey = useMemo(() => funnel?.meta?.id ?? "", [funnel]);
|
|
|
|
useEffect(() => {
|
|
if (!funnelKey || !paymentId) return;
|
|
loadPlacement(funnelKey, paymentId);
|
|
}, [funnelKey, paymentId, loadPlacement]);
|
|
|
|
const cached = getPlacement(funnelKey, paymentId);
|
|
|
|
return {
|
|
placement: cached.placement,
|
|
isLoading: cached.isLoading,
|
|
error: cached.error,
|
|
};
|
|
}
|