{"version":3,"file":"BuyNowButton.mjs","names":[],"sources":["../../src/BuyNowButton.tsx"],"sourcesContent":["import {useEffect, useState, useCallback} from 'react';\nimport {useCart} from './CartProvider.js';\nimport {\n  BaseButton,\n  type BaseButtonProps,\n  type CustomBaseButtonProps,\n} from './BaseButton.js';\n\ninterface BuyNowButtonPropsBase {\n  /** The item quantity. Defaults to 1. */\n  quantity?: number;\n  /** The ID of the variant. */\n  variantId: string;\n  /** The selling plan ID of the subscription variant */\n  sellingPlanId?: string;\n  /** An array of cart line attributes that belong to the item being added to the cart. */\n  attributes?: {\n    key: string;\n    value: string;\n  }[];\n}\n\ntype BuyNowButtonProps<AsType extends React.ElementType = 'button'> =\n  BuyNowButtonPropsBase & BaseButtonProps<AsType>;\n\n/**\n * The `BuyNowButton` component renders a button that adds an item to the cart and redirects the customer to checkout.\n * Must be a child of a `CartProvider` component.\n * @publicDocs\n */\nexport function BuyNowButton<AsType extends React.ElementType = 'button'>(\n  props: BuyNowButtonProps<AsType>,\n): JSX.Element {\n  const {cartCreate, checkoutUrl} = useCart();\n  const [loading, setLoading] = useState<boolean>(false);\n\n  const {\n    quantity,\n    variantId,\n    sellingPlanId,\n    onClick,\n    attributes,\n    children,\n    ...passthroughProps\n  } = props;\n\n  useEffect(() => {\n    if (loading && checkoutUrl) {\n      window.location.href = checkoutUrl;\n    }\n  }, [loading, checkoutUrl]);\n\n  const handleBuyNow = useCallback(() => {\n    setLoading(true);\n    cartCreate({\n      lines: [\n        {\n          quantity: quantity ?? 1,\n          merchandiseId: variantId,\n          attributes,\n          sellingPlanId,\n        },\n      ],\n    });\n  }, [cartCreate, quantity, variantId, attributes, sellingPlanId]);\n\n  return (\n    <BaseButton\n      // Only certain 'as' types such as 'button' contain `disabled`\n      disabled={loading ?? (passthroughProps as {disabled?: boolean}).disabled}\n      {...passthroughProps}\n      onClick={onClick}\n      defaultOnClick={handleBuyNow}\n    >\n      {children}\n    </BaseButton>\n  );\n}\n\n// This is only for documentation purposes, and it is not used in the code.\n/** @publicDocs */\nexport interface BuyNowButtonPropsForDocs<\n  AsType extends React.ElementType = 'button',\n>\n  extends BuyNowButtonPropsBase, CustomBaseButtonProps<AsType> {}\n"],"mappings":";;;;;;;;;;AA8BA,SAAgB,aACd,OACa;CACb,MAAM,EAAC,YAAY,gBAAe,SAAS;CAC3C,MAAM,CAAC,SAAS,cAAc,SAAkB,MAAM;CAEtD,MAAM,EACJ,UACA,WACA,eACA,SACA,YACA,UACA,GAAG,qBACD;AAEJ,iBAAgB;AACd,MAAI,WAAW,YACb,QAAO,SAAS,OAAO;IAExB,CAAC,SAAS,YAAY,CAAC;CAE1B,MAAM,eAAe,kBAAkB;AACrC,aAAW,KAAK;AAChB,aAAW,EACT,OAAO,CACL;GACE,UAAU,YAAY;GACtB,eAAe;GACf;GACA;GACD,CACF,EACF,CAAC;IACD;EAAC;EAAY;EAAU;EAAW;EAAY;EAAc,CAAC;AAEhE,QACE,oBAAC,YAAD;EAEE,UAAU,WAAY,iBAA0C;EAChE,GAAI;EACK;EACT,gBAAgB;EAEf;EACU,CAAA"}