import { useRouter } from "next/navigation"; import { storageManager } from "@/libs/storage-manager"; import { useSummaryStore } from "@/store/summary-store/use-summary-store"; import type { ICorePassengerInformation } from "../types/core-summary.types"; interface IModulePayloadMeta { searchId: string; searchItemKey: string; detailKey?: string | string[]; passengersKeys?: { type: number; key: string; age: number; }[]; cartId?: string; passengers?: ICorePassengerInformation[]; productExtraInfo?: any; } export interface IModulePayload extends IModulePayloadMeta {} export const useCoreModuleSummary = (params: { moduleName: string; summaryUrl: string; }) => { const { setModuleData, summaryState } = useSummaryStore(); const router = useRouter(); function setModuleDataPersist(payload: any) { const storagedPayload = storageManager.get("core-summary")?.payload; const payloadWithStoraged = storagedPayload ?? {}; storageManager.set("core-summary", { moduleName: params.moduleName, payload: { ...payloadWithStoraged, ...payload, }, }); setModuleData({ moduleName: params.moduleName as any, payload, }); } function setSearchData( payload: Required>, ) { setModuleDataPersist(payload); } function setDetailData(payload: Required>) { setModuleDataPersist(payload); } function setSearchAndDetailData( payload: Required< Pick > & Partial>, ) { setModuleDataPersist(payload); } function setCartData(payload: Required>) { setModuleDataPersist(payload); } function goSummary() { router.push(params.summaryUrl); } return { setSearchData, setDetailData, setCartData, setSearchAndDetailData, goSummary, isReady: summaryState.status === "done", data: summaryState.data as { moduleName: typeof params.moduleName; payload: T; }, }; };