import { Button, Join, ModalDialog, Select, Spacer, Text, useDidMount, } from "@artsy/palette" import { ArtworkSidebarAuctionTimerFragmentContainer } from "Apps/Artwork/Components/ArtworkSidebar/ArtworkSidebarAuctionTimer" import { AddressFormWithCreditCard } from "Apps/Auction/Components/Form/AddressFormWithCreditCard" import { ConditionsOfSaleCheckbox } from "Apps/Auction/Components/Form/ConditionsOfSaleCheckbox" import { ErrorStatus } from "Apps/Auction/Components/Form/ErrorStatus" import { getSelectedBid } from "Apps/Auction/Components/Form/Utils/getSelectedBid" import { initialValuesForBidding } from "Apps/Auction/Components/Form/Utils/initialValues" import { biddingValidationSchemas } from "Apps/Auction/Components/Form/Utils/validationSchemas" import { useAuctionTracking } from "Apps/Auction/Hooks/useAuctionTracking" import { CreditCardInputProvider } from "Components/CreditCardInput" import { useRouter } from "System/Hooks/useRouter" import type { AuctionBidRoute_artwork$data } from "__generated__/AuctionBidRoute_artwork.graphql" import type { AuctionBidRoute_me$data } from "__generated__/AuctionBidRoute_me.graphql" import type { AuctionBidRoute_sale$data } from "__generated__/AuctionBidRoute_sale.graphql" import { Form, Formik } from "formik" import type { Match } from "found" import dropWhile from "lodash/dropWhile" import { useEffect } from "react" import { type RelayRefetchProp, createRefetchContainer, graphql, } from "react-relay" import { AuctionLotInfoFragmentContainer } from "./Components/AuctionLotInfo" import { PricingTransparencyQueryRenderer } from "./Components/PricingTransparency" import { useSubmitBid } from "./useSubmitBid" interface AuctionBidRouteProps { artwork: AuctionBidRoute_artwork$data me: AuctionBidRoute_me$data relay: RelayRefetchProp sale: AuctionBidRoute_sale$data } const AuctionBidRoute: React.FC< React.PropsWithChildren > = ({ artwork, me, relay, sale }) => { const { match, router } = useRouter() const { tracking } = useAuctionTracking() const mounted = useDidMount() const { artworkSlug, bidderID, displayIncrements, modalWidth, requiresCheckbox, requiresPaymentInformation, selectedBid, validationSchema, } = computeProps({ artwork, match, me }) const { submitBid } = useSubmitBid({ artwork, bidderID, me, relay, requiresPaymentInformation, sale, }) const handleBidSubmit = async (values, helpers) => { try { await submitBid(values, helpers) } catch (error) { // TODO: Connect to system errors console.error("handleBidSubmit", error) } } const handleModalClose = () => { router.push(`/auction/${sale.slug}`) } // Track initial load useEffect(() => { tracking.bidPageView({ artwork, me }) }, [artwork, me, tracking]) if (!mounted) return null return ( {({ values, touched, errors, isSubmitting, isValid, setFieldError, setFieldValue, setFieldTouched, }) => { return (
}> Set Your Max Bid