import { useRef, useState } from "react"; import { MetadataPurposeVM, PurposeType, usePostAuthV1PrivateAuthGetcode, } from "../services"; export type UserData = { otpCode: string; totp?: string; otpToken?: string; purpose: PurposeType; }; type Resolve = ({ otpCode, otpToken, totp, purpose }: UserData) => void; type Reject = () => void; type Trigger = { onResolve: Resolve; onReject?: Reject }; export type PurposeFunction = (purpose: PurposeType) => void; export const useProtectedAuth = () => { const [open, setOpen] = useState(false); const triggerRef = useRef({ onResolve: () => null, onReject: () => null, }); const { mutate, isLoading, data: otpToken, error: errorGetCode, reset, } = usePostAuthV1PrivateAuthGetcode(); const onClose = () => { setOpen(false); reset(); }; const trigger = async ( onResolve: (userData: UserData) => void, onReject?: () => void, ) => { triggerRef.current.onResolve = onResolve; triggerRef.current.onReject = onReject; setOpen(true); }; const onSubmit = (purpose: PurposeType, otpCode: string, totp?: string) => { triggerRef.current?.onResolve({ otpCode, totp, otpToken, purpose }); triggerRef.current?.onReject?.(); }; const getCode = (purpose: PurposeType, requestBody: MetadataPurposeVM) => { mutate({ requestBody, headerParams: { purpose } }); }; const authOptions = { onClose, open, onSubmit, isLoading, getCode, errorGetCode, }; return { trigger, authOptions }; };