export function useRealPhonesData()

in frontend/src/hooks/api/realPhone.ts [83:148]


export function useRealPhonesData(): SWRResponse<RealPhoneData, unknown> & {
  requestPhoneVerification: PhoneNumberRequestVerificationFn;
  submitPhoneVerification: PhoneNumberSubmitVerificationFn;
  requestPhoneRemoval: RequestPhoneRemovalFn;
  resendWelcomeSMS: ResendWelcomeSMSFn;
} {
  const realphone: SWRResponse<RealPhoneData, unknown> =
    useApiV1("/realphone/");

  /**
   * Submit the one-time password given from the requestPhoneVerification function * to confirm/register a real phone number
   */
  const submitPhoneVerification: PhoneNumberSubmitVerificationFn = async (
    id,
    obj,
  ) => {
    const response = await apiFetch(`/realphone/${id}/`, {
      method: "PATCH",
      body: JSON.stringify(obj),
    });
    realphone.mutate();
    return response;
  };

  /**
   * Request a one-time password to validate a real phone number.
   */
  const requestPhoneVerification: PhoneNumberRequestVerificationFn = async (
    phoneNumber,
  ) => {
    // TODO: Validate number as E.164
    // https://blog.kevinchisholm.com/javascript/javascript-e164-phone-number-validation/

    const response = await apiFetch("/realphone/", {
      method: "POST",
      body: JSON.stringify({ number: phoneNumber }),
    });
    realphone.mutate();
    return response;
  };

  // Remove real phone record by id.
  const requestPhoneRemoval: RequestPhoneRemovalFn = async (id: number) => {
    const response = await apiFetch(`/realphone/${id}/`, {
      method: "DELETE",
    });
    realphone.mutate();
    return response;
  };

  const resendWelcomeSMS: ResendWelcomeSMSFn = async () => {
    const response = await apiFetch("/realphone/resend_welcome_sms", {
      method: "POST",
    });
    realphone.mutate();
    return response;
  };

  return {
    ...realphone,
    requestPhoneVerification,
    submitPhoneVerification,
    requestPhoneRemoval,
    resendWelcomeSMS: resendWelcomeSMS,
  };
}