{"version":3,"file":"js/profile-30e8e2441954a5973ee4.js","mappings":"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","sources":["webpack://daocloud/./app/javascript/@core/service/service.utils.js","webpack://daocloud/./app/javascript/components/shared/CheckBox.jsx","webpack://daocloud/./app/javascript/pages/ProProfileServicePage/ServiceAddOnModal.jsx","webpack://daocloud/./app/javascript/pages/ProProfileServicePage/ServiceAvailability.jsx","webpack://daocloud/./app/javascript/pages/ProProfileServicePage/BookingSection.jsx","webpack://daocloud/./app/javascript/pages/ProProfileServicePage/ProProfileServicePage.jsx","webpack://daocloud/./app/javascript/packs/profile.js"],"sourcesContent":["export const centsToDollars = (cents) => (cents === 0 ? \"Free\" : `$${cents / 100}`)\n\nexport const serviceDisplayAmount = (service) => {\n const variationsSortedByPrice = service.variationsWithParent.sort((a, b) => a.amountCents - b.amountCents)\n const prices = `${centsToDollars(variationsSortedByPrice[0].amountCents)}-${centsToDollars(\n variationsSortedByPrice[variationsSortedByPrice.length - 1].amountCents\n )}`\n return service.variationsWithParent.length > 1 ? prices : centsToDollars(service.amountCents)\n}\n\nexport const serviceDisplayTimeLength = (service) => {\n const variationsSortedByLength = service.variationsWithParent.sort((a, b) => a.timeLength - b.timeLength)\n const lengths = `${variationsSortedByLength[0].timeLength}-${\n variationsSortedByLength[variationsSortedByLength.length - 1].timeLength\n }`\n return (service.variationsWithParent.length > 1 ? lengths : service.timeLength) + \" min\"\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\n\nconst Checkbox = styled.div`\n display: inline-flex;\n\n &:hover {\n cursor: pointer;\n }\n\n input[type=\"checkbox\"] {\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n }\n\n svg {\n display: inline-block;\n height: 24px;\n width: 24px;\n background: #fff;\n border: 2px #ddd solid;\n margin-right: 12px;\n }\n`\n\nexport default function CheckBox({ inputId, name, handleClick, id, checked }) {\n return (\n {\n handleClick(id)\n }}>\n \n \n \n \n {name}\n \n )\n}\n","import PropTypes from \"prop-types\"\nimport React, { useState, useEffect } from \"react\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport CheckBox from \"../../components/shared/CheckBox\"\nimport ExpandableText from \"../../components/shared/ExpandableText\"\nimport { AnimatedModal } from \"../../components/shared/Modal\"\n\nconst ServiceAddOnModal = ({ visible, onClose, service, addOns, onCheckout }) => {\n const [selectedAddOns, setSelectedAddOns] = useState([])\n const [totalCost, setTotalCost] = useState(0)\n\n useEffect(() => {\n // Calculate initial cost (just the main service)\n calculateTotalCost([])\n }, [service])\n\n const toggleAddOn = (addOn) => {\n const currentSelected = [...selectedAddOns]\n const index = currentSelected.findIndex((item) => item.id === addOn.id)\n\n if (index === -1) {\n // Add the add-on\n currentSelected.push(addOn)\n } else {\n // Remove the add-on\n currentSelected.splice(index, 1)\n }\n\n setSelectedAddOns(currentSelected)\n calculateTotalCost(currentSelected)\n }\n\n const calculateTotalCost = (selected) => {\n const mainServiceCost = service.amountCents / 100\n const addOnsCost = selected.reduce((sum, addOn) => sum + addOn.amountCents / 100, 0)\n setTotalCost(mainServiceCost + addOnsCost)\n }\n\n const handleGoToCheckout = () => {\n // Create array of service IDs (main service first, then selected add-ons)\n const serviceIds = [service.id, ...selectedAddOns.map((addOn) => addOn.id)]\n onCheckout(serviceIds)\n }\n\n return (\n \n
\n {addOns.map((addOn) => (\n
\n toggleAddOn(addOn)}\n checked={selectedAddOns.some((item) => item.id === addOn.id)}\n className=\"mr-4\"\n />\n \n
\n ))}\n\n
\n
\n {service.name}\n ${(service.amountCents / 100).toFixed(2)}\n
\n\n {selectedAddOns.map((addOn) => (\n
\n {addOn.name}\n ${(addOn.amountCents / 100).toFixed(2)}\n
\n ))}\n\n
\n Total Cost\n ${totalCost.toFixed(2)}\n
\n
\n\n
\n \n
\n
\n
\n )\n}\n\nServiceAddOnModal.propTypes = {\n visible: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n service: PropTypes.object.isRequired,\n addOns: PropTypes.array.isRequired,\n onCheckout: PropTypes.func.isRequired\n}\n\nexport default ServiceAddOnModal\n","import dayjs from \"dayjs\"\nimport advancedFormat from \"dayjs/plugin/advancedFormat\"\nimport timezone from \"dayjs/plugin/timezone\"\nimport utc from \"dayjs/plugin/utc\"\nimport React, { useState, useEffect } from \"react\"\nimport Skeleton from \"react-loading-skeleton\"\nimport \"react-loading-skeleton/dist/skeleton.css\"\n\nimport { Button } from \"../../components/shared/Buttons\"\nimport { Banner } from \"../../components/shared/Layout\"\nimport { Link } from \"../../components/shared/Links\"\nimport { urqlClient } from \"../../utils/utils\"\n\nimport ServiceAddOnModal from \"./ServiceAddOnModal\"\n\ndayjs.extend(utc)\ndayjs.extend(timezone)\ndayjs.extend(advancedFormat)\n\nconst AVAILABILITY_QUERY = `\n query Availability($serviceId: ID!, $locationId: ID!, $page: Int) {\n bookingAvailability(serviceId: $serviceId, locationId: $locationId, page: $page) {\n availableSlots {\n date\n datetimes\n }\n lastDateInPage\n }\n }\n`\n\nconst DEFAULT_TIMEZONE = Intl.DateTimeFormat().resolvedOptions().timeZone\nconst DEFAULT_TIMEZONE_ABBR = new Date().toLocaleTimeString(\"en-us\", { timeZoneName: \"short\" }).split(\" \")[2]\n\nconst DayAvailabilitySkeleton = () => (\n
\n \n
\n {Array(10)\n .fill()\n .map((_, i) => (\n \n ))}\n
\n
\n)\n\nconst ServiceAvailability = ({ service, selectedLocation, selectedVariation, practice }) => {\n const [data, setData] = useState(null)\n const [fetching, setFetching] = useState(true)\n const [page, setPage] = useState(0)\n const [daysShown, setDaysShown] = useState(10)\n const [selectedSlot, setSelectedSlot] = useState(null)\n const [error, setError] = useState(null)\n const [retry, setRetry] = useState(0)\n const [showAddOnModal, setShowAddOnModal] = useState(false)\n\n const timeZone = !selectedLocation\n ? DEFAULT_TIMEZONE\n : selectedLocation.kind === \"virtual\"\n ? Intl.DateTimeFormat().resolvedOptions().timeZone\n : selectedLocation.formattedTimeZone\n\n const timeZoneAbbr = !selectedLocation\n ? DEFAULT_TIMEZONE_ABBR\n : selectedLocation.kind === \"virtual\"\n ? new Date().toLocaleTimeString(\"en-us\", { timeZoneName: \"short\" }).split(\" \")[2]\n : selectedLocation.timeZoneAbbr\n\n // Reset the availability when the location or variation changes\n useEffect(() => {\n setData(null)\n setPage(0)\n setDaysShown(10)\n setSelectedSlot(null)\n }, [selectedLocation?.id, selectedVariation?.id])\n\n // Fetch availability when the location or variation changes\n useEffect(() => {\n const fetchAvailability = async () => {\n setFetching(true)\n setError(null)\n try {\n const response = await urqlClient\n .query(\n AVAILABILITY_QUERY,\n {\n serviceId: selectedVariation?.id || service.id,\n locationId: selectedLocation.id,\n page\n },\n {\n requestPolicy: \"network-only\"\n }\n )\n .toPromise()\n\n if (response.error) {\n throw new Error(response.error.message || \"Failed to fetch availability\")\n }\n\n const newSlots = response.data.bookingAvailability.availableSlots\n setData((prevData) => ({\n bookingAvailability: {\n availableSlots:\n page === 0 ? newSlots : [...(prevData?.bookingAvailability?.availableSlots || []), ...newSlots],\n lastDateInPage: response.data.bookingAvailability.lastDateInPage\n }\n }))\n } catch (err) {\n console.error(\"Error fetching availability:\", err)\n setError(err.message || \"Failed to load availability. Please try again later.\")\n }\n setFetching(false)\n }\n\n if (selectedLocation) {\n fetchAvailability()\n }\n }, [selectedLocation?.id, selectedVariation?.id, service.id, page, retry])\n\n const availableSlots = data?.bookingAvailability?.availableSlots?.filter((day) => day.datetimes.length > 0) || []\n const lastDateInPage = data?.bookingAvailability?.lastDateInPage\n\n // Handler to set the selected slot and navigate to checkout\n const handleSlotClick = (time) => {\n setSelectedSlot(time)\n\n // Check if service has add-ons\n if (service.addOns && service.addOns.length > 0) {\n // Show add-on selection modal\n setShowAddOnModal(true)\n } else {\n // No add-ons, redirect to checkout directly\n redirectToCheckout(time, [selectedVariation ? selectedVariation.id : service.id])\n }\n }\n\n // Function to handle checkout redirection\n const redirectToCheckout = (time, serviceIds) => {\n const serviceParam = serviceIds.join(\",\")\n const checkoutUrl = `/checkout?pid=${practice.id}&sid=${serviceParam}&lid=${\n selectedLocation.id\n }&st=${encodeURIComponent(time)}`\n window.location.href = checkoutUrl\n }\n\n // Handler for when the user completes add-on selection and proceeds to checkout\n const handleAddOnCheckout = (serviceIds) => {\n redirectToCheckout(selectedSlot, serviceIds)\n }\n\n return (\n <>\n

Select a Date and Time ({timeZoneAbbr})

\n\n {error && (\n \n

{error}

\n {\n setError(null)\n setPage(0)\n setData(null)\n setFetching(true)\n setRetry((prev) => prev + 1)\n }}>\n Try again\n \n
\n )}\n\n {/* Add-on selection modal */}\n setShowAddOnModal(false)}\n service={selectedVariation || service}\n addOns={service.addOns || []}\n onCheckout={handleAddOnCheckout}\n />\n\n {fetching && !data ? (\n <>\n {Array(5)\n .fill()\n .map((_, i) => (\n \n ))}\n \n ) : (\n
\n {availableSlots.slice(0, daysShown).map((day) => {\n const dayDate = dayjs(day.date)\n const isToday = dayjs().isSame(dayDate, \"day\")\n const isTomorrow = dayjs().add(1, \"day\").isSame(dayDate, \"day\")\n\n return (\n
\n

\n {isToday\n ? `Today, ${dayDate.tz(timeZone).format(\"MMMM D\")}`\n : isTomorrow\n ? `Tomorrow, ${dayDate.tz(timeZone).format(\"MMMM D\")}`\n : dayDate.tz(timeZone).format(\"dddd, MMMM D\")}\n

\n
\n {day.datetimes.map((time) => (\n handleSlotClick(time)}\n className={`w-full rounded-md border border-teal text-center text-lg transition-colors\n ${selectedSlot === time ? \"bg-teal text-white\" : \"text-teal hover:bg-teal/50\"}`}>\n {dayjs(time).tz(timeZone).format(\"h:mma\")}\n \n ))}\n
\n
\n )\n })}\n\n {fetching ? (\n
\n
\n
\n ) : (\n <>\n {lastDateInPage && availableSlots.length === 0 && (\n

No available slots through {dayjs(lastDateInPage).format(\"MMMM D\")}

\n )}\n {\n setDaysShown(daysShown + 10)\n if (daysShown >= availableSlots.length) {\n setPage(page + 1)\n }\n }}>\n Show more times\n \n \n )}\n
\n )}\n \n )\n}\n\nexport default ServiceAvailability\n","import React, { useState, useEffect } from \"react\"\n\nimport { centsToDollars } from \"../../@core/service/service.utils\"\nimport { RadioWithLabel } from \"../../components/shared/RadioButtons\"\n\nimport ServiceAvailability from \"./ServiceAvailability\"\n\nconst BookingSection = ({ service, practice }) => {\n const [selectedLocation, setSelectedLocation] = useState(service.locations?.[0] || null)\n const [selectedVariation, setSelectedVariation] = useState(service.variationsWithParent?.[0] || null)\n const [showAvailability, setShowAvailability] = useState(false)\n\n useEffect(() => {\n if (selectedLocation && (!service.variationsWithParent?.length || selectedVariation)) {\n setShowAvailability(true)\n } else {\n setShowAvailability(false)\n }\n }, [selectedLocation, selectedVariation, service.variationsWithParent])\n\n return (\n
\n {/* Location Selection */}\n
\n

Select Location

\n
\n {service.locations?.map((location) => (\n setSelectedLocation(location)}\n />\n ))}\n
\n
\n\n {/* Variation Selection - Only show if variations exist */}\n {service.variationsWithParent?.length > 0 && (\n
\n

Select Duration

\n
\n {service.variationsWithParent.map((variation) => (\n setSelectedVariation(variation)}\n />\n ))}\n
\n
\n )}\n\n {/* Availability Section */}\n {showAvailability && (\n \n )}\n
\n )\n}\n\nexport default BookingSection\n","import React from \"react\"\nimport { twMerge } from \"tailwind-merge\"\n\nimport { serviceDisplayAmount, serviceDisplayTimeLength } from \"../../@core/service/service.utils\"\nimport AnimatingBackgroundImage from \"../../components/shared/AnimatingBackgroundImage\"\nimport { CurrentUserProvider, useCurrentUser } from \"../../contexts/CurrentUserContext\"\nimport { ToastProvider, useToast } from \"../../contexts/ToastContext\"\nimport GraphQLProvider from \"../../providers/GraphQLProvider\"\nimport AnimatedSection from \"../ProProfileShared/AnimatedSection\"\nimport BottomCTA from \"../ProProfileShared/BottomCTA\"\nimport ChatWidget from \"../ProProfileShared/ChatWidget\"\nimport Footer from \"../ProProfileShared/Footer\"\nimport Map from \"../ProProfileShared/Map\"\nimport Navigation from \"../ProProfileShared/Navigation\"\nimport ThemeFiveNavigation from \"../ProProfileThemeFive/ThemeFiveNavigation\"\nimport { DEFAULT_HIGHLIGHT_CLASSES } from \"../WebsiteBuilder/WebsiteBuilderPage\"\n\nimport BookingSection from \"./BookingSection\"\n\nconst ProProfileServicePage = ({ practice, highlight, service, styles, viewingInBuilder }) => {\n const theme = practice.theme\n const themeName = theme.name\n const currentUser = useCurrentUser()\n const toast = useToast()\n const url = practice.headerHeroImageUrl.replace(/\\+/g, \"%20\").replace(/\\(/g, \"%28\").replace(/\\)/g, \"%29\")\n\n const serviceHasImage = Boolean(service.filestackPhoto && Object.keys(service.filestackPhoto).length > 0)\n\n const NavigationComponent = () => {\n if (themeName === \"vitality\") {\n return \n }\n\n if (themeName === \"serenity\") {\n return (\n \n )\n }\n\n return \n }\n\n return (\n \n \n \n
\n
\n \n \n \n {service.name}\n \n \n \n
\n \n
\n
\n
\n {/* Left column with service details */}\n
\n

{service.name}

\n
\n
\n {serviceDisplayAmount(service)}{\" \"}\n {practice.defaultCurrency !== \"USD\" && service.amountCents > 0 ? practice.defaultCurrency : \"\"}{\" \"}\n • {serviceDisplayTimeLength(service)}\n
\n
\n \n
\n\n {/* Right column with service image */}\n
\n {serviceHasImage && (\n \n )}\n
\n
\n\n {/* Booking Section */}\n \n
\n \n \n
\n
\n
\n
\n )\n}\n\nexport default ProProfileServicePage\n","require(\"@rails/ujs\").start()\nrequire(\"../src/application/toggle-controls\")\n\nimport \"../stylesheets/home-search.css.sass\"\nimport ReactOnRails from \"react-on-rails\"\n\nimport MobileMenu from \"../components/header/MobileMenu\"\nimport ProProfile from \"../pages/ProProfile\"\nimport ProProfileServicePage from \"../pages/ProProfileServicePage/ProProfileServicePage\"\nimport ProProfileThemeFive from \"../pages/ProProfileThemeFive/ProProfileThemeFive\"\nimport ProProfileThemeFour from \"../pages/ProProfileThemeFour/ProProfileThemeFour\"\nimport ProProfileThemeOne from \"../pages/ProProfileThemeOne/ProProfileThemeOne\"\nimport ProProfileThemeThree from \"../pages/ProProfileThemeThree/ProProfileThemeThree\"\nimport ProProfileThemeTwo from \"../pages/ProProfileThemeTwo/ProProfileThemeTwo\"\nimport ProProfileV2 from \"../pages/ProProfileV2\"\n// eslint-disable-next-line no-unused-vars\nimport dayJsPlugins from \"../utils/dayJsPlugins\"\n\nconst components = {\n ProProfile,\n ProProfileV2,\n ProProfileThemeOne,\n ProProfileThemeTwo,\n ProProfileThemeThree,\n ProProfileThemeFour,\n ProProfileThemeFive,\n MobileMenu,\n ProProfileServicePage\n}\n\nReactOnRails.register(components)\n"],"names":["centsToDollars","cents","Checkbox","styled","div","CheckBox","inputId","name","handleClick","id","checked","React","onClick","type","className","viewBox","style","backgroundColor","borderColor","fill","d","strokeWidth","stroke","ServiceAddOnModal","visible","onClose","service","addOns","onCheckout","selectedAddOns","setSelectedAddOns","useState","totalCost","setTotalCost","useEffect","calculateTotalCost","selected","mainServiceCost","amountCents","addOnsCost","reduce","sum","addOn","AnimatedModal","hideModal","header","showFooter","map","key","toFixed","currentSelected","index","findIndex","item","push","splice","toggleAddOn","some","ExpandableText","text","description","maxLength","allowHtml","Button","size","handleGoToCheckout","serviceIds","dayjs","utc","timezone","advancedFormat","DEFAULT_TIMEZONE","Intl","DateTimeFormat","resolvedOptions","timeZone","DEFAULT_TIMEZONE_ABBR","Date","toLocaleTimeString","timeZoneName","split","DayAvailabilitySkeleton","Skeleton","Array","_","i","ServiceAvailability","selectedLocation","selectedVariation","practice","data","setData","fetching","setFetching","page","setPage","daysShown","setDaysShown","selectedSlot","setSelectedSlot","error","setError","retry","setRetry","showAddOnModal","setShowAddOnModal","kind","formattedTimeZone","timeZoneAbbr","async","response","urqlClient","query","serviceId","locationId","requestPolicy","toPromise","Error","message","newSlots","bookingAvailability","availableSlots","prevData","lastDateInPage","err","console","fetchAvailability","filter","day","datetimes","length","redirectToCheckout","time","serviceParam","join","checkoutUrl","encodeURIComponent","window","location","href","Banner","Link","prev","slice","dayDate","date","isToday","isSame","isTomorrow","add","tz","format","handleSlotClick","BookingSection","setSelectedLocation","locations","setSelectedVariation","variationsWithParent","showAvailability","setShowAvailability","RadioWithLabel","label","onChange","variation","timeLength","ProProfileServicePage","highlight","styles","viewingInBuilder","theme","themeName","currentUser","useCurrentUser","toast","useToast","url","headerHeroImageUrl","replace","serviceHasImage","Boolean","filestackPhoto","Object","keys","NavigationComponent","ThemeFiveNavigation","Navigation","color","colorTextDark","CurrentUserProvider","GraphQLProvider","ToastProvider","AnimatingBackgroundImage","animationDuration","twMerge","DEFAULT_HIGHLIGHT_CLASSES","colorTextLight","AnimatedSection","fontFamily","fontHeading","fontWeight","fontHeadingWeight","variationsSortedByPrice","sort","a","b","prices","serviceDisplayAmount","defaultCurrency","variationsSortedByLength","lengths","serviceDisplayTimeLength","dangerouslySetInnerHTML","__html","src","original","any","alt","BottomCTA","Map","Footer","ChatWidget","require","components","ProProfile","ProProfileV2","ProProfileThemeOne","ProProfileThemeTwo","ProProfileThemeThree","ProProfileThemeFour","ProProfileThemeFive","MobileMenu","ReactOnRails"],"sourceRoot":""}