{"version":3,"sources":["Account/Auth.js","Utilities/UpgradePath/UpgradeBadge.jsx","Settings/Panels/ProfilePic/ProfilePic.js","Settings/Panels/Banner/Banner.js","Settings/Panels/AgencyPic/ProfilePic.js","Team/Settings/Pic.jsx","amplify-config-dev.js","amplify-config-prod.js","BE.js","i18n.js","UserContext.js","ThemeContext.js","Logout.js","Privacy/Privacy.js","Privacy/privacy-ita.js","Privacy/privacy-eng.js","Refund/Refund.js","Refund/refund-ita.js","Terms/Terms.js","Terms/terms-eng.js","Integrations/Stripe/Terms/StripeTerms.js","Integrations/Stripe/Terms/stripe-terms-text.js","Navbar/Brand.js","Navbar/LifetimeMessage.js","Login.js","Navbar/Shortcuts/_Shortcuts.js","Navbar/UserPic.js","Navbar/UserName.js","Navbar/UserStatus.js","Navbar/ProfileMenu/_ProfileMenu.js","Navbar/Navbar_.js","Sidebar/Sidebar.jsx","Footer/_Footer.js","Home/ViewToggler/_ViewToggler.js","EventType/Color.js","EventType/Settings.js","EventType/Name.js","EventType/Up.js","EventType/Duration.js","EventType/Private.js","EventType/Location.js","EventType/Team.js","EventType/DisabledReason.js","EventType/Middle.js","EventType/CopyLinkButton.js","EventType/EnableEventButton.js","EventType/Edit.js","EventType/Down.js","EventType/EventType_.js","Home/EventTypeContainer/ConnectionAlert.jsx","Home/EventTypeContainer/_EventTypeContainer.js","Home/EventContainer/Event/Time.js","Home/EventContainer/Event/Name.js","Home/EventContainer/Event/Guest.js","Home/EventContainer/Event/Details/Delete.js","Home/EventContainer/Event/Details/Reschedule.js","Home/EventContainer/Event/Details/Guest.js","Home/EventContainer/Event/Details/Host.js","Home/EventContainer/Event/Details/Location.js","Home/EventContainer/Event/Details/Price.js","Home/EventContainer/Event/Details/Notes.js","Home/EventContainer/Event/Details/Surveys/Content.js","Home/EventContainer/Event/Details/Surveys/Answer.js","Home/EventContainer/Event/Details/Surveys/_Surveys.js","Home/EventContainer/Event/Details/EventApproval.js","Home/EventContainer/Event/Details/_Details.js","Home/EventContainer/Event/_Event.js","Home/EventContainer/DayGroup.js","Home/EventContainer/MonthGroup.js","Home/EventContainer/YearGroup.js","Home/EventContainer/_EventContainer.js","Home/Checklist/Name.js","Home/Checklist/Progress.js","Home/Checklist/Task/Status/Icon.js","Home/Checklist/Task/Status/_Status.js","Home/Checklist/Task/TextContainer/Title.js","Home/Checklist/Task/TextContainer/Subtitle.js","Home/Checklist/Task/TextContainer/_TextContainer.js","Home/Checklist/Task/TooltipContainer.js","Home/Checklist/Task/_Task.js","Home/Checklist/_Checklist.js","Utilities/UpgradePath/featureKeysMap.js","Utilities/UpgradePath/UpgradePath.jsx","Home/_Home.js","Utilities/datetimeUtils.js","store.js","EventTypeCreator/SaveBar.js","EventTypeCreator/General/Name.js","EventTypeCreator/General/Description.js","EventTypeCreator/General/Location.js","EventTypeCreator/General/Color.js","EventTypeCreator/General/Duration.js","EventTypeCreator/General/CustomDuration.js","EventTypeCreator/General/Buffer.js","EventTypeCreator/General/RedirectionUrl.js","EventTypeCreator/General/Team.jsx","EventTypeCreator/General/_General.js","EventTypeCreator/Availability/WeekView/DayCheckbox.js","EventTypeCreator/Availability/WeekView/Range.js","EventTypeCreator/Availability/WeekView/_WeekView.js","EventTypeCreator/Availability/DisabledDates/DisabledDates.jsx","EventTypeCreator/Availability/Hop/Hop.jsx","EventTypeCreator/Availability/BookingLimit/BookingLimit.jsx","EventTypeCreator/Availability/Notice/Notice.jsx","EventTypeCreator/Availability/LastAvailable/LastAvailable.jsx","EventTypeCreator/Availability/Approval/Approval.jsx","EventTypeCreator/Availability/Calendar/Calendar.jsx","EventTypeCreator/Availability/Templates/Templates.jsx","EventTypeCreator/Availability/_Availability.js","EventTypeCreator/Notifications/Email.js","EventTypeCreator/Notifications/SalesForza.js","EventTypeCreator/Notifications/Reminders.js","EventTypeCreator/Notifications/_Notifications.js","EventTypeCreator/Surveys/Question/Header.js","EventTypeCreator/Surveys/Question/Body/Content.js","EventTypeCreator/Surveys/Question/Body/Required.js","EventTypeCreator/Surveys/Question/Body/AnswerType.js","EventTypeCreator/Surveys/Question/Body/Field/Delete.js","EventTypeCreator/Surveys/Question/Body/Field/_Field.js","EventTypeCreator/Surveys/Question/Body/Field/Add.js","EventTypeCreator/Surveys/Question/Body/Delete.js","EventTypeCreator/Surveys/Question/Body/_Body.js","EventTypeCreator/Surveys/Question/_Question.js","EventTypeCreator/Surveys/Question/SortableQuestion.js","EventTypeCreator/Surveys/Add.js","EventTypeCreator/Surveys/_Surveys.js","EventTypeCreator/Payments/Payments.js","EventTypeCreator/RoundRobin/RobinType.jsx","EventTypeCreator/RoundRobin/Member.jsx","EventTypeCreator/RoundRobin/Templates.jsx","EventTypeCreator/RoundRobin/Priorities.jsx","EventTypeCreator/RoundRobin/SelectMembers.jsx","EventTypeCreator/RoundRobin/SelectedMembers.jsx","EventTypeCreator/RoundRobin/RoundRobin.jsx","EventTypeCreator/_EventTypeCreator.js","BookingPage/Details/OwnerInfo/OwnerPic.js","BookingPage/Details/OwnerInfo/OwnerName.js","BookingPage/Details/OwnerInfo/OwnerBanner.js","BookingPage/Details/OwnerInfo/OwnerInfo.js","BookingPage/Details/EventInfo/EventName.js","BookingPage/Details/EventInfo/EventDescription.js","BookingPage/Details/EventInfo/EventLocation.js","BookingPage/Details/EventInfo/EventDuration.js","BookingPage/Details/EventInfo/Price.js","BookingPage/Details/EventInfo/EventInfo.js","Utilities/iframeUtils.js","BookingPage/Details/Details.js","BookingPage/DatePicker/DatePicker.js","BookingPage/TimezonePicker/TimezonePicker.js","BookingPage/TimePicker/TimeSlot.js","BookingPage/TimePicker/TimeSlotSkeleton.js","BookingPage/TimePicker/TimePicker.js","BookingPage/Summary/Surveys/Question/Order.js","BookingPage/Summary/Surveys/Question/Content.js","BookingPage/Summary/Surveys/Question/Required.js","BookingPage/Summary/Surveys/Question/TextAnswer.js","BookingPage/Summary/Surveys/Question/PhoneAnswer.js","BookingPage/Summary/Surveys/Question/TelegramAnswer.js","BookingPage/Summary/Surveys/Question/WhatsappAnswer.js","BookingPage/Summary/Surveys/Question/Fields/Field.js","BookingPage/Summary/Surveys/Question/Fields/_Fields.js","BookingPage/Summary/Surveys/Question/_Question.js","BookingPage/Summary/Surveys/_Surveys.js","BookingPage/Summary/Summary.js","BookingPage/Booking.js","BookingConfirmation/Header/Header.js","BookingConfirmation/Event/Name.js","BookingConfirmation/Event/Description.js","BookingConfirmation/Event/DateTime.js","BookingConfirmation/Event/Location.js","BookingConfirmation/Event/Payment.js","BookingConfirmation/Event/Event.js","BookingConfirmation/Redirect/Redirect.js","BookingConfirmation/CTAButton/CTAButton.js","BookingConfirmation/BookingConfirmation.js","Settings/Tabs/AccountTab.js","Settings/Tabs/AgencyTab.js","Settings/Tabs/SubscriptionTab.js","Settings/Tabs/NotificationsTab.jsx","Settings/Tabs/AvailabilitiesTab.jsx","Settings/Panels/FullName/FullName.js","Settings/Panels/WelcomeSentence/WelcomeSentence.js","Settings/Panels/BookingLink/BookingLink.js","Settings/Panels/AccountPanel.js","Settings/Panels/AgencyName/AgencyName.js","Settings/Panels/AgencyDescription/AgencyDescription.js","Settings/Panels/AgencyPanel.js","Settings/Panels/RedeemCode/RedeemCode.js","Settings/Panels/CurrentFeatures/CurrentFeatures.jsx","Settings/Panels/Subscription/Proration.jsx","Settings/Panels/Subscription/Subscription.js","Settings/Panels/SubscriptionPanel.js","Settings/Panels/NotificationsPanel.jsx","Settings/Panels/Availabilities/DayCheckbox.js","Settings/Panels/Availabilities/Range.js","Settings/Panels/Availabilities/WeekView.jsx","Settings/Panels/Availabilities/Hop.jsx","Settings/Panels/Availabilities/BookingLimit.jsx","Settings/Panels/Availabilities/Notice.jsx","Settings/Panels/Availabilities/LastAvailable.jsx","Settings/Panels/Availabilities/Approval.jsx","Settings/Panels/Availabilities/Calendar.jsx","Settings/Panels/Availabilities/AvailabilitiesPanel.jsx","Settings/_Settings.js","MicrosoftLogin.jsx","Landing/Passwordless/Passwordless.jsx","Landing/BentoGrid/BentoGrid.jsx","Landing/_Landing.js","PublicEvents/OwnerInfo/OwnerName.js","PublicEvents/OwnerInfo/OwnerPic.js","PublicEvents/OwnerInfo/OwnerWelcome.js","PublicEvents/OwnerInfo/_OwnerInfo.js","PublicEvents/PublicEvent/_PublicEvent.js","PublicEvents/EventTypes/_EventTypes.js","PublicEvents/_PublicEvents.js","Integrations/Zapier/Zapier.js","Integrations/Webhooks/Heading.js","Integrations/Webhooks/AddWebhook.js","Integrations/Webhooks/Partners/PartnerCard.js","Integrations/Webhooks/partners-list.js","Integrations/Webhooks/Partners/_Partners.js","Integrations/Webhooks/WebhookCard/DeleteWebhook.js","Integrations/Webhooks/WebhookCard/TestWebhook.js","Integrations/Webhooks/WebhookCard/WebhookCard.js","Integrations/Webhooks/ConnectedWebhooks.js","Integrations/Webhooks/Webhooks.js","Integrations/Zoom/Heading.js","Integrations/Zoom/ConnectZoom.js","Integrations/Zoom/DisconnectZoom.js","Integrations/Zoom/UserInfo/ProfilePic.js","Integrations/Zoom/UserInfo/FullName.js","Integrations/Zoom/UserInfo/Email.js","Integrations/Zoom/UserInfo/UserInfo.js","Integrations/Zoom/Zoom.js","Integrations/Stripe/Heading.js","Integrations/Stripe/ConnectStripe.js","Integrations/Stripe/DangerZone/DisconnectStripe.js","Integrations/Stripe/DangerZone/DisconnectAlert.js","Integrations/Stripe/DangerZone/DangerZone.js","Integrations/Stripe/UserInfo/ProfilePic.js","Integrations/Stripe/UserInfo/FullName.js","Integrations/Stripe/UserInfo/Email.js","Integrations/Stripe/UserInfo/Dashboard.js","Integrations/Stripe/UserInfo/UserInfo.js","Integrations/Stripe/Stripe.js","Integrations/SalesForza/Heading.js","Integrations/SalesForza/ConnectSalesForza.js","Integrations/SalesForza/DisconnectSalesForza.js","Integrations/SalesForza/UserInfo/ProfilePic.js","Integrations/SalesForza/UserInfo/FullName.js","Integrations/SalesForza/UserInfo/Email.js","Integrations/SalesForza/UserInfo/UserInfo.js","Integrations/SalesForza/SalesForza.jsx","Integrations/Telegram/Heading.jsx","Integrations/Telegram/Telegram.jsx","Integrations/Whatsapp/Heading.jsx","Integrations/Whatsapp/Upgrade.jsx","Integrations/Whatsapp/Credits.jsx","Integrations/Whatsapp/Checkout.jsx","Integrations/Whatsapp/Subscription.jsx","Integrations/Whatsapp/Whatsapp.jsx","Integrations/_Integrations.js","Integrations/Public/Wix/Wix.js","Embed/CopyButton.js","Embed/EmbeddedCode.js","Embed/useClickOutside.js","Embed/Options.js","Embed/PageChoice.js","Embed/_Embed.js","Team/Settings/Name.jsx","Team/Settings/Url.jsx","Team/Settings/Bio.jsx","Team/Settings/Settings.jsx","Team/MemberRow.js","Team/CopyInviteLink.jsx","Team/Checkout.jsx","Team/UpgradeModal.jsx","Team/_Team.js","Team/InvitePage/InviteControl.jsx","Team/InvitePage/InvitePage.jsx","Agency/Account.jsx","Agency/Agent.jsx","Agency/Join.jsx","Agency/Agency.jsx","Agency/InvitePage/InviteControl.jsx","Agency/InvitePage/InvitePage.jsx","Upgrade/Header/Title.jsx","Upgrade/Header/Subtitle.jsx","Upgrade/Header/Header.jsx","Upgrade/Subscription/Proration.jsx","Upgrade/Subscription/Subscription.js","Landing/PricingCard/_PricingCard.js","Upgrade/Agency/Pricing.jsx","Upgrade/Agency/LandingPage/LandingPage.jsx","Utilities/paddleAbandonedCheckoutReport.js","Upgrade/Upgrade.jsx","CalendarConnections/ConnectedCalendars/_ConnectedCalendars.jsx","CalendarConnections/AddCalendar.jsx","CalendarConnections/RemoveCalendar.jsx","CalendarConnections/ChangePermissions.jsx","CalendarConnections/SubCalendars.jsx","CalendarConnections/Calendar.jsx","CalendarConnections/_CalendarConnections.js","Onboarding/CloseOnboarding.jsx","Onboarding/User/User.jsx","Onboarding/Event/Name.jsx","Onboarding/Event/DayCheckbox.js","Onboarding/Event/Range.js","Onboarding/Event/WeekView.jsx","Onboarding/Event/GeneralAvailabilities.jsx","Onboarding/Event/Hop.jsx","Onboarding/Event/BookingLimit.jsx","Onboarding/Event/Notice.jsx","Onboarding/Event/LastAvailable.jsx","Onboarding/Event/Approval.jsx","Onboarding/Event/AdvancedAvailabilities.jsx","Onboarding/Notifications/Notifications.jsx","Onboarding/PlanFit/Checkout.jsx","Onboarding/PlanFit/CountdownTimer.jsx","Onboarding/PlanFit/PlanFit.jsx","Onboarding/Onboarding.jsx","Leads/Overview.jsx","Leads/Contacts/RatingStars.jsx","Leads/Contacts/Details.jsx","Leads/Contacts/Filters.jsx","Leads/Contacts/GoogleContacts.jsx","Leads/Contacts/NoteInput.jsx","Leads/Contacts/Contacts.jsx","Leads/Leads.jsx","Utilities/ScrollToTop.js","App.js","serviceWorker.js","index.js"],"names":["DEBUG","window","location","hostname","CLIENT","Amplify","configure","Auth","region","userPoolId","userPoolWebClientId","mandatorySignIn","login","params","path","arguments","length","undefined","toast","loading","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","lng","localStorage","getItem","language","be","post","then","async","id","key","response","console","info","concat","cognitoUser","AmplifyAuth","signIn","setItem","JSON","stringify","access","_accessObj","get","profileObj","needsOnboard","history","pushState","href","catch","e","message","removeItem","getUserInfo","_challengeResult","_challengeResult$sign","_challengeResult$sign2","_challengeResult$sign3","_challengeResult$sign4","access_token","signInUserSession","accessToken","jwtToken","refresh_token","refreshToken","token","createAccessObj","parse","Promise","resolve","error","reject","dismiss","refresh","currentAuthenticatedUser","currentSession","refreshSession","session","accessObj","_refreshResponse","_refreshResponse$acce","_refreshResponse$refr","logout","cognitoStorage","storage","Object","keys","map","startsWith","parseJwt","base64","split","replace","jsonPayload","decodeURIComponent","atob","c","charCodeAt","toString","slice","join","getExp","exp","this","Date","parseInt","sessionExist","warn","getSession","isAuthenticated","getAccessToken","getUsername","_session$profileObj","username","getName","_session$profileObj2","_session$profileObj3","_session$profileObj4","_session$profileObj5","slugName","_session$profileObj6","getFullName","_session$profileObj7","name","getEmail","_session$profileObj8","email","getPic","_session$profileObj9","pic","getBanner","_session$profileObj10","_session$profileObj11","companyLogo","getRole","_session$profileObj12","_session$profileObj13","planStatus","status","getAgencyId","_session$profileObj14","agencyId","getAgent","_session$profileObj15","agent","getTimezone","_session$profileObj16","getLanguage","_session$profileObj17","substring","getVendor","_session$profileObj18","vendor","getExpiration","_session$profileObj19","_session$profileObj20","expiration","_this$getSession","_this$getSession$acce","getRefreshToken","_this$getSession2","_this$getSession2$acc","isFree","isTrial","isPremium","isLifetime","logWithSentry","_ref","category","level","data","Sentry","getProperty","_ref2","storageKey","fallback","callback","Array","isArray","TypeError","rawSession","value","reduce","acc","setProperty","_ref3","valueToSet","current","forEach","index","UpgradeBadge","featureName","userPlan","auth","isLocked","nextPlan","getFeatureAccessInfo","planOrder","userPlanIndex","indexOf","featurePlans","features","includes","availablePlans","filter","plan","_jsx","className","children","ProfilePic","t","useTranslation","profileObjPic","selectedFile","setSelectedFile","useState","selectedFileUrl","setSelectedFileUrl","editMode","setEditMode","preview","setPreview","zoomScale","setZoomScale","submitting","setSubmitting","editor","useRef","fileInput","_jsxs","Row","Col","xs","md","AvatarEditor","ref","image","width","height","border","borderRadius","scale","rotate","Form","Label","Range","min","max","defaultValue","onChange","target","Button","disabled","variant","size","onClick","dataUrl","getImage","toDataURL","result","fetch","blob","URL","createObjectURL","arrayBuffer","buffer","Buffer","from","md5Digest","md5","log","bytes","decimals","dm","i","Math","floor","parseFloat","pow","toFixed","formatBytes","contentMd5","formData","FormData","fields","append","axios","url","headers","await","ms","setTimeout","Spinner","animation","_Fragment","alt","src","enterEditMode","document","getElementById","click","type","accept","files","savedBanner","offsetWidth","Pic","canEdit","isEditing","setIsEditing","isLoading","setIsLoading","viewBox","fill","d","handleEditClick","file","API","endpoints","endpoint","service","_endpoint","_classPrivateFieldLooseKey","constructor","defineProperty","writable","_classPrivateFieldLooseBase","check_env","AmplifyConfDev","AmplifyConfProd","getAccountIdFromLocalStorage","agentSession","accountId","apiName","queryParams","needsAuth","sameEnv","useAxiosResponse","config","queryStringParameters","Authorization","body","patch","del","resources","en","EN","it","IT","es","ES","de","DE","fr","FR","i18n","use","initReactI18next","LanguageDetector","init","fallbackLng","detection","order","lookupQuerystring","lookupLocalStorage","lookupSessionStorage","lookupFromPathIndex","lookupFromSubdomainIndex","caches","interpolation","escapeValue","changeLanguage","UserContext","createContext","UserProvider","props","user","setUser","logged","isImpersonated","impersonatingAgent","useEffect","impersonationStatus","agentInfo","fullName","checkForImpersonation","fetchStatus","Provider","ThemeContext","ThemeProvider","getCurrentTheme","getAttribute","theme","setTheme","Logout","Privacy","tidioChatApi","show","title","style","margin","Refund","Terms","ReactGA","send","hitType","page","Brand","LifetimeMessage","Fallback","STANDARD_CLIENT_ID","Login","redirect","setLoggingProvider","clientId","GoogleOAuthProvider","GoogleLogin","click_listener","onSuccess","idToken","credentialResponse","credential","pathname","onError","useOneTap","Shortcuts","useLocation","borderStyle","borderBottom","Nav","Item","Link","to","UserPic","UserName","UserStatus","role","fontSize","_role","getPlanColor","setDomTheme","root","html","setAttribute","_ProfileMenu","themeButtonStyle","background","padding","textAlign","useContext","copied","setCopied","publicAddress","protocol","host","fontStyle","marginRight","fontWeight","CopyToClipboard","text","onCopy","cursor","Dropdown","align","as","NavItem","Toggle","NavLink","Menu","zIndex","sm","rel","toLowerCase","Divider","Navbar_","setAgent","impersonationUI","setImpersonationUI","NewNavbar","calendbookUI","Navbar","Logo","LogoFull","collapseOnSelect","expand","Container","fluid","ProfileMenu","Collapse","links","_id","element","Error","scrollIntoView","behavior","block","inline","scrollTo","newTab","Sidebar","isSidebarExpanded","setIsSidebarExpanded","isMobile","useMediaQuery","query","logoColor","Logotype","userFullName","userPic","userAgency","userSlug","menuItems","iconClass","label","condition","fillColor","item","isActive","color","navigator","clipboard","writeText","err","_Footer","switchLng","setUserLanguage","languageToggle","React","forwardRef","preventDefault","backgroundColor","bottom","lg","marginBottom","textDecoration","getFullYear","_ViewToggler","activeView","toggleView","defaultChecked","htmlFor","Color","enabled","Settings","secret","DropdownButton","key_param","push","secretEvent","enableEvent","deleteEvent","newName","duplicateEvent","componentStyle","Name","isPaidEvent","Up","publicPage","Duration","duration","Private","borderColor","overflow","maxWidth","textOverflow","whiteSpace","str","n","substr","Team","DisabledReason","reason","Middle","team","Location","CopyLinkButton","Component","state","setState","render","radixUrl","proto","fullUrl","Edit","Down","EnableEventButton","EventType_","super","_this$state","_this$state2","isTeam","ConnectionAlert","useHistory","Alert","Heading","_EventTypeContainer","_props$connections","eventTypes","connections","connectedCalendars","EventType","getUserLanguage","getSpacetimeObject","time","hours","minutes","now","spacetime","hour","minute","formatTime","displayTime","format","Time","startTime","endTime","add","getEndTime","displayStartTime","displayEndTime","display","verticalAlign","lineHeight","pillStyle","Guest","amount","currency","pendingReason","action","Badge","pill","bg","replaceAll","frontendFormatter","number","Number","Delete","deleteAlert","setDeleteAlert","class","SweetAlert","warning","showCancel","confirmBtnText","cancelBtnText","confirmBtnStyle","boxShadow","confirmBtnBsStyle","cancelBtnBsStyle","onConfirm","bookingid","onCancel","getSymbolFromCurrency","Reschedule","guestName","guestMail","Host","hostName","hostMail","locationValue","DOMPurify","sanitize","dangerouslySetInnerHTML","__html","Price","Notes","notes","Content","content","Answer","questionType","getFieldsArray","_fields","_questionType","field","Surveys","answers","bookingId","etype","_answers$key","answer","buttonStyle","EventApproval","loadingAccept","setLoadingAccept","loadingReject","setLoadingReject","_bookingId","acceptEvent","rejectEvent","Details","_details$assignedMemb","_details$assignedMemb2","_details$paidEvent","_details$paidEvent2","_details$paidEvent3","_details$paidEvent4","details","guestname","guestmail","assignedMember","gCalInfo","GCalInfo","paidEvent","eventname","bookingPendingReason","marginLeft","colorStyler","generalInfoStyle","marginTop","generalInfoSubStyle","detailsStyle","accordionToggleStyle","CustomToggle","eventKey","decoratedOnClick","useAccordionButton","Event","collapsed","setCollapsed","Accordion","defaultActiveKey","displayName","transition","dayStyle","dayNumberStyle","weekdayStyle","textTransform","dayScheduleContainer","getWeekday","year","month","day","date","toLocaleString","weekday","DayGroup","daySchedules","daySchedulesArray","pending","headerStyle","rulerStyle","getMonthName","userLanguage","tmpDate","setMonth","MonthGroup","monthName","monthDates","monthDatesArray","sort","YearGroup","yearDates","_EventContainer","groupedDates","dates","datesArray","appointments","appointment","groupDates","groupedDatesArray","Progress","completed","total","Icon","Status","Title","taskNumber","Subtitle","TextContainer","TooltipContainer","tooltip","OverlayTrigger","trigger","overlay","Tooltip","Task","Checklist","_checklist$tasks","checklist","tasks","task","featureKeysMap","embed","webhooks","zoom","stripe","salesforza","UpgradePath","position","blur","customWidth","showModal","setShowModal","translationKey","featureTitle","featureSubtitle","handleCloseModal","tabIndex","xmlns","stroke","strokeLinecap","strokeLinejoin","strokeWidth","_Home","view","upcomings","pendingUpcomings","pendingUpcomingsLength","loadingEventTypes","loadingUpcomings","loadingChecklist","loadingConnections","activeTab","bind","componentDidMount","_response$meta","_response$meta$pendin","meta","count","_this$state3","_this$state4","_this$state5","EventTypes","Upcomings","PendingUpcomings","PendingUpcomingsLength","Connections","MediaQuery","ViewToggler","Tabs","activeKey","onSelect","k","Tab","EventContainer","Translation","ns","EventTypeContainer","minWidth","getHoursInt","timeString","appendLeadingZeroes","getMillisecondsFromString","setHours","getMinutesInt","getTime","getStringFromMilliseconds","milliseconds","getHours","getMinutes","addMinutes","minutesSpan","immer","set","api","partial","nextState","produce","createNestedObject","base","names","calendarConnectionsStore","calendarsList","maxCalendars","setCalendarsList","calendars","setConnectedCalendars","connected","setMaxCalendars","setCalendarSync","sync","setCalendarAccess","subIndex","subCalendars","setCalendarPic","calendarPic","setCalendarConnectionStatus","connectionStatus","setCalendarEmail","addCalendar","calendar","deleteCalendar","x","setSubCalendarEnabled","calendarIndex","subCalendarIndex","bool","webhooksConnectionsStore","webhooksList","setWebhooksList","addWebhook","webhook","hook","deleteWebhook","createEventTypeStore","editKey","general","General","availability","Availability","notifications","Notifications","surveys","roundRobin","RoundRobin","setEditKey","_key","setGeneral","_general","setAvailability","_availability","setNotifications","_notifications","setSurveys","_surveys","setPaidEvent","_paidEvent","setRoundRobin","_roundRobin","setName","_name","setDescription","_description","description","setLocation","_location","setColor","_color","setDuration","_duration","setPrevBuffer","_buffer","prevBuffer","setNextBuffer","nextBuffer","setRedirectionUrl","_url","redirectionUrl","setTeam","_isTeam","setBookingType","_bookingType","bookingType","toggleDayAvailability","_day","template","days","ranges","interval","start","end","wday","fixedInterval","previousEnd","newEnd","utils","setDayRange","_index","_interval","deleteDayRange","newRanges","splice","addDisabledDateRange","disabledDateRaw","setDisabledDateStart","setDisabledDateEnd","removeDisabledDateRange","setTimeslotHop","_hop","hop","setBookingLimitQuantity","_quantity","bookingLimit","quantity","setBookingLimitUnit","_unit","unit","setNoticeQuantity","notice","setNoticeUnit","setLastAvailabilityDate","_date","lastAvailability","setLastAvailabilityTime","_time","setApproval","_needsApproval","needsApproval","setCalendar","_calendar","setEmailNotification","_email","guest","setSalesforza","_bool","setReminder","_reminder","reminders","addReminder","deleteReminder","newReminders","addQuestion","newKey","customAlphabet","nanoid","len","localSurveys","deleteQuestion","_order","setQuestionContent","_content","setQuestionRequired","required","setQuestionType","_type","qstFields","setFieldContent","_questionId","_fieldId","deleteField","addField","setPrice","_price","setPriceId","_priceId","setProductId","_productId","setSelectedTemplate","_template","setRobinType","robinType","getRobinMembers","setRobinMembers","newMembers","setRobinMember","_member","addRobinMember","_memberKey","_memberProperties","deleteRobinMember","setRobinMemberTemplate","setRobinMemberPriority","_priority","createBookingStore","timeFormat","timeSlots","summary","surveyAnswers","setGuestDay","setGuestTime","setGuestTimeFormat","_timeFormat","setGuestTimezone","_timezone","setGuestName","setGuestEmail","setGuestNotes","_notes","setGuestSatellite","_satellite","satellite","setGuestReason","_reason","setDetails","_details","setTimeSlots","_timeSlots","setSummary","_summary","setSurveyAnswers","_answers","setTextAnswer","_value","updateTextAnswer","setRadioAnswer","updateRadioAnswer","answerValue","setCheckboxAnswer","_isChecked","hasOwnProperty","updateCheckboxAnswer","iframeStore","shouldShowNavs","setShouldShowNavs","devtools","useCreateBookingStore","create","useCreateEventTypeStore","useCalendarConnectionsStore","useWebhooksConnectionsStore","useIframeStore","SaveBar","backButton","saving","BackButton","SaveButton","Group","controlId","column","Control","maxLength","Description","col","_general$location3","_general$location4","_general$location5","_general$location6","_general$location7","_general$location8","setConnectionStatus","connectLink","setConnectLink","_general$location","partialState","checkConnectionStatus","_locationType","calendarStatus","handleLocationTypeChange","event","locationDisplayName","custom","googleMeet","InputGroup","flexWrap","_general$location2","Check","CustomDuration","checked","Select","RedirectionUrl","placeholder","Card","Header","Body","DayCheckbox","rangeState","TimeField","colon","WeekView","dayIndex","range","rangeIndex","DisabledDates","dateRanges","setDateRanges","errorMessages","setErrorMessages","maxRangesMessage","setMaxRangesMessage","addDateRange","handleDateRangeChange","updatedRange","errorMessage","newDateRanges","newErrorMessages","_","idx","removeDateRange","Hop","determineMaxQuantity","Notice","_availability$booking","_availability$booking2","minQuantity","setMinQuantity","maxQuantity","setMaxQuantity","getUnit","_document$getElementB","inputValue","disableBookingLimit","_availability$notice","_availability$notice2","disableNotice","LastAvailable","_availability$lastAva","_availability$lastAva2","disableLastAvailableDate","Calendar","availableCalendars","setAvailableCalendars","setLoading","getAvailableCalendars","Templates","loadingTemplates","setLoadingTemplates","templates","setTemplates","selectedTemplate","getAvailabilityTemplates","templateKey","radius","outline","handleTemplateSelection","buttonText","iconStyle","iconOnly","open","setTimeFormat","BookingLimit","Approval","Email","_notifications$notifi","SalesForza","determineMinQuantity","Reminders","_notifications$remind4","_notifications$remind5","_notifications$remind6","_notifications$remind","_notifications$remind2","_notifications$remind3","method","_e$target","_document$getElementB2","_document$getElementB3","_document$getElementB4","_e$target2","_document$getElementB5","_document$getElementB6","_e$target3","reminder","getType","Required","AnswerType","chosenType","existingQuestions","editing","shouldDisplay","_chosenType","getVariant","questionId","fieldId","Field","fieldContent","existingFields","Add","Question","SortableQuestion","attributes","listeners","setNodeRef","transform","useSortable","touchAction","CSS","Transform","sensors","useSensors","useSensor","MouseSensor","activationConstraint","distance","TouchSensor","delay","tolerance","DndContext","collisionDetection","closestCenter","onDragEnd","active","over","surveysArray","entries","activeIndex","findIndex","overIndex","arrayMove","survey","newSurveys","rest","SortableContext","items","strategy","verticalListSortingStrategy","_surveys$key","Payments","stripeUser","setStripeUser","loadingStripeUser","setLoadingStripeUser","loadingPriceChange","setLoadingPriceChange","setStatus","getStripeUserProfile","createPayment","createEventKey","eventName","productId","priceId","responseFeedbackStyle","Text","CurrencyInput","decimalSeparator","groupSeparator","onValueChange","decimal","_number","backendFormatter","onBlur","paddingLeft","RobinType","handleRobinTypeChange","isChecked","Member","member","getMemberTemplates","styles","control","baseStyles","minHeight","singleValue","menu","option","isFocused","options","onMenuOpen","Priorities","priority","handlePrioritySelection","selectStyle","SelectMembers","availableMembers","setAvailableMembers","loadingMembers","setLoadingMembers","_availableMembers","alignItems","memberKey","selectedOption","memberProperties","find","getUserByKey","SelectedMembers","members","selectedTemplates","setSelectedTemplates","prevTemplates","prevSelectedTemplates","_roundRobin$member$us","_roundRobin$member$us2","_roundRobin$member$us3","availability_template","_state$roundRobin","_state$roundRobin$con","selectedMembers","setSelectedMembers","RoundRobinMock","transformRoundRobinMembers","EventTypeCreator","_props$location$state","eventTypeKey","setExistingQuestions","setExistingFields","setSaving","_props$location","_props$location$state2","eventTypeBody","surveyBody","advanced","tempQuestions","tempFields","temp","GeneralMock","AvailabilityMock","NotificationsMock","loadEventType","paymentsElement","onSubmit","editkey","hasSurveys","alert","OwnerPic","hasBanner","OwnerName","OwnerBanner","OwnerInfo","owner","top","left","EventName","toHyperlink","EventDescription","EventLocation","EventDuration","payment","EventInfo","isIframe","parent","getIframeReferrer","URLSearchParams","search","setBookingStep","stylingParams","backgroundDetailsStyle","textColorDetailsStyle","backgroundDetailsScheduleButtonStyle","textColorDetailsScheduleButtonStyle","detailsScheduleButton","DatePicker","_storeGuest$timezone2","_storeCalendar$availa","_storeCalendar$availa2","_storeCalendar$availa3","_storeCalendar$availa4","_storeCalendar$availa5","eventType","mode","loadingInfo","setLoadingInfo","infoResponseStatus","setInfoResponseStatus","selectedMonth","setSelectedMonth","storeCalendar","storeGuest","_storeGuest$timezone","textColorDateStyle","backgroundNavigationStyle","textColorNavigationStyle","textColorWeekdaysStyle","backgroundDayStyle","textColorDayStyle","borderDayStyle","backgroundActiveDayStyle","textColorActiveDayStyle","borderActiveDayStyle","createElement","styleString","innerHTML","head","appendChild","timezoneToSend","goto","getCalendarInfo","_username","_eventType","ownerUsername","firstAvailableDate","_error$response","getMinDate","_firstAvailableDate","lastAvailableDate","weeklyAvailability","weekly","weekDays","disabledDates","tileDisabled","locale","prev2Label","next2Label","minDetail","minDate","maxDate","_lastAvailableDate","onClickDay","onActiveStartDateChange","activeStartDate","getDisabledDates","_week","_disabled","months","some","dayslength","getSelectedDate","TimezonePicker","menuIsOpen","setMenuIsOpen","manualSelection","setManualSelection","backgroundMenuStyle","textColorMenuStyle","backgroundActiveMenuStyle","input","getTimezoneObject","l","toUpperCase","offset","displayOffset","h","String","trunc","padStart","abs","round","hoursToHHMM","timezones","storageTimezone","_timezones","getTimezoneOptions","onMenuClose","TimeSlot","dummy","datetime","TimeSlotSkeleton","TimePicker","cancelling","storeTimeSlots","backgroundStyle","textColorStyle","textColorActiveStyle","bookingDate","getTimeSlots","TimeFormatButtons","TimeSlotDisplay","slotList","Order","TextAnswer","_summary$surveys$ques","PhoneAnswer","PhoneInput","international","countryCallingCodeEditable","CustomMaskInput","mask","blocks","onAccept","IMaskInput","unmask","TelegramAnswer","tg","WhatsappAnswer","handleRescheduleChange","handleChange","Fields","isRequired","_required","_answersArray","fieldType","answersArray","questionState","storeSummary","hasQuestions","Summary","_storeDetails$event17","urlBookingId","storeDetails","storeAnswers","submitResponseStatus","setSubmitResponseStatus","loadingSubmit","setLoadingSubmit","searchParams","getSummary","_event","bookingDateTime","scope","setTransactionName","dateFormatted","toLocaleDateString","formatDate","booking_id","guestEmail","guestTimezone","paid","_response$data","_storeDetails$owner","_storeDetails$event","_storeDetails$event2","_storeDetails$event3","_storeDetails$event4","_storeDetails$event5","_storeDetails$event6","confirmationState","_error$response2","_storeDetails$owner2","_storeDetails$event7","_storeDetails$event8","_storeDetails$event9","_storeGuest$timezone3","_storeDetails$event10","_storeDetails$event11","success","_error$response3","_storeDetails$owner3","_storeDetails$event12","_storeDetails$event13","_storeDetails$event14","_storeGuest$timezone4","_storeDetails$event15","_storeDetails$event16","deleted","_error$response4","xl","rows","Booking","hide","isDesktop","urlUsername","match","urlEventType","bookingStep","setStylingParams","setKeyValueStyle","prevState","backgroundPageStyle","backgroundComponentsStyle","textColorComponentsStyle","accentComponentsStyle","_response$booked","booked","getBookedInfo","getBookingInfo","isEmbed","stageRenderer","_stage","_storeGuest","_loading","_mode","Toaster","titleStyle","subtitleStyle","getTimezoneLongName","timezoneData","getTimeZones","tz","alternativeName","isAmpm","DateTime","displayDate","Payment","Redirect","CTAButton","loggedIn","isIframePage","BookingConfirmation","bookingData","setBookingData","setError","titleSuffix","Toast","closeButton","AccountTab","SubscriptionTab","NotificationsTab","AvailabilitiesTab","FullName","setFullName","processing","setProcessing","isValidName","test","noValidate","validated","r","_e$response","stopPropagation","hasValidation","FormControl","isInvalid","Feedback","WelcomeSentence","welcomeSentence","setWelcomeSentence","getWelcomeSentence","sentence","inputText","float","BookingLink","setUserSlug","isValidSlug","formattedSlug","slug","AccountPanel","selectedTimezone","setSelectedTimezone","setOwnerTimezone","getUserTimezone","revokeAlert","setRevokeAlert","Pane","Banner","ButtonGroup","absolute","handleTimezoneChange","deleteAccount","reverseButtons","focusCancelBtn","AgencyName","agency","setAgency","agencyName","agencyDescription","AgencyPanel","getAgency","profilePic","AgencyDescription","RedeemCode","lifetimeCode","setLifetimeCode","minLength","redeemCode","reload","CurrentFeatures","Proration","onHide","prorationDetails","confirmLoading","setConfirmLoading","confirmSuccess","setConfirmSuccess","confirmError","setConfirmError","Modal","centered","Footer","LIVE_YEARLY_PROFESSIONAL","Subscription","loadingSubscription","subscription","setSubscriptionsLoading","getSubscriptions","loadingSeatsDecreasePreview","setLoadingSeatsDecreasePreview","loadingSeatsIncreasePreview","setLoadingSeatsIncreasePreview","loadingUpgradePreview","setLoadingUpgradePreview","showProrationModal","setShowProrationModal","setProrationDetails","seatsPreview","_seats","_action","seatsNumber","previewSeatsNumber","updateObj","currency_code","obj","values","every","planName","billingCycle","availableSeats","nextPaymentDate","scheduledCancelAt","cancelSubscriptionUrl","updatePaymentMethodUrl","fillRule","clipRule","_cadency","getUpgradePriceId","SubscriptionPanel","PricingCard","setSubscription","paddle","setPaddle","customerId","setCustomerId","pricingCadency","setPricingCadency","reference","checkForAdditionalFields","initializePaddle","environment","checkout","settings","displayMode","eventCallback","_data$data","_data$data2","_data$data2$items$","_data$data2$items$$pr","_data$data3","_data$data3$items$","product","price_id","sendAbandonedCartEvent","go","paddleInstance","openCheckout","checkoutObj","_product","getSubscriptionPriceId","customData","tolt_referral","Checkout","price","cadency","WhatsappIcon","TelegramIcon","EmailIcon","editButtonStyle","NotificationsPanel","_notifications$whatsa","_notifications$whatsa2","_notifications$whatsa3","_notifications$telegr","_notifications$telegr2","_notifications$telegr3","_notifications$email","_notifications$email2","_notifications$email3","getNotifications","saveNotification","provider","_provider","Action","icon","justifyContent","whatsapp","broker","telegram","AvailabilitiesPanel","_templates$selectedTe","creatingTemplate","setCreatingTemplate","newTemplate","setNewTemplate","deleting","setDeleting","CBButton","updateTemplateState","templateId","updater","updatedTemplate","prevTemplate","updatedDays","updatedRanges","handleNewTemplateName","saveTemplate","templateToSave","newTemplateKey","deleteTemplate","templateToDelete","remainingTemplates","newSelectedTemplate","deleteTemplateState","handleTemplateCreation","_Settings","tab","AgencyTab","msLogoStyle","textStyle","MicrosoftLogin","qsMsCode","code","microsoftLogin","Passwordless","setEmail","urlEmail","setUrlEmail","urlToken","setUrlToken","stage","setStage","qsParams","qsEmail","qsToken","_token","challengeResult","sendCustomChallengeAnswer","answerCustomChallenge","loadCustomChallenge","BE","isValidEmail","validate","statusText","BentoGrid","boxes","imgSrc","additionalClasses","box","_Landing","ComparisonTable","loggingProvider","TypeAnimation","sequence","preRenderFirstString","speed","repeat","Infinity","flexDirection","YouTube","videoId","containerClassName","rightIconStyle","showRightIcon","discount","plans","free","premium","professional","OwnerWelcome","isExpanded","setIsExpanded","sentenceShort","toggleText","_OwnerInfo","_props$ownerInfo","_props$ownerInfo2","_props$ownerInfo3","_props$ownerInfo4","_props$ownerInfo5","_props$ownerInfo6","ownerInfo","bannerPic","_PublicEvent","WebkitLineClamp","WebkitBoxOrient","_EventTypes","_PublicEvents","setEventTypes","setOwnerInfo","getPublicEvents","cx","cy","Zapier","script","stylesheet","fontFamily","AddWebhook","validateForm","setValidateForm","webHookStatus","setWebHookStatus","selectedTrigger","setSelectedTrigger","webHookUrl","setWebHookUrl","currentTarget","checkValidity","PartnerCard","partnerName","partnerData","letterSpacing","link","partners","standard","light","dark","make","integrately","pabbly","konnectzit","syncspider","Partners","partnerKey","DeleteWebhook","deleteWebhookStore","_hook","deleteWebHook","TestWebhook","testWebHook","clasName","checkProvider","_supportedProviders","WebhookCard","hookName","getProvider","urlComponents","ConnectedWebhooks","getConnectedWebhooks","Webhooks","ConnectZoom","zoomLink","setZoomLink","DisconnectZoom","zoomUser","setZoomUser","UserInfo","picUrl","Zoom","ZoomUser","isMounted","isConnected","_obj","ConnectStripe","selectedCountry","setSelectedCountry","stripeOnboarding","setStripeOnboarding","selection","placement","screen","country","assign","frameborder","allow","allowfullscreen","DisconnectStripe","toggleShowDisconnectAlert","DisconnectAlert","showDisconnectAlert","disconnectStripe","disconnecting","onClose","DangerZone","setShowDisconnectAlert","setDisconnecting","calendbookPic","Dashboard","dashboardUrl","Stripe","ConnectSalesForza","setSalesForzaUser","_e$response2","DisconnectSalesForza","salesForzaUser","ResponseFeedback","Telegram","setTelegram","handle","getTelegram","Upgrade","routeChange","Credits","credits","messageColor","currentPriceId","cancel","update","cardStyle","Whatsapp","setWhatsapp","setCredits","setCurrentPriceId","cancelLink","setCancelLink","updateLink","setUpdateLink","cancelUrl","updatePaymentUrl","getWhatsapp","Integrations","CalendBookPage","CopyButton","copyCode","EmbeddedCode","useClickOutside","handler","startedInside","startedWhenMounted","listener","contains","validateEventStart","addEventListener","removeEventListener","Options","isBorder","setBorder","isResponsive","setResponsive","setFixed","hideDetails","setHideDetails","popover","isOpen","toggle","close","useCallback","Switch","HexColorInput","HexColorPicker","PageChoice","setSelectedLink","hexToRgb","hex","exec","Embed","setLoadingEventTypes","selectedLink","setWidth","setHeight","embedCode","getEventTypes","editedName","setEditedName","autoFocus","Url","editedUrl","setEditedUrl","setErrorMessage","copySuccess","setCopySuccess","handleCopy","Bio","bio","editedBio","setEditedBio","teamSettings","setTeamSettings","loadingSettings","setLoadingSettings","fetchTeamSettings","teamName","teamUrl","teamBio","MemberRow","canUpgrade","canPromoteList","viewerRole","removeMember","selectedRole","setSelectedRole","initFlowbite","newRole","handleChangeRole","CopyInviteLink","inviteLink","copyLink","showCheckout","setShowCheckout","getTeamStatus","setView","hash","UpgradeModal","teamId","showUpgrade","setShowUpgrade","upgradableMembers","setUpgradableMembers","billingAmount","setBillingAmount","billingCurrency","setBillingCurrency","loadingBilling","setLoadingBilling","loadingUpgrade","setLoadingUpgrade","upgradeSuccess","setUpgradeSuccess","upgradeError","setUpgradeError","initialSelectedMembers","fetchBillingAmount","fetchUpgradableMembers","operation","updatedSelectedMembers","handleCheckboxChange","teamStatus","setTeamStatus","seats","occupied","pageLoading","setPageLoading","invitingMember","setInvitingMember","validatedForm","setValidatedForm","newMember","setNewMember","invitationLink","totalMembers","InviteControl","_teamInvite$owner","_teamInvite$owner2","inviteId","teamInvite","setTeamInvite","acceptLoading","setAcceptLoading","declineLoading","setDeclineLoading","inviteResponse","setInviteResponse","mockResponse","profile_pic","fetchData","handleResponse","accepted","_error$response$data","InvitePage","Account","switchingToAccount","switchToAccount","deletingAccount","isConfirmingDelete","setIsConfirmingDelete","handleDeleteClick","Agent","onSwitch","isSwitching","Join","joinLink","STANDARD_TEXT","setButtonText","copyToClipboard","Agency","activeAccountId","setActiveAccountId","switchingToAgent","setSwitchingToAgent","setSwitchingToAccount","setDeletingAccount","setData","accountExists","accounts","account","prevData","agencyOccupied","agencySeats","setAgencyName","agentUsername","setAgentUsername","setProfilePic","setAgencyDescription","inviteeId","_PricingCard","isTabletOrMobile","check","cross","FeatureOverlay","planDisplayName","limited","CTALink","hideCTA","feature","Pricing","ToggleButtonGroup","ToggleButton","companySeats","agents","companyTeamSeats","LandingPage","upgradeSectionRef","scrollToUpgradeSection","UpgradeSection","HeroSection","ProblemSolution","HowItWorks","USPSection","FaRocket","FaPuzzlePiece","FaUserShield","PricingStrategy","FAQSection","createReport","eventData","currentPage","userEmail","userName","userTimezone","_d$items","_d$customer$email","_d$customer","_d$id","_d$transaction_id","_d$status","_item$product$name","_item$product","_item$price_name","_item$billing_cycle$f","_item$billing_cycle","_item$billing_cycle$i","_item$billing_cycle2","_item$totals$subtotal","_item$totals","_d$currency_code","_item$totals$tax","_item$totals2","_d$currency_code2","_item$totals$total","_item$totals3","_d$currency_code3","customer","transaction_id","price_name","billing_cycle","frequency","totals","subtotal","tax","_w$type","_w$code","_w$detail","_w$documentation_url","w","detail","documentation_url","errors","_err$field","_err$message","_e$type","_e$code","_e$detail","_e$documentation_url","_d$items2","_d$customer$email2","_d$customer2","_d$id2","_d$transaction_id2","_d$status2","_d$currency_code4","_d$payment$method_det","_d$payment","_d$payment$method_det2","primaryItem","_primaryItem$product$","_primaryItem$product","_primaryItem$quantity","_primaryItem$totals$s","_primaryItem$totals","_d$currency_code5","_primaryItem$totals$t","_primaryItem$totals2","_d$currency_code6","_primaryItem$totals$d","_primaryItem$totals3","_d$currency_code7","_primaryItem$totals$t2","_primaryItem$totals4","_d$currency_code8","_d$discount$id","_d$discount$code","method_details","_data$data$items","_data$data$items$","_data$data$items$$pro","_data$data2$items","_data$data3$items","_data$data3$items$$pr","_data$data4","_data$data4$items","_data$data4$items$","_data$data5","_data$data5$items","_data$data5$items$","_data$data5$items$$pr","_data$data6","_data$data6$items","_data$data6$items$","_data$data7","_data$data7$items","_data$data7$items$","_data$data7$items$$pr","_data$data8","_data$data8$items","_data$data8$items$","eventMessage","ConnectedCalendars","AddCalendar","addCalendarStore","statusCode","setStatusCode","_code","loaded","useGoogleLogin","uxMode","accessType","redirectUri","cookiePolicy","responseType","RemoveCalendar","disconnectCalendar","ChangePermissions","subCalendarId","loadingPermissions","setLoadingPermissions","changeCalendarAccess","_subIndex","_subCalendarId","currentAccess","newAccess","_access","toggleCheckConflictsInCalendar","shouldCheck","getLabel","SubCalendars","nowLoading","setNowLoading","toggleSubCalendar","_enabled","transitionOrigin","subCalendar","_calendars$index","_calendars$index$subC","_calendars$index2","setCalendars","stopLight","CalendarConnections","referrer","getCalendarConnections","CloseOnboarding","paddingBottom","closeOnboarding","User","industry","setIndustry","teamSize","setTeamSize","setEventName","GeneralAvailabilities","AdvancedAvailabilities","prevAvailability","discountId","sleep","frameTarget","frameStyle","frameHeight","_discountId","CountdownTimer","expirationDate","timeLeft","setTimeLeft","seconds","timerId","setInterval","updateTimer","clearInterval","PlanFit","setPlan","getPlanFit","discountCode","discountAmount","Onboarding","Overview","_overview$history","showPlan","setShowPlan","overview","setOverview","getOverview","RatingStars","contact","rating","savingRating","starLightClass","_starIndex","_rating","baseClass","renderStar","_contactDetails$prope","_contactDetails$prope2","_contactDetails$prope3","_contactDetails$prope4","_contactDetails$prope5","_contactDetails$prope6","_contactDetails$prope7","_contactDetails$prope8","_contactDetails$prope9","_contactDetails$prope10","contactsCache","showDrawer","setShowDrawer","setRating","contactDetails","setContactDetails","formattedDate","formattedTime","toLocaleTimeString","hour12","_contact","fetchContactDetails","properties","acquisitionDate","lang","timelineEvents","_contactDetails$timel","_contactDetails$timel2","_contactDetails$timel3","_contactDetails$timel4","_contactDetails$timel5","_contactDetails$timel6","_contactDetails$timel7","_contactDetails$timel8","_contactDetails$timel9","_contactDetails$timel10","_contactDetails$timel11","_contactDetails$timel12","_contactDetails$timel13","_contactDetails$timel14","_contactDetails$timel15","_contactDetails$timel16","_contactDetails$timel17","_contactDetails$timel18","_contactDetails$timel19","_contactDetails$timel20","_contactDetails$timel21","_contactDetails$timel22","_contactDetails$timel23","_contactDetails$timel24","_contactDetails$timel25","_contactDetails$timel26","_contactDetails$timel27","_contactDetails$timel28","metaBooking","paidAmount","Filters","actionFilter","handleActionFilterChange","showContacts","handleShowContactsChange","ratingFilter","handleRatingFilterChange","isProd","_e$target4","_e$target5","_e$target6","_e$target7","_e$target8","star","GoogleContacts","imported","setImported","backendSync","flow","NoteInput","contactId","initialNote","saveNote","note","setNote","timerRef","clearTimeout","Contacts","_currentContacts$","_currentContacts$3","_currentContacts$4","setSavingRating","selectedContact","setSelectedContact","copiedContact","setCopiedContact","setContactsCache","totalContacts","setTotalContacts","pageLimit","setPageLimit","setActionFilter","setRatingFilter","setShowContacts","setCurrentPage","pageIndices","setPageIndices","hasMore","setHasMore","fetchContactsForPage","pageIndex","limit","nextPageIndex","prevContacts","contactsMap","Map","prevPageIndices","newPageIndices","finally","saveContactNote","noteValue","shortNote","parseAction","displayString","_ratingContact","_newRating","saveContactRating","startIndex","endIndex","currentContacts","skeletonArray","contacts","normalizedContact","trim","foundContact","getRatingByContact","_filter","retentionDayLeft","newPlans","prevPlan","_currentContacts$2","colSpan","_parseAction","_parseAction2","copyContact","newPageLimit","handlePrev","handleNext","nextPage","Leads","withRouter","unlisten","listen","Fragment","Analytics","userId","userPlanStatus","user_id","gtag","plan_status","App","isOnboarding","setRootAsIframe","classList","Router","ScrollToTop","Route","exact","component","StripeTerms","WixIntegrationLanding","TeamInvitePage","Boolean","initialize","dsn","release","process","tracesSampleRate","replaysSessionSampleRate","replaysOnErrorSampleRate","integrations","maskAllText","blockAllMedia","userInfo","ReactDOM","StrictMode","Suspense","PostHogProvider","apiKey","api_host","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.9ccfdfe5.chunk.js","sourcesContent":["import be from '../BE';\nimport {Amplify,Auth as AmplifyAuth} from 'aws-amplify';\nimport * as Sentry from \"@sentry/react\";\nimport toast from 'react-hot-toast';\n\n// printing console.info logs only in localhost\nconst DEBUG = window.location.hostname === 'localhost';\nvar CLIENT = \"\"\nif(DEBUG){CLIENT = \"8oqrf7a5het2vkb0u06km15us\"}\nelse{CLIENT = \"4de86ece06uce62qeoqvsfkuef\"}\n\nAmplify.configure({\n Auth:{\n region: 'eu-central-1',\n userPoolId: 'eu-central-1_j3ieIXUaN',\n userPoolWebClientId: CLIENT,\n mandatorySignIn: true\n }\n})\n\nclass Auth {\n\n async login(params,path = '/account/login'){\n toast.loading(`Logging in...`)\n const createAccessObj = (_challengeResult) => {\n const access = _challengeResult?.signInUserSession?.accessToken?.jwtToken;\n const refresh = _challengeResult?.signInUserSession?.refreshToken?.token;\n const accessObj = {access_token:access,refresh_token:refresh};\n return accessObj;\n }\n const getUserInfo = async (_accessObj) => {\n localStorage.setItem('userSession', JSON.stringify({access:_accessObj}));\n await be.get(\"account-jubilant\",\"/account/me\",false,true,true)\n .then(response => {\n localStorage.setItem('userSession', JSON.stringify({access:_accessObj,profileObj:response}));\n DEBUG && console.info(\"%c[auth][login] built localStorage userSession\",'color:lightgreen');\n // check if the user needs onboarding\n if(response?.needsOnboard){\n window.history.pushState({}, null, '/onboarding');\n window.location.href = '/onboarding'\n }\n })\n .catch(e=> {\n DEBUG && console.info(`%c[auth][login][error] unable to set localStorage userSession: ${e?.message}`,'color:salmon');\n localStorage.removeItem('userSession');\n DEBUG && console.info(\"[auth][login] cleaned userSession localStorage\")\n })\n }\n // Guess timezone on OS settings\n let timezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n // Get language from i18next localStorage\n let lng = localStorage.getItem('i18nextLng')\n // Append timezone to params\n params.timezone = timezone\n // Append language to params\n params.language = lng\n await be.post('account-jubilant',path,params,false,true)\n .then(async response => {\n const {id,key} = response;\n DEBUG && console.info(`[auth][login] calling cognito sign in with\\nid: ${id}\\nkey: ${key}...`)\n const cognitoUser = await AmplifyAuth.signIn(id,key);\n DEBUG && console.info(`[auth][login] creating profileObj...`)\n await getUserInfo(createAccessObj(cognitoUser))\n DEBUG && console.info(`[auth][login] created profileObj: ${JSON.parse(localStorage.getItem('userSession'))}`)\n return Promise.resolve(true);\n })\n .catch(error =>{\n return Promise.reject(false);\n });\n toast.dismiss();\n }\n\n async refresh(){\n \n const createAccessObj = (_refreshResponse) => {\n const access = _refreshResponse?.accessToken?.jwtToken;\n const refresh = _refreshResponse?.refreshToken?.token;\n const accessObj = {access_token:access,refresh_token:refresh};\n return accessObj;\n }\n const getUserInfo = async (_accessObj) => {\n localStorage.setItem('userSession', JSON.stringify({access:_accessObj}));\n await be.get(\"account-jubilant\",\"/account/me\",false,true,true)\n .then(response => {\n localStorage.setItem('userSession', JSON.stringify({access:_accessObj,profileObj:response}));\n DEBUG && console.info(\"%c[auth][refresh] built localStorage userSession with profileObj\",'color:lightgreen');\n })\n .catch(e=> {\n DEBUG && console.info(`%c[auth][refresh][error] unable to set localStorage userSession: ${e?.message}`,'color:salmon');\n localStorage.removeItem('userSession');\n DEBUG && console.info(\"[auth][refresh] cleaned localStorage userSession\")\n })\n }\n\n try{\n\n DEBUG &&console.info(\"refresh: get cognito user\")\n const cognitoUser = await AmplifyAuth.currentAuthenticatedUser()\n DEBUG &&console.info(\"cognito user: \", cognitoUser)\n\n console.info(\"refresh: get current session\")\n const currentSession = await AmplifyAuth.currentSession();\n DEBUG &&console.info(\"current session: \",currentSession)\n\n DEBUG &&console.info(\"refresh: update access using refresh token\")\n const {refreshToken} = cognitoUser?.signInUserSession;\n\n if(refreshToken){\n await new Promise((resolve,reject) => {\n cognitoUser.refreshSession(refreshToken, async (error,session) => {\n if(error){\n DEBUG && console.info(`%c[auth][refresh][error] if error: unable to refresh session: ${error?.message}`,'color:salmon');\n reject(false);\n }else{\n DEBUG && console.info(`%c[auth][refresh] refreshed session`,'color:lightgreen');\n DEBUG && console.info(`[auth][refresh] getting user info from /me endpoint...`)\n const accessObj = createAccessObj(session);\n await getUserInfo(accessObj)\n resolve();\n }\n })\n })\n }\n }catch(error){\n DEBUG && console.info(`%c[auth][refresh][error] catch: unable to refresh session: ${error?.message}`,'color:salmon');\n DEBUG && console.error(error)\n return Promise.reject(false);\n }\n\n /*\n await be.refresh('account','/refresh')\n .then(response => {\n //salvo la sessione\n localStorage.setItem('userSession', JSON.stringify(response));\n //restituisco esito positivo\n return Promise.resolve(true);\n })\n .catch(error => {\n //restituisco esito negativo\n return Promise.reject(false);\n });\n */\n }\n\n async logout(){\n DEBUG && console.info(\"[logout] deleting calendbook session\");\n localStorage.removeItem('userSession');\n localStorage.removeItem('agentSession');\n DEBUG && console.info(\"[logout] getting cognito user session\");\n try{\n await AmplifyAuth.currentAuthenticatedUser()\n .then(async (response) => {\n DEBUG && console.info(\"[logout] saving cognito user session keys\");\n const cognitoStorage = response?.storage;\n DEBUG && console.info(\"[logout] deleting cognito session keys: \");\n Object.keys(cognitoStorage).map(key => {\n if(key.startsWith(\"CognitoIdentityServiceProvider\")){\n localStorage.removeItem(key);\n DEBUG && console.info(key);\n }\n })\n })\n .catch((error) => {\n DEBUG && console.info(\"[logout] unable to get cognito user session: \",error)\n })\n }catch(error){\n DEBUG && console.info(\"[logout] unable to get cognito user session: \",error)\n }\n window.location.href = '/login';\n }\n\n parseJwt (token) {\n var base64Url = token.split('.')[1];\n var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n }).join(''));\n\n return JSON.parse(jsonPayload);\n };\n\n getExp(token){\n let exp = this.parseJwt(token).exp;\n exp *= 1000;\n DEBUG && console.info(`expiration: ${new Date(parseInt(exp))}`);\n return exp;\n }\n\n sessionExist() {\n try {\n\n // Check if localStorage is available and accessible\n if (typeof localStorage === 'undefined' || localStorage === null) {\n console.warn('localStorage is not available.');\n return false;\n }\n\n // Attempt to retrieve the item from localStorage\n const session = localStorage.getItem(\"userSession\");\n\n // Return false if the item is not found (null)\n return session !== null;\n\n } catch (error) {\n // Catch any unexpected errors (e.g., in a private browsing mode where localStorage might be disabled)\n console.error('An error occurred while checking session existence:', error);\n return false; // Safely return false in case of error\n }\n }\n\n\n getSession(){\n if(this.sessionExist()){\n return JSON.parse(localStorage.getItem('userSession'));\n }else{\n window.location.href = '/login';\n }\n }\n\n async isAuthenticated(){\n DEBUG && console.info(\"--------------\")\n if(this.sessionExist()){\n DEBUG && console.info(\"session exists\")\n let now = new Date();\n let sessionExpiration = new Date(parseInt(this.getExp(this.getAccessToken())));\n //se la sessione è scaduta\n if(now >= sessionExpiration){\n DEBUG && console.info(\"session expired, refreshing\")\n // chiamo refresh e restituisco l'esito\n await this.refresh()\n .then((response) => {\n DEBUG && console.info(\"refreshed\",response)\n return response;\n })\n }else{\n // altrimenti la sessione è ancora valida, restituisco true\n DEBUG && console.info(\"session still valid\")\n return Promise.resolve(true);\n }\n }else{\n DEBUG && console.info(\"session not exists\")\n return Promise.reject(false);\n }\n DEBUG && console.info(\"--------------\")\n }\n\n getUsername(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.username;\n }\n\n /* \n * return slugName if exists and is not empty string\n * else, return username\n */\n getName(){\n let session = this.getSession();\n if(session){\n try{\n if (session?.profileObj?.slugName && session?.profileObj?.slugName !== 'None'){\n return session?.profileObj?.slugName;\n }else{\n return session?.profileObj?.username;\n }\n }catch{\n return session?.profileObj?.username;\n }\n }\n }\n\n getFullName(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.name;\n }\n\n getEmail(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.email;\n }\n\n\n getPic(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.pic;\n }\n\n getBanner(){\n let session = this.getSession();\n if(session){\n if(session?.profileObj?.companyLogo){\n return session?.profileObj?.companyLogo;\n }else{\n return '/app-assets/img/standard-banner-pic.png';\n }\n }\n }\n\n getRole(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.planStatus?.status;\n }\n getAgencyId(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.agencyId;\n }\n getAgent(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.agent;\n }\n getTimezone(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.timezone;\n }\n getLanguage(){\n let exist = this.sessionExist();\n if(exist){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.language.substring(0,2)\n }\n }\n\n getVendor(){\n let exist = this.sessionExist();\n if(exist){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.vendor\n }\n }\n\n getExpiration(){\n let session = this.getSession();\n if(session)\n return session?.profileObj?.planStatus?.expiration;\n }\n\n getAccessToken(){\n return (this.getSession()?.access?.access_token);\n }\n\n getRefreshToken(){\n return (this.getSession()?.access?.refresh_token);\n }\n\n isFree(){\n return (this.getRole() === 'free' ? true : false);\n }\n\n isTrial(){\n return (this.getRole() === 'trial' ? true : false);\n }\n\n isPremium(){\n return (this.getRole() === 'premium' ? true : false);\n }\n\n isLifetime(){\n return (this.getRole() === 'LTD' ? true : false);\n }\n\n /**\n * Logs a message or error to Sentry, including optional breadcrumb data for better error tracking and diagnosis.\n * This function is intended to abstract Sentry logging and error reporting into a single reusable utility.\n *\n * @param {Object} params - The parameters for logging and error reporting.\n * @param {string} params.category - The category of the breadcrumb for grouping in Sentry.\n * @param {string} params.message - The message to be logged as a breadcrumb or error description.\n * @param {Sentry.Severity} [params.level='error'] - The severity level of the breadcrumb or error. Defaults to 'error'.\n * @param {Object} [params.data={}] - Additional data to be attached with the breadcrumb or error for more context.\n * @param {Error} [params.error=null] - The error object to be reported to Sentry. If provided, captures an exception instead of logging a breadcrumb.\n * @example\n * // To log a simple info message with data\n * logWithSentry({\n * category: 'authentication',\n * message: 'User login attempt',\n * data: { username: 'johndoe' },\n * });\n *\n * @example\n * // To report an error to Sentry with additional context\n * logWithSentry({\n * category: 'database',\n * message: 'Failed to query user data',\n * level: 'error',\n * data: { query: 'SELECT * FROM users;' },\n * error: new Error('Database unreachable'),\n * });\n */\n logWithSentry({ category, message, level, data, error }) {\n Sentry.addBreadcrumb({\n category,\n message,\n level: level || 'error',\n data,\n });\n\n if (error) {\n Sentry.captureException(error);\n }\n }\n\n\n /**\n * Retrieves a value from local storage based on a specified path. Optionally applies a callback to the retrieved value.\n *\n * @param {Object} params - The parameters object.\n * @param {string} params.storageKey - The key in local storage from which to retrieve data.\n * @param {Array} params.path - The path to the property within the stored data.\n * @param {*} [params.fallback=null] - The fallback value to return if the path is not found or an error occurs.\n * @param {Function} [params.callback=null] - An optional callback to apply to the retrieved value.\n * @returns {*} The value from local storage at the specified path, the fallback value if not found, or the result of the callback if provided.\n * @throws {TypeError} If the path is not an array.\n * @example\n * // Assuming local storage contains: { userSession: { profile: { name: \"John Doe\" } } }\n * const userName = getProperty({\n * storageKey: 'userSession',\n * path: ['profile', 'name'],\n * fallback: 'Anonymous',\n * });\n * console.log(userName); // Outputs: John Doe\n */\n getProperty({ storageKey, path, fallback = null, callback = null }) {\n if (!Array.isArray(path)) {\n throw new TypeError(\"Path must be an array.\");\n }\n\n try {\n const rawSession = localStorage.getItem(storageKey);\n\n const session = rawSession ? JSON.parse(rawSession) : null;\n if (!session) return fallback ?? null;\n\n const value = path.reduce((acc, key) => acc?.[key], session);\n if (!value) return fallback ?? null;\n\n return callback ? callback(value) : value;\n } catch (error) {\n this.logWithSentry({\n category: 'getProperty',\n message: `Failed to get property from ${storageKey}`,\n data: { storageKey, path, fallback },\n error,\n });\n return fallback ?? null;\n }\n }\n\n\n /**\n * Sets a value in local storage for a specified path. Creates any necessary intermediate objects along the path.\n *\n * @param {Object} params - The parameters object.\n * @param {string} params.storageKey - The key in local storage under which to store data.\n * @param {Array} params.path - The path to the property within the stored data where the value should be set.\n * @param {*} params.valueToSet - The value to set at the specified path.\n * @throws {TypeError} If the path is not an array or attempts to set a property on a non-object.\n * @example\n * // To set the user's name in local storage under the userSession key\n * setProperty({\n * storageKey: 'userSession',\n * path: ['profile', 'name'],\n * valueToSet: 'Jane Doe',\n * });\n * // This will update local storage to include: { userSession: { profile: { name: \"Jane Doe\" } } }\n */\n setProperty({ storageKey, path, valueToSet }) {\n if (!Array.isArray(path)) {\n throw new TypeError(\"Path must be an array.\");\n }\n\n try {\n const rawSession = localStorage.getItem(storageKey);\n let session = rawSession ? JSON.parse(rawSession) : {};\n\n let current = session;\n path.slice(0, -1).forEach((key, index) => {\n if (current[key] === undefined || current[key] === null) current[key] = {};\n else if (typeof current[key] !== 'object' || Array.isArray(current[key])) {\n throw new TypeError(`Attempted to set a property on a non-object at ${path.slice(0, index + 1).join('.')}`);\n }\n current = current[key];\n });\n\n current[path[path.length - 1]] = valueToSet;\n\n localStorage.setItem(storageKey, JSON.stringify(session));\n } catch (error) {\n this.logWithSentry({\n category: 'setProperty',\n message: `Failed to set property in ${storageKey}`,\n data: { storageKey, path, valueToSet },\n error,\n });\n }\n }\n}\n\nexport default new Auth();\n","import React from \"react\";\nimport auth from \"../../Account/Auth\";\nimport features from \"../features-list.json\";\n\n// Helper function to determine feature access and the next available plan\nconst getFeatureAccessInfo = (userPlan, featureName, planOrder) => {\n let isLocked = false;\n let nextPlan = \"Upgrade\"; // fallback if no higher plan is found\n const userPlanIndex = planOrder.indexOf(userPlan);\n\n try {\n const featurePlans = features[featureName];\n // If the user’s plan is not in the array for this feature, they are locked\n isLocked = !featurePlans.includes(userPlan);\n\n if (isLocked) {\n const availablePlans = featurePlans.filter(\n (plan) => planOrder.indexOf(plan) > userPlanIndex\n );\n // If the feature is available on higher plans, pick the first higher plan\n if (availablePlans.length > 0) {\n nextPlan = availablePlans[0];\n }\n }\n } catch (error) {\n console.info(\n `[PlanBadge][${featureName}] Error while determining feature access: `,\n error\n );\n }\n\n return { isLocked, nextPlan };\n};\n\n// Utility function to conditionally apply color classes\n// If the plan is 'premium', we apply a \"silver\" color scheme. Otherwise, use the default \"primary\" scheme.\nconst getBadgeColorClasses = (plan) => {\n if (plan === \"premium\") {\n // \"Silver\" style for light and dark modes\n return `\n tw-bg-gray-300\n tw-text-gray-900\n dark:tw-bg-gray-700\n dark:tw-text-white\n `;\n }\n\n // Default \"primary\" style\n return `\n tw-bg-primary-100\n tw-text-primary-800\n dark:tw-bg-primary-900\n dark:tw-text-primary-300\n `;\n};\n\nconst UpgradeBadge = ({ featureName }) => {\n const userPlan = auth.getRole();\n // The order of the plans, from lowest to highest\n const planOrder = [\"free\", \"premium\", \"professional\", \"LTD\"];\n\n // Get info on whether user is locked out and what the next plan is\n const { isLocked, nextPlan } = getFeatureAccessInfo(\n userPlan,\n featureName,\n planOrder\n );\n\n // If the user is not locked, we don't need to show a badge\n if (!isLocked) return null;\n\n return (\n \n {nextPlan}\n \n );\n};\n\nexport default UpgradeBadge;\n","import { useState, useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport Button from \"react-bootstrap/Button\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Form from \"react-bootstrap/Form\";\nimport AvatarEditor from \"react-avatar-editor\";\nimport MD5 from \"crypto-js/md5\";\nimport md5 from \"js-md5\";\nimport auth from \"../../../Account/Auth\";\nimport be from \"../../../BE\";\nimport axios from \"axios\";\nimport \"./profile-pic.css\";\n\nfunction ProfilePic() {\n const { t } = useTranslation([\"settings\"]);\n const profileObjPic = auth.getPic();\n const [selectedFile, setSelectedFile] = useState(null);\n const [selectedFileUrl, setSelectedFileUrl] = useState(null);\n const [editMode, setEditMode] = useState(false);\n const [preview, setPreview] = useState(null);\n const [zoomScale, setZoomScale] = useState(10);\n const [submitting, setSubmitting] = useState(false);\n const editor = useRef(null);\n const fileInput = useRef(null);\n\n const enterEditMode = () => {\n setEditMode(true);\n document.getElementById(\"profile-pic-file-uploader\").click();\n };\n\n const handleImgChange = (e) => {\n setSelectedFile(e.target.files[0]);\n setSelectedFileUrl(URL.createObjectURL(e.target.files[0]));\n };\n\n const formatBytes = (bytes, decimals = 2) => {\n if (!+bytes) return \"0 Bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\n \"Bytes\",\n \"KiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\",\n ];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n };\n\n const handleSave = async () => {\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n function _arrayBufferToBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n if (editor) {\n setSubmitting(true);\n const dataUrl = editor.current.getImage().toDataURL();\n const result = await fetch(dataUrl);\n const blob = await result.blob();\n setPreview(URL.createObjectURL(blob));\n const arrayBuffer = await blob.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n const md5Digest = md5.base64(buffer);\n console.log(\n \"[settings][ProfilePic] uploaded file size: \",\n formatBytes(blob?.size)\n );\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\n \"uploader-stack\",\n \"/upload/profilepic\",\n { contentMd5: md5Digest },\n true,\n true\n )\n .then(async (response) => {\n const formData = new FormData();\n Object.keys(response?.fields).forEach((key) => {\n formData.append(key, response?.fields[key]);\n });\n formData.append(\"file\", blob);\n await axios\n .post(response.url, formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Origin, Authorization\",\n },\n })\n .then(async () => await sleep(5000))\n .then(async () => await auth.refresh())\n .catch(function (error) {\n console.log(error);\n });\n })\n .catch((e) => {\n console.log(e);\n });\n })\n .catch((e) => {\n console.log(e);\n });\n setEditMode(false);\n setSubmitting(false);\n }\n };\n\n return (\n
\n \n

{t(\"profilePic.title\")}

\n

{t(\"profilePic.subtitle\")}

\n {editMode ? (\n \n \n \n \n \n Zoom\n setZoomScale(e.target.value)}\n />\n setEditMode(false)}\n >\n {t(\"profilePic.cancel\")}\n \n \n {submitting ? (\n \n ) : (\n <>{t(\"profilePic.save\")}\n )}\n \n \n \n ) : (\n \n )}\n \n
\n );\n}\n\nexport default ProfilePic;\n","import { useState, useRef } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport Button from \"react-bootstrap/Button\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Form from \"react-bootstrap/Form\";\nimport AvatarEditor from \"react-avatar-editor\";\nimport MD5 from \"crypto-js/md5\";\nimport md5 from \"js-md5\";\nimport auth from \"../../../Account/Auth\";\nimport be from \"../../../BE\";\nimport axios from \"axios\";\nimport \"./banner.css\";\n\nfunction ProfilePic() {\n const { t } = useTranslation([\"settings\"]);\n const savedBanner = auth.getBanner();\n const [selectedFile, setSelectedFile] = useState(null);\n const [selectedFileUrl, setSelectedFileUrl] = useState(null);\n const [editMode, setEditMode] = useState(false);\n const [preview, setPreview] = useState(null);\n const [zoomScale, setZoomScale] = useState(10);\n const [submitting, setSubmitting] = useState(false);\n const editor = useRef(null);\n const fileInput = useRef(null);\n\n const enterEditMode = () => {\n setEditMode(true);\n document.getElementById(\"banner-file-uploader\").click();\n };\n\n const handleImgChange = (e) => {\n setSelectedFile(e.target.files[0]);\n setSelectedFileUrl(URL.createObjectURL(e.target.files[0]));\n };\n\n const formatBytes = (bytes, decimals = 2) => {\n if (!+bytes) return \"0 Bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\n \"Bytes\",\n \"KiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\",\n ];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n };\n\n const handleSave = async () => {\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n function _arrayBufferToBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n if (editor) {\n setSubmitting(true);\n const dataUrl = editor.current.getImage().toDataURL();\n const result = await fetch(dataUrl);\n const blob = await result.blob();\n setPreview(URL.createObjectURL(blob));\n const arrayBuffer = await blob.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n const md5Digest = md5.base64(buffer);\n console.log(\n \"[settings][ProfilePic] uploaded file size: \",\n formatBytes(blob?.size)\n );\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\n \"uploader-stack\",\n \"/upload/company/logo\",\n { contentMd5: md5Digest },\n true,\n true\n )\n .then(async (response) => {\n const formData = new FormData();\n Object.keys(response?.fields).forEach((key) => {\n formData.append(key, response?.fields[key]);\n });\n formData.append(\"file\", blob);\n await axios\n .post(response.url, formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST\",\n \"Access-Control-Allow-Headers\":\n \"Content-Type, Origin, Authorization\",\n },\n })\n .then(async () => await sleep(5000))\n .then(async () => await auth.refresh())\n .catch(function (error) {\n console.log(error);\n });\n })\n .catch((e) => {\n console.log(e);\n });\n })\n .catch((e) => {\n console.log(e);\n });\n setEditMode(false);\n setSubmitting(false);\n }\n };\n\n return (\n
\n \n

{t(\"bannerPic.title\")}

\n

{t(\"bannerPic.subtitle\")}

\n {editMode ? (\n \n \n \n \n \n Zoom\n setZoomScale(e.target.value)}\n />\n setEditMode(false)}\n >\n {t(\"bannerPic.cancel\")}\n \n \n {submitting ? (\n \n ) : (\n <>{t(\"bannerPic.save\")}\n )}\n \n \n \n ) : (\n
\n {\" \"}\n \n
\n )}\n \n
\n );\n}\n\nexport default ProfilePic;\n","import {useState,useRef} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Form from 'react-bootstrap/Form';\nimport AvatarEditor from 'react-avatar-editor';\nimport MD5 from 'crypto-js/md5';\nimport md5 from 'js-md5';\nimport auth from '../../../Account/Auth';\nimport be from '../../../BE';\nimport axios from 'axios';\nimport './profile-pic.css';\n\nfunction ProfilePic({pic}){\n const {t} = useTranslation(['settings']);\n const profileObjPic = pic;\n const [selectedFile,setSelectedFile] = useState(null);\n const [selectedFileUrl,setSelectedFileUrl] = useState(null);\n const [editMode,setEditMode] = useState(false);\n const [preview,setPreview] = useState(null);\n const [zoomScale,setZoomScale] = useState(10);\n const [submitting,setSubmitting] = useState(false);\n const editor = useRef(null);\n const fileInput = useRef(null);\n\n const enterEditMode = () => {\n setEditMode(true);\n document.getElementById(\"agency-profile-pic-file-uploader\").click();\n }\n\n const handleImgChange = (e) => {\n setSelectedFile(e.target.files[0]);\n setSelectedFileUrl(URL.createObjectURL(e.target.files[0]));\n };\n\n const formatBytes = (bytes, decimals = 2) => {\n if (!+bytes) return '0 Bytes'\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`\n };\n\n const handleSave = async () => {\n\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve,ms));\n }\n\n function _arrayBufferToBase64( buffer ) {\n var binary = '';\n var bytes = new Uint8Array( buffer );\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode( bytes[ i ] );\n }\n return window.btoa( binary );\n }\n\n if (editor) {\n setSubmitting(true);\n const dataUrl = editor.current.getImage().toDataURL();\n const result = await fetch(dataUrl);\n const blob = await result.blob();\n setPreview(URL.createObjectURL(blob));\n const arrayBuffer = await blob.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n const md5Digest = md5.base64(buffer);\n console.log(\"[settings][ProfilePic] uploaded file size: \", formatBytes(blob?.size));\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('uploader-stack','/upload/agency/profilepic',{contentMd5:md5Digest},true,true)\n .then(async(response) => {\n const formData = new FormData();\n Object.keys(response?.fields).forEach(key => {\n formData.append(key, response?.fields[key]);\n });\n formData.append(\"file\", blob);\n await axios.post(response.url, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST',\n 'Access-Control-Allow-Headers': 'Content-Type, Origin, Authorization'\n }\n })\n .then(async () => await sleep(5000))\n .then(async () => await auth.refresh())\n .catch(function (error) {\n console.log(error);\n });\n })\n .catch((e) => {console.log(e)})\n })\n .catch((e) => {console.log(e)})\n setEditMode(false);\n setSubmitting(false);\n }\n };\n\n return(\n
\n

Agency Pic

\n

Change here your agency pic

\n {editMode\n ? \n \n \n \n \n Zoom\n setZoomScale(e.target.value)}\n />\n \n \n \n \n : \"Agency\n\n }\n \n
\n );\n}\n\nexport default ProfilePic;\n","import React, { useState, useRef } from 'react';\nimport AvatarEditor from 'react-avatar-editor';\nimport md5 from 'js-md5';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\nimport axios from 'axios';\n\nfunction Pic({ pic, canEdit }) {\n const [isEditing, setIsEditing] = useState(false);\n const [selectedFile, setSelectedFile] = useState(null);\n const [selectedFileUrl, setSelectedFileUrl] = useState(null);\n const [preview, setPreview] = useState(null);\n const [zoomScale, setZoomScale] = useState(10);\n const [isLoading, setIsLoading] = useState(false);\n const editor = useRef(null);\n const fileInput = useRef(null);\n\n const handleEditClick = () => {\n if (canEdit) {\n setIsEditing(true);\n document.getElementById('pic-input').click();\n }\n };\n\n const handleImgChange = (e) => {\n const file = e.target.files[0];\n if (file) {\n setSelectedFile(file);\n setSelectedFileUrl(URL.createObjectURL(file));\n } else {\n setIsEditing(false);\n }\n };\n\n const handleSave = async () => {\n if (editor.current) {\n setIsLoading(true);\n const dataUrl = editor.current.getImage().toDataURL();\n const result = await fetch(dataUrl);\n const blob = await result.blob();\n setPreview(URL.createObjectURL(blob));\n const arrayBuffer = await blob.arrayBuffer();\n const buffer = Buffer.from(arrayBuffer);\n const md5Digest = md5.base64(buffer);\n\n try {\n await auth.isAuthenticated();\n const response = await be.post('uploader-stack', '/team/settings/profile-pic', { contentMd5: md5Digest }, true, true);\n\n const formData = new FormData();\n Object.keys(response?.fields).forEach((key) => {\n formData.append(key, response?.fields[key]);\n });\n formData.append('file', blob);\n\n await axios.post(response.url, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'POST',\n 'Access-Control-Allow-Headers': 'Content-Type, Origin, Authorization'\n },\n });\n } catch (error) {\n console.error('[Pic] Error uploading image:', error);\n } finally {\n setIsLoading(false);\n setIsEditing(false);\n }\n }\n };\n\n return (\n
\n {isEditing ? (\n
\n \n setZoomScale(e.target.value)}\n className=\"tw-w-full tw-mt-2\"\n />\n
\n setIsEditing(false)}\n className=\"tw-mr-2 tw-bg-gray-200 tw-px-4 tw-py-2 tw-rounded\"\n disabled={isLoading}\n >\n Cancel\n \n \n {isLoading ? (\n \n \n \n \n ) : (\n 'Save'\n )}\n \n
\n
\n ) : (\n <>\n \n {canEdit && (\n \n {isLoading ? (\n \n \n \n \n ) : (\n \n )}\n \n )}\n \n )}\n \n
\n );\n}\n\nexport default Pic;\n\n","export default {\n API: {\n endpoints: [\n {\n name: \"account-dev\",\n endpoint: \"https://cgq1tzvoj4.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"eventtypes-dev\",\n endpoint: \"https://trbwymup39.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"booking-dev\",\n endpoint : \"https://r8ejxwkonf.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"jubilant-booking\",\n endpoint : \"https://raqt4k4huc.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name : \"payments-dev\",\n endpoint : \"https://y0wdbt6r8b.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"notifications-dev\",\n endpoint: \"https://53onwg35tg.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"todo-dev\",\n endpoint: \"https://czu363ehtf.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"calendarhandler-dev\",\n endpoint: \"https://4ibn4pv0ui.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"webhook-dev\",\n endpoint: \"https://tzg4p4cg66.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"survey-dev\",\n endpoint: \"https://3q8yzcpfma.execute-api.eu-central-1.amazonaws.com/dev\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"integrations-dev\",\n endpoint: \"https://integrations.calendbook.com\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"stripe-connect\",\n endpoint: \"https://3dop58y0if.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"account-jubilant\",\n endpoint: \"https://dk4uaonnu0.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"uploader-stack\",\n endpoint: \"https://9gnlf4d89b.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"team-manager\",\n endpoint: \"https://ymxafp6wr3.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"payment-jubilant\",\n endpoint: \"https://03mk8bflne.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"agency\",\n endpoint: \"https://c5cq7fl8xf.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"jubilant-events\",\n endpoint: \"https://mbi8mft72c.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"Onboarding\",\n endpoint: \"https://4sazvyztf1.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"Leads\",\n endpoint: \"https://8gfnsrxgg2.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n ]\n }\n};\n","export default {\n API: {\n endpoints: [\n {\n name: \"account-prod\",\n endpoint: \"https://tpfgqh9ei1.execute-api.eu-central-1.amazonaws.com/staging\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"eventtypes-prod\",\n endpoint: \"https://x8dwtuq3k6.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"booking-prod\",\n endpoint : \"https://3udcgulto7.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"jubilant-booking\",\n endpoint : \"https://raqt4k4huc.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name : \"payments-prod\",\n endpoint : \"https://easy3n59vl.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"notifications-prod\",\n endpoint: \"https://2cbrq1suy1.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"todo-prod\",\n endpoint: \"https://77no9um4sf.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"stacking-prod\",\n endpoint: \"https://67yn0ewloa.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"calendarhandler-prod\",\n endpoint: \"https://vdj4u27hz4.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"webhook-prod\",\n endpoint: \"https://un0o0safi8.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"survey-prod\",\n endpoint: \"https://ibj88khshg.execute-api.eu-central-1.amazonaws.com/prod\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"integrations-prod\",\n endpoint: \"https://integrations.calendbook.com\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"stripe-connect\",\n endpoint: \"https://3dop58y0if.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"account-jubilant\",\n endpoint: \"https://dk4uaonnu0.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"uploader-stack\",\n endpoint: \"https://9gnlf4d89b.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"team-manager\",\n endpoint: \"https://ymxafp6wr3.execute-api.eu-central-1.amazonaws.com/Stage\",\n region: 'ap-southeast-2',\n service: 'lambda'\n },\n {\n name: \"payment-jubilant\",\n endpoint: \"https://03mk8bflne.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"agency\",\n endpoint: \"https://c5cq7fl8xf.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"jubilant-events\",\n endpoint: \"https://mbi8mft72c.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"Onboarding\",\n endpoint: \"https://4sazvyztf1.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n {\n name: \"Leads\",\n endpoint: \"https://8gfnsrxgg2.execute-api.eu-central-1.amazonaws.com/Stage\",\n },\n ]\n }\n};\n","import Amplify, { API } from 'aws-amplify';\nimport auth from './Account/Auth';\nimport AmplifyConfDev from './amplify-config-dev.js'\nimport AmplifyConfProd from './amplify-config-prod.js'\n\nclass BE{\n #endpoint\n constructor(){\n this.#endpoint = this.check_env()\n if(this.#endpoint === '-dev'){Amplify.configure(AmplifyConfDev)}\n if(this.#endpoint === '-prod'){Amplify.configure(AmplifyConfProd)}\n }\n\n check_env(){\n let endpoint = '-dev'\n if (window.location.hostname === 'www.calendbook.com' || window.location.hostname === 'calendbook.com'){\n endpoint = '-prod'\n }\n if (window.location.hostname === 'dev.calendbook.com' || window.location.hostname === 'localhost:3000'){\n endpoint = '-dev';\n }\n return endpoint\n }\n\n getAccountIdFromLocalStorage() {\n const agentSession = localStorage.getItem('agentSession');\n if (agentSession) {\n const sessionObj = JSON.parse(agentSession);\n return sessionObj.accountId || null;\n }\n return null;\n }\n\n\n async get(apiName,path,queryParams,needsAuth,sameEnv,useAxiosResponse){\n //sameEnv is needed when the lambda name is the same for prod and dev environements\n //useAxiosResponse is needed o have response.status for status code handled calls\n if(!sameEnv){ apiName += this.#endpoint }\n var config = {headers : {}, queryStringParameters : {}};\n const accountId = this.getAccountIdFromLocalStorage();\n if(queryParams){ config.queryStringParameters = queryParams }\n if(needsAuth){ config.headers = { Authorization : 'Bearer ' + auth.getAccessToken() } }\n if(accountId) { config.headers['Account-X-Calendbook'] = accountId; }\n if(useAxiosResponse){ config.response = true }\n let result = API.get(apiName,path,config)\n return await result\n }\n\n async post(apiName,path,body,needsAuth,sameEnv,useAxiosResponse){\n if(!sameEnv){ apiName += this.#endpoint }\n var config = {headers : {}, body : {}};\n const accountId = this.getAccountIdFromLocalStorage();\n if(body){ config.body = body }\n if(needsAuth){ config.headers = { Authorization : 'Bearer ' + auth.getAccessToken() } }\n if(accountId) { config.headers['Account-X-Calendbook'] = accountId; }\n if(useAxiosResponse){ config.response = true }\n let result = API.post(apiName,path,config)\n return result\n }\n\n patch(apiName,path,body,needsAuth,sameEnv,useAxiosResponse){\n if(!sameEnv){ apiName += this.#endpoint }\n var config = {headers : {}, body : {}};\n const accountId = this.getAccountIdFromLocalStorage();\n if(body){ config.body = body }\n if(needsAuth){ config.headers = { Authorization : 'Bearer ' + auth.getAccessToken() } }\n if(accountId) { config.headers['Account-X-Calendbook'] = accountId; }\n if(useAxiosResponse){ config.response = true }\n return API.patch(apiName,path,config)\n }\n\n del(apiName,path,body,needsAuth,sameEnv){\n if(!sameEnv){ apiName += this.#endpoint }\n var config = {headers : {}, body : {}};\n const accountId = this.getAccountIdFromLocalStorage();\n if(body){ config.body = body }\n if(needsAuth){ config.headers = { Authorization : 'Bearer ' + auth.getAccessToken() } }\n if(accountId) { config.headers['Account-X-Calendbook'] = accountId; }\n return API.del(apiName,path,config)\n }\n\n async refresh(apiName,path){\n apiName += this.#endpoint;\n var config = {headers : {}, body : {}};\n const accountId = this.getAccountIdFromLocalStorage();\n config.headers = { Authorization : 'Bearer ' + auth.getRefreshToken() }\n if(accountId) { config.headers['Account-X-Calendbook'] = accountId; }\n let result = API.post(apiName,path,config)\n return await result\n }\n\n}\n\nexport default new BE();\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport EN from './locales/en/translation.json';\nimport IT from './locales/it/translation.json';\nimport ES from './locales/es/translation.json';\nimport DE from './locales/de/translation.json';\nimport FR from './locales/fr/translation.json';\nimport auth from './Account/Auth';\n\nconst resources = {\n en: EN,\n it: IT,\n es: ES,\n de: DE,\n fr: FR\n}\n\nconst detectionOptions = {\n // order and from where user language should be detected\n order: ['localStorage', 'sessionStorage', 'navigator', 'htmlTag', 'path', 'subdomain'],\n\n // keys or params to lookup language from\n lookupQuerystring: 'lng',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n lookupFromPathIndex: 0,\n lookupFromSubdomainIndex: 0,\n\n // cache user language on\n caches: ['localStorage'],\n}\n\ni18n\n .use(initReactI18next)\n .use(LanguageDetector)\n .init({\n resources,\n fallbackLng: 'en',\n detection : detectionOptions,\n interpolation: {\n escapeValue: false // react already safes from xss\n }\n });\n\n// set current language loading from user profileObj\n// (available only for logged users)\ntry{i18n.changeLanguage(auth.getLanguage())}catch{}\nexport default i18n;\n","import React, {useState, useEffect, createContext} from 'react';\nimport auth from './Account/Auth';\n\n// Creo il context\nexport const UserContext = createContext();\n\nconst checkForImpersonation = async () => {\n const agentInfo = auth.getAgent();\n const agentSession = JSON.parse(localStorage.getItem('agentSession'));\n\n if (agentInfo && agentInfo?.fullName && agentInfo?.email && agentSession && agentSession?.accountId) {\n return {\n isImpersonated: true,\n impersonatingAgent: {\n fullName: agentInfo.fullName,\n email: agentInfo.email,\n }\n };\n } else {\n return {\n isImpersonated: false,\n impersonatingAgent: null\n };\n }\n};\n\n\n// Creo il provider\nexport const UserProvider = props => {\n\n // Creo lo stato\n const [user,setUser] = useState(\n {\n logged: false,\n isImpersonated: false,\n impersonatingAgent: null,\n }\n );\n\n // non posso usare asyn direttamente in useEffect, ma posso creare una arrow\n // function asincrona e chiamarla, per aggiornare lo stato\n // (usato principalmente per avvalorare il context state la prima volta)\n // https://www.robinwieruch.de/react-hooks-fetch-data\n // https://reactjs.org/docs/hooks-reference.html#useeffect\n useEffect(() => {\n const fetchStatus = async () => {\n const result = { logged: false, isImpersonated: false, impersonatingAgent: null };\n await auth.isAuthenticated()\n .then(async () => {\n result.logged = true;\n const impersonationStatus = await checkForImpersonation();\n result.isImpersonated = impersonationStatus.isImpersonated;\n result.impersonatingAgent = impersonationStatus.impersonatingAgent;\n })\n .catch(() => {result.logged = false})\n setUser(result);\n }\n fetchStatus()\n },[]);\n\n\n return (\n \n {props.children}\n \n );\n};\n\nexport default UserContext\n","import React, {useState, useEffect, createContext} from 'react';\n\n// Creo il context\nexport const ThemeContext = createContext();\n// Creo il provider\nexport const ThemeProvider = props => {\n\n const getCurrentTheme = () => {\n return window.document.getElementById('root').getAttribute('data-theme');\n }\n\n // Creo lo stato\n const [theme,setTheme] = useState('light');\n\n useEffect(() => {\n setTheme(getCurrentTheme);\n },[]);\n\n return (\n \n {props.children}\n \n );\n};\n\nexport default ThemeContext\n","import {useEffect} from 'react';\nimport auth from './Account/Auth';\n\nfunction Logout(){\n useEffect(() => {\n const logout = async () => {\n await auth.logout(); \n } \n logout();\n },[])\n return(\n

logging out...

\n );\n}\nexport default Logout;\n","import React, { useEffect } from \"react\";\nimport { PrivacyIta } from \"./privacy-ita\";\nimport { PrivacyEng } from \"./privacy-eng\";\nimport { useTranslation } from \"react-i18next\";\n\nfunction Privacy() {\n try {\n window.tidioChatApi.show();\n } catch {}\n const { i18n } = useTranslation();\n\n useEffect(() => {\n document.title = \"Calendbook - Privacy\";\n }, []);\n return (\n
\n \n {i18n.language.substring(0, 2) === \"it\" ? PrivacyIta : PrivacyEng}\n \n
\n );\n}\n\nexport default Privacy;\n","export const PrivacyIta = `\nPrivacy Policy di www.calendbook.com\n\nQuesto Sito Web raccoglie alcuni Dati Personali dei propri Utenti.\n\nQuesto documento può essere stampato utilizzando il comando di stampa presente \nnelle impostazioni di qualsiasi browser.\n\nTitolare del Trattamento dei Dati\n\nCALENDBOOK S.R.L. - VIA FELICE CAVALLOTTI 67, 70032 BITONTO (BA)\nIndirizzo email del Titolare: privacy@calendbook.com \n\n\nTipologie di Dati raccolti\n\nFra i Dati Personali raccolti da questo Sito Web/App, in modo autonomo o\ntramite terze parti, ci sono: \nDati di utilizzo; Strumento di Tracciamento; nome; cognome; Dati comunicati durante l'utilizzo del servizio; email; sesso; data di nascita; professione; Accesso completo.\n\nDettagli completi su ciascuna tipologia di dati raccolti sono forniti nelle sezioni dedicate di questa privacy policy o mediante specifici testi informativi visualizzati prima della raccolta dei dati stessi.\nI Dati Personali possono essere liberamente forniti dall'Utente o, nel caso di Dati di Utilizzo, raccolti automaticamente durante l'uso di questo Sito Web.\nSe non diversamente specificato, tutti i Dati richiesti da questo Sito Web sono obbligatori. Se l’Utente rifiuta di comunicarli, potrebbe essere impossibile per questo Sito Web fornire il Servizio. \nNei casi in cui questo Sito Web indichi alcuni Dati come facoltativi, gli Utenti sono liberi di astenersi dal comunicare tali Dati, senza che ciò abbia alcuna conseguenza sulla disponibilità del Servizio o sulla sua operatività.\nGli Utenti che dovessero avere dubbi su quali Dati siano obbligatori possono contattare il Titolare al suindicato indirizzo email.\nL’eventuale utilizzo di Cookie - o di altri strumenti di tracciamento - da parte di questo Sito Web o dei titolari dei servizi terzi utilizzati da questo Sito Web, ove non diversamente precisato, ha la finalità di fornire il Servizio richiesto dall'Utente, oltre alle ulteriori finalità descritte nel presente documento e nella Cookie Policy, se disponibile.\n\nL'Utente si assume la responsabilità dei Dati Personali di terzi ottenuti, pubblicati o condivisi mediante questo Sito Web e garantisce di avere il diritto di comunicarli o diffonderli, liberando il Titolare da qualsiasi responsabilità verso terzi.\n\nModalità e luogo del trattamento dei Dati raccolti\nModalità di trattamento\n\nIl Titolare adotta le opportune misure di sicurezza volte ad impedire l’accesso, la divulgazione, la modifica o la distruzione non autorizzate dei Dati Personali.\nIl trattamento viene effettuato mediante strumenti informatici e/o telematici, con modalità organizzative e con logiche strettamente correlate alle finalità indicate. \nOltre al Titolare, in alcuni casi, potrebbero avere accesso ai Dati altri soggetti coinvolti nell’organizzazione di questo Sito Web (personale amministrativo, commerciale, marketing, legali, amministratori di sistema) ovvero soggetti esterni (come fornitori di servizi tecnici terzi, corrieri postali, hosting provider, società informatiche, agenzie di comunicazione) nominati anche, se necessario, Responsabili del Trattamento da parte del Titolare. L’elenco aggiornato dei Responsabili potrà sempre essere richiesto al Titolare del Trattamento all’indirizzo email privacy@calendbook.com\n\nBase giuridica del trattamento\n\nIl Titolare tratta Dati Personali relativi all’Utente in caso sussista alle seguenti condizioni\n\n1. l’Utente ha prestato il consenso per una o più finalità specifiche; \nNota: in alcuni ordinamenti il Titolare può essere autorizzato a trattare Dati Personali senza che debba sussistere il consenso dell’Utente o un’altra delle basi giuridiche specificate di seguito, fino a quando l’Utente non si opponga (“opt-out”) a tale trattamento. Ciò non è tuttavia applicabile qualora il trattamento di Dati Personali sia regolato dalla legislazione europea in materia di protezione dei Dati Personali;\n2. il trattamento è necessario all'esecuzione di un contratto con l’Utente e/o all'esecuzione di misure precontrattuali (come nel caso di utenti che si registrino per utilizzare i servizi offerti dal Titolare)\n3. il trattamento è necessario per adempiere un obbligo legale al quale è soggetto il Titolare;\n4. il trattamento è necessario per l'esecuzione di un compito di interesse pubblico o per l'esercizio di pubblici poteri di cui è investito il Titolare;\n5. il trattamento è necessario per il perseguimento del legittimo interesse del Titolare o di terzi.\n\nÈ comunque sempre possibile richiedere al Titolare di chiarire la concreta base giuridica di ciascun trattamento ed in particolare di specificare se il trattamento sia basato sulla legge, previsto da un contratto o necessario per concludere un contratto.\n\nLuogo del trattamento\n\nI Dati sono trattati presso le sedi operative del Titolare ed in ogni altro luogo in cui le parti coinvolte nel trattamento siano localizzate, con strumenti informatici ed eventualmente anche in formato cartaceo laddove strettamente necessario. Per ulteriori informazioni, contatta il Titolare.\nI Dati Personali dell’Utente potrebbero essere trasferiti in un Paese diverso da quello in cui l’Utente si trova. Per ottenere ulteriori informazioni sul luogo del trattamento dei propri dati personali l’Utente può fare riferimento alla sezione relativa ai dettagli sul trattamento dei Dati Personali.\n\nL’Utente ha diritto a ottenere informazioni in merito alla base giuridica del trasferimento di Dati al di fuori dell’Unione Europea o ad un’organizzazione internazionale di diritto internazionale pubblico o costituita da due o più paesi, come ad esempio l’ONU, nonché in merito alle misure di sicurezza adottate dal Titolare per proteggere i Dati.\n\nL’Utente può verificare se abbia luogo uno dei trasferimenti appena descritti esaminando la sezione di questo documento relativa ai dettagli sul trattamento di Dati Personali o chiedere informazioni al Titolare contattandolo agli estremi riportati in apertura.\n\nPeriodo di conservazione\n\nI Dati sono trattati e conservati per il tempo richiesto dalle finalità per le quali sono stati raccolti.\n\nI Dati Personali raccolti per scopi collegati all’esecuzione delcontratto tra il Titolare e l’Utente saranno trattenuti sino a quando sia completata l’esecuzione di tale contratto, ma possono essere trattati anche successivamente alla sua completa esecuzione per esigenze amministrative e/o legali che rendano necessario questo ulteriore trattamento.\n\nI Dati Personali raccolti per finalità riconducibili all’interesse legittimo del Titolare saranno trattenuti sino al soddisfacimento di tale interesse. L’Utente può ottenere ulteriori informazioni in merito all’interesse legittimo perseguito dal Titolare nelle relative sezioni di questo documento o contattando il Titolare.\n\nQuando il trattamento è basato sul consenso dell’Utente, il Titolare può conservare i Dati Personali più a lungo sino a quando detto consenso non venga revocato. In particolare, laddove i dati personali siano raccolti e trattati per finalità di marketing, il Titolare conserverà e tratterà detti dati non oltre 5 anni dal momento in cui l’interessato ha prestato l’ultimo consenso espresso a tal fine.\n\nInoltre, il Titolare potrebbe essere obbligato a conservare i Dati Personali per un periodo più lungo in ottemperanza ad un obbligo di legge o per ordine di un’autorità.\n\nAl termine del periodo di conservazione i Dati Personali saranno cancellati. Pertanto, allo spirare di tale termine il diritto di accesso, cancellazione, rettificazione ed il diritto alla portabilità dei Dati non potranno più essere esercitati, ferma restando la possibilità di utilizzare i predetti Dati in forma aggregata ed anonima per finalità statistiche.\n\nFinalità del Trattamento dei Dati raccolti\n\nI Dati dell’Utente sono raccolti per consentire al Titolare di fornire il Servizio, adempiere agli obblighi di legge, rispondere a richieste o azioni esecutive, tutelare i propri diritti ed interessi (o quelli di Utenti o di terze parti), individuare eventuali attività dolose o fraudolente, nonché per le seguenti finalità: \nVisualizzazione di contenuti da piattaforme esterne, Statistica, Gestione dei tag, Gestione dei pagamenti, Registrazione ed autenticazione, Heat mapping e registrazione sessioni, Interazione con le piattaforme di live chat, Gestione della raccolta dati e dei sondaggi online, Gestione dei database di Utenti, Gestione contatti e invio di messaggi e Hosting ed infrastruttura backend.\n\nPer ottenere informazioni dettagliate sulle finalità del trattamento e sui Dati Personali trattati per ciascuna finalità, l’Utente può fare riferimento alla sezione “Dettagli sul trattamento dei Dati Personali”.\n\nDettagli sul trattamento dei Dati Personali\n\nI Dati Personali, in base alle suesposte finalità, sono raccolti e trattati mediante l’utilizzo dei seguenti servizi:\n\nGestione contatti e invio di messaggi\n\nQuesto tipo di servizi consente di gestire un database di contatti email, contatti telefonici o contatti di qualunque altro tipo, utilizzati per comunicare con l’Utente.\nQuesti servizi potrebbero inoltre consentire di raccogliere dati relativi alla data e all’ora di visualizzazione dei messaggi da parte dell’Utente, così come all’interazione dell'Utente con essi, come le informazioni sui click sui collegamenti inseriti nei messaggi.\n\nCustomerly E-mail Marketing (Customerly Ltd.)\n\nCustomerly E-mail Marketing è un servizio di gestione indirizzi e invio di messaggi email fornito da Customerly Ltd.\n\nDati Personali trattati: cognome; Dati di utilizzo; email; nome.\n\nLuogo del trattamento: Irlanda – Privacy Policy.\n\nAmazon Simple Email Service (Amazon)\n\nAmazon Simple Email Service è un servizio di gestione indirizzi e invio di messaggi email fornito da Amazon.com Inc.\n\nDati Personali trattati: email.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nGestione dei database di Utenti\n\nQuesto tipo di servizi permettono al Titolare di costruire profili utente partendo da un indirizzo email, il nome o qualunque altra informazione che l'Utente fornisce a questo Sito Web/App, così come di tracciare le attività dell'Utente tramite funzionalità statistiche. \nQuesti Dati Personali potrebbero inoltre venire incrociati con informazioni sull'Utente disponibili pubblicamente (come i profili sui social network) ed usati per costruire profili privati che il Titolare può visualizzare ed utilizzare per migliorare questo Sito Web.\nAlcuni di questi servizi potrebbero inoltre permettere l'invio programmato di messaggi all'Utente, come email basate su azioni specifiche compiute su questo Sito Web.\n\nCustomerly (Customerly Ltd.)\n\nCustomerly è un servizio di gestione delle banche dati utente fornito da Customerly Ltd.\nCustomerly può essere usato anche come mezzo di comunicazione, per scambiarsi email o messaggi servendosi di questo Sito Web.\n\nDati Personali trattati: Dati di utilizzo; email; Strumento di Tracciamento; varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Irlanda – Privacy Policy.\n\nGestione dei pagamenti\n\nSe non diversamente specificato, questo Sito Web/App elabora tutti i pagamenti con carta di credito, bonifico bancario o altri mezzi tramite fornitori esterni di servizi di pagamento. In generale, e salvo diversa indicazione, gli Utenti sono pregati di fornire i dettagli di pagamento e le informazioni personali direttamente a tali fornitori di servizi di pagamento.\nQuesto Sito Web non è coinvolto nella raccolta e nell'elaborazione di tali informazioni, poiché riceverà solo una notifica da parte del fornitore di servizi di pagamento in questione circa l'avvenuto pagamento.\n\nStripe (Stripe Inc)\n\nStripe è un servizio di pagamento fornito da Stripe Inc.\n\nDati Personali trattati: varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nGestione dei tag\n\nQuesto tipo di servizi è funzionale alla gestione centralizzata dei tag o script utilizzati su questo Sito Web. L'uso di tali servizi comporta il fluire dei Dati dell'Utente attraverso gli stessi e, se del caso, la loro ritenzione.\n\nGoogle Tag Manager (Google LLC)\n\nGoogle Tag Manager è un servizio di gestione dei tag fornito da Google LLC.\n\nDati Personali trattati: Dati di utilizzo.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nGestione della raccolta dati e dei sondaggi online\n\nQuesto tipo di servizio permette a questo Sito Web di gestire la creazione, l'implementazione, l'amministrazione, la distribuzione e l'analisi di formulari e di sondaggi online al fine di raccogliere, salvare e riutilizzare i Dati degli Utenti che rispondono.\nI Dati Personali raccolti dipendono dalle informazioni richieste e fornite dagli Utenti nel formulario online corrispondente.\n\nQuesti servizi possono essere integrati con un'ampia gamma di servizi di terze parti per consentire al Titolare di compiere azioni successive con i Dati trattati - ad esempio, gestione dei contatti, invio di messaggi, statistiche, pubblicità ed elaborazione dei pagamenti.\n\nCustomerly Survey (Customerly Ltd.)\n\nCustomerly Survey è un generatore di sondaggi e una piattaforma di raccolta dati fornita da Customerly Ltd.\n\nDati Personali trattati: cognome; data di nascita; Dati di utilizzo; email; nome; professione; sesso.\n\nLuogo del trattamento: Irlanda – Privacy Policy.\n\nHeat mapping e registrazione sessioni\n\nI servizi di Heat mapping sono utilizzati per individuare le aree di questo Sito Web con le quali gli Utenti interagiscono con maggior frequenza, in modo da rilevare quali di esse attraggono maggior interesse. Questi servizi permettono di monitorare e analizzare i dati di traffico e servono a tener traccia del comportamento dell’Utente.\nAlcuni di questi servizi potrebbero registrare le sessioni e renderle disponibili per visualizzarle in seguito.\n\nHotjar Heat Maps & Recordings (Hotjar Ltd.)\n\nHotjar è un servizio di heat mapping e di registrazione delle sessioni fornito da Hotjar Ltd.\nHotjar rispetta gli header generici „Do Not Track”. Questo significa che il browser può indicare allo script di non raccogliere alcun dato dell’Utente. Si tratta di un'impostazione che è disponibile in tutti i principali browser. Maggiori Informazioni sull'opt-out da Hotjar sono disponibili qui.\n\nDati Personali trattati: Dati di utilizzo; Strumento di Tracciamento; varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Malta – Privacy Policy – Opt Out.\n\nHosting ed infrastruttura backend\n\nQuesto tipo di servizi ha la funzione di ospitare Dati e file che permettono a questo Sito Web di funzionare, ne consentono la distribuzione e mettono a disposizione un'infrastruttura pronta all'uso per erogare specifiche funzionalità di questo Sito Web.\n\nAlcuni servizi tra quelli elencati di seguito, se presenti, possono funzionare su server geograficamente distribuiti, rendendo difficile determinare l'effettiva ubicazione in cui sono conservati i Dati Personali.\n\nAmazon Web Services (AWS) (Amazon Web Services, Inc.)\n\nAmazon Web Services (AWS) è un servizio di hosting e backend fornito da Amazon Web Services, Inc.\n\nDati Personali trattati: varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Germania – Privacy Policy; Italia – Privacy Policy.\n\nInterazione con le piattaforme di live chat\n\nQuesto tipo di servizi permette di interagire con le piattaforme di live chat gestite da soggetti terzi, direttamente dalle pagine di questo Sito Web, al fine di poter contattare ed essere contattati dal servizio di supporto di questo Sito Web.\n\nNel caso in cui sia installato un servizio di interazione con le piattaforme di live chat, è possibile che, anche nel caso gli Utenti non utilizzino il servizio, lo stesso raccolga Dati di Utilizzo relativi alle pagine in cui è installato. Inoltre, le conversazioni della live chat potrebbero essere registrate.\n\nWidget di Chat Customerly (Customerly Ltd.)\n\nIl Widget di Chat Customerly è un servizio di interazione con la piattaforma di live chat Customerly, fornito da Customerly Ltd.\n\nDati Personali trattati: cognome; Dati comunicati durante l'utilizzo del servizio; Dati di utilizzo; email; nome; Strumento di Tracciamento.\n\nLuogo del trattamento: Irlanda – Privacy Policy.\n\nRegistrazione ed autenticazione\n\nCon la registrazione o l’autenticazione l’Utente consente a questo Sito Web di identificarlo e di dargli accesso a servizi dedicati.\n\nA seconda di quanto indicato di seguito, i servizi di registrazione e di autenticazione potrebbero essere forniti con l’ausilio di terze parti. Qualora questo avvenga, questo Sito Web potrà accedere ad alcuni Dati conservati dal servizio terzo usato per la registrazione o l’identificazione.\n\nAlcuni dei servizi di seguito indicati potrebbero raccogliere Dati Personali anche per fini di targeting e profilazione; per saperne di più, si prega di fare riferimento alla descrizione di ciascun servizio.\n\nGoogle OAuth (Google LLC)\n\nGoogle OAuth è un servizio di registrazione ed autenticazione fornito da Google LLC e collegato al network Google.\n\nDati Personali trattati: varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nPermessi Gmail per l’accesso ai Dati dell’Utente (aggiunta OAuth) (Google LLC)\n\nPer fornire il suo servizio, questo Sito Web utilizza gli scopi limitati per Gmail che permettono di accedere ai Dati dell’Utente relativi a questo servizio Google (come indicato di seguito). Questo accesso è fornito da Google LLC secondo termini rigorosi. Di seguito è riportato che cosa significa questo per tali Dati dell’Utente.\n\nL'uso dei Dati Utente è limitato alla fornitura o al miglioramento delle funzionalità di interfaccia Utente. I dati dell'Utente non saranno utilizzati per pubblicare annunci, né per il retargeting e la pubblicità personalizzata o basata sugli interessi.\n\nI Dati dell'Utente saranno trasferiti a terzi solo se necessario, per fornire o migliorare le funzionalità di interfaccia Utente e se necessario per conformarsi alla legge applicabile o come parte di una fusione, acquisizione o vendita di beni previo preavviso agli Utenti.\n\nI Dati non saranno letti da esseri umani a meno che: il Titolare abbia ottenuto l'accordo affermativo dell'Utente per messaggi specifici; sia necessario per motivi di sicurezza e/o per rispettare la legge applicabile, oppure; l'utilizzo venga limitato ad operazioni interne e i Dati (comprese le loro derivazioni) siano stati aggregati e resi anonimi.\n\nDati Personali trattati: Accesso completo.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nStatistica\n\nI servizi contenuti nella presente sezione permettono al Titolare del Trattamento di monitorare e analizzare i dati di traffico e servono a tener traccia del comportamento dell’Utente.\n\nGoogle Analytics (Google LLC)\n\nGoogle Analytics è un servizio di analisi web fornito da Google LLC (“Google”). Google utilizza i Dati Personali raccolti allo scopo di tracciare ed esaminare l’utilizzo di questo Sito Web, compilare report e condividerli con gli altri servizi sviluppati da Google.\n\nGoogle potrebbe utilizzare i Dati Personali per contestualizzare e personalizzare gli annunci del proprio network pubblicitario.\n\nDati Personali trattati: Dati di utilizzo; Strumento di Tracciamento.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy – Opt Out.\n\nVisualizzazione di contenuti da piattaforme esterne\n\nQuesto tipo di servizi permette di visualizzare contenuti ospitati su piattaforme esterne direttamente dalle pagine di questo Sito Web e di interagire con essi.\nQuesto tipo di servizio potrebbe comunque raccogliere dati sul traffico web relativo alle pagine dove il servizio è installato, anche quando gli utenti non lo utilizzano.\n\nFont Awesome (Fonticons, Inc. )\n\nFont Awesome è un servizio di visualizzazione di stili di carattere gestito da Fonticons, Inc. che permette a questo Sito Web di integrare tali contenuti all’interno delle proprie pagine.\n\nDati Personali trattati: Dati di utilizzo.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nGoogle Fonts (Google LLC)\n\nGoogle Fonts è un servizio di visualizzazione di stili di carattere gestito da Google LLC che permette a questo Sito Web di integrare tali contenuti all’interno delle proprie pagine.\n\nDati Personali trattati: Dati di utilizzo; varie tipologie di Dati secondo quanto specificato dalla privacy policy del servizio.\n\nLuogo del trattamento: Stati Uniti – Privacy Policy.\n\nUlteriori informazioni sui Dati Personali\nVendita di beni e servizi online\n\nI Dati Personali raccolti sono utilizzati per l’erogazione di servizi all’Utente o per la vendita di prodotti, inclusi il pagamento e l’eventuale consegna. I Dati Personali raccolti per perfezionare il pagamento possono essere quelli relativi alla carta di credito, al conto corrente utilizzato per il bonifico o ad altri strumenti di pagamento previsti. I Dati di pagamento raccolti da questo Sito Web dipendono dal sistema di pagamento utilizzato.\n\nDiritti dell’Utente\n\nGli Utenti possono esercitare determinati diritti con riferimento ai Dati trattati dal Titolare.\nIn particolare, l’Utente ha il diritto di:\n\n1. Revocare il consenso in ogni momento. L’Utente può revocare il consenso al trattamento dei propri Dati Personali precedentemente espresso;\n2. Opporsi al trattamento dei propri Dati. L’Utente può opporsi al trattamento dei propri Dati quando esso avviene su una base giuridica diversa dal consenso, fermo restando il legittimo interesse del Titolare, che può in ogni caso giustificare il trattamento. Ulteriori dettagli sul diritto di opposizione sono indicati nella sezione sottostante.\n3. Accedere ai propri Dati. L’Utente ha diritto ad ottenere informazioni sui Dati trattati dal Titolare, su determinati aspetti del trattamento ed a ricevere una copia dei Dati trattati;\n4. Verificare e chiedere la rettificazione. L’Utente può verificare la correttezza dei propri Dati e richiederne l’aggiornamento o la correzione;\n5. Ottenere la limitazione del trattamento. Quando ricorrono determinate condizioni, l’Utente può richiedere la limitazione del trattamento dei propri Dati. In tal caso il Titolare non tratterà i Dati per alcun altro scopo se non la loro conservazione.\n6. Ottenere la cancellazione o rimozione dei propri Dati Personali. Quando ricorrono determinate condizioni, l’Utente può richiedere la cancellazione dei propri Dati da parte del Titolare.\n7. Ricevere i propri Dati o farli trasferire ad altro titolare. L’Utente ha diritto di ricevere i propri Dati in formato strutturato, di uso comune e leggibile da dispositivo automatico e, ove tecnicamente fattibile, di ottenerne il trasferimento senza ostacoli ad un altro titolare. Questa disposizione è applicabile quando i Dati sono trattati con strumenti automatizzati ed il trattamento è basato sul consenso dell’Utente, su un contratto di cui l’Utente è parte o su misure contrattuali ad esso connesse.\n8. Proporre reclamo. L’Utente può proporre un reclamo all’autorità di controllo della protezione dei dati personali competente o agire in sede giudiziale.\n\nDettagli sul diritto di opposizione\n\nQuando i Dati Personali sono trattati nell’interesse pubblico, nell’esercizio di pubblici poteri di cui è investito il Titolare oppure per perseguire un interesse legittimo del Titolare, gli Utenti hanno diritto ad opporsi al trattamento per motivi connessi alla loro situazione particolare.\n\nSi fa presente agli Utenti che, ove i loro Dati fossero trattati con finalità di marketing diretto, possono opporsi al trattamento senza fornire alcuna motivazione. Per scoprire se il Titolare tratti dati con finalità di marketing diretto gli Utenti possono fare riferimento alle rispettive sezioni di questo documento.\n\nCome esercitare i diritti\n\nPer esercitare i diritti dell’Utente, gli Utenti possono indirizzare una richiesta agli estremi di contatto del Titolare indicati nell’apposito paragrafo. Ulteriori informazioni sul trattamento\nDifesa in giudizio\n\nI Dati Personali dell’Utente possono essere utilizzati da parte del Titolare in giudizio o nelle fasi preparatorie alla sua eventuale instaurazione per la difesa da abusi nell'utilizzo di questo Sito Web o dei Servizi connessi da parte dell’Utente.\n\nL’Utente dichiara di essere consapevole che il Titolare potrebbe essere obbligato a rivelare i Dati per ordine delle autorità pubbliche.\n\nInformative specifiche\n\nSu richiesta dell’Utente, in aggiunta alle informazioni contenute in questa privacy policy, questo Sito Web potrebbe fornire all'Utente delle informative aggiuntive e contestuali riguardanti Servizi specifici, o la raccolta ed il trattamento di Dati Personali.\n\nLog di sistema e manutenzione\n\nPer necessità legate al funzionamento ed alla manutenzione, questo Sito Web e gli eventuali servizi terzi da essa utilizzati potrebbero raccogliere log di sistema, ossia file che registrano le interazioni e che possono contenere anche Dati Personali, quali l’indirizzo IP Utente.\n\nInformazioni non contenute in questa policy\n\nUlteriori informazioni in relazione al trattamento dei Dati Personali potranno essere richieste in qualsiasi momento al Titolare del Trattamento utilizzando gli estremi di contatto.\n\nRisposta alle richieste “Do Not Track”\n\nQuesto Sito Web non supporta le richieste “Do Not Track”. Per scoprire se gli eventuali servizi di terze parti utilizzati le supportino, l'Utente è invitato a consultare le rispettive privacy policy.\n\nModifiche a questa privacy policy\n\nIl Titolare del Trattamento si riserva il diritto di apportare modifiche alla presente privacy policy in qualunque momento notificandolo agli Utenti su questa pagina. Si prega dunque di consultare con frequenza questa pagina, facendo riferimento alla data di ultima modifica indicata in fondo.\n\nQualora le modifiche interessino trattamenti la cui base giuridica è il consenso, il Titolare provvederà a raccogliere nuovamente il consenso dell’Utente, se necessario.\n\nDefinizioni e riferimenti legali\nDati Personali (o Dati)\n\nCostituisce dato personale qualunque informazione che, direttamente o indirettamente, anche in collegamento con qualsiasi altra informazione, ivi compreso un numero di identificazione personale, renda identificata o identificabile una persona fisica.\n\nDati di Utilizzo\n\nSono le informazioni raccolte automaticamente attraverso questo Sito Web (anche da applicazioni di parti terze integrate in questo Sito Web), tra cui: gli indirizzi IP o i nomi a dominio dei computer utilizzati dall’Utente che si connette con questo Sito Web, gli indirizzi in notazione URI (Uniform Resource Identifier), l’orario della richiesta, il metodo utilizzato nell’inoltrare la richiesta al server, la dimensione del file ottenuto in risposta, il codice numerico indicante lo stato della risposta dal server (buon fine, errore, ecc.) il paese di provenienza, le caratteristiche del browser e del sistema operativo utilizzati dal visitatore, le varie connotazioni temporali della visita (ad esempio il tempo di permanenza su ciascuna pagina) e i dettagli relativi all’itinerario seguito all’interno dell’Applicazione, con particolare riferimento alla sequenza delle pagine consultate, ai parametri relativi al sistema operativo e all’ambiente informatico dell’Utente.\n\nUtente\n\nL'individuo che utilizza questo Sito Web che, salvo ove diversamente specificato, coincide con l'Interessato.\n\nInteressato\n\nLa persona fisica cui si riferiscono i Dati Personali.\n\nResponsabile del Trattamento (o Responsabile)\n\nLa persona fisica, giuridica, la pubblica amministrazione e qualsiasi altro ente che tratta dati personali per conto del Titolare, secondo quanto esposto nella presente privacy policy.\n\nTitolare del Trattamento (o Titolare)\n\nLa persona fisica o giuridica, l'autorità pubblica, il servizio o altro organismo che, singolarmente o insieme ad altri, determina le finalità e i mezzi del trattamento di dati personali e gli strumenti adottati, ivi comprese le misure di sicurezza relative al funzionamento ed alla fruizione di questo Sito Web. Il Titolare del Trattamento, salvo quanto diversamente specificato, è il titolare di questo Sito Web.\n\nQuesto Sito Web (o questa Applicazione)\n\nLo strumento hardware o software mediante il quale sono raccolti e trattati i Dati Personali degli Utenti.\n\nServizio\n\nIl Servizio fornito da questo Sito Web così come definito nei relativi termini (se presenti) su questo sito/applicazione.\n\nUnione Europea (o UE)\n\nSalvo ove diversamente specificato, ogni riferimento all’Unione Europea contenuto in questo documento si intende esteso a tutti gli attuali stati membri dell’Unione Europea e dello Spazio Economico Europeo.\n\nCookie\n\nI Cookie sono Strumenti di Tracciamento che consistono in piccole porzioni di dati conservate all'interno del browser dell'Utente.\n\nStrumento di Tracciamento\n\nPer Strumento di Tracciamento s’intende qualsiasi tecnologia - es. Cookie, identificativi univoci, web beacons, script integrati, e-tag e fingerprinting - che consenta di tracciare gli Utenti, per esempio raccogliendo o salvando informazioni sul dispositivo dell’Utente.\n\nAccesso completo\n\nAccesso completo all'account, compresa la cancellazione permanente di conversazioni e messaggi.\n\nRiferimenti legali\n\nLa presente informativa privacy è redatta sulla base di molteplici ordinamenti legislativi, inclusi gli artt. 13 e 14 del Regolamento (UE) 2016/679.\n\nOve non diversamente specificato, questa informativa privacy riguarda esclusivamente questo Sito Web.\n\nUltima modifica: 25 giugno 2021\n`\n","export const PrivacyEng = `\nPrivacy Policy of www.calendbook.com \n\nThis Website collects some Personal Data from its Users. \n\nThis document can be printed using the print command present \nin the settings of any browser. \n\nData Controller \n\nCALENDBOOK SRL - VIA FELICE CAVALLOTTI 67, 70032 BITONTO (BA) \nOwner contact email: privacy@calendbook.com \n\n\nTypes of Data collected \n\nAmong the Personal Data collected by this Website / App, either independently or \nthrough third parties parts, there are: \nUsage data; Tracking Tool; first name; last name; Data communicated while using the service; e-mail; sex; date of birth; profession; Full access.\n\nComplete details on each type of data collected are provided in the dedicated sections of this privacy policy or through specific information texts displayed before the data is collected. \nPersonal Data may be freely provided by the User or, in the case of Usage Data, collected automatically when using this Website. \nUnless otherwise specified, all Data requested by this Website are mandatory. If the User refuses to communicate them, it may be impossible for this Website to provide the Service. \nIn cases where this Website indicates some Data as optional, Users are free to refrain from communicating such Data, without this having any consequence on the availability of the Service or on its operation.\nUsers who have doubts about which data are mandatory can contact the owner at the aforementioned email address. \nAny use of Cookies - or other tracking tools - by this Website or by the owners of third party services used by this Website, unless otherwise specified, is intended to provide the Service requested by the User, as well as for the additional purposes described in this document and in the Cookie Policy, if available. \n\nThe User assumes responsibility for the Personal Data of third parties obtained, published or shared through this Website and guarantees to have the right to communicate or disseminate them, freeing the Owner from any liability to third parties. \n\nMethod and place of processing of the collected data\nProcessing methods \n\nThe Data Controller adopts the appropriate security measures aimed at preventing unauthorized access, disclosure, modification or destruction of Personal Data. \nThe processing is carried out using IT and / or telematic tools, with organizational methods and with logic strictly related to the purposes indicated.\nIn addition to the Data Controller, in some cases, other subjects involved in the organization of this Website (administrative, commercial, marketing, legal, system administrators) or external subjects (such as third party technical service providers, postal couriers) may have access to the Data. , hosting providers, IT companies, communication agencies) also appointed, if necessary, as Data Processors by the Data Controller. The updated list of Managers can always be requested from the Data Controller at the email address privacy@calendbook.com \n\nLegal basis of the processing \n\nThe Data Controller processes Personal Data relating to the User if the following conditions exist \n\n1. The User has provided the consent for one or more specific purposes;\nNote: in some jurisdictions the Data Controller may be authorized to process Personal Data without the User's consent or another of the legal bases specified below, as long as the User does not object (\"opt-out\") to such treatment. However, this is not applicable if the processing of Personal Data is governed by European legislation on the protection of Personal Data; \n2. the processing is necessary for the execution of a contract with the User and / or for the execution of pre-contractual measures (as in the case of users who register to use the services offered by the Data Controller) \n3. the processing is necessary to fulfill a legal obligation to which the Data Controller is subject;\n4. the processing is necessary for the execution of a task of public interest or for the exercise of public authority vested in the Data Controller; \n5. the processing is necessary for the pursuit of the legitimate interest of the Data Controller or third parties. \n\nHowever, it is always possible to ask the Data Controller to clarify the concrete legal basis of each treatment and in particular to specify whether the treatment is based on the law, provided for by a contract or necessary to conclude a contract. \n\nPlace of processing\n\nThe Data are processed at the operational headquarters of the Data Controller and in any other place where the parties involved in the processing are located, with IT tools and possibly also in paper format where strictly necessary. For more information, contact the owner. \nThe User's Personal Data may be transferred to a country other than the one in which the User is located. To obtain further information on the place of processing of their personal data, the User can refer to the section relating to the details on the processing of Personal Data.\n\nThe User has the right to obtain information regarding the legal basis for the transfer of Data outside the European Union or to an international organization governed by public international law or consisting of two or more countries, such as the UN, as well as regarding the security measures adopted by the Data Controller to protect the Data. \n\nThe User can check if one of the transfers described above takes place by examining the section of this document relating to the details on the processing of Personal Data or requesting information from the Data Controller by contacting him at the indicated details in opening. \n\nRetention period \n\nThe Data are processed and stored for the time required by the purposes for which they were collected.\n\nThe Personal Data collected for purposes related to the execution of the contract between the Owner and the User will be retained until the execution of this contract is completed, but can also be processed after its complete execution for administrative and / or legal requirements that make this further treatment necessary. \n\nPersonal Data collected for purposes related to the legitimate interest of the Data Controller will be retained until this interest is satisfied. The User can obtain further information regarding the legitimate interest pursued by the Data Controller in the relevant sections of this document or by contacting the Data Controller.\n\nWhen the processing is based on the User's consent, the Data Controller may keep the Personal Data longer until such consent is revoked. In particular, where personal data are collected and processed for marketing purposes, the Data Controller will keep and process said data no later than 5 years from the moment the data subject has given the last express consent for this purpose. \n\nFurthermore, the Data Controller may be obliged to keep Personal Data for a longer period in compliance with a legal obligation or by order of an authority.\n\nAt the end of the retention period, the Personal Data will be deleted. Therefore, at the end of this term the right of access, cancellation, rectification and the right to data portability can no longer be exercised, without prejudice to the possibility of using the aforementioned data in aggregate and anonymous form for statistical purposes. \n\nPurpose of the processing of the data collected \n\nThe user data is collected to allow the owner to provide the service, comply with legal obligations, respond to requests or executive actions, protect their rights and interests (or those of users or third parties ), identify any malicious or fraudulent activities, as well as for the following purposes:\nDisplay of contents from external platforms, Statistics, Tag Management, Payment Management, Registration and authentication, Heat mapping and session registration, Interaction with live chat platforms, Management of data collection and online surveys, User database management, Contact management and sending of messages and Hosting and backend infrastructure. \n\nTo obtain detailed information on the purposes of the processing and on the Personal Data processed for each purpose, the User can refer to the section \"Details on the processing of Personal Data\". \n\nDetails on the processing of Personal Data Personal \n\nData, based on the aforementioned purposes, are collected and processed through the use of the following services:\n\nManaging contacts and sending messages \n\nThis type of service allows you to manage a database of email contacts, telephone contacts or contacts of any other type, used to communicate with the User. \nThese services may also allow the collection of data relating to the date and time the messages are displayed by the User, as well as to the User's interaction with them, such as information on clicks on the links inserted in the messages. \n\nCustomerly E-mail Marketing (Customerly Ltd.) \n\nCustomerly E-mail Marketing is an address management and e-mail message sending service provided by Customerly Ltd. \n\nPersonal data processed: surname; Usage data; e-mail; first name. \n\nPlace of processing: Ireland - Privacy Policy.\n\nAmazon Simple Email Service (Amazon) \n\nAmazon Simple Email Service is an address management and email message sending service provided by Amazon.com Inc. \n\nPersonal data processed: email. \n\nPlace of processing: United States - Privacy Policy. \n\nUser database management \n\nThis type of service allows the Owner to build user profiles starting from an email address, name or any other information that the User provides to this Website / App, as well as to track the User's activities through statistical features.\nThese Personal Data may also be crossed with publicly available information on the User (such as profiles on social networks) and used to build private profiles that the Owner can view and use to improve this Website. \nSome of these services may also allow the Scheduled sending of messages to the User, such as emails based on specific actions performed on this Website. \n\nCustomerly (Customerly Ltd.) \n\nCustomerly is a user database management service provided by Customerly Ltd. \nCustomerly can also be used as a means of communication , to exchange emails or messages using this Website.\n\nPersonal Data processed: Usage data; e-mail; Tracking Tool; various types of data as specified in the privacy policy of the service. \n\nPlace of processing: Ireland - Privacy Policy. \n\nPayment Management \n\nUnless otherwise specified, this Website / App processes all payments by credit card, bank transfer or other means through external payment service providers. In general, and unless otherwise stated, Users are requested to provide payment details and personal information directly to such payment service providers.\nThis Website is not involved in the collection and processing of such information, as it will only receive a notification from the relevant payment service provider that the payment has been made. \n\nStripe (Stripe Inc) \n\nStripe is a payment service provided by Stripe Inc. \n\nPersonal data processed: various types of data as specified in the privacy policy of the service. \n\nPlace of processing: United States - Privacy Policy. \n\nTag management \n\nThis type of service is functional to the centralized management of the tags or scripts used on this Website. The use of these services involves the flow of User Data through them and, where appropriate, their retention. \n\nGoogle Tag Manager (Google LLC)\n\nGoogle Tag Manager is a tag management service provided by Google LLC. \n\nPersonal Data processed: Usage data. \n\nPlace of processing: United States - Privacy Policy. \n\nManagement of data collection and online surveys \n\nThis type of service allows this Website to manage the creation, implementation, administration, distribution and analysis of online forms and surveys in order to collect, save and reuse the Data of the Users who respond. \nThe Personal Data collected depend on the information requested and provided by Users in the corresponding online form.\n\nThese services can be integrated with a wide range of third-party services to allow the Owner to perform subsequent actions with the processed Data - for example, contact management, sending messages, statistics, advertising and payment processing. \n\nCustomerly Survey (Customerly Ltd.) \n\nCustomerly Survey is a survey generator and data collection platform provided by Customerly Ltd. \n\nPersonal data processed: surname; date of birth; Usage data; e-mail; first name; profession; sex. \n\nPlace of processing: Ireland - Privacy Policy. \n\nHeat mapping and session recording\n\nHeat mapping services are used to identify the areas of this Website with which Users interact most frequently, in order to detect which of them attract the most interest. These services allow you to monitor and analyze traffic data and are used to keep track of User behavior. \nSome of these services may log sessions and make them available for later viewing. \n\nHotjar Heat Maps & Recordings (Hotjar Ltd.) \n\nHotjar is a heat mapping and session recording service provided by Hotjar Ltd.\nHotjar respects generic “Do Not Track” headers. This means that the browser can tell the script not to collect any User data. This is a setting that is available in all major browsers. More information on the opt-out from Hotjar can be found here. \n\nPersonal Data processed: Usage data; Tracking Tool; various types of data as specified in the privacy policy of the service. \n\nPlace of processing: Malta - Privacy Policy - Opt Out. \n\nHosting and backend infrastructure\n\nThis type of service has the function of hosting Data and files that allow this Website to function, allow its distribution and make available a ready-to-use infrastructure to provide specific features of this Website. \n\nSome services among those listed below, if present, they can work on geographically distributed servers, making it difficult to determine the actual location in which the Personal Data are stored. \n\nAmazon Web Services (AWS) (Amazon Web Services, Inc.) \n\nAmazon Web Services (AWS) is a hosting and backend service provided by Amazon Web Services, Inc. \n\nPersonal Data processed: various types of Data as specified in the privacy policy of the service.\n\nPlace of processing: Germany - Privacy Policy; Italy - Privacy Policy. \n\nInteraction with live chat platforms \n\nThis type of service allows you to interact with live chat platforms managed by third parties, directly from the pages of this Website, in order to be able to contact and be contacted by the support service of this Website. \n\nIn the event that an interaction service with live chat platforms is installed, it is possible that, even if the Users do not use the service, it collects Usage Data relating to the pages in which it is installed. Additionally, live chat conversations may be recorded. \n\nCustomerly Chat Widget (Customerly Ltd.)\n\nThe Customerly Chat Widget is an interaction service with the Customerly live chat platform, provided by Customerly Ltd. \n\nPersonal data processed: surname; Data communicated while using the service; Usage data; e-mail; first name; Tracking Tool. \n\nPlace of processing: Ireland - Privacy Policy. \n\nRegistration and authentication \n\nBy registering or authenticating, the User allows this Website to identify him and to give him access to dedicated services. \n\nDepending on what is indicated below, the registration and authentication services could be provided with the help of third parties. If this happens, this Website will be able to access some Data stored by the third party service used for registration or identification.\n\nSome of the services listed below may also collect Personal Data for targeting and profiling purposes; to learn more, please refer to the description of each service. \n\nGoogle OAuth (Google LLC) \n\nGoogle OAuth is a registration and authentication service provided by Google LLC and connected to the Google network. \n\nPersonal Data processed: various types of Data as specified in the privacy policy of the service. \n\nPlace of processing: United States - Privacy Policy. \n\nGmail permissions for accessing User Data (OAuth added) (Google LLC)\n\nTo provide its service, this Website uses the limited purposes for Gmail that allow you to access User Data relating to this Google service (as indicated below). This access is provided by Google LLC under strict terms. Below is what this means for such User Data. \n\nThe use of the User Data is limited to the provision or improvement of the User interface functionality. User data will not be used to serve ads, or for retargeting and personalized or interest-based advertising.\n\nUser Data will be transferred to third parties only if necessary, to provide or improve the User interface functionality and if necessary to comply with applicable law or as part of a merger, acquisition or sale of assets upon prior notice to Users. \n\nThe Data will not be read by human beings unless: the Owner has obtained the User's affirmative agreement for specific messages; it is necessary for security reasons and / or to comply with applicable law, or; the use is limited to internal operations and the Data (including their derivations) have been aggregated and made anonymous. \n\nPersonal data processed: Full access. \n\nPlace of processing: United States - Privacy Policy. \n\nStatistics\n\nThe services contained in this section allow the Data Controller to monitor and analyze traffic data and are used to keep track of User behavior. \n\nGoogle Analytics (Google LLC) \n\nGoogle Analytics is a web analytics service provided by Google LLC (“Google”). Google uses the Personal Data collected for the purpose of tracking and examining the use of this Website, compiling reports and sharing them with other services developed by Google. \n\nGoogle may use the Personal Data to contextualize and personalize the advertisements of its own advertising network. \n\nPersonal Data processed: Usage data; Tracking Tool. \n\nPlace of processing: United States - Privacy Policy - Opt Out.\n\nViewing content from external platforms \n\nThis type of service allows you to view content hosted on external platforms directly from the pages of this Website and interact with them. \nThis type of service may still collect data on web traffic relating to the pages where the service is installed, even when users do not use it. \n\nFont Awesome (Fonticons, Inc.) \n\nFont Awesome is a font style visualization service managed by Fonticons, Inc. that allows this Website to integrate such content within its pages. \n\nPersonal Data processed: Usage data. \n\nPlace of processing: United States - Privacy Policy. \n\nGoogle Fonts (Google LLC)\n\nGoogle Fonts is a font style visualization service managed by Google LLC that allows this Website to integrate such contents within its pages. \n\nPersonal Data processed: Usage data; various types of data as specified in the privacy policy of the service. \n\nPlace of processing: United States - Privacy Policy. \n\nFurther information on Personal Data \nSale of goods and services online\n\nThe Personal Data collected are used for the provision of services to the User or for the sale of products, including payment and possible delivery. The Personal Data collected to complete the payment may be those relating to the credit card, the current account used for the transfer or other payment instruments provided. The payment data collected by this website depend on the payment system used. \n\nUser rights \n\nUsers can exercise certain rights with reference to the data processed by the owner. \nIn particular, the User has the right to: \n\n1. Revoke the consent at any time. The User can revoke the consent to the processing of their Personal Data previously expressed;\n2. Oppose the processing of their data. The User may oppose the processing of their data when it occurs on a legal basis other than consent, without prejudice to the legitimate interest of the Data Controller, who can in any case justify the processing. Further details on the right to object are indicated in the section below. \n3. Access your Data. The User has the right to obtain information on the Data processed by the Data Controller, on certain aspects of the processing and to receive a copy of the Data processed; \n4. Verify and ask for rectification. The User can verify the correctness of his / her Data and request its updating or correction;\n5. Obtain the limitation of the treatment. When certain conditions are met, the User may request the limitation of the processing of their Data. In this case the Data Controller will not process the Data for any other purpose than their conservation. \n6. Obtain the cancellation or removal of your Personal Data. When certain conditions are met, the User can request the cancellation of their Data by the Owner.\n7. Receive your data or have it transferred to another owner. The User has the right to receive his / her Data in a structured format, commonly used and readable by an automatic device and, where technically feasible, to obtain the transfer without obstacles to another owner. This provision is applicable when the Data is processed with automated tools and the processing is based on the User's consent, on a contract to which the User is a party or on contractual measures connected to it. \n8. Make a complaint. The User can lodge a complaint with the competent personal data protection supervisory authority or take legal action. \n\nDetails on the right to object\n\nWhen Personal Data are processed in the public interest, in the exercise of public authority vested in the Data Controller or to pursue a legitimate interest of the Data Controller, Users have the right to oppose the processing for reasons connected to their particular situation. \n\nUsers are reminded that, if their Data are processed for direct marketing purposes, they can oppose the processing without providing any reasons. To find out if the Data Controller processes data for direct marketing purposes, Users can refer to the respective sections of this document. \n\nHow to exercise your rights\n\nTo exercise the User's rights, Users can direct a request to the contact details of the Owner indicated in the appropriate paragraph. Further information on treatment \nDefense in court \n\nThe User's Personal Data may be used by the Owner in court or in the preparatory stages for its eventual establishment for the defense against abuse in the use of this Website or related Services by the User. \n\nThe User declares to be aware that the Owner may be obliged to disclose the Data by order of the public authorities. \n\nSpecific information\n\nAt the request of the User, in addition to the information contained in this privacy policy, this Website may provide the User with additional and contextual information regarding specific Services, or the collection and processing of Personal Data. \n\nSystem \n\nlogs and maintenance For needs related to operation and maintenance, this Website and any third party services used by it may collect system logs, which are files that record the interactions and which may also contain Personal Data, such as the IP address User. \n\nInformation not contained in this policy\n\nFurther information in relation to the processing of Personal Data may be requested at any time from the Data Controller using the contact details. \n\nResponse to \"Do Not Track\" requests \n\nThis Website does not support \"Do Not Track\" requests. To find out if any third-party services used support them, the User is invited to consult the respective privacy policies. \n\nChanges to this privacy policy \n\nThe Data Controller reserves the right to make changes to this privacy policy at any time by notifying Users on this page. Please therefore consult this page frequently, referring to the date of the last modification indicated at the bottom.\n\nIf the changes concern treatments whose legal basis is consent, the Data Controller will collect the User's consent again, if necessary. \n\nDefinitions and legal references \nPersonal Data (or Data) \n\nAny information that, directly or indirectly, also in connection with any other information, including a personal identification number, makes a natural person identified or identifiable. \n\nUsage Data\n\nThis is the information collected automatically through this Website (including from third-party applications integrated into this Website), including: the IP addresses or domain names of the computers used by the User who connects with this Website, the addresses in URI (Uniform Resource Identifier) ​​notation, the time of the request, the method used to forward the request to the server, the size of the file obtained in response, the numerical code indicating the status of the response from the server (successful, error, etc. .) the country of origin, the characteristics of the browser and operating system used by the visitor, the various temporal connotations of the visit (for example the time spent on each page) and the details of the itinerary followed within the Application,with particular reference to the sequence of the pages consulted, to the parameters relating to the operating system and the IT environment of the User.\n\nUser \n\nThe individual who uses this Website who, unless otherwise specified, coincides with the Data Subject. \n\nInterested \n\nThe natural person to whom the Personal Data refers. \nData \n\nProcessor (or Manager) \nThe natural person, legal person, public administration and any other body that processes personal data on behalf of the Data Controller, as set out in this privacy policy. \n\nData Controller (or Owner)\n\nThe natural or legal person, public authority, service or other body which, individually or together with others, determines the purposes and means of the processing of personal data and the tools adopted, including the security measures relating to the operation and use of this Website. The Data Controller, unless otherwise specified, is the owner of this Website. \n\nThis Website (or this Application) \n\nThe hardware or software tool through which the Personal Data of Users are collected and processed. \n\nService \n\nThe Service provided by this Website as defined in the relative terms (if any) on this site / application. \n\nEuropean Union (or EU)\n\nUnless otherwise specified, any reference to the European Union contained in this document is intended to be extended to all current member states of the European Union and the European Economic Area. \n\nCookies \n\nCookies are Tracking Tools which consist of small pieces of data stored in the User's browser. \n\nTracking Tool Tracking \n\nTool means any technology - eg. Cookies, unique identifiers, web beacons, integrated scripts, e-tags and fingerprinting - which allow users to be tracked, for example by collecting or saving information on the User's device. \n\nFull access Full \n\naccess to your account, including permanent deletion of conversations and messages.\n\nLegal references \n\nThis privacy statement is drawn up on the basis of multiple legislative systems, including articles. 13 and 14 of Regulation (EU) 2016/679. \n\nUnless otherwise specified, this privacy policy applies exclusively to this Website. \n\nLast modified: June 25, 2021\n`\n","import React, { useEffect } from \"react\";\nimport { RefundIta } from \"./refund-ita\";\nimport { RefundEng } from \"./refund-eng\";\nimport { useTranslation } from \"react-i18next\";\n\nfunction Refund() {\n useEffect(() => {\n document.title = \"Calendbook - Refund\";\n }, []);\n\n try {\n window.tidioChatApi.show();\n } catch {}\n\n const { i18n } = useTranslation();\n\n return (\n
\n \n {i18n.language.substring(0, 2) === \"it\" ? RefundIta : RefundEng}\n \n
\n );\n}\n\nexport default Refund;\n","export const RefundIta = `\nCalendBook.com Refund Policy\n\nLast Updated: 4th December 2023\n\nWelcome to CalendBook.com. We are committed to customer satisfaction and compliance with EU consumer protection laws. This policy outlines the conditions under which refunds may be requested and processed.\n\nEligibility for Refunds:\n14-Day Cooling-Off Period: In compliance with EU consumer rights, you have a 14-day cooling-off period to request a full refund, starting from the day of purchase. This is applicable for both one-time purchases and subscription-based services.\nNon-conformity with Description: If the software significantly deviates from the description provided or does not function as advertised, you may request a refund within 30 days of purchase.\nTechnical Issues: If you encounter technical issues that prevent the proper use of our software and our team is unable to resolve the issue within a reasonable timeframe, you are eligible for a refund.\nSubscription Cancellations: For subscription services, you may cancel at any time. However, refunds are only provided for the current billing cycle if the request is made within the 14-day cooling-off period.\n\nExclusions from Refunds:\nBeyond Cooling-Off Period: No refunds will be issued for requests made beyond the 14-day cooling-off period, unless the product is non-functional or significantly different from its description.\nMisuse or Unauthorized Use: Refunds will not be granted if the product was misused, or if issues arise due to unauthorized or improper use of the software.\n\nProcess for Requesting a Refund:\nContact Us: To initiate a refund, please contact our support team on the Live Chat at Calendbook.com. Provide your email and a detailed reason for the refund request.\nReview Process: Our team will review your request and may contact you for additional information. Please allow up to 30 days for us to process your request.\nRefund Issuance: If your refund is approved, it will be processed, and a credit will automatically be applied to your original method of payment, within a certain number of days.\n`\n","import React, { useEffect } from \"react\";\nimport { TermsEng } from \"./terms-eng\";\n\nfunction Terms() {\n useEffect(() => {\n document.title = \"Calendbook - Terms\";\n }, []);\n try {\n window.tidioChatApi.show();\n } catch {}\n return (\n
\n \n {TermsEng}\n \n
\n );\n}\n\nexport default Terms;\n","export const TermsEng = `\nTerms and conditions of Calendbook.com\n\nWelcome to Calendbook.com\n\nThese terms and conditions outline the rules and regulations for the use of Calendbook.com. Calendbook.com is located at: https://calendbook.com\t \n\nBy accessing this extension we assume you accept these terms and conditions in full. Do not continue to use Calendbook.com if you do not accept all of the terms and conditions stated on this page.\n\nThe following terminology applies to these Terms and Conditions, Privacy Statement and Disclaimer Notice and any or all Agreements: \"Client\", \"You\" and \"Your\" refers to you, the person accessing this website and accepting the Company's terms and conditions. \n\n\"The Company\", \"Ourselves\", \"We\", \"Our\" and \"Us\", refers to our Company. \"Party\", \"Parties\", or \"Us\", refers to both the Client and ourselves, or either the Client or ourselves. \n\nAll terms refer to the offer, acceptance and consideration of payment necessary to undertake the process of our assistance to the Client in the most appropriate manner, whether by formal meetings of a fixed duration, or any other means, for the express purpose of meeting the Client's needs in respect of provision of the Company's stated services/products, in accordance with and subject to, prevailing law of Italy. \n\nAny use of the above terminology or other words in the singular, plural, capitalisation and/or he/she or they, are taken as interchangeable and therefore as referring to same. \n\nCookies\nWe employ the use of cookies. By using the Calendbook.com website you consent to the use of cookies in accordance with Calendbook.com privacy policy. Most of the modern day interactive websites use cookies to enable us to retrieve user details for each visit. Cookies are used in some areas of our site to enable the functionality of this area and ease of use for those people visiting. Some of our affiliate / advertising partners may also use cookies.\n\nLicense\nUnless otherwise stated, Calendbook.com and/or its licensors own the intellectual property rights for all material on Calendbook.com. All intellectual property rights are reserved. You may view and/or print pages from https://www.calendbook.com/ for your own personal use subject to restrictions set in these terms and conditions.\n\t\nYou must not:\n\t\nRepublish material from https://www.calendbook.com/ \nSell, rent or sub-license material from https://www.calendbook.com/ \nReproduce, duplicate or copy material from https://www.calendbook.com/ \n\t\nRedistribute content from Calendbook.com (unless content is specifically made for redistribution).\n\nPayments\nRefund Policy\nAll sales of Products or services are final with no refund or exchange permitted. You are responsible for the subscription plan Product or Service(s) that you have purchased.\n\nBilling\nIf you are purchasing a paid subscription for the Services, you must provide us with a valid credit card or other form of payment instrument approved by us to pay for the subscription fee set out in the Subscription Plan. You agree that we have permission to retain and/or share with financial institutions and payment processing firms your submitted payment information in order to process your purchase. You agree that we may bill your credit card or other form of payment instrument approved by us in advance and on a periodic basis in accordance with the Subscription Plan.\n\nAccount Changes and Cancellation.\nYou may cancel, upgrade or downgrade your subscription at any time. (For details on the account change and cancellation procedure, please refer to the instructions available at documentation of our website). Following an upgrade or downgrade of your subscription, you may be charged or issued a credit, as applicable, for the difference in fees between your old and new subscriptions prorated for the number of days remaining in the subscription period. Following the cancellation of your subscription, the Service will remain active for a number of days remaining in the subscription period.\n\n\nLate Payment.\nIf any amounts due under these Terms are not received by us by the due date set out in the Subscription Plan, we may: (i) charge interest on such amounts at the rate of 12% per year or the maximum rate permitted by law, whichever is lower, from the date payment was due until the date paid, and/or (ii) suspend your access to the Services or cancel your subscription.\n\nUser Comments\t\n\nThis Agreement shall begin on the date hereof January 1st 2022.\n\nCertain parts of this website offer the opportunity for users to post and exchange opinions, information,material and data ('Comments') in areas of the website. Calendbook.com does not screen, edit, publish or review Comments prior to their appearance on the website and Comments do not reflect the views or opinions of Calendbook.com, its agents or affiliates. Comments reflect the view and opinion of the person who posts such view or opinion. To the extent permitted by applicable laws Calendbook.com shall not be responsible or liable for the Comments or for any loss cost, liability, damages or expenses caused and or suffered as a result of any use of and/or posting of and/or appearance of the Comments on this website.\n\nCalendbook.com reserves the right to monitor all Comments and to remove any Comments which it considers in its absolute discretion to be inappropriate, offensive or otherwise in breach of these Terms and Conditions.\n\nYou warrant and represent that:\t\t\t\nYou are entitled to post the Comments on our website and have all necessary licenses and consents to do so;\nThe Comments do not infringe any intellectual property right, including without limitation copyright, patent or trademark, or other proprietary right of any third party;\nThe Comments do not contain any defamatory, libelous, offensive, indecent or otherwise unlawful material or material which is an invasion of privacy.\nThe Comments will not be used to solicit or promote business or custom or present commercial activities or unlawful activity.\n\t\t\t\nYou hereby grant to Calendbook.com a non-exclusive royalty-free license to use, reproduce, edit and authorize others to use, reproduce and edit any of your Comments in any and all forms, formats or media.\n\t\nHyperlinking to our Content\n\t\nThe following organizations may link to our Web site without prior written approval:\n\t\t\t\nGovernment agencies;\nSearch engines;\nNews organizations;\nOnline directory distributors when they list us in the directory may link to our Web site in the same manner as they hyperlink to the Web sites of other listed businesses; and\nSystemwide Accredited Businesses except soliciting non-profit organizations, charity shopping malls, and charity fundraising groups which may not hyperlink to our Website.\n\t\t\t\nThese organizations may link to our home page, to publications or to other Web site information so long as the link: (a) is not in any way misleading; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and its products or services; and (c) fits within the context of the linking party's site.\n\t\t\nWe may consider and approve in our sole discretion other link requests from the following types of organizations:\n\ncommonly-known consumer and/or business information sources such as Chambers of Commerce, American Automobile Association, AARP and Consumers Union; dot.com community sites; associations or other groups representing charities, including charity giving sites, online directory distributors; internet portals; accounting, law and consulting firms whose primary clients are businesses; and educational institutions and trade associations.\n\t\t\t\nWe will approve link requests from these organizations if we determine that: (a) the link would not reflect unfavorably on us or our accredited businesses (for example, trade associations or other organizations representing inherently suspect types of business, such as work-at-home opportunities, shall not be allowed to link); (b)the organization does not have an unsatisfactory record with us; (c) the benefit to us from the visibility associated with the hyperlink outweighs the absence of ; and (d) where the link is in the context of general resource information or is otherwise consistent with editorial content in a newsletter or similar product furthering the mission of the organization.\n\nThese organizations may link to our home page, to publications or to other Web site information so long as the link: (a) is not in any way misleading; (b) does not falsely imply sponsorship, endorsement or approval of the linking party and it products or services; and (c) fits within the context of the linking party's site.\n\nIf you are among the organizations listed in paragraph 2 above and are interested in linking to our website, you must notify us by sending an e-mail to info@calendbook.com \n\nPlease include your name, your organization name, contact information (such as a phone number and/or e-mail address) as well as the URL of your site, a list of any URLs from which you intend to link to our Website, and a list of the URL(s) on our site to which you would like to link. Allow 2-3 weeks or longer for a response.\n\nApproved organizations may hyperlink to our Website and/or extension as follows:\n\nBy use of our corporate name; or\nBy use of the uniform resource locator (Web address) being linked to; or\nBy use of any other description of our Web site or material being linked to that makes sense within the context and format of content on the linking party's site.\n\t\nNo use of Calendbook.com logo or other artwork will be allowed for linking absent a trademark license agreement.\n\nReservation of Rights\nWe reserve the right at any time and in its sole discretion to request that you remove all links or any particular link to our Website. You agree to immediately remove all links to our Website upon such request. We also reserve the right to amend these terms and conditions and its linking policy at any time. By continuing to link to our Website, you agree to be bound to and abide by these linking terms and conditions.\n\nRemoval of links from our website\nIf you find any link on our Web site or any linked web site objectionable for any reason, you may contact us about this. We will consider requests to remove links but will have no obligation to do so or to respond directly to you.\n\nWhilst we endeavour to ensure that the information on this website is correct, we do not warrant its completeness or accuracy; nor do we commit to ensuring that the website remains available or that the material on the website is kept up to date.\n\nContent Liability\nWe shall have no responsibility or liability for any content appearing on your Website. You agree to indemnify and defend us against all claims arising out of or based upon your Website. No link(s) may appear on any page on your Website or within any context containing content or materials that may be interpreted as libelous, obscene or criminal, or which infringes, otherwise violates, or advocates the infringement or other violation of, any third party rights.\n\nDisclaimer\nTo the maximum extent permitted by applicable law, we exclude all representations, warranties and conditions relating to our website and the use of this website (including, without limitation, any warranties implied by law in respect of satisfactory quality, fitness for purpose and/or the use of reasonable care and skill). Nothing in this disclaimer will:\n\t\nlimit or exclude our or your liability for death or personal injury resulting from negligence;\nlimit or exclude our or your liability for fraud or fraudulent misrepresentation;\nlimit any of our or your liabilities in any way that is not permitted under applicable law; or\nexclude any of our or your liabilities that may not be excluded under applicable law.\n\t\nThe limitations and exclusions of liability set out in this Section and elsewhere in this disclaimer: (a) are subject to the preceding paragraph; and (b) govern all liabilities arising under the disclaimer or in relation to the subject matter of this disclaimer, including liabilities arising in contract, in tort (including negligence) and for breach of statutory duty.\n\nTo the extent that the website and the information and services on the website are provided free of charge, we will not be liable for any loss or damage of any nature.\n\n\t\nCredit & Contact Information\nThis Terms and conditions page was created at termsandconditionstemplate.com generator. If you have any queries regarding any of our terms, please contact us.\n\nDisclaimer\nThe information contained on our website and extension website (the \"Service\") is for general information purposes only. We assume no responsibility for errors or omissions in the contents of the Service.\n\nIn no event shall we be liable for any special, direct, indirect, consequential, or incidental damages or any damages whatsoever, whether in an action of contract, negligence or other tort, arising out of or in connection with the use of the Service or the contents of the Service such as for instance getting your account blocked, suspended or deleted by Instagram or other web services. We reserve the right to make additions, deletions, or modifications to the contents on the Service at any time without prior notice. We do not warrant that the website is free of viruses or other harmful components.\n\n\n`\n","import {stripeTermsText} from './stripe-terms-text';\nimport ReactGA from \"react-ga4\";\n\nfunction Terms(){\n ReactGA.send({ hitType: \"pageview\", page: \"/stripe-terms\", title: \"Stripe Terms\" });\n try{window.tidioChatApi.show()}catch{}\n return(\n
\n
\n        {stripeTermsText} \n      
\n
\n );\n}\n\nexport default Terms;\n","export const stripeTermsText = `\nBooking Cancellation Policy:\n\nWe want to provide clear guidelines regarding booking cancellations for both guests and owners. Please take note of the following:\n\nGuest Cancellation:\n\nIf a guest decides to cancel their booking, no refunds will be provided. We understand that plans can change, but we encourage guests to carefully consider their commitments before confirming a booking. This helps maintain fairness for owners who rely on confirmed bookings.\n\nOwner Cancellation:\n\nIf the owner cancels the booking, they have the option to issue a refund to the guest. We prioritize reliability and trustworthiness, and expect owners to fulfill their commitments to guests. However, please note that in exceptional circumstances, an owner may need to cancel due to unforeseen events or circumstances beyond their control. In such cases, we work closely with both parties to find a fair resolution.\n\nBy using our app, users agree to abide by this booking cancellation policy, which serves as the agreement between the app provider and its users. It is essential for both guests and owners to understand and respect these guidelines to ensure a smooth and reliable booking experience.\n\nShould you have any questions or require further assistance, our dedicated customer support team is always ready to help.\n`\n","import React from 'react';\n\nfunction Brand(){\n return(\n <>\n \n \"calendbook\"\n \n \n \"calendbook\"\n \n \n );\n}\n\nexport default Brand;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Link} from 'react-router-dom';\nimport {Navbar, Nav} from 'react-bootstrap';\nimport auth from '../Account/Auth';\n\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction LifetimeMessage(){\n const { t } = useTranslation(['navbar','common']);\n const staticVendor = \"/upgrade\";\n let vendor = auth.getVendor();\n if(vendor === undefined || vendor === null || vendor === \"\"){\n vendor = staticVendor;\n }\n\n return(\n <>\n \n \n \n \n );\n}\n\nexport default LifetimeMessage;\n","import React from 'react'\nimport * as Sentry from '@sentry/react';\nimport { GoogleOAuthProvider, GoogleLogin } from '@react-oauth/google';\nimport auth from './Account/Auth';\n\nfunction Fallback(){\n return (\n
\n an error occurred\n
\n )\n}\n\nconst fallback = ;\n\nconst STANDARD_CLIENT_ID = '93252394910-584iq1mr08q684hurrfma0i9fct9cs82.apps.googleusercontent.com';\n\nfunction Login ({redirect, callback, setLoggingProvider, clientId}){\n return (\n \n \n {setLoggingProvider && setLoggingProvider(\"google\")}}\n onSuccess={async (credentialResponse) => {\n try{\n await auth.login({idToken:credentialResponse?.credential})\n .then(() => {\n // check on '/onboarding' pathname helps avoiding redirect override\n // in case auth module needs to bring the user on onboarding page\n if (redirect && window.location.pathname !== '/onboarding') { window.location.href = redirect }\n if (callback) { callback() }\n })\n .catch(e => {\n console.log(\"request catch: error while logging in with google provider: \", e)\n })\n }catch(e){\n console.log(\"functional catch: error while logging in with google provider: \", e)\n }finally{\n (setLoggingProvider && setLoggingProvider(\"none\"))\n }\n }}\n onError={() => {\n console.log('Login Failed');\n (setLoggingProvider && setLoggingProvider(\"none\"))\n }}\n useOneTap\n />\n \n \n );\n}\n\nexport default Login\n","import { useTranslation } from \"react-i18next\";\nimport { useLocation } from \"react-router-dom\";\nimport { Link } from \"react-router-dom\";\nimport Nav from \"react-bootstrap/Nav\";\nimport Button from \"react-bootstrap/Button\";\nimport auth from \"../../Account/Auth\";\n\nfunction Shortcuts() {\n const { t } = useTranslation([\"navbar\"]);\n const location = useLocation();\n const borderStyle = { borderBottom: \"2px solid\" };\n const hasAgency = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"agencyId\"],\n fallback: null,\n });\n const plan = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n const agencyLink = hasAgency ? \"/agency\" : \"/upgrade#agency\";\n\n return (\n \n \n \n {t(\"calendarConnections\")}\n \n \n\n \n \n Leads\n \n \n\n \n \n {t(\"integrations\")}\n \n \n\n \n \n Team\n \n \n\n \n \n {t(\"embedPage\")}\n \n \n\n {plan !== \"professional\" && (\n \n \n \n \n \n )}\n \n );\n}\n\nexport default Shortcuts;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport auth from '../Account/Auth';\n\n\nfunction UserPic(){\n\n return(\n <>\n \"user-pic\"\n \n );\n}\n\nexport default UserPic;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport auth from '../Account/Auth';\n\n\nfunction UserName(){\n\n return(\n <>\n \n \n {auth.getFullName()}\n \n \n \n );\n}\n\nexport default UserName;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport auth from '../Account/Auth';\n\nfunction UserStatus(){\n const role = auth.getProperty({\n storageKey: 'userSession',\n path: ['profileObj','planStatus','status'],\n fallback: 'unknown',\n });\n\n const getPlanColor = (_role) => {\n switch(_role){\n case \"LTD\": return \"text-success\";\n case \"professional\": return \"text-primary\";\n case \"premium\": return \"text-warning\";\n case \"free\": return \"text-info\";\n default: return \"text-secondary\"\n }\n }\n\n return(\n \n {role} plan\n \n );\n}\n\nexport default UserStatus;\n","import React, { useState, useContext } from \"react\";\nimport ThemeContext from \"../../ThemeContext\";\nimport { useTranslation } from \"react-i18next\";\nimport { Row, Col, Nav, NavLink, NavItem, Dropdown } from \"react-bootstrap\";\nimport { CopyToClipboard } from \"react-copy-to-clipboard\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"./profile-menu.css\";\nimport UserPic from \"../UserPic\";\nimport UserName from \"../UserName\";\nimport UserStatus from \"../UserStatus\";\nimport auth from \"../../Account/Auth\";\n\nfunction getFlag(language) {\n // getting only first 2 chars of the language (it, en, ...)\n language = language.toLowerCase().substring(0, 2);\n if (language === \"it\")\n return (\n \n \n \n );\n if (language === \"en\")\n return (\n \n \n \n );\n if (language === \"es\")\n return (\n \n \n \n );\n if (language === \"de\")\n return (\n \n \n \n );\n if (language === \"fr\")\n return (\n \n \n \n );\n}\n\nfunction setDomTheme(theme) {\n const root = window.document.getElementById(\"root\");\n const html = window.document.getElementById(\"html\");\n root.setAttribute(\"data-theme\", theme);\n html.setAttribute(\"data-theme\", theme);\n window.localStorage.setItem(\"theme\", theme);\n}\n\nfunction _ProfileMenu({ agent }) {\n const themeButtonStyle = {\n background: \"transparent\",\n border: \"none\",\n margin: 0,\n padding: 0,\n textAlign: \"left\",\n width: \"100%\",\n };\n const [theme, setTheme] = useContext(ThemeContext);\n const [copied, setCopied] = useState(false);\n const { t, i18n } = useTranslation([\"navbar\"]);\n const protocol = window.location.protocol;\n const host = window.location.host;\n const publicAddress = protocol + \"//\" + host + \"/\" + auth.getName();\n\n const plan = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n\n function copy() {\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 3000);\n }\n\n return (\n <>\n \n \n \n
\n
\n \n
\n {agent && (\n
\n \n impersonated by\n \n {agent.fullName}\n
\n )}\n
\n
\n \n
\n \n
\n\n {\n copy();\n }}\n >\n \n
\n {copied ? (\n \n ) : (\n \n )}\n
\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Team\n \n \n \n Leads\n \n {plan !== \"professional\" && (\n \n \n {t(\"upgrade\")}\n \n )}\n \n \n {t(\"integrations\")}\n \n \n \n {t(\"calendarConnections\")}\n \n \n \n {t(\"embedPage\")}\n \n {auth.getAgencyId() && (\n \n \n Agency\n \n )}\n \n \n {t(\"settings\")}\n {getFlag(i18n.language)}\n \n \n {theme === \"light\" ? (\n {\n setTheme(\"dark\");\n setDomTheme(\"dark\");\n }}\n style={themeButtonStyle}\n >\n \n Dark theme\n \n ) : (\n {\n setTheme(\"light\");\n setDomTheme(\"light\");\n }}\n style={themeButtonStyle}\n >\n \n Light theme\n \n )}\n \n \n \n \n {t(\"logout\")}\n \n \n \n
\n \n );\n}\n\nexport default _ProfileMenu;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport UserContext from \"../UserContext\";\nimport { Navbar, Nav, Container } from \"react-bootstrap\";\nimport { Link } from \"react-router-dom\";\nimport \"./Navbar.css\";\nimport Brand from \"./Brand\";\nimport TrialMessage from \"./TrialMessage\";\nimport LifetimeMessage from \"./LifetimeMessage\";\nimport auth from \"../Account/Auth\";\nimport Login from \"../Login\";\nimport Shortcuts from \"./Shortcuts/_Shortcuts\";\nimport ProfileMenu from \"./ProfileMenu/_ProfileMenu\";\n\nfunction Navbar_(props) {\n // carico il context (lo userò per decidere cosa renderizzare nella navbar)\n const [user, setUser] = useContext(UserContext);\n const [agent, setAgent] = useState(null);\n const [impersonationUI, setImpersonationUI] = useState(null);\n const { t } = useTranslation([\"navbar\"]);\n const NewNavbar = window.calendbookUI.Navbar;\n const Logo = window.calendbookUI.LogoFull;\n useEffect(() => {\n if (user.isImpersonated) {\n setAgent(user?.impersonatingAgent);\n } else {\n setAgent(null);\n }\n }, [user.isImpersonated, user.impersonatingAgent]);\n\n const scrollTo = (_id) => {\n try {\n const element = document.getElementById(_id);\n if (element) {\n element.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\",\n inline: \"nearest\",\n });\n } else {\n throw new Error(`Element with id \"${_id}\" not found.`);\n }\n } catch (error) {\n console.error(error.message);\n }\n };\n\n return (\n <>\n {user?.logged ? (\n \n \n \n \n \n \n \n {user.logged ? (\n <>\n \n \n \n ) : (\n <>\n {window.location.pathname === \"/login\" && (\n <>\n \n \n \n \n \n )}\n \n )}\n \n \n ) : (\n <>\n {window.location.pathname === \"/login\" && (\n {\n scrollTo(\"pricing\");\n },\n },\n {\n name: \"Earn with Affiliation\",\n url: \"https://affiliates.calendbook.com/\",\n newTab: true,\n },\n {\n name: \"Blog\",\n url: \"https://medium.com/calendbook\",\n newTab: true,\n },\n ]}\n />\n )}\n \n )}\n \n );\n}\n\nexport default Navbar_;\n","import { useState, useContext } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useMediaQuery } from \"react-responsive\";\nimport ThemeContext from \"../ThemeContext\";\nimport { useLocation, Link } from \"react-router-dom\";\nimport auth from \"../Account/Auth\";\n\nfunction Sidebar({ isSidebarExpanded, setIsSidebarExpanded }) {\n const { t } = useTranslation([\"sidebar\"]);\n const [theme, setTheme] = useContext(ThemeContext);\n const [copied, setCopied] = useState(false);\n const isMobile = useMediaQuery({ query: \"(max-width: 767px)\" });\n const logoColor = \"#f04c23\";\n const Logo = window.calendbookUI.Logo;\n const Logotype = window.calendbookUI.Logotype;\n const userFullName = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"name\"],\n fallback: \"\",\n });\n const userPlan = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n const userPic = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"pic\"],\n fallback: \"/app-assets/img/standard-user-pic.png\",\n });\n const userAgency = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"agencyId\"],\n fallback: false,\n });\n const userSlug = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"slugName\"],\n fallback: \"None\",\n });\n const username = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"username\"],\n fallback: \"\",\n });\n\n const publicAddress = `/${userSlug !== \"None\" ? userSlug : username}`;\n\n function setDomTheme(theme) {\n const root = window.document.getElementById(\"root\");\n const html = window.document.getElementById(\"html\");\n root.setAttribute(\"data-theme\", theme);\n html.setAttribute(\"data-theme\", theme);\n window.localStorage.setItem(\"theme\", theme);\n }\n\n // Function to handle the copy action\n const handleCopy = async () => {\n try {\n const protocol = window.location.protocol;\n const host = window.location.host;\n const userSlug = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"slugName\"],\n fallback: \"None\",\n });\n const username = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"username\"],\n fallback: \"\",\n });\n const publicAddress = `${protocol}//${host}/${\n userSlug !== \"None\" ? userSlug : username\n }`;\n\n // Use the Clipboard API to write the text\n await navigator.clipboard.writeText(publicAddress);\n\n // Update the state to show the check icon\n setCopied(true);\n\n // After 2 seconds, revert the icon back\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy the link:\", err);\n }\n };\n\n // Define the menu items\n const menuItems = [\n {\n href: \"/\",\n iconClass: \"fas fa-home\",\n label: t(\"navigation.home\"),\n condition: true,\n },\n {\n href: \"/calendarconnections\",\n iconClass: \"fas fa-calendar\",\n label: t(\"navigation.calendars\"),\n condition: true,\n },\n {\n href: \"/leads\",\n iconClass: \"fa-solid fa-address-book\",\n label: t(\"navigation.leads\"),\n condition: true,\n },\n {\n href: \"/integrations\",\n iconClass: \"fas fa-plug\",\n label: t(\"navigation.integrations\"),\n condition: true,\n },\n {\n href: \"/team\",\n iconClass: \"fas fa-users\",\n label: t(\"navigation.team\"),\n condition: true,\n },\n {\n href: \"/agency\",\n iconClass: \"fa-solid fa-user-tie\",\n label: t(\"navigation.agency\"),\n condition: userAgency,\n },\n {\n href: \"/embed\",\n iconClass: \"fas fa-code\",\n label: t(\"navigation.embed\"),\n condition: true,\n },\n {\n href: \"/upgrade\",\n iconClass: \"far fa-credit-card\",\n label: t(\"navigation.upgrade\"),\n condition: userPlan !== \"professional\",\n },\n ];\n\n const location = useLocation();\n\n return (\n <>\n {window.location.pathname !== \"/login\" &&\n window.location.pathname !== \"/onboarding\" &&\n !isMobile &&\n username && (\n \n
\n \n \n {isSidebarExpanded && (\n \n \n \n )}\n \n
    \n {menuItems\n .filter((item) => item.condition)\n .map((item, index) => {\n const isActive = location.pathname === item.href;\n return (\n
  • \n \n \n {isSidebarExpanded && (\n \n {item.label}\n \n )}\n \n
  • \n );\n })}\n
\n
\n {/* Profile Obj */}\n \n \n {isSidebarExpanded && (\n
\n
\n
\n {userFullName}\n
\n
\n {userPlan}\n
\n
\n
\n )}\n \n\n {/* Copy Link */}\n \n \n {isSidebarExpanded && (\n {t(\"functions.copyLink\")}\n )}\n \n\n {/* Settings */}\n \n \n {isSidebarExpanded && (\n \n {t(\"navigation.settings\")}\n \n )}\n \n\n {/* Theme Switcher */}\n {theme === \"light\" ? (\n {\n setTheme(\"dark\");\n setDomTheme(\"dark\");\n }}\n className={`tw-flex tw-items-center tw-py-1.5 ${\n isSidebarExpanded ? \"tw-px-5\" : \"tw-px-3\"\n } tw-text-sm tw-text-gray-400 hover:tw-text-gray-900 dark:hover:tw-text-white`}\n type=\"button\"\n >\n \n {isSidebarExpanded && (\n \n {t(\"functions.darkTheme\")}\n \n )}\n \n ) : (\n {\n setTheme(\"light\");\n setDomTheme(\"light\");\n }}\n className={`tw-flex tw-items-center tw-py-1.5 ${\n isSidebarExpanded ? \"tw-px-5\" : \"tw-px-3\"\n } tw-text-sm tw-text-gray-400 hover:tw-text-gray-900 dark:hover:tw-text-white`}\n type=\"button\"\n >\n \n {isSidebarExpanded && (\n \n {t(\"functions.lightTheme\")}\n \n )}\n \n )}\n\n {/* Logout */}\n \n \n {isSidebarExpanded && (\n \n {t(\"navigation.logout\")}\n \n )}\n \n
\n\n {/* Collapse Toggle Button */}\n setIsSidebarExpanded(!isSidebarExpanded)}\n >\n \n {isSidebarExpanded && (\n \n {t(\"functions.collapse\")}\n \n )}\n \n
\n \n )}\n \n );\n}\n\nexport default Sidebar;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Row, Col, Dropdown, Navbar, Container } from \"react-bootstrap\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\n// only update language on be if user is logged\nasync function setUserLanguage(language) {\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"account\", \"/setOwnerLanguage\", { language: language }, true)\n .then(() => auth.refresh())\n .catch((error) => console.log(error));\n })\n .catch(() => {});\n}\n\nfunction getFlag(language) {\n // getting only first 2 chars of the language (it, en, ...)\n language = language.toLowerCase().substring(0, 2);\n if (language === \"it\")\n return (\n \n {\" \"}\n it\n \n );\n if (language === \"en\")\n return (\n \n {\" \"}\n en\n \n );\n if (language === \"es\")\n return (\n \n {\" \"}\n es{\" \"}\n \n );\n if (language === \"de\")\n return (\n \n {\" \"}\n de{\" \"}\n \n );\n if (language === \"fr\")\n return (\n \n {\" \"}\n fr{\" \"}\n \n );\n}\n\nfunction _Footer(props) {\n const location = useLocation();\n console.log(location);\n const Logo = window.calendbookUI.LogoFull;\n const { i18n } = useTranslation();\n const switchLng = async (lng) => {\n i18n.changeLanguage(lng);\n await setUserLanguage(lng);\n };\n const languageToggle = React.forwardRef(({ children, onClick }, ref) => (\n {\n e.preventDefault();\n onClick(e);\n }}\n >\n {children}\n \n \n ));\n\n return (\n <>\n {location.pathname === \"/login\" && (\n \n \n \n \n \n \n \n \n \n \n \n \n {getFlag(i18n.language)}\n \n\n \n switchLng(\"it\")}\n >\n \n \n {\" \"}\n italiano\n \n switchLng(\"en\")}\n >\n \n \n {\" \"}\n english\n \n switchLng(\"es\")}\n >\n \n \n {\" \"}\n español\n \n switchLng(\"de\")}\n >\n \n \n {\" \"}\n deutsch\n \n switchLng(\"fr\")}\n >\n \n \n {\" \"}\n francais\n \n \n \n \n \n \n \n

Menu

\n

\n \n About us\n \n

\n

\n \n Integrations\n \n

\n

\n \n Roadmap\n \n

\n

\n \n Blog\n \n

\n \n \n

\n Social Links\n

\n

\n \n Linkedin\n \n

\n

\n \n Twitter\n \n

\n

\n \n YouTube\n \n

\n \n \n

\n Comparisons\n

\n

\n \n Calendly\n \n

\n \n \n

\n \n {\" \"}\n {\" \"}\n \n

\n

\n \n {\" \"}\n {\" \"}\n \n

\n

\n \n {\" \"}\n {\" \"}\n \n

\n \n
\n \n \n \n \n \n Calendbook © {new Date().getFullYear()}\n \n \n \n \n Privacy Policy\n \n \n \n \n Terms & Conditions\n \n \n \n \n Refund Policy\n \n \n \n p. iva: 08486710729\n \n \n \n
\n \n )}\n \n );\n}\n\nexport default _Footer;\n","import { useTranslation } from 'react-i18next';\nimport './view-toggler.css';\n\nfunction _ViewToggler({activeView,toggleView}) {\n const {t} = useTranslation(['home']);\n return (\n
\n \n toggleView('upcomings')}\n >\n {t('viewToggler.upcomings')}\n \n \n \n toggleView('eventTypes')}\n >\n {t('viewToggler.eventTypes')}\n \n
\n );\n\n}\n\nexport default _ViewToggler;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\n\n\nfunction Color({color,enabled}){\n if(!enabled){\n color='#fff';\n }\n return(\n <>\n
\n \n );\n}\n\nexport default Color;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Dropdown, DropdownButton } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport be from \"../BE\";\nimport auth from \"../Account/Auth\";\n\n// TODO: renderizzare senza fare il reload della pagina\n// al momento c'è un href=\"/\" su tutti i button\n\nasync function deleteEvent(key_param) {\n await auth\n .isAuthenticated()\n .then(() => {\n const body = { key: key_param };\n be.del(\"eventtypes\", \"/eventypes\", body, true)\n .then((response) => (window.location.href = \"/\"))\n .catch((error) => console.log(error));\n })\n .catch(() => this.props.history.push(\"/login\"));\n}\n\nasync function secretEvent(key_param) {\n await auth\n .isAuthenticated()\n .then(() => {\n const body = { key: key_param };\n be.post(\"eventtypes\", \"/secret\", body, true)\n .then((response) => (window.location.href = \"/\"))\n .catch((error) => console.log(error));\n })\n .catch(() => this.props.history.push(\"/login\"));\n}\n\nasync function enableEvent(key_param) {\n await auth\n .isAuthenticated()\n .then(() => {\n const body = { key: key_param };\n be.post(\"eventtypes\", \"/enable\", body, true)\n .then((response) => (window.location.href = \"/\"))\n .catch((error) => console.log(error));\n })\n .catch(() => this.props.history.push(\"/login\"));\n}\n\nasync function duplicateEvent(key_param, newName) {\n await auth\n .isAuthenticated()\n .then(() => {\n const body = { newName };\n be.post(\n \"jubilant-events\",\n `/events/${key_param}/duplicate`,\n body,\n true,\n true\n )\n .then((response) => (window.location.href = \"/\"))\n .catch((error) => console.log(error));\n })\n .catch(() => this.props.history.push(\"/login\"));\n}\n\nfunction Settings({ id, secret, enabled, name }) {\n const { t } = useTranslation([\"eventType\"]);\n return (\n <>\n \n }\n className=\"float-end\"\n >\n {\n await secretEvent(id);\n }}\n >\n {secret ? t(\"settings.setPublic\") : t(\"settings.setPrivate\")}\n \n {\n await enableEvent(id);\n }}\n >\n {enabled ? t(\"settings.disable\") : t(\"settings.enable\")}\n \n {\n await deleteEvent(id);\n }}\n >\n {t(\"settings.delete\")}\n \n {\n await duplicateEvent(id, `(${t(\"settings.copy\")}) - ${name}`);\n }}\n >\n {t(\"settings.duplicate\")}\n \n \n \n );\n}\n\nexport default Settings;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nconst componentStyle = {\n color:\"var(--color-text)\"\n}\n\nfunction Name({name,isPaidEvent}){\n return(\n <>\n {isPaidEvent && '💵'} {name} \n \n );\n}\n\nexport default Name;\n","import React from \"react\";\nimport { Row, Col } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport Settings from \"./Settings\";\nimport Name from \"./Name\";\n\nfunction Up({ id, secret, enabled, name, publicPage, isPaidEvent }) {\n return (\n <>\n \n \n \n \n\n {!publicPage && (\n \n \n \n )}\n \n \n );\n}\n\nexport default Up;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction Duration({enabled,duration}){\n var color = \"var(--color-background-2)\";\n if(!enabled){color = \"var(--color-background-3)\"}\n return(\n <>\n \n \n {duration} min\n \n \n );\n}\n\nexport default Duration;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport { useTranslation } from 'react-i18next';\n\n\n\nfunction Private({enabled,secret}){\n const { t } = useTranslation(['eventType']);\n var color = \"var(--color-background-2)\";\n if(!enabled){\n color = \"var(--color-background-3)\"\n }\n return(\n <>\n {secret &&\n \n \n {t('private')}\n \n }\n \n );\n}\n\nexport default Private;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction truncate(str, n){\n return (str.length > n) ? str.substr(0, n-1) + '...' : str;\n};\n\nfunction Duration({location}){\n\n const componentStyle={\n color:'var(--color-text)',\n backgroundColor:'var(--color-background-2)',\n overflow:'hidden',\n maxWidth:'60ch',\n textOverflow:'ellipsis',\n whiteSpace:'nowrap'\n }\n\n return(\n <>\n

\n \n {truncate(location,30)}\n

\n \n );\n}\n\nexport default Duration;\n","import 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction Team({enabled}){\n var color = \"var(--color-background-2)\";\n if(!enabled){color = \"var(--color-background-3)\"}\n return(\n <>\n \n \n Team\n \n \n );\n}\n\nexport default Team;\n","function DisabledReason({reason}){\n var color = \"var(--color-warning)\";\n return(\n <>\n
\n
\n \n {reason === \"memberNeedsTemplate\" && \"Round Robin Member Needs Template\"}\n
\n
\n \n );\n}\n\nexport default DisabledReason;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport Duration from './Duration';\nimport Private from './Private';\nimport Location from './Location';\nimport Team from './Team';\nimport DisabledReason from './DisabledReason';\n\n\nfunction Middle({reason,team,enabled,duration,secret,location}){\n return(\n <>\n
\n \n \n {location && }\n {team && }\n {!enabled && reason && }\n
\n \n );\n}\n\nexport default Middle;\n","import React from 'react';\nimport {CopyToClipboard} from 'react-copy-to-clipboard';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport auth from '../Account/Auth';\n\nclass CopyLinkButton extends React.Component{\n state = { copied : false };\n\n // setta copied a true e dopo 3 sec di nuovo a false\n copied(){\n this.setState({copied:true});\n setTimeout(() => {this.setState({copied:false})}, 3000);\n }\n\n // so che renderizzare   è una puntina ma bootstrap mi faceva perdere tempo,\n // devo ritornarci al prossimo refactoring\n render(){\n let radixUrl = window.location.hostname\n let proto = ''\n if (radixUrl === \"localhost\"){radixUrl += ':3000'; proto='http://';}\n if (radixUrl === \"dev.calendbook.com\"){proto='https://'}\n if (radixUrl === \"www.calendbook.com\"){proto='https://'}\n radixUrl = proto + radixUrl\n const fullUrl = `${radixUrl}${this.props.url}`\n return(\n <>\n {this.copied()}}>\n \n \n \n );\n }\n}\n\nexport default CopyLinkButton;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport be from '../BE';\nimport auth from '../Account/Auth';\n\nasync function enableEvent(key_param){\n await auth.isAuthenticated()\n .then(() => {\n const body = { key : key_param }\n be.post('eventtypes','/enable',body,true)\n .then(response => window.location.href = '/')\n .catch(error => console.log(error));\n })\n .catch(() => this.props.history.push('/login'));\n}\n\nfunction CopyLinkButton({id}){\n return(\n <>\n \n \n );\n}\n\nexport default CopyLinkButton;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction Edit({id}){\n return(\n <>\n \n \n \n \n );\n}\n\nexport default Edit;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport {Row, Col} from 'react-bootstrap';\nimport CopyLinkButton from './CopyLinkButton';\nimport EnableEventButton from './EnableEventButton';\nimport Edit from './Edit';\n\nfunction Down({url,enabled,id}){\n return(\n <>\n \n \n {enabled \n ? \n <>\n \n \n \n : \n <>\n \n \n \n }\n \n \n \n );\n}\n\nexport default Down;\n","import React, { Component } from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './event-type.css';\nimport Color from './Color';\nimport Up from './Up';\nimport Middle from './Middle';\nimport Down from './Down';\n\nexport class EventType_ extends Component {\n constructor(props){\n super(props);\n this.state = props.state;\n }\n\n render(){\n var color = '';\n (this.state.enabled ? color=\"var(--color-background-1)\" : color=\"var(--color-disabled)\");\n return (\n <>\n
\n \n
\n \n \n \n
\n
\n \n );\n }\n}\n\nexport default EventType_;\n","import React from 'react';\nimport {useHistory} from \"react-router\";\nimport Alert from 'react-bootstrap/Alert'\nimport Button from 'react-bootstrap/Button'\nimport { useTranslation } from 'react-i18next';\n\nfunction ConnectionAlert (props){\n\n const history = useHistory();\n const { t } = useTranslation(['home']);\n \n const componentStyle = {\n maxWidth:400,\n margin: \"20px 0\",\n border: \"1px solid var(--color-border)\",\n borderRadius: 10\n }\n\n return(\n \n {t('connectionAlert.title')}\n

\n {t('connectionAlert.subtitle')}\n

\n
\n \n
\n
\n\n );\n}\n\nexport default ConnectionAlert;\n","import React from 'react';\nimport EventType from '../../EventType/EventType_'\nimport { useTranslation } from 'react-i18next';\nimport ConnectionAlert from './ConnectionAlert';\n\nfunction _EventTypeContainer(props){\n \n const eventTypes = props.state;\n const { t } = useTranslation(['home']);\n \n return(\n <>\n {/*Show a connection alert if no calendar is connected*/}\n {(props?.connections?.connectedCalendars <= 0) \n ?\n \n :\n <>\n {/*Show EventTypes if any only if user connected at least 1 calendar*/}\n {Object.keys(eventTypes).length > 0\n ?\n Object.keys(eventTypes).map((key) => (\n
\n \n
\n ))\n :\n t('eventTypes.empty') \n }\n \n }\n \n );\n}\n\nexport default _EventTypeContainer;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport spacetime from 'spacetime';\nimport i18n from '../../../i18n';\n\nconst componentStyle={\n fontSize:16,\n fontWeight:700,\n}\n\nfunction getUserLanguage(){\n return i18n.language.substring(0,2);\n}\n\nfunction setAmpm(){\n if(getUserLanguage() === \"en\"){return true}\n if(getUserLanguage() === \"it\"){return false}\n return true\n}\n\nfunction getSpacetimeObject(time){\n let hours = time.split(':')[0];\n let minutes = time.split(':')[1];\n let now = spacetime.now();\n now = now.hour(hours)\n now = now.minute(minutes)\n return now;\n}\n\nfunction formatTime(time){\n let spacetime = getSpacetimeObject(time); \n let displayTime = spacetime.format('{time-24}')\n if(setAmpm()){displayTime = spacetime.format('{time}')}\n return displayTime;\n}\n\nfunction getEndTime(time,duration){\n let spacetime = getSpacetimeObject(time)\n spacetime = spacetime.add(duration,'minutes');\n return spacetime.format('{time-24}');\n\n}\n\nfunction Time (props){\n const startTime = props.time;\n const duration = props.duration;\n const endTime = getEndTime(startTime,duration);\n const displayStartTime = formatTime(startTime);\n const displayEndTime = formatTime(endTime);\n\n\n return(\n \n {displayStartTime} - {displayEndTime}\n \n );\n}\n\nexport default Time;\n","const componentStyle = {\n fontSize:16,\n fontWeight:300,\n whiteSpace:'nowrap',\n maxWidth:'calc(100% - 80px)',\n display:'inline-block',\n overflow:'hidden',\n '-o-text-overflow':'ellipsis',\n textOverflow:'ellipsis',\n verticalAlign:'middle',\n lineHeight:'normal'\n}\n\nfunction Name (props){\n const name = props.name;\n\n return(\n \n {name}\n \n );\n}\n\nexport default Name;\n","import Badge from 'react-bootstrap/Badge';\n\nconst componentStyle={\n fontSize:20,\n fontWeight:300,\n whiteSpace:'nowrap',\n maxWidth:'100%',\n display:'block',\n overflow:'hidden',\n '-o-text-overflow':'ellipsis',\n textOverflow:'ellipsis'\n}\n\nconst pillStyle = {\n fontSize: '0,7em'\n}\n\nfunction Guest ({name,amount,currency, pendingReason, action}){\n return(\n \n {name}\n {amount && currency && 💸}\n {action === \"on_wait\" && pendingReason && \n \n {pendingReason.replaceAll(\"_\",\" \")}\n \n } \n \n );\n}\n\nexport default Guest;\n","import React, {useState} from 'react';\nimport {useHistory} from 'react-router-dom';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport SweetAlert from 'react-bootstrap-sweetalert';\nimport { useTranslation } from 'react-i18next';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport be from '../../../../BE';\nimport auth from '../../../../Account/Auth';\n\nconst frontendFormatter = (number) => {\n console.info('[upcomings][price] parsing be price:');\n let result = '';\n if(number !== undefined){\n result = Number(number)/100;\n }\n console.info(result);\n return result;\n};\n\n// TODO: controllare errori, re-rendering\nasync function deleteEvent (bookingId){\n await auth.isAuthenticated()\n .then(() => {\n const body = { bookingid : bookingId }\n be.del('booking','/booked',body,true)\n .then(response => window.location.href = '/')\n .catch(error => console.log(error)); \n })\n .catch(() => this.props.history.push('/login'));\n}\n\nfunction Delete (props){\n const { t, i18n } = useTranslation(['common','home']);\n const [deleteAlert,setDeleteAlert] = useState(false)\n let history = useHistory();\n\n return(\n <>\n setDeleteAlert(true)}\n style={{ padding:0, marginRight:10, border : \"none\", background : \"transparent\", color : \"var(--color-text)\", textDecoration:'underline'}}\n >\n\n {t('home:upcomings.details.delete')}\n\n \n\n {deleteAlert &&\n deleteEvent(props.bookingid)}\n onConfirm={() => history.push({pathname:`/operations/delete/${props.bookingid}`})}\n onCancel={() => setDeleteAlert(false)}\n style={{background:'var(--color-background-1)',color:'var(--color-text)'}}\n >\n {props?.amount && props?.currency &&\n <>\n {getSymbolFromCurrency(props?.currency)} {frontendFormatter(props?.amount)} Payment will be refunded\n \n }\n \n }\n \n );\n}\n\nexport default Delete;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Link} from 'react-router-dom'\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction Reschedule (props){\n const {t} = useTranslation(['home']);\n return(\n <>\n \n \n \n \n );\n}\n\nexport default Reschedule;\n","import { useTranslation } from 'react-i18next';\n\nfunction Guest(props){\n const {t} = useTranslation(['home']);\n const guestName = props.guestName;\n const guestMail = props.guestMail;\n return (\n
\n \n {t('upcomings.details.guests')}\n
\n {guestName}\n
\n
\n {guestMail}\n
\n
\n
\n );\n}\n\nexport default Guest;\n","import { useTranslation } from 'react-i18next';\n\nfunction Host({hostName,hostMail}){\n const {t} = useTranslation(['home']);\n return (\n
\n \n Host:\n
\n {hostName}\n
\n
\n {hostMail}\n
\n
\n
\n );\n}\n\nexport default Host;\n","import { useTranslation } from 'react-i18next';\nimport DOMPurify from 'dompurify';\n\nfunction toHyperlink(text)\n{\n //eslint-disable-next-line\n var pattern1 = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n var str1 = text.replace(pattern1, '$1');\n //eslint-disable-next-line\n var pattern2 =/(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n var str2 = str1.replace(pattern2, '$1$2');\n\n return str2;\n}\n\nfunction Location (props){\n const {t} = useTranslation(['home']);\n const location = props.location;\n var locationValue = ''\n if(typeof(location) === 'string'){\n console.info(\"[upcomings][details] location type is 'string'...\")\n locationValue = location\n }\n\n if(typeof(location) === 'object'){\n locationValue = location?.value\n }\n\n locationValue = DOMPurify.sanitize(locationValue)\n return (\n
\n {locationValue &&\n <>\n \n {t('upcomings.details.location')}\n
\n
\n \n }\n
\n );\n}\n\nexport default Location;\n","import {useTranslation} from 'react-i18next';\nimport getSymbolFromCurrency from 'currency-symbol-map';\n\nconst frontendFormatter = (number) => {\n console.info('[upcomings][price] parsing be price:');\n let result = '';\n if(number !== undefined){\n result = Number(number)/100;\n }\n console.info(result);\n return result;\n};\n\nfunction Price({amount,currency}){\n const {t} = useTranslation(['home'])\n return(\n <>\n {amount && currency &&\n <>\n \n {t('upcomings.details.payments')}\n
{getSymbolFromCurrency(currency)} {frontendFormatter(amount)}
\n
\n \n }\n \n );\n}\n\nexport default Price;\n","import { useTranslation } from 'react-i18next';\n\nfunction Notes (props){\n const {t} = useTranslation(['home']);\n const notes = props.notes;\n\n return (\n
\n {notes && \n <>\n \n {t('upcomings.details.notes')}\n
\n {notes}\n
\n
\n \n }\n
\n );\n}\n\nexport default Notes;\n","function Content({content}){\n return(\n
\n {content}\n
\n );\n}\n\nexport default Content;\n","import DOMPurify from 'dompurify';\n\nfunction toHyperlink(text){\n //eslint-disable-next-line\n var pattern1 = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n var str1 = text.replace(pattern1, '$1');\n //eslint-disable-next-line\n var pattern2 =/(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n var str2 = str1.replace(pattern2, '$1$2');\n\n return str2;\n}\n\nfunction Answer({fields,questionType}){\n const getFieldsArray = (_fields,_questionType) => {\n if(_questionType === 3) return [_fields]\n else return _fields\n }\n\n return (\n <>\n {Array.isArray(getFieldsArray(fields,questionType)) &&\n getFieldsArray(fields,questionType).map((field) => (\n
\n \n {(questionType === \"5\" || questionType === \"6\")\n ?
\n :<>{field}\n }\n
\n ))\n }\n \n );\n}\n\nexport default Answer;\n","import { useEffect,useState } from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Content from './Content';\nimport Answer from './Answer';\nimport auth from '../../../../../Account/Auth';\nimport be from '../../../../../BE';\n\nfunction Surveys({answers,bookingId,etype}){\n const {t} = useTranslation(['home']);\n\n\n return (\n <>\n {(answers && answers.length !== 0) &&\n <>\n
{t('upcomings.details.questions')}
\n {\n Object.keys(answers).map((key) => (\n
\n \n \n
\n ))\n }\n \n }\n \n \n );\n}\n\nexport default Surveys;\n","import {useState} from 'react';\nimport { useHistory } from 'react-router-dom';\nimport Spinner from 'react-bootstrap/Spinner';\nimport auth from '../../../../Account/Auth';\nimport be from '../../../../BE';\n\nconst buttonStyle={\n padding:0,\n marginRight:20,\n background:'transparent',\n border:'none'\n}\n\nfunction EventApproval ({bookingId}){\n const [loadingAccept,setLoadingAccept] = useState(false);\n const [loadingReject,setLoadingReject] = useState(false);\n const history = useHistory();\n\n const acceptEvent = async (_bookingId) => {\n try{\n setLoadingAccept(true); \n await auth.isAuthenticated()\n .then(async () => {\n await be.get('jubilant-booking',`/booking/accept/${_bookingId}`,false,true,true)\n .then(response => window.location.href = '/')\n .catch(error => console.log(error)); \n })\n }catch(e){\n console.error(e);\n history.push('/login');\n }finally{\n setLoadingAccept(false);\n }\n }\n\n const rejectEvent = async (_bookingId) => {\n try{\n setLoadingReject(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('jubilant-booking',`/booking/reject/${_bookingId}`,false,true,true)\n .then(response => window.location.href = '/')\n .catch(error => console.log(error)); \n })\n }catch(e){\n console.error(e);\n history.push('/login');\n }finally{\n setLoadingReject(false);\n }\n }\n\n return(\n
\n \n\n \n
\n );\n}\n\nexport default EventApproval;\n","import Delete from './Delete';\nimport Reschedule from './Reschedule';\nimport Guest from './Guest';\nimport Host from './Host';\nimport Location from './Location';\nimport Price from './Price';\nimport Notes from './Notes';\nimport Surveys from './Surveys/_Surveys';\nimport EventApproval from './EventApproval';\n\nconst componentStyle = {\n fontSize:16,\n fontWeight:300,\n}\n\nfunction Details (props){\n const details = props?.state;\n\n console.log(props)\n return(\n \n\n \n\n {details?.assignedMember &&\n \n }\n\n \n\n \n\n \n\n \n\n\n {details?.action === \"on_wait\" && details?.bookingPendingReason === \"pending_confirmation\" &&\n \n }\n\n {details?.action === \"on_wait\" && details?.bookingPendingReason === \"pending_payment\" &&\n Get paid by your guest to confirm the event\n }\n\n {(details?.action === \"booking\" || details?.action === \"reschedule\") &&\n <>\n \n \n \n }\n \n \n );\n}\n\nexport default Details;\n","import React, {useState} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useAccordionButton } from 'react-bootstrap/AccordionButton';\nimport Time from './Time';\nimport Name from './Name';\nimport Guest from './Guest';\nimport Details from './Details/_Details';\n\nconst componentStyle = {\n display:'flex',\n height:72,\n marginLeft:20,\n}\nconst colorStyler = (color) => {\n if(!color){color='white'}\n return {\n border:`${color} 1px solid`,\n height:'70%',\n margin:'auto 10px auto 0',\n }\n}\n\nconst generalInfoStyle={\n marginTop:'auto',\n marginBottom:'auto',\n width:'100%',\n}\n\nconst generalInfoSubStyle={\n width:'100%',\n whiteSpace:'nowrap',\n display:'inline-block'\n}\n\nconst detailsStyle={\n marginLeft:50\n}\n\nconst accordionToggleStyle={\n margin:'auto 0 auto auto',\n}\n\n\nfunction CustomToggle({ children, eventKey }) {\n const decoratedOnClick = useAccordionButton(eventKey, () => {});\n return (\n \n {children}\n \n );\n}\n\nfunction Event(props){\n const [collapsed,setCollapsed] = useState(false);\n const {t} = useTranslation(['home']);\n const details = props.details;\n const color = details.color;\n const time = props.time;\n return(\n \n
\n
\n\n {/* Event General Info */}\n
\n \n
\n
\n
\n\n {/* Toggle Button */}\n
setCollapsed(!collapsed)}>\n \n \n \n \n \n \n {t('upcomings.details.toggle')}\n \n \n \n
\n
\n\n {/* Accordion Content */}\n
\n \n
\n
\n
\n
\n
\n
\n );\n}\n\nexport default Event;\n","import Event from './Event/_Event';\nimport i18n from '../../i18n';\n\nconst componentStyle={\n width:'100%',\n marginTop:10,\n}\n\nconst dayStyle={\n display:'inline-block',\n verticalAlign:'top',\n}\n\nconst dayNumberStyle={\n fontWeight:'bold',\n fontSize:32,\n}\n\nconst weekdayStyle={\n fontWeight:'bold',\n fontSize:16,\n textAlign:'center',\n textTransform:'lowercase',\n}\n\nconst dayScheduleContainer = {\n width: 'calc(100% - 50px)',\n display: 'inline-block'\n}\n\nfunction getUserLanguage(){\n return i18n.language.substring(0,2);\n}\n\nfunction getWeekday(year,month,day){\n let date = new Date(year,month - 1,day);\n let formattingOptions = {weekday:'short'};\n date = date.toLocaleString(getUserLanguage(),formattingOptions);\n return date;\n\n}\n\nfunction DayGroup(props){\n const year = props.year;\n const month = props.month;\n const day = props.day;\n const weekday = getWeekday(year,month,day);\n const daySchedules = props.daySchedules;\n const daySchedulesArray = Object.keys(daySchedules);\n\n return(\n
\n
\n
\n {props.day}\n
\n
\n {weekday}\n
\n
\n\n
\n {\n daySchedulesArray.map((time) => (\n \n ))\n }\n
\n
\n );\n}\n\nexport default DayGroup;\n","import DayGroup from './DayGroup';\nimport i18n from '../../i18n';\n\nconst componentStyle = {\n background: 'var(--color-background-1)',\n borderRadius:15,\n padding:20,\n marginTop:10,\n marginBottom:10\n}\n\nconst headerStyle = {\n fontWeight:'bold',\n color:'var(--color-primary)', \n textTransform:'capitalize',\n}\n\nconst rulerStyle = {\n borderColor:'var(--color-ruler)',\n marginTop:10,\n marginBottom:0\n}\n\nfunction getUserLanguage(){\n return i18n.language.substring(0,2);\n}\n\nfunction getMonthName(month){\n let userLanguage = getUserLanguage();\n let formattingOptions = {month:'long'};\n let tmpDate = new Date();\n tmpDate.setMonth(month - 1);\n let monthString = tmpDate.toLocaleString(userLanguage,formattingOptions);\n return monthString;\n}\n\nfunction MonthGroup(props){\n const year = props.year;\n const month = props.month;\n const monthName = getMonthName(month);\n const monthDates = props.monthDates;\n const monthDatesArray = Object.keys(monthDates).sort();\n\n return(\n
\n
\n {monthName} {year}\n
\n
\n {\n monthDatesArray.map((day,index) => (\n
\n \n {index !== monthDatesArray.length - 1 &&\n
\n }\n
\n ))\n }\n
\n
\n );\n}\n\nexport default MonthGroup;\n","import MonthGroup from './MonthGroup';\n\nfunction YearGroup(props){\n const year = props.year;\n const yearDates = props.yearDates;\n const yearDatesArray = Object.keys(yearDates);\n return(\n yearDatesArray.map((month) => ( \n \n ))\n );\n}\n\nexport default YearGroup;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport YearGroup from './YearGroup';\nimport { useTranslation } from 'react-i18next';\n\nfunction groupDates(dates){\n let result = {};\n let datesArray = Object.keys(dates);\n // TODO: improve performance\n // create a nested object for dates:\n // { year : { month : { day : {} } }\n for(let date of datesArray){\n result[`${date.substring(0,4)}`]={}\n }\n for(let date of datesArray){\n result[`${date.substring(0,4)}`]\n [`${date.substring(5,7)}`]={}\n }\n for(let date of datesArray){\n result[`${date.substring(0,4)}`]\n [`${date.substring(5,7)}`]\n [`${date.substring(8,10)}`]={}\n }\n // insert appointments values into day {}\n for(let date of datesArray){\n let appointments = Object.keys(dates[date])\n for(let appointment of appointments){\n result[date.substring(0,4)]\n [date.substring(5,7)]\n [date.substring(8,10)]\n [`${appointment}`] = dates[date][appointment]\n }\n }\n return result;\n}\n\n// renderizza per ogni anno\nfunction _EventContainer(props){\n const { t } = useTranslation(['home']);\n const pending = props?.pending;\n const dates = props?.state;\n const groupedDates = groupDates(dates);\n const groupedDatesArray = Object.keys(groupedDates);\n return(\n <>\n {groupedDatesArray.length > 0\n ?\n groupedDatesArray.map((year) => \n
\n \n
\n )\n :\n t('upcomings.empty') \n }\n \n );\n}\n\nexport default _EventContainer;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nfunction Name({name}){\n const { t } = useTranslation(['onboardingChecklist']);\n\n return(\n <>\n {name && \n
\n {t(`${name}.name`)}\n
\n }\n \n );\n\n}\n\n\nexport default Name;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nfunction Progress({completed,total}){\n const { t } = useTranslation(['onboardingChecklist']);\n\n return(\n <>\n {(completed !== undefined) && (total !== undefined) &&\n
\n \n {t('progress',{completed : completed, total : total})}\n \n \n {t('completed')}\n \n
\n }\n \n );\n\n}\n\n\nexport default Progress;\n","import React from 'react';\n\nfunction Icon({completed}){\n\n const componentStyle={\n width:30,\n height:30,\n fontSize:12\n }\n const componentClass = \"d-flex justify-content-center align-items-center h-100\"\n\n return(\n \n {completed && }\n \n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport Icon from './Icon';\n\nfunction Status({completed}){\n\n const componentStyle={\n width:30,\n height:30\n }\n\n const completeClass = \"d-inline-block me-2 bg-success rounded-circle\"\n const incompleteClass = \"d-inline-block me-2 border border-success rounded-circle\"\n\n return(\n <>\n
\n \n
\n \n );\n\n}\n\n\nexport default Status;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nfunction Title({name,taskNumber}){\n\n const { t } = useTranslation(['onboardingChecklist']);\n const componentClass = \"fw-bold\"\n\n return(\n <>\n
\n {t(`${name}.${taskNumber}.title`)}\n
\n \n );\n\n}\n\n\nexport default Title;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\nfunction Subtitle({name,taskNumber}){\n\n const { t } = useTranslation(['onboardingChecklist']);\n return(\n <>\n
\n {t(`${name}.${taskNumber}.subtitle`)}\n
\n \n );\n\n}\n\n\nexport default Subtitle;\n","import React from 'react';\nimport Title from './Title';\nimport Subtitle from './Subtitle';\n\nfunction TextContainer({taskNumber, name}){\n\n const componentClass = \"d-inline-block mx-2\";\n\n return(\n
\n \n <Subtitle taskNumber={taskNumber} name={name}/>\n </div>\n );\n\n}\n\n\nexport default TextContainer;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\n\nfunction TooltipContainer({name,taskNumber}){\n\n const { t } = useTranslation(['onboardingChecklist']);\n const componentClass = \"d-inline-block ms-auto\"\n const tooltip = t(`${name}.${taskNumber}.tooltip`)\n\n return(\n <>\n {tooltip !== \"\" &&\n <div className={componentClass}>\n <OverlayTrigger \n trigger={['hover','click']}\n overlay={<Tooltip id={`tooltip-question-${taskNumber}`}>{tooltip}</Tooltip>}\n >\n <i className=\"far fa-question-circle\"></i>\n </OverlayTrigger>\n </div>\n }\n </>\n );\n\n}\n\n\nexport default TooltipContainer;\n","import React from 'react';\nimport Status from './Status/_Status';\nimport TextContainer from './TextContainer/_TextContainer';\nimport TooltipContainer from './TooltipContainer';\n\nfunction Task({taskNumber,name,completed}){\n\n const componentClass = \"d-flex align-items-center my-2\";\n\n return(\n <>\n <div className={componentClass}>\n <Status completed={completed}/>\n <TextContainer name={name} taskNumber={taskNumber}/>\n <TooltipContainer taskNumber={taskNumber} name={name}/>\n </div>\n </>\n );\n\n}\n\n\nexport default Task;\n","import React from 'react';\nimport Name from './Name';\nimport Progress from './Progress';\nimport Task from './Task/_Task';\n\nfunction Checklist({checklist}){\n\n return(\n <>\n <Name name={checklist.name}/>\n <Progress completed={checklist.completed} total={checklist.total}/>\n {checklist?.tasks?.map((task) => \n (\n <Task \n key={`${checklist.name}-${task.taskNumber}`}\n name={checklist.name}\n taskNumber={task.taskNumber}\n completed={task.completed}\n />\n )\n )}\n </>\n );\n\n}\n\n\nexport default Checklist;\n","export const featureKeysMap = {\n \"unlimited-bookings\": \"bookings\",\n \"unlimited-event-types\": \"eventTypes\",\n \"custom-event-duration\": \"eventDuration\",\n \"custom-email-notifications\": \"emailNotifications\",\n \"salesforza-email-notifications\": \"salesforza\",\n \"custom-reminders\": \"reminders\",\n team: \"team\",\n embed: \"embed\",\n \"redirection-url\": \"redirectionUrl\",\n \"multiple-calendars\": \"calendarConnections\",\n \"zapier-integration\": \"zapier\",\n webhooks: \"webhooks\",\n zoom: \"zoom\",\n stripe: \"stripe\",\n salesforza: \"salesforza\",\n \"event-questions\": \"questions\",\n \"event-timeslot-hop\": \"timeslotHop\",\n \"event-booking-limit\": \"bookingLimit\",\n \"event-notice\": \"notice\",\n \"event-approval\": \"eventApproval\",\n \"event-last-availability\": \"lastAvailability\",\n};\n","import React, { useState } from \"react\";\nimport Badge from \"react-bootstrap/Badge\";\nimport \"./upgrade-path.css\";\nimport auth from \"../../Account/Auth\";\nimport features from \"../features-list.json\";\nimport { useTranslation } from \"react-i18next\";\nimport { featureKeysMap } from \"./featureKeysMap.js\";\n\n// Helper function to determine feature access and the next available plan\nconst getFeatureAccessInfo = (userPlan, featureName, planOrder) => {\n let isLocked = false;\n let nextPlan = \"Upgrade\"; // Default message\n const userPlanIndex = planOrder.indexOf(userPlan);\n\n try {\n const featurePlans = features[featureName];\n isLocked = !featurePlans.includes(userPlan);\n\n if (isLocked) {\n const availablePlans = featurePlans.filter(\n (plan) => planOrder.indexOf(plan) > userPlanIndex\n );\n nextPlan = availablePlans.length > 0 ? availablePlans[0] : nextPlan;\n }\n } catch (e) {\n console.info(\n `[UpgradePath][${featureName}] Error getting feature access: `,\n e\n );\n }\n\n return { isLocked, nextPlan };\n};\n\nconst UpgradePath = ({\n children,\n featureName,\n position,\n blur,\n customWidth,\n}) => {\n const { t } = useTranslation([\"features,common\"]);\n\n const [showModal, setShowModal] = useState(false);\n\n const userPlan = auth.getRole(); // Fetch the current user's plan\n const planOrder = [\"free\", \"premium\", \"professional\", \"LTD\"]; // Predefined order of plans\n\n // Determine if feature is locked and find the next available plan\n const { isLocked, nextPlan } = getFeatureAccessInfo(\n userPlan,\n featureName,\n planOrder\n );\n\n // Map the featureName from the features-list.json to our i18n key\n const translationKey = featureKeysMap[featureName] || null;\n\n // If we have a matching translation key, retrieve the title/subtitle\n const featureTitle = translationKey\n ? t(`features:${translationKey}.title`)\n : t(\"features:locked.title\");\n const featureSubtitle = translationKey\n ? t(`features:${translationKey}.subtitle`)\n : t(\"features:locked.subtitle\");\n\n // Click event handler to open modal\n const handleOpenModal = (e) => {\n e.preventDefault(); // Prevent <a> navigation if present\n setShowModal(true);\n };\n // Close modal\n const handleCloseModal = () => setShowModal(false);\n\n return (\n <>\n {/* Container that may show the overlay & badge if locked */}\n <div\n className=\"upgrade-path-container\"\n style={customWidth ? { width: customWidth } : {}}\n // Only clickable if locked\n onClick={isLocked ? handleOpenModal : undefined}\n >\n {isLocked && (\n <>\n {/*\n <Badge\n className={`text-capitalize upgrade-path-badge badge-position-${position}`}\n >\n {nextPlan} Feature{\" \"}\n </Badge>\n */}\n <div\n className={\n blur\n ? \"upgrade-path-overlay upgrade-path-blur\"\n : \"upgrade-path-overlay\"\n }\n />\n </>\n )}\n {children}\n </div>\n\n {/* Modal */}\n {showModal && (\n <div\n id=\"progress-modal\"\n tabIndex=\"-1\"\n aria-hidden=\"true\"\n className=\"\n tw-fixed tw-inset-0 tw-z-50\n tw-flex tw-items-center tw-justify-center\n tw-bg-black/50\n \"\n >\n {/* Modal dialog */}\n <div className=\"tw-relative tw-w-full tw-max-w-md tw-bg-white tw-rounded-lg tw-shadow dark:!tw-bg-gray-700\">\n {/* Close button (top-right corner) */}\n <button\n type=\"button\"\n className=\"\n tw-absolute tw-top-3 tw-end-2.5\n tw-text-gray-400 tw-bg-transparent\n hover:tw-bg-gray-200 hover:tw-text-gray-900\n tw-rounded-lg tw-text-sm tw-w-8 tw-h-8 tw-ms-auto\n tw-inline-flex tw-justify-center tw-items-center\n dark:hover:tw-bg-gray-600 dark:hover:tw-text-white\n \"\n onClick={handleCloseModal}\n >\n <svg\n className=\"tw-w-3 tw-h-3\"\n aria-hidden=\"true\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 14 14\"\n >\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\"\n />\n </svg>\n </button>\n\n {/* Modal content */}\n <div className=\"tw-p-4 md:tw-p-5\">\n {/* Dynamic title/description from i18n */}\n <h3 className=\"tw-text-xl tw-font-bold tw-text-gray-900 dark:tw-text-white tw-mb-2\">\n {featureTitle}\n </h3>\n <p className=\"tw-text-gray-500 dark:tw-text-gray-400 tw-mb-6\">\n {featureSubtitle}\n </p>\n\n {/* Modal footer - Cancel / Upgrade */}\n <div className=\"tw-flex tw-justify-between tw-space-x-4 rtl:tw-space-x-reverse\">\n {/* Cancel button on the left */}\n <button\n type=\"button\"\n className=\"\n tw-py-2.5 tw-px-5 tw-text-sm tw-font-medium\n tw-text-gray-900 focus:tw-outline-none\n tw-bg-white tw-rounded-lg tw-border tw-border-gray-200\n hover:tw-bg-gray-100 hover:tw-text-blue-700\n focus:tw-z-10 focus:tw-ring-4 focus:tw-ring-gray-100\n dark:focus:tw-ring-gray-700 dark:tw-bg-gray-800\n dark:tw-text-gray-400 dark:tw-border-gray-600\n dark:hover:!tw-bg-gray-700 dark:hover:tw-text-white\n \"\n onClick={handleCloseModal}\n >\n {t(\"common:cancel\")}\n </button>\n\n {/* Upgrade button on the right */}\n <a\n href=\"/upgrade\"\n className=\"\n tw-text-white tw-bg-blue-700 hover:tw-bg-blue-800\n focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-blue-300\n tw-font-medium tw-rounded-lg tw-text-sm\n tw-px-5 tw-py-2.5 tw-text-center\n dark:tw-bg-blue-600 dark:hover:tw-bg-blue-700\n dark:focus:tw-ring-blue-800\n \"\n >\n {t(\"common:upgrade\")}\n </a>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default UpgradePath;\n","import React, { Component } from \"react\";\nimport { Translation } from \"react-i18next\";\nimport {\n Container,\n Row,\n Col,\n Button,\n Spinner,\n Tab,\n Tabs,\n} from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport MediaQuery from \"react-responsive\";\nimport ViewToggler from \"./ViewToggler/_ViewToggler\";\nimport EventTypeContainer from \"./EventTypeContainer/_EventTypeContainer\";\nimport EventContainer from \"./EventContainer/_EventContainer\";\nimport Checklist from \"./Checklist/_Checklist.js\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\nimport UpgradePath from \"../Utilities/UpgradePath/UpgradePath\";\nimport UpgradeBadge from \"../Utilities/UpgradePath/UpgradeBadge\";\n\nexport class _Home extends Component {\n constructor(props) {\n super(props);\n this.state = {\n eventTypes: {},\n upcomings: {},\n pendingUpcomings: {},\n pendingUpcomingsLength: 0,\n checklist: {},\n connections: {},\n activeView: \"eventTypes\",\n isMobile: false,\n loadingEventTypes: true,\n loadingUpcomings: true,\n loadingChecklist: true,\n loadingConnections: true,\n activeTab: \"upcoming\",\n };\n this.toggleView = this.toggleView.bind(this);\n }\n\n // deve essere un caricamento asincrono, mentre aspetto la risposta\n // dal BE continuo a rederizzare altro, async è d'obbligo\n async componentDidMount() {\n document.title = \"Calendbook - Dashboard\";\n try {\n window.tidioChatApi.show();\n } catch {}\n // devo usare await nella chiamata ad isAuthenticated perchè nel caso di\n // richiesta di refresh devo aspettare i nuovi token prima di poter\n // effettuare altre chiamate\n await auth\n .isAuthenticated()\n .then(() => {\n // get Event Types\n be.get(\"eventtypes\", \"/eventypes\", \"\", true)\n .then((response) => {\n this.setState({ eventTypes: response, loadingEventTypes: false });\n })\n .catch((error) => {\n console.log(error);\n this.setState({ loadingEventTypes: false });\n });\n // get Upcomings\n be.get(\"booking\", \"/upcoming\", \"\", true)\n .then((response) => {\n this.setState({\n upcomings: response?.upcomings,\n pendingUpcomings: response?.pendingUpcomings,\n pendingUpcomingsLength:\n response?.meta?.pendingUpcomings?.count || 0,\n loadingUpcomings: false,\n });\n })\n .catch((error) => {\n console.log(error);\n this.setState({ loadingUpcomings: false });\n });\n // get Checklist\n be.get(\"todo\", \"/getTaskList\", \"\", true)\n .then((response) => {\n this.setState({ checklist: response, loadingChecklist: false });\n })\n .catch((error) => {\n console.log(error);\n this.setState({ loadingChecklist: false });\n });\n // get Calendar Connections\n be.get(\"calendarhandler\", \"/getCalendars\", \"\", true)\n .then((response) => {\n this.setState({ connections: response, loadingConnections: false });\n })\n .catch((error) => {\n console.log(error);\n this.setState({ loadingConnections: false });\n });\n })\n // redirect istantaneo alla pagina login se non sono autenticato\n .catch(() => this.props.history.push(\"/login\"));\n }\n\n toggleView = (view) => {\n this.setState({ activeView: view });\n };\n\n render() {\n var EventTypes = this.state?.eventTypes;\n var Upcomings = this.state?.upcomings;\n var PendingUpcomings = this.state?.pendingUpcomings;\n var PendingUpcomingsLength = this.state?.pendingUpcomingsLength;\n var Connections = this.state?.connections;\n return (\n <>\n <Container fluid className=\"mt-5 px-2 px-md-5\">\n {/*Mobile or Tablet device*/}\n <MediaQuery maxWidth={991}>\n {/*View toggler radio buttons (styled)*/}\n <ViewToggler\n activeView={this.state.activeView}\n toggleView={this.toggleView}\n />\n\n {this.state.activeView === \"upcomings\" && (\n <Row>\n {/*Upcomings container----------*/}\n <Col lg={6} id=\"upcomings-zone\">\n {!this.state.loadingChecklist && (\n <Checklist checklist={this.state.checklist} />\n )}\n <Tabs\n activeKey={this.state.activeTab}\n onSelect={(k) => this.setState({ activeTab: k })}\n className=\"mb-3\"\n >\n <Tab eventKey=\"upcoming\" title=\"Upcoming\">\n {this.state.loadingUpcomings ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <EventContainer state={Upcomings} />\n )}\n </Tab>\n <Tab\n eventKey=\"pending\"\n title={`Pending (${PendingUpcomingsLength})`}\n >\n {this.state.loadingUpcomings ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <>\n {PendingUpcomings && (\n <EventContainer pending state={PendingUpcomings} />\n )}\n </>\n )}\n </Tab>\n </Tabs>\n </Col>\n </Row>\n )}\n {this.state.activeView === \"eventTypes\" && (\n <Row>\n {/*Event Types container*/}\n <Col lg={6} id=\"event-type-zone\">\n {/*New event type button*/}\n <Row>\n <Col className=\"my-3 text-center\">\n {Object.keys(EventTypes).length === 0 ? (\n <Button\n id=\"event-type-creator\"\n variant=\"primary\"\n onClick={() =>\n this.props.history.push(\"/eventcreator\")\n }\n className=\"\"\n style={{ borderRadius: 25 }}\n block\n >\n <i className=\"fas fa-plus\"></i>\n <Translation ns=\"home\">\n {(t) => (\n <span className=\"ms-2\">\n {t(\"eventTypes.new\")}\n </span>\n )}\n </Translation>\n </Button>\n ) : (\n <UpgradePath\n featureName=\"unlimited-event-types\"\n position=\"right\"\n >\n <UpgradeBadge featureName=\"unlimited-event-types\" />\n <br />\n <Button\n id=\"event-type-creator\"\n variant=\"primary\"\n onClick={() =>\n this.props.history.push(\"/eventcreator\")\n }\n className=\"\"\n style={{ borderRadius: 25 }}\n block\n >\n <i className=\"fas fa-plus\"></i>\n <Translation ns=\"home\">\n {(t) => (\n <span className=\"ms-2\">\n {t(\"eventTypes.new\")}\n </span>\n )}\n </Translation>\n </Button>\n </UpgradePath>\n )}\n </Col>\n </Row>\n {/*Event types*/}\n <Row className=\"d-flex flex-wrap justify-content-center\">\n {this.state.loadingEventTypes ||\n this.state.loadingConnections ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <EventTypeContainer\n state={EventTypes}\n connections={Connections}\n />\n )}\n </Row>\n </Col>\n </Row>\n )}\n </MediaQuery>\n\n {/*Desktop device*/}\n <MediaQuery minWidth={992}>\n {/*First Row for section titles----------*/}\n <Row>\n {/*Event Types title*/}\n {Object.keys(EventTypes).length === 0 ? (\n <Col lg={6} id=\"event-types-title\">\n <Translation ns=\"home\">\n {(t) => <span className=\"h3\">{t(\"eventTypes.title\")}</span>}\n </Translation>\n <Button\n id=\"event-type-creator\"\n variant=\"primary\"\n onClick={() => this.props.history.push(\"/eventcreator\")}\n className=\"ms-3 mb-2\"\n >\n <i className=\"fas fa-plus\"></i>\n </Button>\n </Col>\n ) : (\n <UpgradePath\n featureName=\"unlimited-event-types\"\n position=\"right\"\n customWidth=\"50%\"\n >\n <Col lg={6} id=\"event-types-title\">\n <Translation ns=\"home\">\n {(t) => (\n <span className=\"h3\">{t(\"eventTypes.title\")}</span>\n )}\n </Translation>\n <Button\n id=\"event-type-creator\"\n variant=\"primary\"\n onClick={() => this.props.history.push(\"/eventcreator\")}\n className=\"ms-3 mb-2\"\n >\n <i className=\"fas fa-plus me-2\"></i>\n <UpgradeBadge featureName=\"unlimited-event-types\" />\n </Button>\n </Col>\n </UpgradePath>\n )}\n {/*Upcomings title*/}\n <Col lg={6} id=\"upcomings-title\">\n <Translation ns=\"home\">\n {(t) => <span className=\"h3\">{t(\"upcomings.title\")}</span>}\n </Translation>\n </Col>\n </Row>\n\n <Row>\n {/*Event Types container----------*/}\n <Col lg={6} id=\"event-type-zone\">\n <Row className=\"d-flex flex-wrap justify-content-center\">\n {this.state.loadingEventTypes ||\n this.state.loadingConnections ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <EventTypeContainer\n state={EventTypes}\n connections={Connections}\n />\n )}\n </Row>\n </Col>\n\n {/*Upcomings container----------*/}\n <Col lg={6} id=\"upcomings-zone\">\n {!this.state.loadingChecklist && (\n <Checklist checklist={this.state.checklist} />\n )}\n <Tabs\n activeKey={this.state.activeTab}\n onSelect={(k) => this.setState({ activeTab: k })}\n className=\"mb-3\"\n >\n <Tab eventKey=\"upcoming\" title=\"Upcoming\">\n {this.state.loadingUpcomings ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <EventContainer state={Upcomings} />\n )}\n </Tab>\n <Tab\n eventKey=\"pending\"\n title={`Pending (${PendingUpcomingsLength})`}\n >\n {this.state.loadingUpcomings ? (\n <Spinner\n className=\"mx-auto\"\n animation=\"border\"\n variant=\"primary\"\n />\n ) : (\n <>\n {PendingUpcomings && (\n <EventContainer pending state={PendingUpcomings} />\n )}\n </>\n )}\n </Tab>\n </Tabs>\n </Col>\n </Row>\n </MediaQuery>\n </Container>\n </>\n );\n }\n}\n\nexport default _Home;\n","function getHoursInt(timeString){\n return Number(timeString.split(':')[0]);\n}\nfunction getMinutesInt(timeString){\n return Number(timeString.split(':')[1]);\n}\nfunction appendLeadingZeroes(n){\n return (n<=9 ? (\"0\" + n) : n);\n}\n// INPUT: time string like '08:00'\n// OUTPUT: milliseconds with new time set\nfunction getMillisecondsFromString(timeString){\n let time = new Date();\n time.setHours(getHoursInt(timeString),getMinutesInt(timeString),0);\n return time.getTime();\n}\n// INPUT: milliseconds from Date.getTime()\n// OUTPUT: time string\nfunction getStringFromMilliseconds(milliseconds){\n let date = new Date(milliseconds);\n return appendLeadingZeroes(date.getHours()) + ':' + appendLeadingZeroes(date.getMinutes());\n}\n// INPUT: milliseconds Date, minutesSpan Int\n// OUTPUT: milliseconds Date with minutes shifted by minutesSpan\nfunction addMinutes(milliseconds,minutesSpan){\n let time = new Date(milliseconds);\n time.setHours(time.getHours(),(time.getMinutes() + minutesSpan));\n return time.getTime();\n}\n\nexport function checkInterval(availability,wday,interval){\n let index = availability.ranges[wday].length - 1\n let start = getMillisecondsFromString(interval.start)\n let end = getMillisecondsFromString(interval.end)\n let previousEnd = ''\n if (index >=1){\n previousEnd = getMillisecondsFromString(availability.ranges[wday][index-1].end)\n }\n // se la fine è maggiore dell'inizio\n if(end > start){\n // se l'inizio è maggiore della fine precedente\n if(start > previousEnd){\n // aggiorno lo stato\n return interval\n }\n // se l'inizio è minore della fine precedente\n else{\n // allora diventa previousEnd + 15min\n interval.start = getStringFromMilliseconds(addMinutes(previousEnd,15))\n return interval\n }\n }\n // se start supera end allora end diventa : start + 15min\n else {\n interval.end = getStringFromMilliseconds(addMinutes(start,15))\n return interval\n }\n}\n\n// se sto aggiungendo un range extra\nexport function addIntervalCheck(availability,wday,index,interval) {\n let fixedInterval = interval\n if(index === 0){\n // crea il nuovo intervallo, non controllo altro\n } else {\n // prendo l'ora di fine del range precedente e ci aggiungo 15 min\n let previousEnd = getMillisecondsFromString(availability.ranges[wday][index-1].end)\n previousEnd = addMinutes(previousEnd,15)\n previousEnd = getStringFromMilliseconds(previousEnd)\n // se il nuovo start non è mezzanotte\n if(getHoursInt(previousEnd)!==0){\n fixedInterval.start = previousEnd\n // aggiungo all'end 15 min in pù dello start\n let newEnd = getMillisecondsFromString(previousEnd)\n newEnd = addMinutes(newEnd,15)\n newEnd = getStringFromMilliseconds(newEnd)\n // se il nuovo end non è mezzanotte\n if(getHoursInt(newEnd)!==0){\n // crea il nuovo intervallo\n fixedInterval.end = newEnd\n }\n }\n }\n return fixedInterval;\n}\n","import create from \"zustand\";\nimport { devtools, persist } from \"zustand/middleware\";\nimport produce from \"immer\";\nimport { customAlphabet } from \"nanoid\";\nimport * as utils from \"./Utilities/datetimeUtils\";\nimport General from \"./Mocks/EventTypeCreator/General\";\nimport Availability from \"./Mocks/EventTypeCreator/Availability\";\nimport Notifications from \"./Mocks/EventTypeCreator/Notifications\";\nimport Surveys from \"./Mocks/EventTypeCreator/Surveys\";\nimport RoundRobin from \"./Mocks/EventTypeCreator/RoundRobin\";\n\n// Turn the set method into an immer proxy\nconst immer = (config) => (set, get, api) =>\n config(\n (partial, replace) => {\n const nextState =\n typeof partial === \"function\" ? produce(partial) : partial;\n return set(nextState, replace);\n },\n get,\n api\n );\n\nvar createNestedObject = function (base, names) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for (var i = 0; i < names.length; i++) {\n base = base[names[i]] = base[names[i]] || {};\n }\n};\n\nlet calendarConnectionsStore = (set) => ({\n calendarsList: [],\n connectedCalendars: 0,\n maxCalendars: 0,\n setCalendarsList: (calendars) =>\n set((state) => ({ calendarsList: calendars })),\n setConnectedCalendars: (connected) =>\n set((state) => ({ connectedCalendars: connected })),\n setMaxCalendars: (max) => set((state) => ({ maxCalendars: max })),\n setCalendarSync: (index, sync) =>\n set((state) => {\n state.calendarsList[index].sync = sync;\n }),\n setCalendarAccess: (index, subIndex, access) =>\n set((state) => {\n if (subIndex >= 0) {\n state.calendarsList[index].subCalendars[subIndex].access = access;\n } else {\n state.calendarsList[index].access = access;\n }\n }),\n setCalendarPic: (index, pic) =>\n set((state) => {\n state.calendarsList[index].calendarPic = pic;\n }),\n setCalendarConnectionStatus: (index, status) =>\n set((state) => {\n state.calendarsList[index].connectionStatus = status;\n }),\n setCalendarEmail: (index, email) =>\n set((state) => {\n state.calendarsList[index].email = email;\n }),\n addCalendar: (calendar) =>\n set((state) => {\n state.calendarsList.push(calendar);\n state.connectedCalendars++;\n }),\n deleteCalendar: (email) =>\n set((state) => {\n state.calendarsList = state.calendarsList.filter((x) => {\n return x.email !== email;\n });\n state.connectedCalendars--;\n }),\n setSubCalendarEnabled: (calendarIndex, subCalendarIndex, bool) =>\n set((state) => {\n state.calendarsList[calendarIndex].subCalendars[\n subCalendarIndex\n ].enabled = bool;\n }),\n});\n\nlet webhooksConnectionsStore = (set) => ({\n webhooksList: [],\n setWebhooksList: (webhooks) => set((state) => ({ webhooksList: webhooks })),\n addWebhook: (webhook) =>\n set((state) => {\n state.webhooksList = state.webhooksList.filter((x) => {\n return x.hook !== webhook?.hook;\n });\n state.webhooksList.push(webhook);\n }),\n deleteWebhook: (hook) =>\n set((state) => {\n console.log(\"delete: \", hook);\n state.webhooksList = state.webhooksList.filter((x) => {\n return x?.hook !== hook;\n });\n }),\n});\n\nlet createEventTypeStore = (set, get) => ({\n editKey: \"\",\n general: General,\n availability: Availability,\n notifications: Notifications,\n surveys: {},\n paidEvent: {},\n roundRobin: RoundRobin,\n setEditKey: (_key) =>\n set((state) => {\n state.editKey = _key;\n }),\n setGeneral: (_general) =>\n set((state) => {\n state.general = _general;\n }),\n setAvailability: (_availability) =>\n set((state) => {\n state.availability = _availability;\n }),\n setNotifications: (_notifications) =>\n set((state) => {\n state.notifications = _notifications;\n }),\n setSurveys: (_surveys) =>\n set((state) => {\n state.surveys = _surveys;\n }),\n setPaidEvent: (_paidEvent) =>\n set((state) => {\n state.paidEvent = _paidEvent;\n }),\n setRoundRobin: (_roundRobin) =>\n set((state) => {\n state.roundRobin = _roundRobin;\n }),\n setName: (_name) =>\n set((state) => {\n state.general.name = _name;\n }),\n setDescription: (_description) =>\n set((state) => {\n state.general.description = _description;\n }),\n setLocation: (_location) =>\n set((state) => {\n state.general.location = _location;\n }),\n setColor: (_color) =>\n set((state) => {\n state.general.color = _color;\n }),\n setDuration: (_duration) =>\n set((state) => {\n state.general.duration = _duration;\n }),\n setPrevBuffer: (_buffer) =>\n set((state) => {\n state.general.prevBuffer = _buffer;\n }),\n setNextBuffer: (_buffer) =>\n set((state) => {\n state.general.nextBuffer = _buffer;\n }),\n setRedirectionUrl: (_url) =>\n set((state) => {\n state.general.redirectionUrl = _url;\n }),\n setTeam: (_isTeam) =>\n set((state) => {\n state.general.isTeam = _isTeam;\n }),\n setBookingType: (_bookingType) =>\n set((state) => {\n state.general.bookingType = _bookingType;\n }),\n toggleDayAvailability: (_day) =>\n set((state) => {\n state.availability.template = \"\";\n state.availability.days[_day] = !state.availability.days[_day];\n if (\n state.availability.ranges[_day].length === 0 &&\n state.availability.days[_day] === true\n ) {\n // add new range for that day\n let index = state.availability.ranges[_day].length;\n let interval = { start: \"09:00\", end: \"19:00\" };\n interval = utils.addIntervalCheck(\n state.availability,\n _day,\n index,\n interval\n );\n state.availability.ranges[_day][index] = interval;\n }\n }),\n setDayRange: (_day, _index, _interval) =>\n set((state) => {\n state.availability.template = \"\";\n if (\n state.availability.ranges[_day].length === 0 &&\n state.availability.days[_day] === false\n ) {\n state.availability.days[_day] = true;\n }\n state.availability.ranges[_day][_index] = _interval;\n }),\n deleteDayRange: (_day, _index) =>\n set((state) => {\n state.availability.template = \"\";\n let newRanges = state.availability.ranges[_day];\n newRanges.splice(_index, 1);\n state.availability.ranges[_day] = newRanges;\n if (state.availability.ranges[_day].length === 0) {\n state.availability.days[_day] = false;\n }\n }),\n // In your Zustand store setup\n\n // Function to add a new disabled date range\n addDisabledDateRange: () =>\n set((state) => {\n state.availability.template = \"\";\n if (!state.availability.disabledDateRaw) {\n state.availability.disabledDateRaw = [];\n }\n state.availability.disabledDateRaw.push({ start: \"\", end: \"\" });\n // No return statement needed\n }),\n\n // Function to update the start date of a range at a given index\n setDisabledDateStart: (index, date) =>\n set((state) => {\n state.availability.template = \"\";\n if (!state.availability.disabledDateRaw) {\n state.availability.disabledDateRaw = [];\n }\n if (!state.availability.disabledDateRaw[index]) {\n state.availability.disabledDateRaw[index] = { start: \"\", end: \"\" };\n }\n state.availability.disabledDateRaw[index].start = date;\n // No return statement needed\n }),\n\n // Function to update the end date of a range at a given index\n setDisabledDateEnd: (index, date) =>\n set((state) => {\n state.availability.template = \"\";\n if (!state.availability.disabledDateRaw) {\n state.availability.disabledDateRaw = [];\n }\n if (!state.availability.disabledDateRaw[index]) {\n state.availability.disabledDateRaw[index] = { start: \"\", end: \"\" };\n }\n state.availability.disabledDateRaw[index].end = date;\n // No return statement needed\n }),\n\n // Function to remove a disabled date range at a given index\n removeDisabledDateRange: (index) =>\n set((state) => {\n state.availability.template = \"\";\n if (state.availability.disabledDateRaw) {\n state.availability.disabledDateRaw.splice(index, 1);\n }\n // No return statement needed\n }),\n\n setTimeslotHop: (_hop) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"hop\"]);\n state.availability.hop = _hop;\n }),\n setBookingLimitQuantity: (_quantity) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"bookingLimit\", \"quantity\"]);\n state.availability.bookingLimit.quantity = _quantity;\n }),\n setBookingLimitUnit: (_unit) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"bookingLimit\", \"unit\"]);\n state.availability.bookingLimit.unit = _unit;\n }),\n setNoticeQuantity: (_quantity) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"notice\", \"quantity\"]);\n state.availability.notice.quantity = _quantity;\n }),\n setNoticeUnit: (_unit) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"notice\", \"unit\"]);\n state.availability.notice.unit = _unit;\n }),\n setLastAvailabilityDate: (_date) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"lastAvailability\", \"date\"]);\n state.availability.lastAvailability.date = _date;\n }),\n setLastAvailabilityTime: (_time) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"lastAvailability\", \"time\"]);\n state.availability.lastAvailability.time = _time;\n }),\n setApproval: (_needsApproval) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"needsApproval\"]);\n state.availability.needsApproval = _needsApproval;\n }),\n setCalendar: (_calendar) =>\n set((state) => {\n state.availability.template = \"\";\n createNestedObject(state, [\"availability\", \"calendar\"]);\n state.availability.calendar = _calendar;\n }),\n setEmailNotification: (_email) =>\n set((state) => {\n state.notifications.notifications.guest = _email;\n }),\n setSalesforza: (_bool) =>\n set((state) => {\n state.notifications.notifications.salesforza = _bool;\n }),\n setReminder: (_index, _reminder) =>\n set((state) => {\n state.notifications.reminders[_index] = _reminder;\n }),\n addReminder: (_reminder) =>\n set((state) => {\n state.notifications.reminders.push(_reminder);\n }),\n deleteReminder: (_index) =>\n set((state) => {\n let newReminders = state.notifications.reminders;\n newReminders.splice(_index, 1);\n state.notifications.reminders = newReminders;\n }),\n addQuestion: () =>\n set((state) => {\n const nanoid = customAlphabet(\"1234567890qwertyuiopasdfghjklzxcvbnm\", 16);\n const newKey = nanoid();\n let len = Object.keys(state.surveys).length;\n let localSurveys = JSON.parse(JSON.stringify(Surveys));\n localSurveys.order = len + 1;\n state.surveys[newKey] = localSurveys;\n }),\n deleteQuestion: (_order, _id) =>\n set((state) => {\n // Delete question using key id\n delete state.surveys[_id];\n // Reordering 'order' property for every question\n let len = Object.keys(state.surveys).length;\n for (let i = 1; i <= len; i++) {\n let key = Object.keys(state.surveys)[i - 1];\n state.surveys[key][\"order\"] = i;\n }\n }),\n setQuestionContent: (_content, _id) =>\n set((state) => {\n state.surveys[_id].content = _content;\n }),\n setQuestionRequired: (_id) =>\n set((state) => {\n state.surveys[_id].required = !state.surveys[_id].required;\n }),\n setQuestionType: (_type, _id) =>\n set((state) => {\n const nanoid = customAlphabet(\"1234567890qwertyuiopasdfghjklzxcvbnm\", 8);\n state.surveys[_id].questionType = _type;\n // empty qstFields if Text type is selected\n if (_type === 3) {\n state.surveys[_id].qstFields = {};\n }\n // generate 1 new empty field if checkbox\n if (_type === 2) {\n state.surveys[_id].qstFields = {};\n state.surveys[_id].qstFields[nanoid()] = \"\";\n }\n // generate 2 new empty fields if radio\n if (_type === 1) {\n state.surveys[_id].qstFields = {};\n state.surveys[_id].qstFields[nanoid()] = \"\";\n state.surveys[_id].qstFields[nanoid()] = \"\";\n }\n }),\n setFieldContent: (_content, _questionId, _fieldId) =>\n set((state) => {\n state.surveys[_questionId][\"qstFields\"][_fieldId] = _content;\n }),\n deleteField: (_questionId, _fieldId) =>\n set((state) => {\n delete state.surveys[_questionId][\"qstFields\"][_fieldId];\n }),\n addField: (_questionId) =>\n set((state) => {\n if (Object.keys(state.surveys[_questionId][\"qstFields\"]).length < 10) {\n const nanoid = customAlphabet(\n \"1234567890qwertyuiopasdfghjklzxcvbnm\",\n 8\n );\n const newKey = nanoid();\n state.surveys[_questionId][\"qstFields\"][newKey] = \"\";\n }\n }),\n setPrice: (_price) =>\n set((state) => {\n state.paidEvent[\"amount\"] = _price;\n }),\n setPriceId: (_priceId) =>\n set((state) => {\n state.paidEvent[\"priceId\"] = _priceId;\n }),\n setProductId: (_productId) =>\n set((state) => {\n state.paidEvent[\"productId\"] = _productId;\n }),\n setSelectedTemplate: (_template) =>\n set((state) => {\n createNestedObject(state, [\"availability\", \"template\"]);\n state.availability.template = _template;\n }),\n setRobinType: (_type) =>\n set((state) => {\n createNestedObject(state, [\"roundRobin\", \"config\", \"robinType\"]);\n state.roundRobin.config.robinType = _type;\n }),\n getRobinMembers: () => {\n const state = get();\n return Object.keys(state.roundRobin)\n .filter((key) => key !== \"config\")\n .map((key) => state.roundRobin[key]);\n },\n setRobinMembers: (newMembers) =>\n set((state) => {\n Object.keys(newMembers).forEach((key) => {\n if (key !== \"config\") {\n state.roundRobin[key] = newMembers[key];\n }\n });\n }),\n setRobinMember: (_member) =>\n set((state) => {\n createNestedObject(state, [\"roundRobin\", _member]);\n state.roundRobin[_member] = _member;\n }),\n addRobinMember: (_memberKey, _memberProperties) =>\n set((state) => {\n createNestedObject(state, [\"roundRobin\", _memberKey]);\n state.roundRobin[_memberKey] = _memberProperties;\n state.roundRobin[_memberKey][\"availability_template\"] = \"\";\n state.roundRobin[_memberKey][\"priority\"] = 2;\n }),\n deleteRobinMember: (_member) =>\n set((state) => {\n delete state.roundRobin[_member];\n }),\n setRobinMemberTemplate: (_member, _template) =>\n set((state) => {\n createNestedObject(state, [\n \"roundRobin\",\n _member,\n \"availability_template\",\n ]);\n state.roundRobin[_member][\"availability_template\"] = _template;\n }),\n setRobinMemberPriority: (_member, _priority) =>\n set((state) => {\n createNestedObject(state, [\"roundRobin\", _member, \"priority\"]);\n state.roundRobin[_member][\"priority\"] = _priority;\n }),\n});\n\nlet createBookingStore = (set) => ({\n guest: { timeFormat: \"12h\" },\n details: {},\n calendar: {},\n timeSlots: {},\n summary: {},\n surveys: {},\n surveyAnswers: {},\n setGuestDay: (_day) =>\n set((state) => {\n state.guest.day = _day;\n }),\n setGuestTime: (_time) =>\n set((state) => {\n state.guest.time = _time;\n }),\n setGuestTimeFormat: (_timeFormat) =>\n set((state) => {\n state.guest.timeFormat = _timeFormat;\n }),\n setGuestTimezone: (_timezone) =>\n set((state) => {\n state.guest.timezone = _timezone;\n }),\n setGuestName: (_name) =>\n set((state) => {\n state.guest.name = _name;\n }),\n setGuestEmail: (_email) =>\n set((state) => {\n state.guest.email = _email;\n }),\n setGuestNotes: (_notes) =>\n set((state) => {\n state.guest.notes = _notes;\n }),\n setGuestSatellite: (_satellite) =>\n set((state) => {\n state.guest.satellite = _satellite;\n }),\n setGuestReason: (_reason) =>\n set((state) => {\n state.guest.reason = _reason;\n }),\n setDetails: (_details) =>\n set((state) => {\n state.details = _details;\n }),\n setCalendar: (_calendar) =>\n set((state) => {\n state.calendar = _calendar;\n }),\n setTimeSlots: (_timeSlots) =>\n set((state) => {\n state.timeSlots = _timeSlots;\n }),\n setSummary: (_summary) =>\n set((state) => {\n state.summary = _summary;\n }),\n setSurveys: (_surveys) =>\n set((state) => {\n state.surveys = _surveys;\n }),\n setSurveyAnswers: (_answers) =>\n set((state) => {\n state.surveyAnswers = _answers;\n }),\n setTextAnswer: (_value, _questionId) =>\n set((state) => {\n state.surveyAnswers[_questionId] = _value;\n }),\n updateTextAnswer: (_value, _questionId) =>\n set((state) => {\n state.summary.surveys[_questionId].answer = [_value];\n }),\n setRadioAnswer: (_fieldId, _questionId) =>\n set((state) => {\n state.surveyAnswers[_questionId] = [_fieldId];\n }),\n updateRadioAnswer: (_fieldId, _questionId, _value) =>\n set((state) => {\n state.summary.surveys[_questionId].answer = [_value];\n state.summary.surveys[_questionId].answerValue = [_fieldId];\n }),\n setCheckboxAnswer: (_fieldId, _isChecked, _questionId) =>\n set((state) => {\n if (_isChecked) {\n if (state.surveyAnswers.hasOwnProperty(_questionId)) {\n state.surveyAnswers[_questionId].push(_fieldId);\n } else {\n state.surveyAnswers[_questionId] = [_fieldId];\n }\n } else {\n state.surveyAnswers[_questionId] = state.surveyAnswers[\n _questionId\n ].filter((x) => {\n return x !== _fieldId;\n });\n }\n }),\n updateCheckboxAnswer: (_fieldId, _isChecked, _questionId, _value) =>\n set((state) => {\n if (_isChecked) {\n if (state.summary.surveys[_questionId].answerValue.length > 0) {\n state.summary.surveys[_questionId].answer.push(_value);\n state.summary.surveys[_questionId].answerValue.push(_fieldId);\n } else {\n state.summary.surveys[_questionId].answer = [_value];\n state.summary.surveys[_questionId].answerValue = [_fieldId];\n }\n } else {\n state.summary.surveys[_questionId].answer = state.summary.surveys[\n _questionId\n ].answer.filter((x) => {\n return x !== _value;\n });\n state.summary.surveys[_questionId].answerValue = state.summary.surveys[\n _questionId\n ].answerValue.filter((x) => {\n return x !== _fieldId;\n });\n }\n }),\n});\n\nlet iframeStore = (set) => ({\n shouldShowNavs: true,\n setShouldShowNavs: (_bool) =>\n set((state) => {\n state.shouldShowNavs = _bool;\n }),\n});\n\ncreateBookingStore = devtools(createBookingStore);\ncreateEventTypeStore = devtools(createEventTypeStore);\nwebhooksConnectionsStore = devtools(webhooksConnectionsStore);\ncalendarConnectionsStore = devtools(calendarConnectionsStore);\niframeStore = devtools(iframeStore);\n\nexport const useCreateBookingStore = create(immer(createBookingStore));\nexport const useCreateEventTypeStore = create(immer(createEventTypeStore));\nexport const useCalendarConnectionsStore = create(\n immer(calendarConnectionsStore)\n);\nexport const useWebhooksConnectionsStore = create(\n immer(webhooksConnectionsStore)\n);\nexport const useIframeStore = create(immer(iframeStore));\n","import {Link} from 'react-router-dom';\nimport {useTranslation} from 'react-i18next';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\n\nfunction SaveBar ({backButton,saving}) {\n \n const {t} = useTranslation(['eventCreator']);\n\n const BackButton = () => {\n return <>\n <Link to={{pathname: '/'}}>\n <Button variant=\"secondary\" className=\"float-start my-2\">\n <i className=\"fas fa-long-arrow-alt-left\"></i> \n </Button>\n </Link>\n </>\n }\n\n const SaveButton = ({saving}) => {\n return <Button\n type=\"submit\"\n className=\"float-end my-2\"\n style={{minWidth:120}}\n >\n {saving\n ?\n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"my-auto\"\n />\n :\n t('saveButton')}\n </Button>\n }\n\n return (\n <Row>\n {backButton &&\n <Col>\n <BackButton/>\n </Col>\n }\n\n <Col>\n <SaveButton saving={saving}/>\n </Col>\n </Row>\n );\n}\n\nexport default SaveBar;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Name (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setName = useCreateEventTypeStore((state) => state.setName);\n\n return(\n <Form.Group as={Row} controlId=\"event-name\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.name')}</Form.Label>\n <Col sm={10} lg={6}>\n <Form.Control\n className=\"dark-field\"\n name=\"name\"\n value={general?.name}\n onChange={(e) => setName(e.target.value)}\n maxLength={70}\n required\n />\n </Col>\n </Form.Group>\n );\n}\n\nexport default Name;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Description (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setDescription = useCreateEventTypeStore((state) => state.setDescription);\n\n return(\n <Form.Group as={Row} controlId=\"event-description\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.description')}</Form.Label>\n <Col sm={10} lg={6}>\n <Form.Control\n as=\"textarea\"\n className=\"dark-field\"\n col=\"3\"\n name=\"description\"\n value={general?.description}\n onChange={(e) => setDescription(e.target.value)}\n maxLength={500}\n />\n </Col>\n </Form.Group>\n );\n}\n\nexport default Description;\n","import React, {useEffect,useState} from 'react'; \nimport {Link} from 'react-router-dom';\nimport {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\nimport InputGroup from 'react-bootstrap/InputGroup';\nimport Dropdown from 'react-bootstrap/Dropdown';\nimport DropdownButton from 'react-bootstrap/DropdownButton';\nimport Button from 'react-bootstrap/Button';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction Location (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setLocation = useCreateEventTypeStore((state) => state.setLocation);\n const [connectionStatus,setConnectionStatus] = useState('checking')\n const [connectLink,setConnectLink] = useState('#')\n\n useEffect(() => {\n /* This check is needed to convert event types with old location to new notation*/\n if(typeof(general?.location) === 'string'){\n console.info(\"[etype-creator][general] location type is 'string', converting to obj...\")\n const location = general?.location;\n let partialState = {}\n partialState = {\"type\" : \"custom\", \"value\" : location}\n setLocation(partialState)\n console.info(\"[etype-creator][general] location converted: \", partialState)\n }\n // re-check location connection every time an event type is opened\n checkConnectionStatus(general?.location?.type)\n },[]);\n \n const handleChange = (event) => {\n const target = event.target;\n let value = '';\n value = event.target.value\n let partialState = {};\n if (general?.location?.type === 'custom'){\n partialState = {\"type\" : \"custom\", \"value\" : value}\n }else{\n partialState = value;\n }\n setLocation(partialState);\n }\n\n const checkConnectionStatus = async (_locationType) => {\n switch(_locationType){\n case 'zoom':\n setConnectionStatus('checking');\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('integrations', '/zoom/userProfile', false, true)\n .then((response) => {\n if (Object.keys(response).length > 0) {\n setConnectionStatus('connected');\n } else {\n setConnectionStatus('disconnected');\n setConnectLink('/integrations/#zoom');\n }\n })\n .catch((e) => {\n console.info(\"[location][zoom] Error fetching user profile:\", e);\n setConnectionStatus('disconnected');\n setConnectLink('/integrations/#zoom'); // Set fallback link in case of error\n });\n })\n .catch((e) => {\n console.info(\"[location][zoom] Authentication error:\", e);\n setConnectionStatus('disconnected');\n setConnectLink('/integrations/#zoom'); // Set fallback link in case of authentication error\n });\n break;\n case 'googleMeet':\n setConnectionStatus('checking');\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('calendarhandler', \"/stopLight\", { calendar: auth.getEmail() }, true)\n .then((response) => {\n if (response.calendarStatus) {\n setConnectionStatus('connected');\n } else {\n setConnectionStatus('disconnected');\n setConnectLink('/calendarconnections');\n }\n })\n .catch((e) => {\n console.info(\"[location][gmeet] Error fetching google calendar connection:\", e);\n setConnectionStatus('disconnected');\n setConnectLink('/calendarconnections'); // Set fallback link in case of error\n });\n })\n .catch((e) => {\n console.info(\"[location][gmeet] Authentication error:\", e);\n setConnectionStatus('disconnected');\n setConnectLink('/calendarconnections'); // Set fallback link in case of authentication error\n });\n break;\n }\n }\n\n const handleLocationTypeChange = (event) => {\n const target = event.target;\n const name = target.name;\n let partialState = {}\n if (name === 'custom'){\n partialState = {\"type\" : name, \"value\" : \"\"}\n } else if (name === 'googleMeet'){\n partialState = {\"type\" : name, \"value\" : \"Google Meet\"}\n checkConnectionStatus(name)\n } else if (name === 'zoom'){\n partialState = {\"type\" : name, \"value\" : \"Zoom\"}\n checkConnectionStatus(name)\n }\n setLocation(partialState);\n }\n\n const locationDisplayName = {\n custom: <i name=\"custom\" className=\"far fa-keyboard me-2 align-bottom\" style={{fontSize:22}}></i>,\n googleMeet: <img src=\"/app-assets/svg/google-meet-logo.svg\" className=\"me-2 align-bottom\" alt=\"Google Meet\" width='24px'/>,\n zoom: <img src=\"/app-assets/svg/zoom-logo.svg\" className=\"me-2 align-bottom\" alt=\"Zoom\" width='24px'/>\n }\n\n return(\n <Form.Group as={Row} controlId=\"event-location\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.location')}</Form.Label>\n <Col sm={10} lg={6}>\n <InputGroup style={{flexWrap:'inherit'}}>\n <DropdownButton\n variant=\"outline-primary\"\n id=\"location-dropdown\"\n title={locationDisplayName[general?.location?.type]}\n >\n <Dropdown.Item onClick={handleLocationTypeChange} name=\"custom\">\n <img name=\"custom\" src=\"/app-assets/svg/keyboard-icon.svg\" className=\"me-2\" alt=\"Custom\" width='24px'/>\n Custom\n </Dropdown.Item>\n\n <Dropdown.Item onClick={handleLocationTypeChange} name=\"googleMeet\">\n <img name=\"googleMeet\" src=\"/app-assets/svg/google-meet-logo.svg\" className=\"me-2\" alt=\"Google Meet\" width='24px'/>\n Google Meet\n </Dropdown.Item>\n\n {/*ONLY AVAILABLE FOR PROD*/\n window.location.hostname === 'www.calendbook.com' &&\n <Dropdown.Item onClick={handleLocationTypeChange} name=\"zoom\">\n <img name=\"zoom\" src=\"/app-assets/svg/zoom-logo.svg\" className=\"me-2\" alt=\"Zoom\" width='24px'/>\n Zoom\n </Dropdown.Item>\n }\n </DropdownButton>\n <Form.Control\n className=\"dark-field\"\n name=\"location\"\n value={\n general?.location?.type !== 'custom' \n ? `${general?.location?.value} (${connectionStatus})` \n : `${general?.location?.value}`\n }\n onChange={handleChange}\n maxLength={100}\n disabled={general?.location?.type !== 'custom'}\n />\n {general?.location?.type !== 'custom' && connectionStatus === 'disconnected' &&\n <Link to={{pathname: connectLink}}>\n <Button>Connect</Button>\n </Link>\n }\n </InputGroup>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Location;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Color (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setColor = useCreateEventTypeStore((state) => state.setColor);\n\n return(\n <Form.Group as={Row} controlId=\"event-color\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.color')}</Form.Label>\n <Col sm={10} lg={6}>\n <div className=\"text-center\">\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"blue\" name=\"color\" value=\"#007bff\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#007bff\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"purple\" name=\"color\" value=\"#6f42c1\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#6f42c1\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"pink\" name=\"color\" value=\"#e83e8c\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#e83e8c\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"red\" name=\"color\" value=\"#dc3545\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#dc3545\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"orange\" name=\"color\" value=\"#fd7e14\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#fd7e14\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"yellow\" name=\"color\" value=\"#ffc107\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#ffc107\"}/>\n <Form.Check className=\"color me-2\" inline type=\"radio\" label=\"\" id=\"green\" name=\"color\" value=\"#28a745\" onChange={(e) => setColor(e.target.value)} defaultChecked={general?.color === \"#28a745\"}/>\n </div>\n </Col>\n </Form.Group>\n\n );\n}\n\nexport default Color;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Duration (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setDuration = useCreateEventTypeStore((state) => state.setDuration);\n\n return(\n <Form.Group as={Row} id=\"event-duration\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.duration')}</Form.Label>\n <Col sm={10} lg={6}>\n <div>\n <Form.Check className=\"duration mx-0 ps-0 pe-1 col-3\" inline type=\"radio\" label=\"15\" id=\"15\" name=\"duration\" value=\"15\" onChange={(e) => setDuration(e.target.value)} defaultChecked={general?.duration === \"15\"}/>\n <Form.Check className=\"duration mx-0 ps-0 pe-1 col-3\" inline type=\"radio\" label=\"30\" id=\"30\" name=\"duration\" value=\"30\" onChange={(e) => setDuration(e.target.value)} defaultChecked={general?.duration === \"30\"}/>\n <Form.Check className=\"duration mx-0 ps-0 pe-1 col-3\" inline type=\"radio\" label=\"45\" id=\"45\" name=\"duration\" value=\"45\" onChange={(e) => setDuration(e.target.value)} defaultChecked={general?.duration === \"45\"}/>\n <Form.Check className=\"duration mx-0 ps-0 pe-0 col-3\" inline type=\"radio\" label=\"60\" id=\"60\" name=\"duration\" value=\"60\" onChange={(e) => setDuration(e.target.value)} defaultChecked={general?.duration === \"60\"}/>\n </div>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Duration;\n","import { useTranslation } from \"react-i18next\";\nimport { useCreateEventTypeStore } from \"../../store\";\nimport { Form, Row, Col } from \"react-bootstrap\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction CustomDuration() {\n const { t } = useTranslation([\"eventCreator\"]);\n const general = useCreateEventTypeStore((state) => state.general);\n const setDuration = useCreateEventTypeStore((state) => state.setDuration);\n\n // attivo la checkbox nascosta con id #custom\n // per indicare che sto impostando durata custom\n // poi chiamo l'handling normalmente\n const handleClick = (event) => {\n document.getElementById(\"custom\").checked = true;\n setDuration(\"15\");\n };\n\n return (\n <Form.Group as={Row} id=\"custom-event-duration\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>\n <UpgradeBadge featureName=\"custom-event-duration\" />\n <br />\n {t(\"general.customDuration\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <div>\n <Form.Check\n className=\"custom-duration d-none mx-0 ps-0 pe-1 col-3\"\n inline\n type=\"radio\"\n id=\"custom\"\n name=\"duration\"\n label=\"custom:\"\n onChange={(e) => setDuration(\"15\")}\n defaultChecked={\n general?.duration !== \"15\" &&\n general?.duration !== \"30\" &&\n general?.duration !== \"45\" &&\n general?.duration !== \"60\"\n }\n />\n <Form.Check\n className=\"custom-duration mx-0 ps-0 pe-1 col-3 d-inline-flex\"\n inline\n type=\"number\"\n min=\"5\"\n max=\"720\"\n id=\"custom-value\"\n name=\"duration\"\n defaultValue={general?.duration}\n onClick={handleClick}\n onChange={(e) => setDuration(e.target.value)}\n required\n />\n </div>\n </Col>\n </Form.Group>\n );\n}\n\nexport default CustomDuration;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Buffer (){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setPrevBuffer = useCreateEventTypeStore((state) => state.setPrevBuffer);\n const setNextBuffer = useCreateEventTypeStore((state) => state.setNextBuffer);\n\n return(\n <Form.Group as={Row} controlId=\"event-buffers\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.buffers.title')}</Form.Label>\n <Col sm={5} lg={3} className=\"\">\n {t('general.buffers.before')}\n <Form.Select className=\"dark-field my-2 my-md-0\" name=\"prevBuffer\" value={general?.prevBuffer} onChange={(e) => setPrevBuffer(e.target.value)}>\n <option>0</option>\n <option>5</option>\n <option>10</option>\n <option>15</option>\n <option>30</option>\n <option>45</option>\n <option>60</option>\n </Form.Select>\n </Col>\n <Col sm={5} lg={3} className=\"\">\n {t('general.buffers.after')}\n <Form.Select className=\"dark-field my-2 my-md-0\" name=\"nextBuffer\" value={general?.nextBuffer} onChange={(e) => setNextBuffer(e.target.value)}>\n <option>0</option>\n <option>5</option>\n <option>10</option>\n <option>15</option>\n <option>30</option>\n <option>45</option>\n <option>60</option>\n </Form.Select>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Buffer;\n","import { useTranslation } from \"react-i18next\";\nimport { useCreateEventTypeStore } from \"../../store\";\nimport { Form, Row, Col } from \"react-bootstrap\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction RedirectionUrl() {\n const { t } = useTranslation([\"eventCreator\"]);\n const general = useCreateEventTypeStore((state) => state.general);\n const setRedirectionUrl = useCreateEventTypeStore(\n (state) => state.setRedirectionUrl\n );\n\n const handleChange = (e) => {\n let url = e.target.value;\n // if not secure url\n if (url && !url.includes(\"https://\")) {\n // remove http://\n url = url.replace(\"http://\", \"\");\n // add https://\n url = `https://${url}`;\n }\n setRedirectionUrl(`${url}`);\n };\n\n return (\n <Form.Group\n as={Row}\n controlId=\"event-redirection-url\"\n className=\"my-3 ms-2 me-2\"\n >\n <Form.Label column sm={12} lg={2}>\n <UpgradeBadge featureName=\"redirection-url\" />\n <br />\n {t(\"general.redirectionUrl\")}\n </Form.Label>\n\n <Col sm={10} lg={6}>\n <InputGroup className=\"flex-nowrap\">\n <Form.Control\n type=\"url\"\n className=\"dark-field\"\n placeholder={t(\"general.redirectionUrlPlaceholder\")}\n name=\"redirection-url\"\n value={general?.redirectionUrl}\n onChange={handleChange}\n />\n <Button variant=\"secondary\" onClick={() => setRedirectionUrl(\"\")}>\n <i className=\"fa-solid fa-xmark\"></i>\n </Button>\n </InputGroup>\n </Col>\n </Form.Group>\n );\n}\n\nexport default RedirectionUrl;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport {Form,Row,Col} from 'react-bootstrap';\n\nfunction Team(){\n const {t} = useTranslation(['eventCreator']);\n const general = useCreateEventTypeStore(state => state.general);\n const setTeam = useCreateEventTypeStore((state) => state.setTeam);\n\n return(\n <Form.Group as={Row} controlId=\"event-is-team\" className=\"my-3 ms-2 me-2\">\n <Form.Label column sm={2}>{t('general.team.title')}</Form.Label>\n <Col sm={10} lg={6}>\n <Form.Check\n type=\"checkbox\"\n label={t('general.team.label')}\n name=\"is-team-checkbox\"\n checked={general?.isTeam}\n onChange={(e) => setTeam(e.target.checked)}\n />\n </Col>\n </Form.Group> \n );\n}\n\nexport default Team;\n","import Card from 'react-bootstrap/Card';\nimport {useTranslation} from 'react-i18next';\nimport UpgradePath from '../../Utilities/UpgradePath/UpgradePath';\nimport Name from './Name';\nimport Description from './Description';\nimport Location from './Location';\nimport Color from './Color';\nimport Duration from './Duration';\nimport CustomDuration from './CustomDuration';\nimport Buffer from './Buffer';\nimport RedirectionUrl from './RedirectionUrl';\nimport Team from './Team';\n\nfunction General () {\n const {t} = useTranslation(['eventCreator']);\n\n return(\n <>\n <Card style={{color:'var(--text-color)',background:\"var(--color-background-1)\"}} className=\"mb-2\">\n\n <Card.Header className=\"h3\">\n {t('general.header')}\n </Card.Header>\n\n <Card.Body>\n <Name/> \n <Description/>\n <Location/>\n <Color/>\n <Duration/>\n <UpgradePath \n featureName=\"custom-event-duration\"\n position=\"right\">\n <CustomDuration/>\n </UpgradePath>\n <Buffer/>\n <UpgradePath \n featureName=\"redirection-url\"\n position=\"right\">\n <RedirectionUrl/>\n </UpgradePath>\n <Team/>\n </Card.Body>\n\n </Card>\n </>\n );\n}\n\nexport default General;\n","import React from 'react';\nimport {useCreateEventTypeStore} from '../../../store';\nimport {useTranslation} from 'react-i18next';\nimport * as utils from '../../../Utilities/datetimeUtils.js';\nimport Form from 'react-bootstrap/Form';\n\nfunction DayCheckbox ({day}) {\n const {t} = useTranslation(['eventCreator']);\n const availability = useCreateEventTypeStore(state => state.availability);\n const toggleDayAvailability = useCreateEventTypeStore((state) => state.toggleDayAvailability);\n const setDayRange = useCreateEventTypeStore((state) => state.setDayRange);\n\n return(\n <Form.Check\n name={day}\n id={day}\n value={day}\n type=\"checkbox\"\n label={t(`availability.days.${day}`)}\n checked={availability.days[day]}\n onChange={() => {\n toggleDayAvailability(day);\n // if availability check is becoming true but there are no ranges\n if (availability.ranges[day].length === 0 && availability.days[day] === true){\n // add new range for that day\n let index = availability.ranges[day].length\n let interval = {start:'09:00', end:'19:00'}\n // interval = utils.addIntervalCheck(availability,day,index,interval)\n setDayRange(day,index,interval)\n }}\n }\n />\n );\n}\n\nexport default DayCheckbox;\n","import React from 'react';\nimport TimeField from 'react-simple-timefield';\nimport {Row,Col} from 'react-bootstrap';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport {useCreateEventTypeStore} from '../../../store';\nimport * as utils from '../../../Utilities/datetimeUtils.js';\n\nfunction Range({index,wday,disabled,rangeState,timeFormat}){\n const availability = useCreateEventTypeStore(state => state.availability);\n const setDayRange = useCreateEventTypeStore((state) => state.setDayRange);\n\n return(\n <> \n <Row className=\"h-100 py-1\" style={{lineHeight:\"34px\"}}>\n <Col xs={5}>\n <TimeField\n key={`range-start-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['start']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = time\n let end = interval.end\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n\n <span className=\"text-center mx-0 col-1\"> - </span>\n\n <Col xs={5}>\n <TimeField\n key={`range-end-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['end']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = interval.start\n let end = time\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n </Row>\n </>\n );\n}\n\nexport default Range;\n","import React from 'react';\nimport {useCreateEventTypeStore} from '../../../store';\nimport {useTranslation} from 'react-i18next';\nimport {Form, Row, Col, Button} from 'react-bootstrap';\nimport DayCheckbox from './DayCheckbox';\nimport Range from './Range';\nimport * as utils from '../../../Utilities/datetimeUtils.js'\n\nfunction WeekView ({timeFormat}) {\n const {t} = useTranslation(['eventCreator']);\n const availability = useCreateEventTypeStore(state => state.availability);\n const deleteDayRange = useCreateEventTypeStore((state) => state.deleteDayRange);\n const toggleDayAvailability = useCreateEventTypeStore((state) => state.toggleDayAvailability);\n const setDayRange = useCreateEventTypeStore((state) => state.setDayRange);\n var days = ['mon','tue','wed','thu','fri','sat','sun']\n\n return(\n <Form.Group controlId=\"ranges\">\n {\n days.map((day,dayIndex) => (\n <Row key={`availabilities-${day}`} className=\"mx-2\">\n <Col xs={12} md={2} className={availability.ranges[day].length <= 1 ? \"mt-1 py-2 my-md-auto\" : \"mt-1 py-2\"}>\n <DayCheckbox day={day}/>\n </Col>\n\n <Col className=\"my-auto\">\n {availability.ranges[day].length === 0 && \n <Row>\n <Col className=\"my-2 text-muted\">\n {t(`availability.unavailable`)}\n </Col>\n </Row>\n }\n\n {availability.ranges[day].map((range,rangeIndex) => (\n <Row key={`ranges-${rangeIndex}-${day}`} id={`${range.start}-${range.end}-${day}`}>\n <Col>\n <Range wday={day} index={rangeIndex} rangeState={availability.ranges[day][rangeIndex]} disabled={!availability.days[day]} timeFormat={timeFormat}/>\n </Col>\n <Col xs={2} className=\"ps-0 my-auto\">\n <div className=\"d-grid gap-2\">\n <Button style={{border : \"none\", background : \"transparent\", color : \"var(--colot-text)\"}} onClick={() => {deleteDayRange(day,rangeIndex)}}>\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </div>\n </Col>\n </Row>\n ))}\n </Col>\n <Col xs={2} className={availability.ranges[day].length <= 1 ? \"my-auto\" : \"\"} style={availability.ranges[day].length > 1 ? {marginTop:\"6px\"} : {}}>\n <div className=\"d-grid gap-2\">\n <Button className=\"text-start\" style={{border : \"none\", background : \"transparent\", color : \"var(--color-text)\"}} onClick={() => { \n let interval = {start:\"08:00\",end:\"19:00\"};\n let index = availability.ranges[day].length;\n // interval = utils.addIntervalCheck(availability,day,index,interval);\n setDayRange(day,index,interval);\n }}>\n <i className=\"fas fa-plus\"></i>\n </Button>\n </div>\n </Col>\n {dayIndex < 6 &&\n <Col xs={12}>\n <hr style={{color:\"var(--color-ruler)\", backgroundColor:\"var(--color-ruler)\", height: \"2\", width:\"100%\"}}/>\n </Col>\n }\n </Row>\n ))}\n\n\n </Form.Group>\n\n );\n}\nexport default WeekView;\n","import { useState, useEffect } from \"react\";\nimport { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction DisabledDates() {\n const { t } = useTranslation([\"eventCreator\"]);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const addDisabledDateRange = useCreateEventTypeStore(\n (state) => state.addDisabledDateRange\n );\n const setDisabledDateStart = useCreateEventTypeStore(\n (state) => state.setDisabledDateStart\n );\n const setDisabledDateEnd = useCreateEventTypeStore(\n (state) => state.setDisabledDateEnd\n );\n const removeDisabledDateRange = useCreateEventTypeStore(\n (state) => state.removeDisabledDateRange\n );\n\n // Maximum number of date ranges allowed\n const MAX_RANGES = 5;\n\n // State variable for date ranges\n const [dateRanges, setDateRanges] = useState([]);\n\n // State variable for error messages per date range\n const [errorMessages, setErrorMessages] = useState([]);\n\n // State variable for max ranges message\n const [maxRangesMessage, setMaxRangesMessage] = useState(\"\");\n\n // Initialize date ranges from availability state\n useEffect(() => {\n if (\n availability.disabledDateRaw &&\n availability.disabledDateRaw.length > 0\n ) {\n // Deep copy to prevent mutating state directly\n setDateRanges(\n availability.disabledDateRaw.map((range) => ({ ...range }))\n );\n setErrorMessages(availability.disabledDateRaw.map(() => \"\"));\n } else {\n setDateRanges([]);\n setErrorMessages([]);\n }\n }, [availability.disabledDateRaw]);\n\n // Function to add a new date range\n const addDateRange = () => {\n if (dateRanges.length < MAX_RANGES) {\n setDateRanges([...dateRanges, { start: \"\", end: \"\" }]);\n setErrorMessages([...errorMessages, \"\"]);\n addDisabledDateRange(); // Update Zustand store\n setMaxRangesMessage(\"\"); // Clear any existing message\n } else {\n setMaxRangesMessage(`You can only add up to ${MAX_RANGES} date ranges.`);\n }\n };\n\n // Function to remove a date range at a given index\n const removeDateRange = (index) => {\n const newDateRanges = dateRanges.filter((_, idx) => idx !== index);\n const newErrorMessages = errorMessages.filter((_, idx) => idx !== index);\n setDateRanges(newDateRanges);\n setErrorMessages(newErrorMessages);\n removeDisabledDateRange(index); // Update Zustand store\n setMaxRangesMessage(\"\"); // Clear any existing message when a range is removed\n };\n\n // Handler for date range change\n const handleDateRangeChange = (index, field, value) => {\n const updatedRange = { ...dateRanges[index], [field]: value };\n\n // Validation: end date should not be before start date\n let errorMessage = \"\";\n if (\n field === \"start\" &&\n updatedRange.end &&\n new Date(updatedRange.end) < new Date(value)\n ) {\n updatedRange.end = value;\n setDisabledDateEnd(index, value); // Update Zustand store\n }\n if (\n field === \"end\" &&\n updatedRange.start &&\n new Date(value) < new Date(updatedRange.start)\n ) {\n errorMessage = \"End date cannot be before start date.\";\n }\n\n // Update state and store\n const newDateRanges = [...dateRanges];\n newDateRanges[index] = updatedRange;\n setDateRanges(newDateRanges);\n\n const newErrorMessages = [...errorMessages];\n newErrorMessages[index] = errorMessage;\n setErrorMessages(newErrorMessages);\n\n // Update Zustand store\n if (field === \"start\") {\n setDisabledDateStart(index, value);\n } else if (field === \"end\") {\n setDisabledDateEnd(index, value);\n }\n };\n\n return (\n <div className=\"tw-w-full flex-col sm:tw-inline-flex tw-mx-2 tw-my-4\">\n <div className=\"sm:tw-w-12/12 lg:tw-w-2/12 tw-flex tw-items-center tw-mb-2 tw-px-3 tw-py-2\">\n <label className=\"\">\n <UpgradeBadge featureName=\"event-disabled-dates\" />\n <br />\n {t(\"availability.disableDates.title\")}\n </label>\n </div>\n <div className=\"tw-w-full tw-px-7\">\n <div className=\"tw-w-10/12\">\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.disableDates.hint\")}\n </small>\n </div>\n {dateRanges.length === 0 ? (\n <div className=\"tw-mt-2\">\n <div className=\"tw-flex tw-items-center tw-space-x-2\">\n <span>{t(\"availability.disableDates.add.click\")}</span>\n <i\n className=\"fas fa-plus tw-text-blue-500 tw-cursor-pointer\"\n onClick={addDateRange}\n ></i>\n <span>{t(\"availability.disableDates.add.range\")}</span>\n </div>\n {maxRangesMessage && (\n <div className=\"tw-text-red-500 tw-mt-2\">{maxRangesMessage}</div>\n )}\n </div>\n ) : (\n <div className=\"tw-w-10/12 tw-flex-col\">\n {dateRanges.map((range, index) => (\n <div key={index} className=\"tw-mt-2\">\n <div\n id=\"date-range-picker\"\n className=\"tw-flex tw-items-center tw-space-x-4\"\n >\n <div className=\"tw-flex tw-flex-col tw-w-full\">\n <label\n htmlFor={`datepicker-range-start-${index}`}\n className=\"tw-text-xs tw-mb-1\"\n >\n {t(\"availability.disableDates.start\")}{\" \"}\n </label>\n <input\n id={`datepicker-range-start-${index}`}\n name=\"start\"\n type=\"date\"\n className=\"dark-field tw-bg-gray-50 tw-border tw-border-gray-300 tw-text-gray-900 tw-text-sm tw-rounded-lg focus:tw-ring-blue-500 focus:tw-border-blue-500 tw-w-full tw-p-2.5\"\n value={range.start}\n onChange={(e) =>\n handleDateRangeChange(index, \"start\", e.target.value)\n }\n />\n </div>\n <div className=\"tw-flex tw-flex-col tw-w-full\">\n <label\n htmlFor={`datepicker-range-end-${index}`}\n className=\"tw-text-xs tw-mb-1\"\n >\n {t(\"availability.disableDates.end\")}\n </label>\n <input\n id={`datepicker-range-end-${index}`}\n name=\"end\"\n type=\"date\"\n className=\"dark-field tw-bg-gray-50 tw-border tw-border-gray-300 tw-text-gray-900 tw-text-sm tw-rounded-lg focus:tw-ring-blue-500 focus:tw-border-blue-500 tw-w-full tw-p-2.5\"\n value={range.end}\n onChange={(e) =>\n handleDateRangeChange(index, \"end\", e.target.value)\n }\n min={range.start || undefined}\n />\n </div>\n <i\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n className=\"far fa-trash-alt tw-text-black tw-cursor-pointer tw-ml-2 tw-mt-4\"\n onClick={() => removeDateRange(index)}\n ></i>\n </div>\n {errorMessages[index] && (\n <small className=\"tw-text-red-500 tw-mt-2\">\n {errorMessages[index]}\n </small>\n )}\n </div>\n ))}\n {dateRanges.length < MAX_RANGES && (\n <div className=\"tw-my-2\">\n <div className=\"tw-flex tw-items-center tw-space-x-2\">\n <i\n className=\"fas fa-plus tw-text-blue-500 tw-cursor-pointer\"\n onClick={addDateRange}\n ></i>\n <span>{t(\"availability.disableDates.add.another\")}</span>\n </div>\n </div>\n )}\n {maxRangesMessage && (\n <div className=\"tw-text-red-500 tw-mt-2\">{maxRangesMessage}</div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default DisabledDates;\n","import { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Hop() {\n const { t } = useTranslation([\"eventCreator\"]);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setTimeslotHop = useCreateEventTypeStore(\n (state) => state.setTimeslotHop\n );\n\n return (\n <Form.Group as={Row} controlId=\"event-timeslot-hop\" className=\"mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-timeslot-hop\" />\n <br />\n {t(\"availability.timeslotHop.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.timeslotHop.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Select\n className=\"dark-field text-center\"\n aria-label=\"Booking Limit Unit\"\n value={availability?.hop || \"15\"}\n onChange={(e) => setTimeslotHop(e.target.value)}\n >\n <option value=\"15\">15</option>\n <option value=\"30\">30</option>\n <option value=\"60\">60</option>\n </Form.Select>\n </Col>\n <Col\n xs={2}\n className=\"d-flex justify-content-center my-auto\"\n style={{ color: \"var(--color-secondary)\" }}\n >\n {t(\"availability.timeslotHop.minutes\")}\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Hop;\n","import { useEffect, useState } from \"react\";\nimport { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case \"day\":\n return \"0\";\n case \"week\":\n return \"0\";\n case \"month\":\n return \"0\";\n default:\n return \"0\";\n }\n};\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case \"day\":\n return \"100\";\n case \"week\":\n return \"200\";\n case \"month\":\n return \"500\";\n default:\n return \"0\";\n }\n};\n\nconst getUnit = () => {\n return document.getElementById(`booking-limit-unit`)?.value;\n};\n\nfunction Notice() {\n const { t } = useTranslation([\"eventCreator\"]);\n const [minQuantity, setMinQuantity] = useState(\"0\");\n const [maxQuantity, setMaxQuantity] = useState(\"0\");\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setBookingLimitQuantity = useCreateEventTypeStore(\n (state) => state.setBookingLimitQuantity\n );\n const setBookingLimitUnit = useCreateEventTypeStore(\n (state) => state.setBookingLimitUnit\n );\n\n useEffect(() => {\n // setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n }, []);\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === \"\" ? minQuantity : inputValue;\n setBookingLimitQuantity(valueToSet);\n setBookingLimitUnit(document.getElementById(\"booking-limit-unit\").value);\n };\n\n const disableBookingLimit = () => {\n setBookingLimitQuantity(\"0\");\n setBookingLimitUnit(\"day\");\n };\n\n return (\n <Form.Group as={Row} controlId=\"event-booking-limit\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-booking-limit\" />\n <br />\n {t(\"availability.bookingLimit.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.bookingLimit.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Control\n id=\"booking-limit-quantity\"\n className=\"dark-field text-center\"\n name=\"bookingLimit-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.bookingLimit?.quantity || 0}\n onChange={handleInputChange}\n />\n </Col>\n <Col\n xs={2}\n className=\"d-flex justify-content-center my-auto\"\n style={{ color: \"var(--color-secondary)\" }}\n >\n {t(\"availability.bookingLimit.per\")}\n </Col>\n <Col xs={4} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"booking-limit-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Booking Limit Unit\"\n value={availability?.bookingLimit?.unit || \"day\"}\n onChange={(e) => {\n setBookingLimitUnit(e.target.value);\n setBookingLimitQuantity(\n document.getElementById(\"booking-limit-quantity\").value\n );\n // setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}\n >\n <option value=\"day\">\n {t(\"availability.bookingLimit.units.day\")}\n </option>\n <option value=\"week\">\n {t(\"availability.bookingLimit.units.week\")}\n </option>\n <option value=\"month\">\n {t(\"availability.bookingLimit.units.month\")}\n </option>\n </Form.Select>\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableBookingLimit}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Notice;\n","import { useEffect, useState } from \"react\";\nimport { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"0\";\n case \"hours\":\n return \"1\";\n case \"days\":\n return \"1\";\n default:\n return \"0\";\n }\n};\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"59\";\n case \"hours\":\n return \"23\";\n case \"days\":\n return \"30\";\n default:\n return \"0\";\n }\n};\n\nconst getUnit = () => {\n return document.getElementById(`notice-unit`)?.value;\n};\n\nfunction Notice() {\n const { t } = useTranslation([\"eventCreator\"]);\n const [minQuantity, setMinQuantity] = useState(\"0\");\n const [maxQuantity, setMaxQuantity] = useState(\"0\");\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setNoticeQuantity = useCreateEventTypeStore(\n (state) => state.setNoticeQuantity\n );\n const setNoticeUnit = useCreateEventTypeStore((state) => state.setNoticeUnit);\n\n useEffect(() => {\n // setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n }, []);\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === \"\" ? minQuantity : inputValue;\n setNoticeQuantity(valueToSet);\n setNoticeUnit(document.getElementById(\"notice-unit\").value);\n };\n\n const disableNotice = () => {\n setNoticeQuantity(\"0\");\n setNoticeUnit(\"minutes\");\n };\n\n return (\n <Form.Group as={Row} controlId=\"event-notice\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-notice\" />\n <br />\n {t(\"availability.notice.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.notice.hint\")}\n </small>\n </Row>\n <Col xs={6}>\n <Form.Control\n id=\"notice-quantity\"\n className=\"dark-field text-center\"\n name=\"notice-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.notice?.quantity || minQuantity}\n onChange={handleInputChange}\n />\n </Col>\n <Col xs={4} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"notice-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Notice Unit\"\n value={availability?.notice?.unit || \"minutes\"}\n onChange={(e) => {\n setNoticeUnit(e.target.value);\n setNoticeQuantity(\n document.getElementById(\"notice-quantity\").value\n );\n // setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}\n >\n <option value=\"minutes\">\n {t(\"availability.notice.units.minutes\")}\n </option>\n <option value=\"hours\">\n {t(\"availability.notice.units.hours\")}\n </option>\n <option value=\"days\">\n {t(\"availability.notice.units.days\")}\n </option>\n </Form.Select>\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableNotice}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Notice;\n","import { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction LastAvailable() {\n const { t } = useTranslation([\"eventCreator\"]);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setLastAvailabilityDate = useCreateEventTypeStore(\n (state) => state.setLastAvailabilityDate\n );\n const setLastAvailabilityTime = useCreateEventTypeStore(\n (state) => state.setLastAvailabilityTime\n );\n\n const disableLastAvailableDate = () => {\n setLastAvailabilityDate(\"\");\n setLastAvailabilityTime(\"00:00\");\n };\n\n return (\n <Form.Group\n as={Row}\n controlId=\"event-last-availability\"\n className=\"mt-3 mx-2\"\n >\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-last-availability\" />\n <br />\n {t(\"availability.lastAvailability.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.lastAvailability.hint\")}\n </small>\n </Row>\n <Col xs={6}>\n <Form.Control\n className=\"dark-field text-center\"\n name=\"last-availability-date\"\n type=\"date\"\n value={availability?.lastAvailability?.date || \"\"}\n onChange={(e) => setLastAvailabilityDate(e.target.value)}\n />\n </Col>\n <Col xs={4} className=\"d-flex align-items-center\">\n <Form.Control\n className=\"dark-field text-center\"\n name=\"last-availability-time\"\n type=\"time\"\n value={availability?.lastAvailability?.time || \"\"}\n onChange={(e) => setLastAvailabilityTime(e.target.value)}\n />\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableLastAvailableDate}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default LastAvailable;\n","import { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction LastAvailable() {\n const { t } = useTranslation([\"eventCreator\"]);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setApproval = useCreateEventTypeStore((state) => state.setApproval);\n\n return (\n <Form.Group as={Row} controlId=\"event-approval\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-approval\" />\n <br />\n {t(\"availability.approval.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.approval.hint\")}\n </small>\n </Row>\n <Col>\n <Form.Check\n name=\"event-approval-checkbox\"\n type=\"checkbox\"\n label={t(\"availability.approval.label\")}\n checked={availability?.needsApproval || false}\n onChange={(e) => setApproval(e.target.checked)}\n />\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default LastAvailable;\n","import { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useCreateEventTypeStore } from \"../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport auth from \"../../../Account/Auth\";\nimport be from \"../../../BE\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Calendar() {\n const history = useHistory();\n const { t } = useTranslation([\"eventCreator\"]);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const setCalendar = useCreateEventTypeStore((state) => state.setCalendar);\n const [availableCalendars, setAvailableCalendars] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const getAvailableCalendars = async () => {\n setLoading(true);\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.get(\"jubilant-events\", \"/events/calendars\", false, true, true)\n .then((response) => {\n console.log(\"[etype-creator][calendars] calendars fetched\");\n setAvailableCalendars(response);\n if (!availability?.calendar && availableCalendars.length) {\n setCalendar(response[0]);\n }\n })\n .catch((error) => {\n console.error(\n \"[etype-creator][calendars] network error while fetching calendars:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[etype-creator][calendars] authentication error while fetching calendars:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[etype-creator][calendars] functional error while fetching calendars:\",\n error\n );\n } finally {\n setLoading(false);\n }\n };\n\n getAvailableCalendars();\n }, []);\n\n return (\n <Form.Group as={Row} controlId=\"event-calendar\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-timeslot-hop\" />\n <br />\n {t(\"availability.calendar.title\")}\n </Form.Label>\n <Col sm={10} lg={8}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.calendar.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Select\n className=\"dark-field text-center\"\n aria-label=\"Calendar\"\n defaultValue=\"\"\n value={availability?.calendar || \"\"}\n onChange={(e) => {\n console.log(e.target.value);\n setCalendar(e.target.value);\n }}\n >\n <option value=\"\"> all calendars </option>\n {!loading &&\n availableCalendars.length &&\n availableCalendars.map((calendar) => {\n return (\n <option key={`calendar-${calendar}`} value={calendar}>\n {calendar}\n </option>\n );\n })}\n </Form.Select>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Calendar;\n","import { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport {useCreateEventTypeStore} from '../../../store';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction Templates(){\n const history = useHistory();\n const [loadingTemplates, setLoadingTemplates] = useState(false);\n const [templates, setTemplates] = useState(null);\n const selectedTemplate = useCreateEventTypeStore(state => state.availability.template);\n const setSelectedTemplate = useCreateEventTypeStore(state => state.setSelectedTemplate);\n const setAvailability = useCreateEventTypeStore(state => state.setAvailability);\n\n const Button = window.calendbookUI.Button;\n\n useEffect(()=>{\n const getAvailabilityTemplates = async () => {\n setLoadingTemplates(true);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('jubilant-events','/events/templates/availabilities',false,true,true)\n .then(response => {\n setTemplates(response);\n })\n .catch(error => {\n console.error(\"[settings][availabilities] network error while retrieving info:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[settings][availabilities] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[settings][availabilities] functional error while retrieving info:\",error);\n }finally{\n setLoadingTemplates(false);\n }\n }\n getAvailabilityTemplates();\n },[])\n\n const handleTemplateSelection = (e,_key) => {\n e.preventDefault();\n setAvailability(templates[_key])\n setSelectedTemplate(_key);\n }\n\n return(\n <div className=\"tw-ms-4\">\n Templates\n <div className=\"tw-my-2\">\n {loadingTemplates \n ? \n <>\n loading...\n </> \n : \n <div className=\"tw-overflow-auto tw-inline-flex tw-gap-2 tw-items-center\">\n {templates && Object.keys(templates).map(templateKey => (\n <Button\n key={templateKey}\n radius=\"rounded\"\n color=\"primary\"\n outline={(templateKey === selectedTemplate) ? false : true}\n onClick={(e) => handleTemplateSelection(e,templateKey)}\n buttonText={templateKey}\n size=\"xs\"\n />\n ))}\n <Button\n radius=\"rounded\"\n color=\"primary\"\n outline\n iconStyle=\"plus\"\n iconOnly\n onClick={(e) => {e.preventDefault(); window.open('/settings#availabilities',\"_blank\")}}\n />\n </div>\n }\n </div>\n </div>\n );\n}\n\nexport default Templates;\n","import React, { useState } from \"react\";\nimport UpgradePath from \"../../Utilities/UpgradePath/UpgradePath\";\nimport Card from \"react-bootstrap/Card\";\nimport { useTranslation } from \"react-i18next\";\nimport TimeFormat from \"./TimeFormat\";\nimport WeekView from \"./WeekView/_WeekView\";\nimport DisabledDates from \"./DisabledDates/DisabledDates\";\nimport Hop from \"./Hop/Hop\";\nimport BookingLimit from \"./BookingLimit/BookingLimit\";\nimport Notice from \"./Notice/Notice\";\nimport LastAvailable from \"./LastAvailable/LastAvailable\";\nimport Approval from \"./Approval/Approval\";\nimport Calendar from \"./Calendar/Calendar\";\nimport Templates from \"./Templates/Templates\";\nimport \"./availability.css\";\n\nfunction Availability() {\n const { t } = useTranslation([\"eventCreator\"]);\n const [timeFormat, setTimeFormat] = useState(24);\n\n const toggleTimeFormat = () => {\n timeFormat === 12 ? setTimeFormat(24) : setTimeFormat(12);\n };\n\n return (\n <>\n <Card\n style={{\n color: \"var(--text-color)\",\n background: \"var(--color-background-1)\",\n }}\n className=\"mb-2\"\n >\n <Card.Header className=\"h3\">{t(\"availability.header\")}</Card.Header>\n\n <Card.Body>\n {/*<TimeFormat timeFormat={timeFormat} toggleTimeFormat={toggleTimeFormat}/>*/}\n <Templates />\n <WeekView timeFormat={timeFormat} />\n <div className=\"advanced-rules-separator\">\n <span>Advanced rules</span>\n </div>\n <UpgradePath featureName=\"event-disabled-dates\" position=\"right\">\n <DisabledDates />\n </UpgradePath>\n <UpgradePath featureName=\"event-timeslot-hop\" position=\"right\">\n <Hop />\n </UpgradePath>\n <UpgradePath featureName=\"event-booking-limit\" position=\"right\">\n <BookingLimit />\n </UpgradePath>\n <UpgradePath featureName=\"event-notice\" position=\"right\">\n <Notice />\n </UpgradePath>\n <UpgradePath featureName=\"event-last-availability\" position=\"right\">\n <LastAvailable />\n </UpgradePath>\n <UpgradePath featureName=\"event-approval\" position=\"right\">\n <Approval />\n </UpgradePath>\n <UpgradePath featureName=\"event-calendar\" position=\"right\">\n <Calendar />\n </UpgradePath>\n </Card.Body>\n </Card>\n </>\n );\n}\n\nexport default Availability;\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport Form from 'react-bootstrap/Form';\n\nfunction Email (){\n const {t} = useTranslation(['eventCreator']);\n const notifications = useCreateEventTypeStore(state => state.notifications);\n const setEmailNotification = useCreateEventTypeStore((state) => state.setEmailNotification);\n\n return(\n <>\n <Form.Control\n as=\"textarea\"\n col=\"3\"\n className=\"dark-field\"\n placeholder={t('advanced.emailNotificationsPlaceholder')}\n name=\"guest\"\n value={notifications?.notifications?.guest}\n onChange={(e) => setEmailNotification(e.target.value)}\n maxLength={700}\n />\n </>\n );\n}\n\nexport default Email;\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../store';\nimport Form from 'react-bootstrap/Form';\n\nfunction SalesForza (){\n const {t} = useTranslation(['eventCreator']);\n const notifications = useCreateEventTypeStore(state => state.notifications);\n const setSalesforza = useCreateEventTypeStore((state) => state.setSalesforza);\n\n return(\n <>\n <Form.Check\n type=\"checkbox\"\n name=\"salesforza\"\n label={t('advanced.salesForzaEmailNotificationsLabel')}\n checked={notifications?.notifications?.salesforza}\n onChange={(e) => setSalesforza(e.target.checked)}\n />\n </>\n );\n}\n\nexport default SalesForza;\n","import React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCreateEventTypeStore } from \"../../store\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"5\";\n case \"hours\":\n return \"1\";\n case \"days\":\n return \"1\";\n case \"weeks\":\n return \"1\";\n default:\n return \"0\";\n }\n};\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"59\";\n case \"hours\":\n return \"23\";\n case \"days\":\n return \"30\";\n case \"weeks\":\n return \"4\";\n default:\n return \"0\";\n }\n};\n\nconst getUnit = (_index) => {\n return document.getElementById(`reminder-unit-${_index}`)?.value;\n};\n\nfunction Reminders({ index }) {\n const { t } = useTranslation([\"eventCreator\"]);\n const [minQuantity, setMinQuantity] = useState(\"0\");\n const [maxQuantity, setMaxQuantity] = useState(\"0\");\n const notifications = useCreateEventTypeStore((state) => state.notifications);\n const setReminder = useCreateEventTypeStore((state) => state.setReminder);\n const deleteReminder = useCreateEventTypeStore(\n (state) => state.deleteReminder\n );\n\n useEffect(() => {\n // this check is used to convert old reminders structure to the new one.\n // useful for compatibility with old event types\n // the difference with the old structure is that 'minutes' inside 'unit' key\n //\n // OLD STRUCTURE:\n // \"reminders\": [{\n // \"method\" : email | popup\n // \"minutes\": int\n // }]\n //\n // NEW STRUCTURE:\n // \"reminders\": [{\n // \"method\" : email | popup | telegram\n // \"quantity\" : int\n // \"unit\" : weeks | days | hours | minutes\n // }]\n if (notifications?.reminders[index]?.minutes) {\n setReminder(index, {\n method: notifications?.reminders[index]?.method,\n quantity: notifications?.reminders[index]?.minutes,\n unit: \"minutes\",\n });\n }\n setMinQuantity(determineMinQuantity(getUnit(index)));\n setMaxQuantity(determineMaxQuantity(getUnit(index)));\n }, []);\n\n return (\n <>\n <Row className=\"my-2\">\n <Col xs={12} sm={3} md={4} lg={4} className=\"mb-1\">\n <Form.Select\n id={`reminder-method-${index}`}\n className=\"dark-field text-center\"\n aria-label=\"Reminder Method\"\n value={notifications?.reminders[index]?.method || \"email\"}\n onChange={(e) =>\n setReminder(index, {\n method: e?.target?.value,\n quantity: document.getElementById(`reminder-quantity-${index}`)\n ?.value,\n unit: document.getElementById(`reminder-unit-${index}`)?.value,\n })\n }\n >\n <option value=\"email\">email</option>\n <option value=\"popup\">popup</option>\n <option value=\"telegram\">telegram</option>\n </Form.Select>\n </Col>\n\n <Col xs={12} sm={2} md={2} lg={2} className=\"mb-1\">\n <Form.Control\n id={`reminder-quantity-${index}`}\n className=\"dark-field\"\n placeholder=\"quantity\"\n // quantity constraints\n //min={minQuantity}\n //max={maxQuantity}\n name=\"quantity\"\n type=\"number\"\n value={notifications?.reminders[index]?.quantity || minQuantity}\n onChange={(e) =>\n setReminder(index, {\n method: document.getElementById(`reminder-method-${index}`)\n ?.value,\n quantity: e?.target?.value,\n unit: document.getElementById(`reminder-unit-${index}`)?.value,\n })\n }\n />\n </Col>\n\n <Col xs={9} sm={3} md={4} lg={4} className=\"mb-1\">\n <Form.Select\n id={`reminder-unit-${index}`}\n className=\"dark-field text-center\"\n aria-label=\"Reminder Unit\"\n value={notifications?.reminders[index]?.unit || \"minutes\"}\n onChange={(e) => {\n setMinQuantity(determineMinQuantity(getUnit(index)));\n setMaxQuantity(determineMaxQuantity(getUnit(index)));\n setReminder(index, {\n method: document.getElementById(`reminder-method-${index}`)\n ?.value,\n quantity: document.getElementById(`reminder-quantity-${index}`)\n .value,\n unit: e?.target?.value,\n });\n }}\n >\n <option value=\"minutes\">minutes</option>\n <option value=\"hours\">hours</option>\n <option value=\"days\">days</option>\n <option value=\"weeks\">weeks</option>\n </Form.Select>\n </Col>\n\n <Col xs={3} sm={2} md={2} lg={2} className=\"mx-auto mb-1\">\n <div className=\"d-grid gap-2\">\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--colot-text)\",\n }}\n onClick={(e) => {\n e.preventDefault();\n deleteReminder(index);\n }}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </div>\n </Col>\n </Row>\n </>\n );\n}\n\nexport default Reminders;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Button from \"react-bootstrap/Button\";\nimport Card from \"react-bootstrap/Card\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport { useCreateEventTypeStore } from \"../../store\";\nimport Email from \"./Email\";\nimport SalesForza from \"./SalesForza\";\nimport Reminders from \"./Reminders\";\nimport UpgradePath from \"../../Utilities/UpgradePath/UpgradePath\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Notifications() {\n const { t } = useTranslation([\"eventCreator\"]);\n const notifications = useCreateEventTypeStore((state) => state.notifications);\n const addReminder = useCreateEventTypeStore((state) => state.addReminder);\n\n return (\n <>\n <Card\n style={{\n color: \"var(--text-color)\",\n background: \"var(--color-background-1)\",\n }}\n className=\"mb-2\"\n >\n <Card.Header className=\"h3\">{t(\"advanced.header\")}</Card.Header>\n\n <Card.Body>\n <UpgradePath\n featureName=\"custom-email-notifications\"\n position=\"right\"\n >\n <Form.Group as={Row} controlId=\"event-emails\" className=\"my-3 mx-2\">\n <Form.Label column sm={12} lg={2}>\n <UpgradeBadge featureName=\"custom-email-notifications\" />\n <br />\n {t(\"advanced.emailNotifications\")}\n </Form.Label>\n <Col xs={12} lg={6}>\n <Email />\n </Col>\n </Form.Group>\n </UpgradePath>\n\n <UpgradePath\n featureName=\"salesforza-email-notifications\"\n position=\"right\"\n >\n <Form.Group\n as={Row}\n controlId=\"salesforza-emails\"\n className=\"my-3 mx-2\"\n >\n <Form.Label column sm={12} lg={2}>\n <UpgradeBadge featureName=\"salesforza-email-notifications\" />\n <br />\n {t(\"advanced.salesForzaEmailNotifications\")}\n </Form.Label>\n <Col xs={12} lg={6}>\n <SalesForza />\n </Col>\n </Form.Group>\n </UpgradePath>\n\n <UpgradePath featureName=\"custom-reminders\" position=\"right\">\n <Form.Group\n as={Row}\n controlId=\"event-reminders\"\n className=\"my-3 mx-2\"\n >\n <Form.Label column sm={12} lg={2}>\n <UpgradeBadge featureName=\"custom-reminders\" />\n <br />\n {t(\"advanced.reminders\")}\n </Form.Label>\n <Col sm={12} lg={10}>\n <Row>\n {\" \"}\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"advanced.remindersHint\")}\n </small>{\" \"}\n </Row>\n <Row>\n {notifications?.reminders.length > 0 && (\n <Col>\n {\" \"}\n {notifications?.reminders.map((reminder, index) => (\n <Reminders state={reminder} index={index} />\n ))}{\" \"}\n </Col>\n )}\n {notifications?.reminders &&\n notifications?.reminders.length < 10 && (\n <Col xs={2} className=\"mt-2\">\n {\" \"}\n <div className=\"d-grid gap-2\">\n {\" \"}\n <Button\n className=\"text-start\"\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={(e) => {\n e.preventDefault();\n addReminder({\n method: \"email\",\n quantity: \"5\",\n unit: \"minutes\",\n });\n }}\n >\n {\" \"}\n <i className=\"fas fa-plus\"></i>{\" \"}\n </Button>{\" \"}\n </div>{\" \"}\n </Col>\n )}\n </Row>\n </Col>\n </Form.Group>\n </UpgradePath>\n </Card.Body>\n </Card>\n </>\n );\n}\n\nexport default Notifications;\n","import Accordion from 'react-bootstrap/Accordion';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport './accordion-header.css';\n\nfunction Header({content,type,required,order}){\n const getType = (type) => {\n if(type === 1) return 'radio';\n if(type === 2) return 'checkbox';\n if(type === 3) return 'text';\n if(type === 4) return 'phone';\n if(type === 5) return 'telegram';\n if(type === 6) return 'whatsapp';\n }\n return(\n <Accordion.Header>\n <span style={{color:'var(--color-text)',fontWeight:'300'}} className=\"me-3 d-inline-flex\">\n <i className=\"fa-solid fa-grip-vertical my-auto me-3\"></i>\n {order}\n </span>\n <Row sm={12} className=\"w-100\">\n <Col sm={12}>\n {content}{required && '*'}\n </Col>\n <Col sm={12}>\n {<span style={{color:'var(--color-text)',fontWeight:'300',fontSize:12}} className=\"text-capitalize\">{getType(type)}</span>}\n </Col>\n </Row>\n </Accordion.Header>\n );\n}\n\nexport default Header;\n\n","import {useCreateEventTypeStore} from '../../../../store';\nimport Form from 'react-bootstrap/Form';\n\nfunction Content({content,order,id}){\n const setQuestionContent = useCreateEventTypeStore((state) => state.setQuestionContent);\n\n const componentStyle = {\n background : 'var(--color-background-2)',\n borderColor : 'var(--color-border)',\n color : 'var(--color-text)',\n height : 100\n }\n\n return(\n <Form.Control\n key={`form-control-content-${id}`}\n as=\"textarea\"\n className=\"mb-3\"\n value={content}\n style={componentStyle}\n onChange={(e) => setQuestionContent(e.target.value,id)}\n />\n );\n}\n\nexport default Content;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../../../store';\nimport Form from 'react-bootstrap/Form';\n\nfunction Required({required,order,id}){\n const {t} = useTranslation(['eventCreator']);\n const setQuestionRequired = useCreateEventTypeStore((state) => state.setQuestionRequired);\n\n return(\n <div className=\"my-2\">\n <Form.Check \n type=\"checkbox\"\n name=\"required-check\"\n id={`required-check-${id}`}\n label={t('surveys.required')}\n onChange={() => setQuestionRequired(id)}\n checked={required}\n style={{'float':'right'}}\n />\n </div>\n );\n}\n\nexport default Required;\n","import Button from 'react-bootstrap/Button';\nimport {useCreateEventTypeStore} from '../../../../store';\n\nfunction AnswerType({type,chosenType,order,id,existingQuestions,editing}){\n const setQuestionType = useCreateEventTypeStore((state) => state.setQuestionType);\n\n const getVariant = (_type,_chosenType) => {\n let variant = 'outline-primary';\n if(\n (_type === \"radio\" && _chosenType === 1) ||\n (_type === \"checkbox\" && _chosenType === 2) ||\n (_type === \"text\" && _chosenType === 3) ||\n (_type === \"phone\" && _chosenType === 4) ||\n (_type === \"telegram\" && _chosenType === 5) ||\n (_type === \"whatsapp\" && _chosenType === 6)\n ){\n variant = 'primary';\n }\n return variant;\n }\n\n const getTypeFromString = (_type) => {\n if(_type === \"radio\") return 1; \n if(_type === \"checkbox\") return 2; \n if(_type === \"text\") return 3; \n if(_type === \"phone\") return 4; \n if(_type === \"telegram\") return 5; \n if(_type === \"whatsapp\") return 6; \n }\n\n const getTypeFromNumber = (_chosenType) => {\n if(_chosenType === 1) return \"radio\";\n if(_chosenType === 2) return \"checkbox\";\n if(_chosenType === 3) return \"text\";\n if(_chosenType === 4) return \"phone\";\n if(_chosenType === 5) return \"telegram\";\n if(_chosenType === 6) return \"whatsapp\";\n }\n\n const shouldDisplay = () => {\n if(editing){\n let alreadyExists = existingQuestions.includes(id)\n if(alreadyExists){\n let isChosenType = type === getTypeFromNumber(chosenType)\n return isChosenType;\n }else{\n return true;\n }\n }else{\n return true;\n }\n }\n\n return(\n <>\n {shouldDisplay() &&\n <Button size=\"sm\" className=\"me-2\" disabled={existingQuestions.includes(id)} variant={getVariant(type,chosenType)} onClick={() => setQuestionType(getTypeFromString(type),id)}>\n <span className=\"text-capitalize\">{type}</span>\n </Button>\n }\n \n </>\n );\n}\nexport default AnswerType\n","import {useCreateEventTypeStore} from '../../../../../store';\n\nfunction Delete({order,index,questionId,fieldId}){\n const deleteField = useCreateEventTypeStore((state) => state.deleteField);\n\n const componentStyle= {\n backgroundColor : 'transparent',\n border : 'none',\n margin :'0 0 0 10px',\n padding : 0 \n }\n\n return(\n <button style={componentStyle} onClick={(e) => {e.preventDefault(); deleteField(questionId,fieldId)}}>\n <i className=\"fa-solid fa-trash-can\" style={{color:'var(--color-text)'}}></i>\n </button>\n );\n}\n\nexport default Delete;\n","import {useCreateEventTypeStore} from '../../../../../store';\nimport Form from 'react-bootstrap/Form';\nimport Delete from './Delete';\n\nfunction Field({fieldContent,order,index,questionId,fieldId,existingFields,editing}){\n const surveys = useCreateEventTypeStore(state => state.surveys);\n const setFieldContent = useCreateEventTypeStore((state) => state.setFieldContent);\n const componentStyle = {\n background : 'var(--color-background-2)',\n borderColor : 'var(--color-border)',\n color : 'var(--color-text)'\n }\n\n const canDelete = () => {\n if(!editing) return true;\n else if(editing && existingFields.includes(fieldId)) return false;\n else if(editing && !existingFields.includes(fieldId)) return true;\n }\n\n const shouldDisable = () => {\n if(editing && existingFields.includes(fieldId)) return true;\n else return false;\n }\n\n return(\n <div className=\"d-inline-flex\">\n <Form.Control\n required\n disabled={shouldDisable()}\n type=\"text\"\n value={fieldContent}\n style={componentStyle}\n onChange={(e) => {setFieldContent(e.target.value,questionId,fieldId)}}\n />\n {canDelete() && <Delete order={order} index={index} questionId={questionId} fieldId={fieldId}/>}\n </div>\n );\n}\n\nexport default Field;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../../../../store';\n\nfunction Add({order,id}){\n const {t} = useTranslation(['eventCreator']);\n const addField = useCreateEventTypeStore((state) => state.addField);\n\n const componentStyle = {\n backgroundColor : \"transparent\",\n border : \"none\",\n margin : 0,\n padding : 0,\n color : \"var(--bs-primary)\"\n }\n\n return(\n <div className=\"mt-3\" style={{fontSize:14}}>\n <button style={componentStyle} onClick={(e) => {e.preventDefault();addField(id)}}>\n {t('surveys.addAnswer')}\n </button>\n </div>\n );\n}\n\nexport default Add;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateEventTypeStore} from '../../../../store';\n\nfunction Delete({order,id}){\n const {t} = useTranslation(['eventCreator']);\n const deleteQuestion = useCreateEventTypeStore((state) => state.deleteQuestion);\n\n const componentStyle = {\n backgroundColor: 'transparent',\n border: 'none',\n color: 'var(--bs-red)',\n padding: 0,\n margin: '25px 0 0 0'\n }\n\n return(\n <button style={componentStyle} onClick={(e) => {e.preventDefault(); deleteQuestion(order,id)}}>\n <i className=\"fa-solid fa-trash-can me-2\"></i>\n {t('surveys.deleteQuestion')}\n </button>\n );\n}\n\nexport default Delete;\n","import {useTranslation} from 'react-i18next';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Content from './Content';\nimport Required from './Required';\nimport AnswerType from './AnswerType';\nimport Field from './Field/_Field'\nimport Add from './Field/Add';\nimport Delete from './Delete';\n\nfunction Body({content,type,required,fields,order,id,existingQuestions,existingFields,editing}){\n const {t} = useTranslation(['eventCreator']);\n return(\n <Accordion.Body key={`accordion-body-${id}`} style={{color:'var(--color-text)'}}>\n <p> {t('surveys.question')} </p>\n <Content key={`accordion-body-content-${id}`} content={content} order={order} id={id}/>\n\n <Required key={`accordion-body-required-${id}`} required={required} order={order} id={id}/>\n\n <div className=\"mb-3\">\n <p> {t('surveys.answerType')} </p>\n <AnswerType key={`accordion-body-answer-text-${id}`} type=\"text\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n <AnswerType key={`accordion-body-answer-radio-${id}`} type=\"radio\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n <AnswerType key={`accordion-body-answer-checkbox-${id}`} type=\"checkbox\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n <AnswerType key={`accordion-body-answer-phone-${id}`} type=\"phone\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n <AnswerType key={`accordion-body-answer-telegram-${id}`} type=\"telegram\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n <AnswerType key={`accordion-body-answer-whatsapp-${id}`} type=\"whatsapp\" chosenType={type} order={order} id={id} existingQuestions={existingQuestions} editing={editing}/>\n </div>\n\n {(type === 1 || type === 2) &&\n <div className=\"mb-3\">\n <p> {t('surveys.answers')} </p>\n {Object.keys(fields).map((key,index) => (\n <div className=\"my-3\">\n <Field key={`accordion-body-field-${key}-${id}`} editing={editing} fieldContent={fields[key]} order={order} index={index} questionId={id} fieldId={key} existingFields={existingFields}/>\n </div>\n ))}\n <Add order={order} id={id}/>\n </div>\n }\n \n <Delete order={order} id={id}/>\n </Accordion.Body>\n );\n}\n\nexport default Body;\n\n","import Accordion from 'react-bootstrap/Accordion';\nimport Header from './Header';\nimport Body from './Body/_Body';\n\nfunction Question({id,index,state,existingQuestions,existingFields,editing}){\n const componentStyle = {\n background : 'var(--color-background-1)',\n border : '1px solid var(--color-border-light)'\n }\n\n return(\n <Accordion.Item key={`accordion-item-${id}`} eventKey={index} style={componentStyle}>\n <Header key={`accordion-header-${id}`} content={state?.content} type={state?.questionType} required={state?.required} order={state?.order}/>\n <Body key={`accordion-body-${id}`} id={id} content={state?.content} type={state?.questionType} required={state?.required} fields={state?.qstFields} order={state?.order} existingQuestions={existingQuestions} existingFields={existingFields} editing={editing}/>\n </Accordion.Item>\n );\n}\n\nexport default Question;\n\n","import React from 'react';\nimport {useSortable} from '@dnd-kit/sortable';\nimport {CSS} from '@dnd-kit/utilities';\nimport Question from './_Question'; // Adjust the path as necessary\n\nconst SortableQuestion = ({id, index, order, surveys, existingQuestions, existingFields, editing}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition\n } = useSortable({id: order});\n\n const style = {\n touchAction: 'none',\n transition,\n transform: CSS.Transform.toString(transform),\n };\n\n return (\n <>\n <div\n ref={setNodeRef}\n style={style}\n {...attributes}\n {...listeners}\n >\n <Question\n ref={setNodeRef}\n key={`question-${id}`}\n id={id}\n index={index}\n state={surveys[id]}\n existingQuestions={existingQuestions}\n existingFields={existingFields}\n editing={editing}\n />\n </div>\n </>\n );\n};\n\nexport default SortableQuestion;\n","import { useCreateEventTypeStore } from \"../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Add() {\n const { t } = useTranslation([\"eventCreator\"]);\n const addQuestion = useCreateEventTypeStore((state) => state.addQuestion);\n\n const componentStyle = {\n backgroundColor: \"transparent\",\n border: \"none\",\n margin: 0,\n padding: \"0 0 0 20px\",\n color: \"var(--bs-primary)\",\n };\n\n return (\n <>\n <button\n style={componentStyle}\n className=\"tw-text-left my-3\"\n onClick={(e) => {\n e.preventDefault();\n addQuestion();\n }}\n >\n <UpgradeBadge featureName=\"event-questions\" />\n <br />\n {t(\"surveys.addQuestion\")}\n </button>\n </>\n );\n}\n\nexport default Add;\n","import React from \"react\";\nimport { useCreateEventTypeStore } from \"../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport Card from \"react-bootstrap/Card\";\nimport Accordion from \"react-bootstrap/Accordion\";\nimport SortableQuestion from \"./Question/SortableQuestion\"; // Make sure this path is correct\nimport Add from \"./Add\";\nimport UpgradePath from \"../../Utilities/UpgradePath/UpgradePath\";\n\nimport {\n closestCenter,\n DndContext,\n useSensor,\n useSensors,\n TouchSensor,\n MouseSensor,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n arrayMove,\n} from \"@dnd-kit/sortable\";\n\nfunction Surveys({ existingQuestions, existingFields, editing }) {\n const { t } = useTranslation([\"eventCreator\"]);\n const surveys = useCreateEventTypeStore((state) => state.surveys);\n const setSurveys = useCreateEventTypeStore((state) => state.setSurveys);\n\n const onDragEnd = (event) => {\n console.log(event);\n const { active, over } = event;\n if (active.id === over.id) return;\n\n let surveysArray = Object.entries(surveys).map(([key, value]) => ({\n id: key,\n ...value,\n }));\n\n const activeIndex = surveysArray.findIndex(\n (item) => item.order === active.id\n );\n const overIndex = surveysArray.findIndex((item) => item.order === over.id);\n\n if (activeIndex !== -1 && overIndex !== -1) {\n surveysArray = arrayMove(surveysArray, activeIndex, overIndex);\n surveysArray.map((survey, index) => (survey.order = index + 1));\n\n const newSurveys = surveysArray.reduce((acc, current) => {\n const { id, ...rest } = current;\n acc[id] = rest;\n return acc;\n }, {});\n\n console.log(newSurveys);\n\n setSurveys(newSurveys);\n }\n };\n\n const sensors = useSensors(\n useSensor(MouseSensor, {\n activationConstraint: {\n distance: 10,\n },\n }),\n useSensor(TouchSensor, {\n activationConstraint: {\n delay: 250,\n tolerance: 10,\n },\n })\n );\n\n return (\n <>\n <Card\n style={{\n color: \"var(--text-color)\",\n background: \"var(--color-background-1)\",\n }}\n className=\"mb-2\"\n >\n <Card.Header className=\"h3\">{t(\"surveys.header\")}</Card.Header>\n <Card.Body>\n <UpgradePath featureName=\"event-questions\" position=\"right\">\n <Accordion defaultActiveKey=\"0\">\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={onDragEnd}\n >\n <SortableContext\n items={Object.keys(surveys).map((key) => surveys[key].order)}\n strategy={verticalListSortingStrategy}\n >\n {Object.keys(surveys).map((key, index) => (\n <SortableQuestion\n key={`sortable-question-${key}`}\n id={key}\n index={index}\n order={surveys[key]?.order}\n surveys={surveys}\n existingQuestions={existingQuestions}\n existingFields={existingFields}\n editing={editing}\n />\n ))}\n </SortableContext>\n </DndContext>\n </Accordion>\n <Add />\n </UpgradePath>\n </Card.Body>\n </Card>\n </>\n );\n}\n\nexport default Surveys;\n","import {useState,useEffect} from 'react';\nimport {Link} from \"react-router-dom\";\nimport {useCreateEventTypeStore} from '../../store';\nimport {useTranslation} from 'react-i18next';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Card from 'react-bootstrap/Card';\nimport CurrencyInput from 'react-currency-input-field';\nimport InputGroup from 'react-bootstrap/InputGroup';\nimport Button from 'react-bootstrap/Button';\nimport Badge from 'react-bootstrap/Badge';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction Payments(){\n const {t} = useTranslation(['eventCreator']);\n const [stripeUser,setStripeUser] = useState({});\n const [loadingStripeUser,setLoadingStripeUser] = useState(false)\n const [loadingPriceChange,setLoadingPriceChange] = useState(false)\n const [status,setStatus] = useState(0);\n const general = useCreateEventTypeStore(state => state.general);\n const paidEvent = useCreateEventTypeStore(state => state.paidEvent);\n const setPrice = useCreateEventTypeStore(state => state.setPrice);\n const setPriceId = useCreateEventTypeStore(state => state.setPriceId);\n const setProductId = useCreateEventTypeStore(state => state.setProductId);\n\n useEffect(() => {\n console.info(\"[etype][stripe] loading user info\")\n const getStripeUserProfile = async () => {\n setLoadingStripeUser(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('stripe-connect','/connect/userProfile',false,true,true)\n .then(response => {\n if(response.email !== null){\n setStripeUser(response);\n console.info(\"[etype][stripe] Set stripe user profile:\", response)\n }else{\n setStripeUser({});\n console.info(\"[etype][stripe] Fetched empty user profile:\",response);\n }\n })\n .catch((e) => {\n console.info(\"[etype][stripe] Error fetching user profile:\",e);\n });\n })\n .catch((e) => {\n console.info(\"[etype][stripe] Error authenticating user:\",e);\n });\n setLoadingStripeUser(false)\n }\n getStripeUserProfile();\n },[])\n\n // could send 0 / 00 / 000, later we should avoid that\n const backendFormatter = (number) => {\n console.info(`[etype][payment] formatting price:`)\n let result = number;\n if (number !== undefined){\n if(number.includes(\",\")){\n let decimal = number.split(',')[1]\n if (decimal.length === 0){number += '0'}\n if (decimal.length < 2){number += '0'}\n result = number.replace(\",\",\"\")\n }else{\n result = number?.replace(/^0+/, '').replace('.','') + \"00\";\n }\n }else{\n result = '0';\n }\n console.info(`FE: ${number}\\nBE: ${result}`)\n return result\n }\n\n const frontendFormatter = (number) => {\n console.info('[etype][payment] parsing be price:');\n let result = '';\n if(number !== undefined){\n result = Number(number)/100;\n }\n console.info(result);\n return result;\n };\n\n const createPayment = async () => {\n const createEventKey = (eventName) => {\n const validation = /[.,\\/#!$%\\^&\\*;:{}=\\-_`~()@?£^']/g;\n let eventKey = eventName.toLowerCase().replace(/ /g, \"\");\n eventKey = eventKey.replace(validation, \"\");\n return eventKey;\n }\n setLoadingPriceChange(true)\n setStatus(0)\n\n if(!general?.name){\n setLoadingPriceChange(false)\n setStatus(-1)\n return;\n }\n\n await auth.isAuthenticated()\n .then(async () => {\n let body = {\n amount:paidEvent?.amount,\n eventName:general?.name,\n eventKey:createEventKey(general?.name)\n }\n // if productId is available i'm editing price, so productId is needed\n if(paidEvent?.productId){\n body.productId = paidEvent?.productId\n }\n await be.post('stripe-connect','/connect/price',body,true,true)\n .then(response => {\n setPriceId(response?.priceId);\n setProductId(response?.productId);\n setStatus(200)\n })\n .catch((e) => {\n console.info(\"[etype][stripe] Error creating payment id:\",e);\n setStatus(e?.response.status)\n });\n })\n .catch((e) => {\n console.info(\"[etype][stripe] Error authenticating user:\",e);\n });\n setLoadingPriceChange(false)\n }\n\n const currencyStyle = {\n border:'1px solid var(--color-border)',\n borderRadius:'0',\n minWidth:'200px',\n background:\"var(--color-background-2)\",\n color:'var(--color-text)',\n paddingLeft:15\n }\n\n const buttonStyle = {\n minWidth:'45px'\n }\n\n const responseFeedbackStyle = {\n fontSize:14\n }\n\n return(\n <>\n <Card id=\"payments\" style={{color:'var(--text-color)',background:\"var(--color-background-1)\"}} className=\"mb-2\">\n <Card.Header className=\"h3\">\n {t('payments.header.title')} <Badge pill >{t('payments.header.badge')}</Badge>\n </Card.Header>\n <Card.Body>\n {loadingStripeUser\n ?\n <>\n {t('payments.loading')}\n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"m-0 ms-sm-2\"/>\n </>\n :\n <>\n {Object.keys(stripeUser).length !== 0\n ?\n <>\n \n <div className=\"my-3\">{t('payments.header.subtitle')}</div>\n\n <InputGroup className=\"mb-3\">\n {stripeUser?.currency && getSymbolFromCurrency(stripeUser?.currency) !== undefined && \n <InputGroup.Text>{getSymbolFromCurrency(stripeUser?.currency)}</InputGroup.Text>\n }\n <CurrencyInput\n id=\"event-type-price\"\n name=\"event-type-price\"\n placeholder={t('payments.priceInput.placeholder')}\n decimalSeparator=\",\"\n groupSeparator=\".\"\n defaultValue={frontendFormatter(paidEvent?.amount)}\n value={frontendFormatter(paidEvent?.amount)}\n onValueChange={(value) => {if(value >= 1) setPrice(backendFormatter(value))}}\n onBlur={createPayment}\n style={currencyStyle}\n />\n <Button variant=\"primary\" style={buttonStyle} onClick={createPayment} disabled={loadingPriceChange}>\n\n <span className=\"d-none d-sm-inline-block\">\n {paidEvent?.productId\n ? <>{t('payments.priceInput.button.edit')}</>\n : <>{t('payments.priceInput.button.create')}</>\n }\n </span> \n\n {!loadingPriceChange &&\n <i className=\"fa-solid fa-arrow-right m-0 ms-sm-2\"></i>\n }\n\n {loadingPriceChange && \n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"m-0 ms-sm-2\"/>\n }\n </Button>\n </InputGroup>\n {(status === -1) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t('payments.feedbacks.setName')}</p>\n }\n {(status > 400 && status <= 500) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t('payments.feedbacks.error')}</p>\n }\n {(status === 400) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t('payments.feedbacks.400')}</p>\n }\n {status === 200 &&\n <p className=\"text-success\" style={responseFeedbackStyle}>{t('payments.feedbacks.200')}</p>\n }\n\n <small>\n <div>{t('payments.fees.calendbook')}</div>\n <div><a href=\"https://stripe.com/it/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">{t('payments.fees.stripe')}</a></div>\n </small>\n </>\n :\n <>\n {t('payments.connect.connectStripe')} <Link to=\"/integrations/#stripe\">{t('payments.connect.link')}</Link>\n {t('payments.connect.setPayments')}\n </>\n }\n </>\n }\n \n </Card.Body>\n </Card>\n </>\n );\n}\n\nexport default Payments;\n","import Form from 'react-bootstrap/Form';\n\nfunction RobinType({robinType, setRobinType}) {\n const handleRobinTypeChange = (e,type) => {\n const isChecked = e.target.checked\n if(isChecked && type === 'equal_availability_distribution'){\n setRobinType('equal_availability_distribution');\n }else if(isChecked && type === 'maximized_availability_distribution'){\n setRobinType('maximized_availability_distribution');\n }\n }\n return(\n <div className=\"tw-my-4\">\n <div><b>Robin Type</b></div>\n <Form.Check\n checked={robinType === 'equal_availability_distribution'}\n type=\"radio\"\n label=\"Equal Availability Distribution\"\n name=\"robin-type\"\n required\n onChange={(e) => handleRobinTypeChange(e,'equal_availability_distribution')}\n />\n <Form.Check\n checked={robinType === 'maximized_availability_distribution'}\n type=\"radio\"\n label=\"Maximized Availability Distribution\"\n name=\"robin-type\"\n required\n onChange={(e) => handleRobinTypeChange(e,'maximized_availability_distribution')}\n />\n </div>\n );\n}\n\nexport default RobinType;\n","function Member({ pic, name, email}){\n return(\n <div className=\"d-flex align-items-center\">\n <div className=\"d-inline-flex align-center me-2\">\n <img\n width=\"38px\"\n height=\"38px\"\n src={pic}\n alt=\"profile-pic\"\n className=\"rounded-circle\"\n style={{\n border:\"3px solid var(--color-border-light)\"\n }}\n />\n </div>\n <div className=\"d-inline-block\">\n <div>\n {name}\n </div>\n <div className=\"text-secondary\">\n {email}\n </div>\n </div>\n </div>\n );\n}\n\nexport default Member;\n","import React, {useEffect} from 'react';\nimport Form from 'react-bootstrap/Form';\nimport Select from 'react-select';\n\nfunction Templates({\n member,\n templates = [],\n selectedTemplate,\n disabled,\n loadingTemplates,\n handleTemplateSelection,\n getMemberTemplates\n}) {\n\n useEffect(() => {\n if(!selectedTemplate)\n getMemberTemplates(member)\n },[])\n\nconst selectStyle = {\n control: (baseStyles,state) => ({\n ...baseStyles,\n width:'100%',\n minWidth:100,\n minHeight:31,\n background:'var(--color-background-2)',\n color:'var(--color-text)',\n border:'1px solid var(--color-border)'\n }),\n singleValue: (baseStyles,state) => ({\n ...baseStyles,\n color:'var(--color-text)'\n }),\n menu: (baseStyles,state) => ({\n ...baseStyles, \n width:'100%',\n minWidth:200,\n background:'var(--color-background-2)',\n color:'var(--color-text)'\n }),\n option : (baseStyles,state) => ({\n ...baseStyles, \n background: state.isFocused ? 'var(--color-primary)' : 'var(--color-background-2)',\n color: state.isFocused ? 'white' : 'var(--color-text)'\n })\n ,}\n\n const Button = window.calendbookUI.Button;\n\n return (\n <div className=\"tw-flex tw-flex-col tw-ml-auto tw-w-44\">\n <Form.Label className=\"tw-text-sm tw-text-gray-500\">availability template</Form.Label>\n <Select\n styles={selectStyle}\n value={{label:selectedTemplate, value:selectedTemplate}}\n options={templates.map(template => ({ label: template, value: template }))}\n onMenuOpen={() => getMemberTemplates(member)}\n onChange={(template) => handleTemplateSelection(template.value,member)}\n isLoading={loadingTemplates}\n placeholder=\"Select a template\"\n />\n </div>\n );\n}\n\nexport default Templates;\n\n","import Form from 'react-bootstrap/Form';\n\nfunction Priorities({ member, priority, disabled, handlePrioritySelection }){\n\n return(\n <div className=\"tw-flex tw-flex-col tw-w-36\">\n <Form.Label className=\"tw-text-sm tw-text-gray-500\">priority</Form.Label>\n <Form.Select \n defaultValue={2}\n value={Number(priority) || 2}\n size=\"sm\"\n aria-label=\"Priority Selection\"\n onChange={e => handlePrioritySelection(e,member)}\n style={{maxWidth:120,height:38}}\n disabled={disabled}\n >\n <option value={1}>LOW</option>\n <option value={2}>MEDIUM</option>\n <option value={3}>HIGH</option>\n\n </Form.Select>\n </div>\n );\n}\n\nexport default Priorities;\n","import React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useCreateEventTypeStore } from '../../store';\nimport Select from 'react-select';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nconst selectStyle = {\n control: (baseStyles,state) => ({\n ...baseStyles,\n width:'100%',\n minWidth:100,\n background:'var(--color-background-2)',\n color:'var(--color-text)',\n border:'1px solid var(--color-border)'\n }),\n singleValue: (baseStyles,state) => ({\n ...baseStyles,\n color:'var(--color-text)'\n }),\n menu: (baseStyles,state) => ({\n ...baseStyles, \n width:'100%',\n minWidth:200,\n background:'var(--color-background-2)',\n color:'var(--color-text)'\n }),\n option : (baseStyles,state) => ({\n ...baseStyles, \n background: state.isFocused ? 'var(--color-primary)' : 'var(--color-background-2)',\n color: state.isFocused ? 'white' : 'var(--color-text)'\n }),\n}\n\nfunction SelectMembers(){\n const history = useHistory();\n const [availableMembers, setAvailableMembers] = useState([]);\n const [loadingMembers, setLoadingMembers] = useState(false);\n const addRobinMember = useCreateEventTypeStore((state) => state.addRobinMember);\n\n const fetchAvailableMembers = async () => {\n setLoadingMembers(true);\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('team-manager', '/team/members/upgrade', {}, true, true)\n .then(response => {setAvailableMembers(response);})\n .catch(error => {console.error(`[etypecreator][roundrobin] network error while retrieving members:`, error);})\n })\n .catch((error) => {\n console.error(`[etypecreator][roundrobin] authentication error while retrieving members:`, error);\n history.push({ pathname: '/login' });\n })\n } catch (error) {\n console.error(`[etypecreator][roundrobin] functional error while retrieving members:`, error);\n } finally {\n setLoadingMembers(false);\n }\n }\n\n const getAvailableMembersOptions = (_availableMembers) => {\n return _availableMembers.map(member => ({\n label: (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <img src={member.pic} alt={member.name} style={{ width: 20, height: 20, marginRight: 10 }} />\n <span>{member.name} ({member.email})</span>\n </div>\n ),\n value: member.username\n }));\n }\n\n const handleMemberSelection = async (selectedOption) => {\n const getUserByKey = (key) => {\n const user = availableMembers.find(user => user.key === key);\n if (user) {\n return user;\n } else {\n return null;\n }\n }\n const memberKey = selectedOption.value;\n const memberProperties = getUserByKey(memberKey)\n addRobinMember(memberKey, memberProperties);\n }\n\n return(\n <div className=\"tw-flex tw-flex-col\">\n <div><b>Members</b></div>\n <Select\n options={getAvailableMembersOptions(availableMembers)}\n onMenuOpen={fetchAvailableMembers}\n onChange={handleMemberSelection}\n isLoading={loadingMembers}\n placeholder=\"Select members\"\n styles={selectStyle}\n />\n </div>\n );\n}\n\nexport default SelectMembers;\n","import React, { useState, useEffect } from 'react';\nimport Button from 'react-bootstrap/Button';\nimport { useHistory } from 'react-router-dom';\nimport Member from './Member';\nimport Templates from './Templates';\nimport Priorities from './Priorities';\nimport { useCreateEventTypeStore } from '../../store';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction SelectedMembers({members}){\n const history = useHistory();\n const roundRobin = useCreateEventTypeStore((state) => state.roundRobin);\n const [loadingTemplates, setLoadingTemplates] = useState(null);\n const [templates, setTemplates] = useState([]);\n const [selectedTemplates, setSelectedTemplates] = useState({});\n const setRobinMemberTemplate = useCreateEventTypeStore((state) => state.setRobinMemberTemplate);\n const setRobinMemberPriority = useCreateEventTypeStore((state) => state.setRobinMemberPriority);\n const deleteRobinMember = useCreateEventTypeStore((state) => state.deleteRobinMember);\n\n const getMemberTemplates = async (member) => {\n setLoadingTemplates(member);\n setTemplates(prevTemplates => ({\n ...prevTemplates,\n [member]: []\n }));\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('team-manager', '/team/members/availabilities', { member }, true, true)\n .then(response => {\n setTemplates(prevTemplates => ({\n ...prevTemplates,\n [member]: response\n }));\n if (response.length > 0) {\n setRobinMemberTemplate(member, response[0]);\n }\n })\n .catch(error => {\n console.error(`[etypecreator][roundrobin] network error while retrieving ${member} templates:`, error);\n })\n })\n .catch((error) => {\n console.error(`[etypecreator][roundrobin] authentication error while retrieving ${member} templates:`, error);\n history.push({ pathname: '/login' });\n })\n } catch (error) {\n console.error(`[etypecreator][roundrobin] functional error while retrieving ${member} templates:`, error);\n } finally {\n setLoadingTemplates(null);\n }\n }\n\n const handleTemplateSelection = (template, member) => {\n setSelectedTemplates(prevSelectedTemplates => ({\n ...prevSelectedTemplates,\n [member]: template\n }))\n setRobinMemberTemplate(member, template);\n }\n\n const handlePrioritySelection = (e, member) => {\n if (member in roundRobin) {\n const priority = Number(e.target.value);\n setRobinMemberPriority(member, priority);\n }\n }\n\n return(\n <>\n <div className=\"tw-flex tw-flex-col\">\n {members.map(member => (\n <div key={`member-container-${member?.username}`} className=\"tw-inline-flex tw-gap-4 tw-my-2\">\n <Member\n key={`member-${member?.username}`}\n pic={member?.pic}\n name={member?.name}\n email={member?.email}\n />\n <Templates\n key={`templates-${member?.username}`}\n member={member?.username}\n templates={templates[member?.username] || []}\n selectedTemplate={\n (members.includes(member?.username) && selectedTemplates[member?.username]) ||\n (Object.keys(roundRobin).includes(member?.username) && roundRobin[member?.username]?.availability_template) ||\n \"\"\n }\n loadingTemplates={loadingTemplates === member?.username}\n disabled={!roundRobin.hasOwnProperty(member?.username)}\n handleTemplateSelection={handleTemplateSelection}\n getMemberTemplates={getMemberTemplates}\n />\n <Priorities\n key={`priorities-${member?.username}`}\n member={member?.username}\n priority={roundRobin[member?.username]?.priority}\n disabled={!roundRobin.hasOwnProperty(member?.username) || !(roundRobin[member?.username]?.availability_template)}\n handlePrioritySelection={handlePrioritySelection}\n />\n <div key={`delete-${member?.username}`} className=\"tw-flex tw-items-center tw-justify-center tw-h-[38px] tw-mt-auto\">\n <Button style={{border : \"none\", background : \"transparent\", color : \"var(--colot-text)\"}} onClick={() => deleteRobinMember(member?.username)}>\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </div>\n </div>\n\n ))}\n </div>\n </>\n );\n}\n\nexport default SelectedMembers;\n","import { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useCreateEventTypeStore } from '../../store';\nimport Col from 'react-bootstrap/Col';\nimport Card from 'react-bootstrap/Card';\nimport Form from 'react-bootstrap/Form';\nimport RobinType from './RobinType';\nimport Members from './Members';\nimport SelectMembers from './SelectMembers';\nimport SelectedMembers from './SelectedMembers';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\nimport RoundRobinMock from '../../Mocks/EventTypeCreator/RoundRobin';\n\nfunction RoundRobin(){\n const history = useHistory();\n const editKey = useCreateEventTypeStore(state => state?.editKey);\n const general = useCreateEventTypeStore(state => state?.general);\n const roundRobin = useCreateEventTypeStore((state) => state.roundRobin);\n const setRoundRobin = useCreateEventTypeStore((state) => state.setRoundRobin);\n const robinType = useCreateEventTypeStore(state => state?.roundRobin?.config?.robinType);\n const getRobinMembers = useCreateEventTypeStore(state => state.getRobinMembers);\n const setRobinMembers = useCreateEventTypeStore(state => state.setRobinMembers);\n const setBookingType = useCreateEventTypeStore((state) => state?.setBookingType);\n const setRobinType = useCreateEventTypeStore((state) => state?.setRobinType);\n const [loadingMembers, setLoadingMembers] = useState(false);\n const [selectedMembers, setSelectedMembers] = useState([]);\n const [isEditing,setIsEditing] = useState(editKey ? true : false)\n\n let members = getRobinMembers();\n\n const transformRoundRobinMembers = (roundRobin) => {\n if (!roundRobin || typeof roundRobin !== 'object') {\n return [];\n }\n\n return Object.entries(roundRobin).reduce((result, [key, member]) => {\n if (key !== 'robinType' && key !== 'config' && key !== 'availability_pool' && member && typeof member === 'object') {\n const {\n name = \"Unknown\",\n email = \"user@domain.com\",\n pic = \"https://example.com/default-pic.png\",\n priority = 2,\n availability_template = \"\"\n } = member;\n\n result.push({\n username: key,\n name,\n email,\n pic,\n priority,\n availability_template\n });\n }\n return result;\n }, []);\n }\n\n const handleRoundRobinCheckbox = (e) => {\n const isChecked = e.target.checked;\n if(isChecked){\n setBookingType('round_robin');\n }else{\n // if i'm in create or edit mode, reset the state and mode\n // so if i re-enable the round robin i get a clean environement\n setBookingType('standard');\n setRoundRobin(RoundRobinMock);\n }\n }\n\n return(\n <>\n <Card style={{ color: 'var(--text-color)', background: \"var(--color-background-1)\" }} className=\"mb-2\">\n <Card.Header className=\"h3\">\n Round Robin\n </Card.Header>\n <Card.Body>\n\n {/* team not enabled */}\n {!general?.isTeam &&\n <p>\n You need to enable Team Mode Checkbox under 'General' to use Team Features \n </p>\n }\n\n {/* team enabled */}\n {general?.isTeam &&\n <div>\n <Col sm={10} lg={6}>\n <Form.Check\n type=\"checkbox\"\n label=\"enable round robin for this event\"\n name=\"is-round-robin-checkbox\"\n checked={general?.bookingType === 'round_robin'}\n onChange={handleRoundRobinCheckbox}\n />\n </Col>\n </div>\n }\n\n {/* round robin enabled & members request loading */}\n {/*\n {general?.bookingType === 'round_robin' && loadingMembers &&\n <div>\n loading team members...\n </div>\n }\n */}\n\n {/* round robin enabled but members not available */}\n {/*\n {general?.bookingType === 'round_robin' && !loadingMembers && members && members.length <= 0 &&\n\n <div>\n You don't have any team member. To use a team feature, manage your team in  \n <a href=\"/team\" target=\"_blank\" style={{textDecoration:'underline',color:'var(--color-primary)'}}>team dashboard.</a>\n </div>\n }\n */}\n\n {/* round robin enabled & members available */}\n {general?.bookingType === 'round_robin' &&\n <div>\n <RobinType robinType={robinType} setRobinType={setRobinType}/>\n {/*\n need to change:\n new component: members selection (SelectMembers)\n new component: members list (SelectedMembers)\n\n so i can better distinguish what happens and what to render in each component\n - maybe i need to use global state and readapt etype saving manually by selecting the fields accordingly\n */}\n <SelectMembers/>\n <SelectedMembers members={transformRoundRobinMembers(roundRobin)} />\n {/*<Members members={members} setMembers={setMembers} selectedMembers={selectedMembers} setSelectedMembers={setSelectedMembers} isEditing={isEditing}/>*/}\n </div>\n }\n\n </Card.Body>\n </Card>\n </>\n );\n}\n\nexport default RoundRobin;\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { useCreateEventTypeStore } from \"../store\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Alert from \"react-bootstrap/Alert\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"./event-creator.css\";\nimport be from \"../BE\";\nimport auth from \"../Account/Auth\";\nimport SaveBar from \"./SaveBar\";\nimport General from \"./General/_General\";\nimport Availability from \"./Availability/_Availability\";\nimport Notifications from \"./Notifications/_Notifications\";\nimport Surveys from \"./Surveys/_Surveys\";\nimport Payments from \"./Payments/Payments\";\nimport RoundRobin from \"./RoundRobin/RoundRobin\";\nimport GeneralMock from \"../Mocks/EventTypeCreator/General\";\nimport AvailabilityMock from \"../Mocks/EventTypeCreator/Availability\";\nimport NotificationsMock from \"../Mocks/EventTypeCreator/Notifications\";\nimport RoundRobinMock from \"../Mocks/EventTypeCreator/RoundRobin\";\n\nfunction EventTypeCreator(props) {\n const history = useHistory();\n // If i'm editing an event type i get an event type key\n // I'm using this key to get the info from backend\n // So i can edit thise info and save the updated event type\n const eventTypeKey = props.location.state?.id;\n try {\n window.tidioChatApi.show();\n } catch {}\n const { t } = useTranslation([\"eventCreator\"]);\n const editKey = useCreateEventTypeStore((state) => state.editKey);\n const setEditKey = useCreateEventTypeStore((state) => state.setEditKey);\n const [existingQuestions, setExistingQuestions] = useState([]);\n const [existingFields, setExistingFields] = useState([]);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const general = useCreateEventTypeStore((state) => state.general);\n const availability = useCreateEventTypeStore((state) => state.availability);\n const notifications = useCreateEventTypeStore((state) => state.notifications);\n const surveys = useCreateEventTypeStore((state) => state.surveys);\n const roundRobin = useCreateEventTypeStore((state) => state.roundRobin);\n const paidEvent = useCreateEventTypeStore((state) => state.paidEvent);\n const setGeneral = useCreateEventTypeStore((state) => state.setGeneral);\n const setAvailability = useCreateEventTypeStore(\n (state) => state.setAvailability\n );\n const setNotifications = useCreateEventTypeStore(\n (state) => state.setNotifications\n );\n const setSurveys = useCreateEventTypeStore((state) => state.setSurveys);\n const setPaidEvent = useCreateEventTypeStore((state) => state.setPaidEvent);\n const setRoundRobin = useCreateEventTypeStore((state) => state.setRoundRobin);\n\n useEffect(() => {\n const loadEventType = async (_key) => {\n setLoading(true);\n if (_key) {\n // chiedo al backend le info sull'etype da modificare\n const eventTypeBody = { key: _key };\n const surveyBody = { etype: _key };\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"eventtypes\", \"/etype\", eventTypeBody, true)\n .then((response) => {\n setGeneral(response?.general);\n setAvailability(response?.availability);\n setNotifications(response?.advanced);\n setPaidEvent(response?.paidEvent);\n setRoundRobin(response?.roundRobin);\n });\n })\n .then(async () => {\n await be\n .get(\"survey\", \"/getSurveys\", surveyBody, true)\n .then((response) => {\n setSurveys(response);\n // salvo le domande che erano già in be\n for (let id in response) {\n let tempQuestions = existingQuestions;\n tempQuestions.push(id);\n setExistingQuestions(tempQuestions);\n // salvo gli eventuali fields che erano già in be\n for (let field in response[id][\"qstFields\"]) {\n let tempFields = existingFields;\n tempFields.push(field);\n setExistingFields(tempFields);\n }\n }\n for (let id in response) {\n let temp = existingQuestions;\n temp.push(id);\n setExistingQuestions(temp);\n }\n });\n })\n // redirect istantaneo alla pagina login se non sono autenticato\n .catch(() => props.history.push(\"/login\"));\n } else {\n //carico il mock standard\n setGeneral(GeneralMock);\n setAvailability(AvailabilityMock);\n setNotifications(NotificationsMock);\n setSurveys({});\n setPaidEvent({});\n setRoundRobin(RoundRobinMock);\n }\n setLoading(false);\n };\n const eventTypeKey = props?.location?.state?.id;\n if (eventTypeKey) {\n document.title = \"Calendbook - Event Type Editor\";\n } else {\n document.title = \"Calendbook - Event Type Creator\";\n }\n eventTypeKey ? setEditKey(eventTypeKey) : setEditKey(\"\");\n loadEventType(eventTypeKey);\n }, [\n props,\n setLoading,\n setEditKey,\n setGeneral,\n setAvailability,\n setNotifications,\n setSurveys,\n existingQuestions,\n setExistingQuestions,\n existingFields,\n setExistingFields,\n ]);\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setSaving(true);\n\n const eventTypeBody = {\n general: general,\n availability: availability,\n advanced: notifications,\n editkey: editKey,\n paidEvent: paidEvent,\n roundRobin: roundRobin,\n };\n\n let surveyBody = {};\n surveyBody.surveys = surveys;\n\n const hasSurveys = Object.keys(surveyBody.surveys).length !== 0;\n\n await auth\n .isAuthenticated()\n .then(async () => {\n // general, availability, notifications\n await be\n .post(\"eventtypes\", \"/eventypes\", eventTypeBody, true)\n .then((response) => {\n surveyBody.etype = response.etype;\n })\n .then(() => !hasSurveys && props.history.push(\"/\"))\n .catch((error) => alert(\"Error Saving Event Type: \" + error));\n // surveys (save only if the obj is not empty or in edit mode)\n if (hasSurveys || editKey !== \"\") {\n await be\n .post(\"survey\", \"/survey\", surveyBody, true)\n .then((response) => {})\n .then(() => history.push(\"/\"))\n .catch((error) => alert(\"Error Saving Questions: \" + error));\n }\n })\n // redirect istantaneo alla pagina login se non sono autenticato\n .catch(() => props.history.push(\"/login\"));\n setSaving(false);\n };\n\n return (\n <>\n <Alert className=\"text-center\" variant=\"primary\">\n Great News! From now you can earn with your bookings!\n <span\n style={{ cursor: \"pointer\", textDecoration: \"underline\" }}\n className=\"mx-2\"\n onClick={() => {\n try {\n // Attempt to find the element with the ID 'payments'\n const paymentsElement = document.getElementById(\"payments\");\n // Check if the element exists before trying to scroll\n if (paymentsElement) {\n paymentsElement.scrollIntoView({ behavior: \"smooth\" }); // Smooth scroll for better UX\n } else {\n console.warn(\"Element with ID 'payments' not found.\"); // Log a warning for debugging\n }\n } catch (error) {\n // Catch any unexpected errors that might occur\n console.error(\n \"An error occurred while attempting to scroll:\",\n error\n );\n }\n }}\n >\n Check it out!\n </span>\n </Alert>\n <Row>\n {eventTypeKey ? (\n <span className=\"h3 text-center col mt-3\">\n {t(\"mode.edit\")} {eventTypeKey}\n </span>\n ) : (\n <span className=\"h3 text-center col mt-3\">{t(\"mode.create\")}</span>\n )}\n </Row>\n {loading ? (\n <div className=\"text-center\">LOADING...</div>\n ) : (\n <>\n <Form\n id=\"event-creator\"\n onSubmit={handleSubmit}\n className=\"col-lg-9 col-sm-12 mx-auto mt-3 mb-3 pt-3 pb-3\"\n style={{ background: \"transparent\" }}\n >\n <SaveBar backButton saving={saving} />\n\n <General />\n\n <RoundRobin />\n\n <Payments />\n\n {general?.bookingType !== \"round_robin\" && <Availability />}\n\n <Notifications />\n\n <Surveys\n existingQuestions={existingQuestions}\n existingFields={existingFields}\n editing={editKey === \"\" ? false : true}\n />\n\n <SaveBar saving={saving} />\n </Form>\n </>\n )}\n </>\n );\n}\n\nexport default EventTypeCreator;\n","function OwnerPic({pic,hasBanner}){\n return(\n <>\n <img src={pic} width=\"60px\" className=\"img-fluid rounded-circle\" style={hasBanner() ? {border:'4px solid var(--color-background-1)'} : null} alt=\"owner-pic\" />\n </>\n );\n}\n\nexport default OwnerPic;\n","function OwnerName({name}){\n return(\n <div className=\"details-owner-name\">\n {name}\n </div>\n );\n}\n\nexport default OwnerName;\n","function OwnerBanner({companyLogo}){\n return(\n <img src={companyLogo} alt=\"company-logo\" className=\"owner-banner\"/>\n );\n}\n\nexport default OwnerBanner;\n","import OwnerPic from './OwnerPic';\nimport OwnerName from './OwnerName';\nimport OwnerBanner from './OwnerBanner';\n\nfunction OwnerInfo({owner,loading}){\n const hasBanner = () => {return owner?.companyLogo};\n return(\n <>\n {loading\n\n ?\n <>\n Loading...\n </>\n :\n <>\n {hasBanner() && <OwnerBanner companyLogo={owner?.companyLogo}/>}\n <div style={hasBanner() ? {position:'relative',top:'-30px',left:'2%'} : null}> <OwnerPic pic={owner?.pic} hasBanner={hasBanner}/> </div>\n <div> <OwnerName name={owner?.fullName}/> </div>\n </>\n }\n \n </>\n );\n}\n\nexport default OwnerInfo;\n","function EventName({name}){\n return(\n <div className=\"details-event-name\">\n {name}\n </div>\n );\n}\n\nexport default EventName;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport DOMPurify from 'dompurify';\nimport { useTranslation } from 'react-i18next';\n\nfunction toHyperlink(text)\n{\n //eslint-disable-next-line\n var pattern1 = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n var str1 = text.replace(pattern1, \"<a href='$1' target='_blank' rel='noopener noreferrer'>$1</a>\");\n //eslint-disable-next-line\n var pattern2 =/(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n var str2 = str1.replace(pattern2, '$1<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"http://$2\">$2</a>');\n\n return str2;\n}\n\n// need to be wary of script injection here\n// (for example if I have http://\"><script>doevil()</script>)\nfunction EventDescription({description}){\n const text = DOMPurify.sanitize(description)\n const { t } = useTranslation(['booking']);\n\n return(\n <>\n <div className=\"fw-bold\">{t('details.description')}</div>\n <div style={{color:'var(--color-secondary)'}} dangerouslySetInnerHTML={{__html: toHyperlink(text)}} />\n </>\n );\n}\n\nexport default EventDescription;\n","import DOMPurify from 'dompurify';\nimport { useTranslation } from 'react-i18next';\n\nfunction toHyperlink(text)\n{\n //eslint-disable-next-line\n var pattern1 = /(\\b(https?|ftp|file):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])/ig;\n var str1 = text.replace(pattern1, \"<a href='$1'>$1</a>\");\n //eslint-disable-next-line\n var pattern2 =/(^|[^\\/])(www\\.[\\S]+(\\b|$))/gim;\n var str2 = str1.replace(pattern2, '$1<a target=\"_blank\" href=\"http://$2\">$2</a>');\n\n return str2;\n}\n\nfunction EventLocation({location}){\n const { t } = useTranslation(['booking']);\n var locationValue = ''\n if(typeof(location) === 'string'){\n console.info(\"[booking][details] location type is 'string'...\")\n locationValue = DOMPurify.sanitize(location)\n }\n if(typeof(location) === 'object'){\n console.info(\"[booking][details] location type is 'object'...\")\n locationValue = DOMPurify.sanitize(location?.value)\n }\n return(\n <>\n <div className=\"fw-bold\">{t('details.location')}</div>\n <div style={{color:'var(--color-secondary)'}} dangerouslySetInnerHTML={{__html: toHyperlink(locationValue)}}/>\n </>\n );\n}\n\nexport default EventLocation;\n","import { useTranslation } from 'react-i18next';\n\nfunction EventDuration({duration}){\n const { t } = useTranslation(['booking']);\n\n return(\n <>\n <div className=\"fw-bold\">{t('details.duration')}</div>\n <div style={{color:'var(--color-secondary)'}}>{duration} min</div>\n </>\n );\n}\n\nexport default EventDuration;\n","import getSymbolFromCurrency from 'currency-symbol-map';\nimport { useTranslation } from 'react-i18next';\n\nconst frontendFormatter = (number) => {\n console.info('[booking][payment] parsing be price:');\n let result = '';\n if(number !== undefined){\n result = Number(number)/100;\n }\n console.info(result);\n return result;\n };\n\nfunction Price ({payment}) {\n const { t } = useTranslation(['booking']);\n\n return(\n <>\n {payment && payment?.amount &&\n <>\n <div className=\"fw-bold\">{t('details.payment')}</div>\n <div style={{color:'var(--color-secondary)'}}>\n {\n payment?.currency && \n getSymbolFromCurrency(payment?.currency) !== undefined && \n getSymbolFromCurrency(payment?.currency)\n } \n {frontendFormatter(payment?.amount)}\n </div>\n </>\n }\n </>\n );\n}\n\nexport default Price;\n","import Placeholder from 'react-bootstrap/Placeholder';\nimport EventName from './EventName';\nimport EventDescription from './EventDescription';\nimport EventLocation from './EventLocation';\nimport EventDuration from './EventDuration';\nimport Price from './Price';\n\nfunction EventInfo({event,payment,loading}){\n return(\n <>\n {loading\n ?\n <>\n \n </>\n :\n <>\n <div className=\"mb-4\"> <EventName name={event?.name}/> </div>\n <div className=\"mb-3\"> <EventDuration duration={event?.duration}/> </div>\n <div className=\"mb-3\"> <EventLocation location={event?.location}/> </div>\n <div className=\"mb-3\"> <Price payment={payment}/> </div>\n <div className=\"mb-3\"> <EventDescription description={event?.description}/> </div>\n </>\n }\n\n </>\n );\n}\n\nexport default EventInfo;\n","export const isIframe = () => {\n return window.location !== window.parent.location;\n}\n\nexport const setRootAsIframe = () => {\n const root = document.getElementById(\"root\");\n const body = document.getElementById(\"body\");\n root.classList.add(\"iframe\");\n body.classList.add(\"iframe\");\n}\n\nexport const getIframeReferrer = () => {\n const queryParameters= new URLSearchParams(document.location.search);\n const referrer = queryParameters.get(\"iframe-referrer\");\n return referrer; \n}\n","import { useEffect } from 'react';\nimport OwnerInfo from './OwnerInfo/OwnerInfo';\nimport EventInfo from './EventInfo/EventInfo';\nimport { useMediaQuery } from 'react-responsive'\nimport { useTranslation } from 'react-i18next';\nimport { isIframe } from '../../Utilities/iframeUtils';\nimport './details.css';\n\nfunction Details({event,owner,payment,loading,setBookingStep,stylingParams}){\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n const { t } = useTranslation(['booking']);\n\n useEffect(() =>{\n // styling params from url\n const backgroundDetailsStyle = stylingParams[\"details-bg\"];\n const textColorDetailsStyle = stylingParams[\"details-text-color\"];\n const backgroundDetailsScheduleButtonStyle = stylingParams[\"details-schedule-btn-bg\"];\n const textColorDetailsScheduleButtonStyle = stylingParams[\"details-schedule-btn-text-color\"];\n\n // --- STYLING OPTIONS ---\n // valid only when the page is in Iframe\n if(isIframe()){\n if(backgroundDetailsStyle){\n let details = document.getElementById(\"details\")\n if(details) { details.style.background = `${backgroundDetailsStyle}` }\n }\n if(textColorDetailsStyle){\n let details = document.getElementById(\"details\")\n if(details) { details.style.color = `${textColorDetailsStyle}` }\n }\n if(backgroundDetailsScheduleButtonStyle){\n let detailsScheduleButton = document.getElementById(\"details-schedule-btn\")\n if(detailsScheduleButton){ detailsScheduleButton.style.background = `${backgroundDetailsScheduleButtonStyle}` }\n }\n if(textColorDetailsScheduleButtonStyle){\n let detailsScheduleButton = document.getElementById(\"details-schedule-btn\")\n if(detailsScheduleButton){ detailsScheduleButton.style.color = `${textColorDetailsScheduleButtonStyle}` }\n }\n } \n },[stylingParams])\n\n return(\n <div className=\"details\" id=\"details\">\n <OwnerInfo owner={owner} loading={loading}/>\n <EventInfo event={event} payment={payment} loading={loading}/>\n {isMobile && <button className=\"schedule-btn\" id=\"details-schedule-btn\" onClick={() => setBookingStep(2)}>{t(`details.schedule`)}</button>}\n </div >\n );\n}\n\nexport default Details;\n","import {useCreateBookingStore} from '../../store';\nimport {useEffect, useState} from 'react';\nimport toast from 'react-hot-toast';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport './calendbook-calendar.css';\nimport './timezone-picker.css';\nimport Calendar from 'react-calendar';\nimport spacetime from 'spacetime'\nimport i18n from '../../i18n';\nimport { isIframe } from '../../Utilities/iframeUtils';\n\nfunction DatePicker({username,eventType,mode,setBookingStep,stylingParams}){\n const [loadingInfo,setLoadingInfo] = useState(false);\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const [selectedMonth,setSelectedMonth] = useState(null);\n const storeCalendar = useCreateBookingStore(state => state.calendar);\n const setCalendar = useCreateBookingStore(state => state.setCalendar);\n const storeGuest = useCreateBookingStore(state => state.guest);\n const setGuestTimezone = useCreateBookingStore(state => state.setGuestTimezone);\n const setGuestDay = useCreateBookingStore(state => state.setGuestDay);\n\n useEffect(() => {\n // styling params from url\n const textColorDateStyle = stylingParams[\"calendar-date-text-color\"];\n const backgroundNavigationStyle = stylingParams[\"calendar-navigation-bg\"];\n const textColorNavigationStyle = stylingParams[\"calendar-navigation-text-color\"];\n const textColorWeekdaysStyle = stylingParams[\"calendar-weekdays-text-color\"];\n const backgroundDayStyle = stylingParams[\"calendar-day-bg\"];\n const textColorDayStyle = stylingParams[\"calendar-day-text-color\"];\n const borderDayStyle = stylingParams[\"calendar-day-border\"];\n const backgroundActiveDayStyle = stylingParams[\"calendar-active-day-bg\"];\n const textColorActiveDayStyle = stylingParams[\"calendar-active-day-text-color\"];\n const borderActiveDayStyle = stylingParams[\"calendar-active-day-border\"];\n\n // --- STYLING OPTIONS ---\n // valid only when the page is in Iframe\n if(isIframe()){\n // Create a new style element\n const style = document.createElement('style');\n style.type = 'text/css';\n\n // Start building the CSS string to inject\n let styleString = \"\\n/*--- Booking Calendar Iframe Custom Colors ---*/\\n\";\n\n // Apply styles to the calendar date label\n if (textColorDateStyle) {\n styleString += `\n .react-calendar__navigation__label__labelText {\n color: ${textColorDateStyle};\n }\n `;\n }\n\n // Apply background color to the navigation buttons (prev and next)\n if (backgroundNavigationStyle) {\n styleString += `\n .react-calendar__navigation__prev-button,\n .react-calendar__navigation__next-button {\n background-color: ${backgroundNavigationStyle};\n }\n `;\n }\n\n // Apply text color to the navigation buttons (prev and next)\n if (textColorNavigationStyle) {\n styleString += `\n .react-calendar__navigation__prev-button,\n .react-calendar__navigation__next-button {\n color: ${textColorNavigationStyle};\n }\n `;\n }\n\n // Apply text color to weekdays labels\n if (textColorWeekdaysStyle) {\n styleString += `\n .react-calendar__month-view__weekdays {\n color: ${textColorWeekdaysStyle};\n }\n `;\n }\n\n // Apply styles for the calendar days (standard, hover, and active states)\n if (backgroundDayStyle || textColorDayStyle || borderDayStyle || backgroundActiveDayStyle || textColorActiveDayStyle || borderActiveDayStyle) {\n styleString += `\n /* Standard state for abbr inside react-calendar__tile */\n .react-calendar__tile abbr {\n `;\n if (backgroundDayStyle) { styleString += `background-color: ${backgroundDayStyle};\\n`; }\n if (textColorDayStyle) { styleString += `color: ${textColorDayStyle};\\n`; }\n if (borderDayStyle) { styleString += `border-color: ${borderDayStyle};\\n`; }\n styleString += `}\\n`;\n\n // Add hover and focus styles\n styleString += `\n /* Hover and Focus states */\n .react-calendar__tile:enabled:hover abbr,\n .react-calendar__tile:enabled:focus abbr {\n `;\n if (backgroundActiveDayStyle) { styleString += `background-color: ${backgroundActiveDayStyle};\\n`; }\n if (textColorActiveDayStyle) { styleString += `color: ${textColorActiveDayStyle};\\n`; }\n if (borderActiveDayStyle) { styleString += `border-color: ${borderActiveDayStyle} !important;\\n`; }\n styleString += `}\\n`;\n\n // Add active styles\n styleString += `\n /* Active state */\n .react-calendar__tile--active abbr {\n `;\n if (backgroundActiveDayStyle) { styleString += `background-color: ${backgroundActiveDayStyle};\\n`; }\n if (textColorActiveDayStyle) { styleString += `color: ${textColorActiveDayStyle} !important;\\n`; }\n if (borderActiveDayStyle) { styleString += `border-color: ${borderActiveDayStyle} !important;\\n`; }\n styleString += `}\\n`;\n }\n\n // Set the generated CSS as the innerHTML of the style element\n style.innerHTML = styleString;\n\n // Append the style element to the head of the document\n document.head.appendChild(style);\n }\n\n\n const getCalendarInfo = (_username,_eventType,_timezone) => {\n if(_username && _eventType && _timezone){\n const body = {\n ownerUsername: _username,\n eventKey: _eventType,\n timezone: _timezone\n }\n setLoadingInfo(true);\n be.get('jubilant-booking','/booking/calendar',body,false,true)\n .then(response => {\n console.info('[booking][getCalendarInfo] Success:');\n console.log(response);\n setInfoResponseStatus(200);\n setLoadingInfo(false);\n setCalendar(response);\n setGuestDay(spacetime(response?.availability.firstAvailableDate).format('iso.short'));\n })\n .catch(error => {\n console.info('[booking][getCalendarInfo] Error:');\n console.error(error);\n setInfoResponseStatus(error?.response?.status);\n setLoadingInfo(false);\n toast.error(`Error Fetching Calendar Availabilities`)\n })\n }else{\n console.info(\"[booking][getCalendarInfo] Data to send incomplete:\")\n console.log(\"username: \",_username);\n console.log(\"event type: \",_eventType);\n console.log(\"timezone: \",_timezone);\n }\n }\n const timezoneToSend = spacetime.now().goto(storeGuest?.timezone?.value).timezone().name;\n if(mode !== \"delete\"){\n getCalendarInfo(username,eventType,timezoneToSend)\n } \n },[setCalendar,setGuestTimezone,setGuestDay,username,eventType,storeGuest?.timezone?.value,mode,selectedMonth])\n\n const getUserLanguage = () => {\n return i18n.language.substring(0,2);\n }\n const getSelectedDate = (_date,_firstAvailableDate) => {\n if(_date && new Date(_date)){\n return new Date(_date);\n }else{\n return getMinDate(_firstAvailableDate);\n }\n }\n const getMinDate = (_firstAvailableDate) => {\n if(_firstAvailableDate && new Date (_firstAvailableDate)){\n return new Date(_firstAvailableDate);\n }else{\n return new Date();\n }\n }\n const getMaxDate = (_lastAvailableDate) => {\n if(_lastAvailableDate && new Date(_lastAvailableDate)){\n return new Date(_lastAvailableDate);\n }else{\n return null;\n }\n }\n const getDisabledDates = (_date,_week,_disabled) => {\n if(_disabled && _disabled?.months && _disabled?.months.length !== 0){\n if (_disabled?.months.some(month => spacetime(_date).format('iso-month') === month)){\n return true;\n }\n }\n\n if(_week !== undefined && _week !== null && Object.keys(_week).length !== 0){\n if (_week[spacetime(_date).format('day-short').toLowerCase()] === false){\n return true;\n }\n }\n if(_disabled && _disabled?.days && _disabled?.dayslength !== 0){\n if (_disabled?.days.some(day => spacetime(_date).format('iso-short') === day)){\n return true;\n }\n }\n }\n\n const firstAvailableDate = storeCalendar?.availability?.firstAvailableDate\n const lastAvailableDate = storeCalendar?.availability?.lastAvailableDate\n const weeklyAvailability = storeCalendar?.availability?.weekly?.weekDays\n const disabledDates = storeCalendar?.availability?.disabledDates\n\n return(\n <>\n {loadingInfo \n ?\n <div style={{ position: 'relative' }}>\n <div style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)' }}>\n <Spinner />\n </div>\n <Calendar\n tileDisabled={() => true}\n locale={getUserLanguage()}\n prev2Label={null}\n next2Label={null}\n minDetail=\"month\"\n />\n </div>\n :\n <>\n {Object.keys(storeCalendar).length !== 0 &&\n <div className=\"d-inline \">\n <Calendar\n minDate={getMinDate(firstAvailableDate)}\n maxDate={getMaxDate(lastAvailableDate)}\n value={getSelectedDate(storeGuest?.day,firstAvailableDate)}\n onClickDay={(date) => {setGuestDay(spacetime(date).format('iso-short'));setBookingStep(3);}}\n onActiveStartDateChange={({ action, activeStartDate, value, view }) => {\n if(view === 'month'){\n //setSelectedMonth(spacetime(activeStartDate).format('month'))\n //setGuestDay(spacetime(activeStartDate).format('iso-short'))\n console.log('Changed view to: ', activeStartDate, view)\n }\n }}\n tileDisabled={({date, view}) => view === 'month' && getDisabledDates(date,weeklyAvailability,disabledDates)}\n locale={getUserLanguage()}\n prev2Label={null}\n next2Label={null}\n minDetail=\"month\"\n />\n </div>\n }\n </>\n }\n </>\n );\n}\n\nexport default DatePicker;\n","import {useEffect,useState} from 'react';\nimport {useCreateBookingStore} from '../../store';\nimport spacetime from 'spacetime';\nimport Select from 'react-select';\nimport auth from '../../Account/Auth';\nimport { isIframe } from '../../Utilities/iframeUtils';\n\nfunction TimezonePicker({mode,stylingParams}){\n const storeGuest = useCreateBookingStore(state => state.guest);\n const setGuestTimezone = useCreateBookingStore(state => state.setGuestTimezone);\n const [menuIsOpen, setMenuIsOpen] = useState(false); // track menu state\n const [manualSelection, setManualSelection] = useState(false);\n\n // styling params from url\n const backgroundMenuStyle = stylingParams[\"timezone-bg\"];\n const textColorMenuStyle = stylingParams[\"timezone-text-color\"];\n const backgroundActiveMenuStyle = stylingParams[\"timezone-active-bg\"];\n\n const selectStyle = {\n control: (baseStyles,state) => ({\n ...baseStyles,\n marginLeft:45,\n marginRight:45,\n width:'calc(100% - 90px)',\n height:44,\n minWidth:200,\n background:\n (isIframe() && backgroundMenuStyle)\n ? backgroundMenuStyle\n : 'var(--color-background-2)',\n color:\n (isIframe() && textColorMenuStyle)\n ? textColorMenuStyle\n : 'var(--color-text)',\n border:'1px solid var(--color-border)',\n borderRadius:25\n }),\n input: (baseStyles,state) => ({\n ...baseStyles,\n color:\n (isIframe() && textColorMenuStyle)\n ? textColorMenuStyle\n : 'var(--color-text)',\n padding:7\n }),\n singleValue: (baseStyles,state) => ({\n ...baseStyles,\n color:\n (storeGuest?.timezone?.value === \"etc/universal\")\n ? 'var(--color-error)'\n : (isIframe() && textColorMenuStyle)\n ? textColorMenuStyle\n : 'var(--color-text)',\n padding:7\n }),\n placeholder: (baseStyles,state) => ({\n ...baseStyles, \n padding:7\n }),\n menu: (baseStyles,state) => ({\n ...baseStyles, \n width:'calc(100% - 160px)',\n margin:'0 80px',\n minWidth:200,\n background:\n (isIframe() && backgroundMenuStyle)\n ? backgroundMenuStyle\n : 'var(--color-background-2)',\n color:\n (isIframe() && textColorMenuStyle)\n ? textColorMenuStyle\n : 'var(--color-text)',\n }),\n option : (baseStyles,state) => ({\n ...baseStyles, \n background:\n state.isFocused\n ? (isIframe() && backgroundActiveMenuStyle)\n ? backgroundActiveMenuStyle \n : 'var(--color-primary)'\n : 'var(--color-background-2)',\n color:\n state.isFocused\n ? 'white'\n : 'var(--color-text)'\n })\n }\n\n const hoursToHHMM = (hours) =>{\n var h = String(Math.trunc(hours)).padStart(2, '0');\n var m = String(Math.abs(Math.round((hours - h) * 60))).padStart(2, '0');\n return h + ':' + m;\n }\n\n const getTimezoneObject = (key) => {\n let timezone = {};\n if(key !== undefined && key !== null && key !== \"\"){\n timezone = spacetime.now().goto(key).timezone();\n }else{\n timezone = spacetime.now().timezone();\n // https://stackoverflow.com/questions/76298879/is-etc-unknown-a-valid-timezone\n if(timezone?.name === \"Etc/Unknown\"){\n timezone = spacetime.now().goto(\"Etc/Universal\").timezone();\n }\n }\n const name = timezone.name.toLowerCase();\n const displayName = name.replace(/[\"_\"]/g, \" \").replace(/\\b\\w/g, l => l.toUpperCase());\n const offset = timezone.current.offset; \n const displayOffset = hoursToHHMM(offset);\n const label = `(GMT${offset<0?\" \":\" +\"}${displayOffset}) ${displayName}`\n const result = {value: name, label:label};\n return result;\n }\n\n const timezones = spacetime.timezones();\n const getTimezoneOptions = (_timezones) => {\n let options = [];\n for(let key in _timezones){\n if(!key.includes('gmt') && !key.includes('utc')){\n let option = getTimezoneObject(key)\n options.push(option);\n }\n }\n return options;\n }\n\n useEffect(() => {\n const storageTimezone = auth.getProperty({\n storageKey: 'userSession',\n path: ['profileObj', 'timezone']\n })\n\n if(storageTimezone){\n console.info(\"[booking][timezone] Found user session, loading saved timezone:\",auth.getTimezone())\n setGuestTimezone(getTimezoneObject(storageTimezone));\n }else{\n console.info(\"[booking][timezone] User session not found, guessing timezone:\")\n setGuestTimezone(getTimezoneObject())\n }\n },[])\n\n return(\n <>\n {mode !== \"delete\" &&\n <div>\n {storeGuest?.timezone &&\n <Select\n placeholder=\"Type to search\"\n styles={selectStyle}\n options={getTimezoneOptions(spacetime.timezones())}\n defaultValue={storeGuest?.timezone}\n value={menuIsOpen ? null : storeGuest?.timezone}\n onChange={setGuestTimezone}\n onMenuOpen={() => setMenuIsOpen(true)} // Add this line\n onMenuClose={() => setMenuIsOpen(false)} // And this line\n />\n }\n {storeGuest?.timezone?.value === \"etc/universal\" &&\n <p className=\"d-flex justify-content-center text-danger\">\n Select your timezone!\n </p>\n }\n </div>\n }\n </> \n );\n}\n\nexport default TimezonePicker;\n","import spacetime from 'spacetime';\nimport './time-picker.css'\n\nfunction TimeSlot({dummy,datetime,timeFormat,callback}){\n return(\n <div className={dummy ? 'time-slot dummy' : 'time-slot'} onClick={callback && callback}>\n {timeFormat === \"24h\"\n ? <>{spacetime(datetime).format('{time-24}')}</>\n : <>{spacetime(datetime).format('{time}')}</>\n }\n </div>\n );\n}\n\nexport default TimeSlot;\n","import TimeSlot from './TimeSlot';\n\nfunction TimeSlotSkeleton({datetime,timeFormat}){\n return(\n <>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n <TimeSlot dummy datetime={datetime} timeFormat={timeFormat}/>\n </>\n );\n}\n\nexport default TimeSlotSkeleton;\n","import './time-picker.css';\nimport { useCreateBookingStore } from '../../store';\nimport { useEffect, useState } from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport TimeSlot from './TimeSlot';\nimport TimeSlotSkeleton from './TimeSlotSkeleton';\nimport { useTranslation } from 'react-i18next';\nimport toast from 'react-hot-toast';\nimport be from '../../BE';\nimport spacetime from 'spacetime';\nimport { isIframe } from '../../Utilities/iframeUtils';\n\nfunction TimePicker({ username, eventType, cancelling, setBookingStep, stylingParams }) {\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' });\n const [loadingInfo, setLoadingInfo] = useState(false);\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const storeGuest = useCreateBookingStore(state => state.guest);\n const setGuestTime = useCreateBookingStore(state => state.setGuestTime);\n const setGuestTimeFormat = useCreateBookingStore(state => state.setGuestTimeFormat);\n const setTimeSlots = useCreateBookingStore(state => state.setTimeSlots);\n const setGuestSatellite = useCreateBookingStore(state => state.setGuestSatellite);\n const storeTimeSlots = useCreateBookingStore(state => state.timeSlots);\n const { t } = useTranslation(['booking']);\n\n useEffect(() => {\n // styling params from url\n const backgroundStyle = stylingParams[\"timeslot-bg\"];\n const textColorStyle = stylingParams[\"timeslot-text-color\"];\n const textColorActiveStyle = stylingParams[\"timeslot-active-text-color\"];\n\n // --- STYLING OPTIONS ---\n // valid only when the page is in Iframe\n if(isIframe()){\n // Create a new style element\n const style = document.createElement('style');\n style.type = 'text/css';\n\n // Start building the CSS string to inject\n let styleString = \"\\n/*--- TimeSlot Calendar Iframe Custom Colors ---*/\\n\";\n\n // Time Format\n styleString += `\n .time-format button{\n background: ${backgroundStyle};\n }\n `\n\n styleString += `\n .h12, .h24, .time-format > .step-back {\n color: ${textColorStyle};\n }\n `\n styleString += `\n .time-format-selected {\n color: ${textColorActiveStyle};\n border-color: ${textColorActiveStyle}\n }\n `\n styleString += `\n .time-slot, .time-slot.dummy {\n background: ${backgroundStyle};\n color: ${textColorStyle}\n }\n `\n styleString += `\n .time-slot:hover {\n color: ${textColorActiveStyle};\n border-color: ${textColorActiveStyle}\n }\n `\n // Set the generated CSS as the innerHTML of the style element\n style.innerHTML = styleString;\n\n // Append the style element to the head of the document\n document.head.appendChild(style);\n }\n\n const getTimeSlots = async (_username, _eventType, _timezone, _day) => {\n if (_username && _eventType && _timezone && _day) {\n const body = {\n ownerUsername: _username,\n eventKey: _eventType,\n timezone: _timezone,\n bookingDate: _day\n };\n setLoadingInfo(true);\n try {\n const response = await be.get('jubilant-booking', '/booking/slots', body, false, true);\n console.info('[booking][getTimeSlots] Success:', response);\n setTimeSlots(response);\n setInfoResponseStatus(200);\n } catch (error) {\n console.error('[booking][getTimeSlots] Error:', error);\n setInfoResponseStatus(error?.response?.status);\n toast.error(`Error Fetching Time Slots Availabilities`)\n } finally {\n setLoadingInfo(false);\n }\n }\n };\n\n const timezoneToSend = spacetime.now().goto(storeGuest?.timezone?.value).timezone().name;\n if (!cancelling) { getTimeSlots(username, eventType, timezoneToSend, storeGuest?.day); }\n }, [username, eventType, storeGuest?.day, storeGuest?.timezone, cancelling]);\n\n const TimeFormatButtons = () => (\n <div className=\"time-format\">\n {isMobile && (\n <button className=\"step-back\" onClick={() => setBookingStep(2)}>\n <i className=\"fa-solid fa-arrow-left-long\"></i>\n </button>\n )}\n <button className={storeGuest?.timeFormat === \"12h\" ? \"h12 time-format-selected\" : \"h12\"} onClick={() => setGuestTimeFormat(\"12h\")}>12h</button>\n <button className={storeGuest?.timeFormat === \"24h\" ? \"h24 time-format-selected\" : \"h24\"} onClick={() => setGuestTimeFormat(\"24h\")}>24h</button>\n </div>\n );\n\n const TimeSlotDisplay = () => (\n <div className=\"time-picker\">\n {loadingInfo\n ? <TimeSlotSkeleton datetime='2000-01-01:00:00+00:00' timeFormat={storeGuest?.timeFormat}/>\n : storeTimeSlots?.slotList && Object.keys(storeTimeSlots?.slotList).length !== 0\n ? Object.keys(storeTimeSlots?.slotList).map((datetime) => (\n <TimeSlot\n key={datetime}\n datetime={datetime}\n timeFormat={storeGuest?.timeFormat}\n callback={() => {\n setGuestTime(datetime);\n setGuestSatellite(storeTimeSlots?.slotList[datetime]);\n setBookingStep(4);\n }}\n />\n ))\n : <center> {t('time.empty')} </center>\n }\n </div>\n );\n\n return (\n <div>\n <TimeFormatButtons />\n <TimeSlotDisplay />\n </div>\n );\n}\n\nexport default TimePicker;\n","function Order({order}){\n return(\n <span className=\"me-2\" style={{color:'var(--color-secondary)'}}>\n {order}\n </span>\n );\n}\n\nexport default Order\n","function Content({content}){\n return(\n <>\n {content}\n </>\n );\n}\n\nexport default Content\n","function Required({required}){\n return(\n <span className=\"text-danger ms-1\">\n {required && '*'}\n </span>\n );\n}\n\nexport default Required\n","import Form from 'react-bootstrap/Form';\nimport {useCreateBookingStore} from '../../../../store';\n\nfunction TextAnswer({questionId,required,mode}){\n const setTextAnswer = useCreateBookingStore(state => state.setTextAnswer);\n const updateTextAnswer = useCreateBookingStore(state => state.updateTextAnswer);\n const summary = useCreateBookingStore(state => state.summary);\n\n return(\n <>\n {mode === \"reschedule\"\n ?\n <Form.Control\n value={summary?.surveys[questionId]?.answer || null}\n className=\"my-2\"\n type=\"text\"\n required={required}\n onChange={(e) => updateTextAnswer(e.target.value,questionId)}\n />\n :\n <Form.Control\n className=\"my-2\"\n type=\"text\"\n required={required}\n onChange={(e) => setTextAnswer(e.target.value,questionId)}\n />\n }\n </>\n );\n}\n\nexport default TextAnswer;\n","import PhoneInput from 'react-phone-number-input'\nimport {useCreateBookingStore} from '../../../../store';\nimport './phone-answer.css';\n\nfunction PhoneAnswer({questionId,required,mode}){\n const setTextAnswer = useCreateBookingStore(state => state?.setTextAnswer);\n const updateTextAnswer = useCreateBookingStore(state => state.updateTextAnswer);\n const surveyAnswers = useCreateBookingStore(state => state?.surveyAnswers);\n const summary = useCreateBookingStore(state => state.summary);\n\n return(\n <>\n {mode === \"reschedule\"\n ?\n <PhoneInput\n required={required}\n international\n countryCallingCodeEditable={false}\n placeholder=\"Enter phone number\"\n value={summary?.surveys[questionId]?.answer[0] || null}\n onChange={(number) => updateTextAnswer(number,questionId)}\n />\n :\n <PhoneInput\n required={required}\n international\n countryCallingCodeEditable={false}\n placeholder=\"Enter phone number\"\n value={surveyAnswers[questionId] || null}\n onChange={(number) => setTextAnswer(number,questionId)}\n />\n }\n </>\n\n );\n}\n\nexport default PhoneAnswer;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { IMaskInput } from 'react-imask';\nimport {useCreateBookingStore} from '../../../../store';\n\nfunction CustomMaskInput({ label, mask, maxLength, blocks, placeholder, onAccept, value }) {\n return (\n <Form.Group className=\"w-100 d-inline-flex\">\n {/*<Form.Label>{label}</Form.Label>*/}\n <i className=\"fa-brands fa-telegram justify-content-center my-auto h1 ms-2 me-3\"></i>\n <IMaskInput\n value={value}\n mask={mask}\n unmask={true}\n blocks={blocks}\n maxLength={maxLength}\n placeholder={placeholder}\n onAccept={onAccept}\n style={{ width: '100%', margin: '8px 0', padding: '6px 12px' }}\n />\n </Form.Group>\n );\n}\n\nfunction TelegramAnswer({questionId,required,mode}) {\n const setTextAnswer = useCreateBookingStore(state => state?.setTextAnswer);\n const updateTextAnswer = useCreateBookingStore(state => state.updateTextAnswer);\n const summary = useCreateBookingStore(state => state.summary);\n return (\n <>\n {mode === \"reschedule\"\n ?\n <CustomMaskInput\n value={summary?.surveys[questionId]?.answer[0] || null}\n label=\"Telegram User Link\"\n required={required}\n mask={'{https://t.me/}username'}\n blocks={{\n username: {\n mask: /^[a-zA-Z0-9_]*$/,\n }\n }}\n maxLength={32}\n placeholder=\"Enter your Telegram username\"\n onAccept={(tg) => updateTextAnswer(tg,questionId)}\n />\n :\n <CustomMaskInput\n label=\"Telegram User Link\"\n required={required}\n mask={'{https://t.me/}username'}\n blocks={{\n username: {\n mask: /^[a-zA-Z0-9_]*$/,\n }\n }}\n maxLength={32}\n placeholder=\"Enter your Telegram username\"\n onAccept={(tg) => setTextAnswer(tg,questionId)}\n />\n\n }\n </>\n );\n}\n\nexport default TelegramAnswer;\n","import PhoneInput from 'react-phone-number-input'\nimport './phone-answer.css';\nimport {useCreateBookingStore} from '../../../../store';\n//import { Form } from 'react-bootstrap';\n//import { IMaskInput } from 'react-imask';\n\nfunction WhatsappAnswer({questionId,required,mode}){\n const setTextAnswer = useCreateBookingStore(state => state?.setTextAnswer);\n const updateTextAnswer = useCreateBookingStore(state => state.updateTextAnswer);\n const surveyAnswers = useCreateBookingStore(state => state?.surveyAnswers);\n const summary = useCreateBookingStore(state => state.summary);\n\n return(\n <>\n {mode === \"reschedule\"\n ?\n <PhoneInput\n required={required}\n international\n countryCallingCodeEditable={false}\n placeholder=\"Enter whatsapp number\"\n value={summary?.surveys[questionId]?.answer[0] || null}\n onChange={(number) => updateTextAnswer(number,questionId)}\n />\n :\n <PhoneInput\n required={required}\n international\n countryCallingCodeEditable={false}\n placeholder=\"Enter whatsapp number\"\n value={surveyAnswers[questionId]}\n onChange={(number) => setTextAnswer(number,questionId)}\n />\n\n }\n </>\n );\n}\n\n/*\nfunction CustomMaskInput({ required, label, mask, maxLength, blocks, placeholder, onAccept }) {\n return (\n <Form.Group className=\"w-100 d-inline-flex\">\n <i className=\"fa-brands fa-whatsapp justify-content-center my-auto h1 ms-2 me-3\"></i>\n <IMaskInput\n required={required}\n mask={mask}\n unmask={true}\n blocks={blocks}\n maxLength={maxLength}\n placeholder={placeholder}\n onAccept={onAccept}\n style={{ width: '100%', margin: '8px 0', padding: '6px 12px' }}\n />\n </Form.Group>\n );\n}\n\nfunction WhatsappAnswer({questionId,required}) {\n const setTextAnswer = useCreateBookingStore(state => state?.setTextAnswer);\n return (\n <CustomMaskInput\n label=\"WhatsApp User Link\"\n required={required}\n mask={'{https://w\\\\a.me/}(+countryCode) number'}\n placeholder=\"Enter WhatsApp number (e.g., (+1) 2025550123)\"\n onAccept={(wa) => setTextAnswer(wa,questionId)}\n blocks={{\n countryCode: {\n mask: /^[0-9]{0,4}$/,\n inputMode: 'numeric' // Suitable input mode for country code\n },\n number: {\n mask: /^[0-9]{0,15}$/,\n inputMode: 'numeric' // Suitable input mode for main phone number\n }\n }}\n />\n );\n}\n */\n\nexport default WhatsappAnswer;\n\n","import Form from 'react-bootstrap/Form';\nimport {useCreateBookingStore} from '../../../../../store';\n\nfunction Field({option,type,questionId,fieldId,required,mode}){\n const setRadioAnswer = useCreateBookingStore(state => state.setRadioAnswer);\n const updateRadioAnswer = useCreateBookingStore(state => state.updateRadioAnswer);\n const setCheckboxAnswer = useCreateBookingStore(state => state.setCheckboxAnswer);\n const updateCheckboxAnswer = useCreateBookingStore(state => state.updateCheckboxAnswer);\n const summary = useCreateBookingStore(state => state.summary);\n\n const handleRescheduleChange = (e,_fieldId,_type,_questionId,_value) => {\n if(_type === 'radio'){\n updateRadioAnswer(_fieldId, _questionId, _value);\n } else if (_type === 'checkbox') {\n const isChecked = e.target.checked\n updateCheckboxAnswer(_fieldId, isChecked, _questionId, _value)\n }\n }\n\n const handleChange = (e,_fieldId,_type,_questionId) => {\n if(_type === 'radio'){\n setRadioAnswer(_fieldId,_questionId)\n } else if (_type === 'checkbox') {\n const isChecked = e.target.checked\n setCheckboxAnswer(_fieldId,isChecked,_questionId)\n }\n }\n\n return(\n <>\n {mode === \"reschedule\"\n ?\n <Form.Check \n checked={summary?.surveys[questionId]?.answerValue.includes(fieldId)}\n type={type}\n label={option}\n name={questionId}\n required={required}\n onChange={(e) => handleRescheduleChange(e,fieldId,type,questionId,option)}\n />\n :\n <Form.Check \n type={type}\n label={option}\n name={questionId}\n required={required}\n onChange={(e) => handleChange(e,fieldId,type,questionId)}\n />\n }\n </>\n );\n}\n\nexport default Field;\n","import Field from './Field';\nimport {useCreateBookingStore} from '../../../../../store';\n\nfunction Fields({type, fields, questionId, required, answer, answerValue, mode}){\n const surveyAnswers = useCreateBookingStore(state => state.surveyAnswers);\n const summary = useCreateBookingStore(state => state.summary);\n\n const getType = (_type) => {\n if(_type === 1) return \"radio\";\n if(_type === 2) return \"checkbox\";\n }\n\n // radio buttons can have required option if under the same name\n // checkboxes should have required only if none of them is checked\n // if at least a checkbox is checked just remove the required option\n const isRequired = (_required,_type,_answersArray) => {\n if(_type === 'radio' && _required) return true;\n if(_type === 'radio' && !_required) return false;\n if(_type === 'checkbox' && !_required) return false;\n if(_type === 'checkbox' && _required){\n if(!_answersArray) return true;\n if(_answersArray.length > 0) return false;\n else return true;\n }\n }\n \n const fieldType = getType(type);\n \n let answersArray = [];\n if(mode === \"reschedule\"){\n answersArray = summary?.surveys[questionId]?.answerValue;\n } else {\n answersArray = surveyAnswers[questionId];\n }\n\n return(\n <div className=\"my-2\">\n {Object.keys(fields).map((key) => (\n <Field\n key={`field-${key}`}\n option={fields[key]}\n type={fieldType}\n questionId={questionId}\n fieldId={key}\n required={isRequired(required,fieldType,answersArray)}\n mode={mode}\n />\n ))}\n </div>\n );\n}\n\nexport default Fields;\n","import Order from './Order';\nimport Content from './Content';\nimport Required from './Required';\nimport TextAnswer from './TextAnswer';\nimport PhoneAnswer from './PhoneAnswer';\nimport TelegramAnswer from './TelegramAnswer';\nimport WhatsappAnswer from './WhatsappAnswer';\nimport Fields from './Fields/_Fields';\n\nfunction Question({questionState,questionId,mode}){\n return(\n <>\n <div className=\"mt-3\">\n <Order order={questionState?.order}/>\n <Content content={questionState?.content}/> \n <Required required={questionState?.required}/>\n </div>\n\n {mode === \"reschedule\"\n ?\n <>\n {/* radio and checkbox */\n (questionState?.questionType === 1 || questionState?.questionType === 2) &&\n <Fields type={questionState.questionType} fields={questionState.qstFields} questionId={questionId} required={questionState.required} answer={questionState?.answer} answerValue={questionState?.answerValue} mode={mode}/>\n }\n {/* text */\n questionState?.questionType === 3 && \n <TextAnswer questionId={questionId} required={questionState.required} mode={mode}/>\n }\n {/* phone number */\n questionState?.questionType === 4 &&\n <PhoneAnswer questionId={questionId} required={questionState.required} mode={mode}/>\n }\n {/* telegram */\n questionState?.questionType === 5 &&\n <TelegramAnswer questionId={questionId} required={questionState.required} mode={mode}/>\n }\n {/* whatsapp */\n questionState?.questionType === 6 &&\n <WhatsappAnswer questionId={questionId} required={questionState.required} mode={mode}/>\n }\n </>\n :\n <>\n {/* radio and checkbox */\n (questionState?.questionType === 1 || questionState?.questionType === 2) &&\n <Fields type={questionState.questionType} fields={questionState.qstFields} questionId={questionId} required={questionState.required}/>\n }\n {/* text */\n questionState?.questionType === 3 && \n <TextAnswer questionId={questionId} required={questionState.required}/>\n }\n {/* phone number */\n questionState?.questionType === 4 &&\n <PhoneAnswer questionId={questionId} required={questionState.required}/>\n }\n {/* telegram */\n questionState?.questionType === 5 &&\n <TelegramAnswer questionId={questionId} required={questionState.required}/>\n }\n {/* whatsapp */\n questionState?.questionType === 6 &&\n <WhatsappAnswer questionId={questionId} required={questionState.required}/>\n }\n </>\n }\n\n \n </>\n );\n}\n\nexport default Question;\n","import {useTranslation} from 'react-i18next';\nimport {useCreateBookingStore} from '../../../store';\nimport Question from './Question/_Question';\n\nfunction Surveys({mode}){\n const {t} = useTranslation(['booking']);\n const storeSummary = useCreateBookingStore(state => state.summary);\n\n\n const hasQuestions = storeSummary?.surveys !== null && storeSummary?.surveys !== undefined && Object.keys(storeSummary?.surveys).length !== 0\n\n return(\n <>\n {hasQuestions &&\n <>\n <div className=\"h4\">{t('final.questions')}</div>\n {\n Object.keys(storeSummary?.surveys).map((key) => (\n <Question key={`question-${key}`} questionState={storeSummary?.surveys[key]} questionId={key} mode={mode}/>\n ))\n }\n </>\n }\n </>\n );\n}\n\nexport default Surveys;\n","import * as Sentry from \"@sentry/react\";\nimport {useState,useEffect,useContext} from 'react';\nimport { useMediaQuery } from 'react-responsive'\nimport UserContext from '../../UserContext'\nimport {useHistory} from 'react-router-dom';\nimport {useLocation} from 'react-router-dom';\nimport {useCreateBookingStore} from '../../store';\nimport {useTranslation} from 'react-i18next';\nimport {GoogleLogin} from '@react-oauth/google';\nimport Placeholder from 'react-bootstrap/Placeholder';\nimport toast from 'react-hot-toast';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Surveys from './Surveys/_Surveys';\nimport spacetime from 'spacetime';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport Login from '../../Login';\nimport './summary.css';\nimport { isIframe } from '../../Utilities/iframeUtils';\n\nfunction Summary({username,eventType,mode,urlBookingId,setBookingStep,stylingParams}){\n const isMobile = useMediaQuery({ query: '(max-width: 1024px)' })\n let history = useHistory();\n const {t,i18n} = useTranslation(['booking'])\n const [user,setUser] = useContext(UserContext);\n const storeDetails = useCreateBookingStore(state => state.details);\n const storeGuest = useCreateBookingStore(state => state.guest);\n const setGuestTime = useCreateBookingStore(state => state.setGuestTime);\n const setGuestName = useCreateBookingStore(state => state.setGuestName);\n const setGuestEmail = useCreateBookingStore(state => state.setGuestEmail);\n const setGuestNotes = useCreateBookingStore(state => state.setGuestNotes);\n const setGuestReason = useCreateBookingStore(state => state.setGuestReason);\n const storeSummary = useCreateBookingStore(state => state.summary);\n const setSummary = useCreateBookingStore(state => state.setSummary);\n const setSurveyAnswers = useCreateBookingStore(state => state.setSurveyAnswers);\n const storeAnswers = useCreateBookingStore(state => state.surveyAnswers);\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const [loadingInfo,setLoadingInfo] = useState(false);\n const [submitResponseStatus,setSubmitResponseStatus] = useState(0);\n const [loadingSubmit,setLoadingSubmit] = useState(false);\n const location = useLocation();\n const searchParams = new URLSearchParams(location.search);\n\n useEffect(()=>{\n // styling params from url\n const backgroundStyle = stylingParams[\"summary-bg\"];\n const textColorStyle = stylingParams[\"summary-text-color\"];\n const textColorActiveStyle = stylingParams[\"summary-active-text-color\"];\n\n // --- STYLING OPTIONS ---\n // valid only when the page is in Iframe\n if(isIframe()){\n // Create a new style element\n const style = document.createElement('style');\n style.type = 'text/css';\n\n // Start building the CSS string to inject\n let styleString = \"\\n/*--- Summary Iframe Custom Colors ---*/\\n\";\n\n // Choosen datetime\n styleString += `\n .summary{\n color: ${textColorStyle};\n }\n\n .chosen-datetime-label{\n color: ${textColorActiveStyle};\n }\n\n .reset-datetime{\n color: ${textColorStyle};\n background: ${backgroundStyle}\n }\n\n .reset-datetime:hover{\n color: ${textColorActiveStyle};\n border-color: ${textColorActiveStyle};\n }\n\n .summary input,\n .summary textarea{\n background: ${backgroundStyle};\n color: ${textColorStyle};\n }\n\n .summary input:disabled,\n .summary textarea:disabled{\n background: ${backgroundStyle};\n }\n\n .summary input:focus,\n .summary textarea:focus{\n color: ${textColorStyle};\n background: ${backgroundStyle};\n border-color; ${textColorActiveStyle}\n }\n\n .summary-submit,\n .summary-submit:disabled,\n .summary-sumbit:hover{\n color: ${textColorStyle} !important;\n background-color: ${textColorActiveStyle} !important;\n border-color: ${textColorActiveStyle} !important;\n }\n `\n // Set the generated CSS as the innerHTML of the style element\n style.innerHTML = styleString;\n\n // Append the style element to the head of the document\n document.head.appendChild(style);\n }\n\n const getSummary = (_username,_event,_time) => {\n let body = {\n ownerUsername: _username,\n eventKey: _event,\n bookingDateTime: _time,\n }\n if (mode === \"reschedule\") body.bookingId = urlBookingId;\n setLoadingInfo(true);\n be.get('jubilant-booking','/booking/summary',body,false,true)\n .then(response => {\n // save response to state\n console.info(\"[booking][getSummary] Success:\");\n console.log(response);\n setInfoResponseStatus(200);\n setLoadingInfo(false);\n setSummary(response)\n })\n .catch(error => {\n console.info(\"[booking][getSummary] Error:\");\n console.error(error);\n Sentry.addBreadcrumb({\n category: \"booking\",\n message: `Failed to get summary info for: ${body?.eventKey}`,\n level: \"error\",\n data: body\n })\n Sentry.captureException(error,(scope) => {\n scope.setTransactionName(`[booking][summary] error while getting summary info`);\n return scope;\n });\n setInfoResponseStatus(error?.response?.status);\n setLoadingInfo(false);\n toast.error(`Error Fetching Booking Summary`)\n })\n } \n const getUserSessionStatus = () => {\n console.info(\"[getUserSessionStatus] entering the function...\")\n auth.isAuthenticated()\n .then(() => {\n console.info(\"[getUserSessionStatus] setting as logged true...\")\n setUser({logged:true})\n })\n .catch(() => {\n console.info(\"[getUserSessionStatus] setting as logged false...\")\n setUser({logged:false})\n })\n }\n\n mode !== \"delete\" && getSummary(username,eventType,storeGuest?.time)\n getUserSessionStatus()\n },[storeGuest?.time])\n\n function getUserLanguage(){\n return i18n.language.substring(0,2);\n }\n\n function formatDate(date){\n // Date formatting options\n var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n // Getting date object from db\n var dateFormatted = new Date(date);\n // Format: weekday, monthname daynumber, year\n dateFormatted = dateFormatted.toLocaleDateString(getUserLanguage(), options);\n // To uppercase string\n dateFormatted = dateFormatted.toString();\n\n return dateFormatted;\n }\n \n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (mode === \"book\"){\n let body = {\n bookingId: storeSummary?.booking_id,\n bookingDateTime: storeGuest?.time,\n ownerUsername: username,\n eventKey: eventType,\n answers:storeAnswers,\n notes: storeGuest?.notes,\n guest: {\n guestName: storeGuest?.name,\n guestEmail: storeGuest?.email,\n guestTimezone: spacetime.now().goto(storeGuest?.timezone?.value).timezone().name\n },\n satellite: storeGuest?.satellite\n }\n if(searchParams.get(\"paid\")){body.paid = searchParams.get(\"paid\")}\n setLoadingSubmit(true);\n await be.post('jubilant-booking','/booking',body,user?.logged,true,true)\n .then((response) => {\n console.info('[booking][submit] Success:');\n console.log(response);\n setSubmitResponseStatus(response?.status)\n setLoadingSubmit(false);\n // reset summary and answers status\n setSummary({});\n setSurveyAnswers({});\n if(response?.status === 201){\n // Redirect to stripe payment page\n window.open(response?.data?.state,\"_blank\");\n } else if(response?.status === 200){\n // Redirect to confirmation page\n const confirmationState = {\n owner: storeDetails?.owner?.fullName,\n event: storeDetails?.event?.name,\n description: storeDetails?.event?.description,\n datetime: storeGuest?.time,\n duration: storeDetails?.event?.duration,\n timezone: spacetime.now().goto(storeGuest?.timezone?.value).timezone().name,\n redirectionUrl: storeDetails?.event?.redirectionUrl,\n location: storeDetails?.event?.location,\n needsApproval: storeDetails?.event?.needsApproval\n }\n history.push({\n pathname: `/operations/confirm/${storeSummary?.booking_id}`,\n state: confirmationState\n });\n }\n }) \n .catch(error => {\n console.info('[booking][submit] Error:');\n console.error(error);\n Sentry.addBreadcrumb({\n category: \"booking\",\n message: `Failed to book event: ${body?.eventKey}`,\n level: \"error\",\n data: body\n })\n Sentry.captureException(error,(scope) => {\n scope.setTransactionName(`[booking][summary] error while booking event`);\n return scope;\n });\n setSubmitResponseStatus(error?.response?.status)\n setLoadingSubmit(false);\n toast.error(`Error Booking Event`)\n });\n }\n\n if(mode === \"reschedule\"){\n const body = {\n bookingId: urlBookingId,\n bookingDateTime: storeGuest?.time,\n answers: storeSummary?.surveys,\n reason: storeGuest?.reason,\n notes: storeGuest?.notes,\n }\n setLoadingSubmit(true);\n await be.patch('jubilant-booking','/booking',body,false,true)\n .then((response) => {\n console.info('[booking][submit] Success:');\n console.log(response);\n setSubmitResponseStatus(response?.status)\n setLoadingSubmit(false);\n // reset summary and answers status\n setSummary({});\n setSurveyAnswers({});\n toast.success(`Rescheduled`)\n // Redirect to confirmation page\n const confirmationState = {\n owner: storeDetails?.owner?.fullName,\n event: storeDetails?.event?.name,\n description: storeDetails?.event?.description,\n datetime: storeGuest?.time,\n duration: storeDetails?.event?.duration,\n timezone: spacetime.now().goto(storeGuest?.timezone?.value).timezone().name,\n redirectionUrl: storeDetails?.event?.redirectionUrl,\n location: storeDetails?.event?.location\n }\n history.push({\n pathname: `/operations/confirm/${storeSummary?.booking_id}`,\n state: confirmationState\n });\n }) \n .catch(error => {\n console.info('[booking][submit] Error:');\n console.error(error);\n Sentry.addBreadcrumb({\n category: \"booking\",\n message: `Failed to reschedule event: ${body?.eventKey}`,\n level: \"error\",\n data: body\n })\n Sentry.captureException(error,(scope) => {\n scope.setTransactionName(`[booking][summary] error while rescheduling event`);\n return scope;\n });\n setSubmitResponseStatus(error?.response?.status)\n setLoadingSubmit(false);\n toast.error(`Error Rescheduling Event`)\n });\n }\n\n if(mode === \"delete\"){\n const body = {\n bookingId: urlBookingId,\n reason: storeGuest?.reason,\n }\n setLoadingSubmit(true);\n await be.del('jubilant-booking','/booking',body,false,true)\n .then((response) => {\n console.info('[booking][delete] Success:');\n console.log(response);\n setSubmitResponseStatus(response?.status)\n setLoadingSubmit(false);\n toast.success(`Deleted`)\n // Redirect to confirmation page\n const confirmationState = {\n deleted:true,\n owner: storeDetails?.owner?.fullName,\n event: storeDetails?.event?.name,\n description: storeDetails?.event?.description,\n datetime: storeGuest?.time,\n duration: storeDetails?.event?.duration,\n timezone: spacetime.now().goto(storeGuest?.timezone?.value).timezone().name,\n redirectionUrl: storeDetails?.event?.redirectionUrl,\n location: storeDetails?.event?.location\n }\n history.push({\n pathname: `/operations/confirm/${urlBookingId}`,\n state: confirmationState\n });\n }) \n .catch(error => {\n console.info('[booking][delete] Error:');\n console.error(error);\n Sentry.addBreadcrumb({\n category: \"booking\",\n message: `Failed to reschedule event: ${body?.eventKey}`,\n level: \"error\",\n data: body\n })\n Sentry.captureException(error,(scope) => {\n scope.setTransactionName(`[booking][summary] error while rescheduling event`);\n return scope;\n });\n setSubmitResponseStatus(error?.response?.status)\n setLoadingSubmit(false);\n toast.error(`Error Cancelling Event`)\n });\n }\n }\n\n return(\n <>\n {loadingInfo\n ?\n <div className=\"summary\">\n Loading...\n </div>\n :\n <div className=\"summary\">\n {storeGuest?.time &&\n <div>\n <div className=\"chosen-datetime-label\">{t('final.chosen')}</div>\n <div className=\"summary-header\">\n <div className=\"chosen-datetime text-capitalize\">\n {formatDate(storeGuest?.time)},\n {storeGuest?.timeFormat === \"24h\"\n ? <> {spacetime(storeGuest?.time).format('{time-24}')}</>\n : <> {spacetime(storeGuest?.time).format('{time}')}</>\n }\n </div>\n {mode !== \"delete\" &&\n <div className=\"summary-controls d-flex ms-auto\">\n {isMobile && <button className=\"summary-step-back\" onClick={() => setBookingStep(3)}> <i className=\"fa-solid fa-arrow-left-long\"></i> </button>}\n <button className=\"reset-datetime\" onClick={() => {setGuestTime(\"\");setBookingStep(2)}}>{t('final.chooseAnother')}</button>\n </div>\n }\n </div>\n <hr className=\"summary-ruler\"/>\n <Form onSubmit={handleSubmit}>\n {(mode === \"book\" || mode === \"reschedule\") &&\n <>\n\n {user.logged \n\n ? \n <>\n {auth.getFullName()}, {t('final.loggedMessage')}\n {\n setGuestName(auth.getFullName())\n }\n {\n setGuestEmail(auth.getEmail())\n }\n </>\n : \n <>\n <Login \n callback={() => {\n auth.isAuthenticated()\n .then(() => {\n console.info(\"[getUserSessionStatus] setting as logged true...\")\n setUser({logged:true})\n })\n .catch(() => {\n console.info(\"[getUserSessionStatus] setting as logged false...\")\n setUser({logged:false})\n })\n }}\n />\n </>\n\n }\n\n <Row className=\"summary-attendee-details\">\n <Form.Group as={Col} md=\"12\" xl=\"6\">\n <Form.Label>{t('final.name')}</Form.Label>\n <Form.Control type=\"text\" required disabled={user.logged} value={storeGuest?.name} onChange={(e) => setGuestName(e.target.value)}/>\n </Form.Group>\n <Form.Group as={Col} md=\"12\" xl=\"6\">\n <Form.Label>{t('final.email')}</Form.Label>\n <Form.Control type=\"email\" required disabled={user.logged} value={storeGuest?.email} onChange={(e) => setGuestEmail(e.target.value)}/>\n </Form.Group>\n </Row>\n\n <Surveys mode={mode}/>\n\n <Form.Group>\n <Form.Label>{t('final.notes')}</Form.Label>\n <Form.Control as=\"textarea\" rows=\"3\" name=\"notes\" placeholder={t('final.notesPlaceholder')} onChange={(e) => setGuestNotes(e.target.value)}/>\n </Form.Group>\n </>\n }\n {(mode === \"reschedule\" || mode === \"delete\") && \n <Form.Control required as=\"textarea\" rows=\"2\" name=\"reason\" placeholder={t('final.reason')} onChange={(e) => setGuestReason(e.target.value)}/>\n }\n {mode === \"book\" && storeDetails?.event?.isPaidEvent &&\n <p>\n {t('final.paidEvent.termsText')} <a href=\"/stripe-terms\" target=\"_blank\"> {t('final.paidEvent.termsLink')}</a>\n </p>\n }\n <div className=\"d-grid gap-2\">\n <Button type=\"submit\" disabled={loadingSubmit} className=\"summary-submit text-capitalize mt-3\">{loadingSubmit ? <Spinner animation=\"border\" size=\"sm\"/> : t(`final.${mode}`)}</Button>\n </div>\n </Form>\n </div>\n }\n </div>\n }\n\n </>\n );\n}\n\nexport default Summary;\n","import { useEffect, useState } from \"react\";\nimport toast, { Toaster } from \"react-hot-toast\";\nimport { useCreateBookingStore } from \"../store\";\nimport { useMediaQuery } from \"react-responsive\";\nimport { useHistory } from \"react-router-dom\";\nimport Details from \"./Details/Details\";\nimport DatePicker from \"./DatePicker/DatePicker\";\nimport TimezonePicker from \"./TimezonePicker/TimezonePicker\";\nimport TimePicker from \"./TimePicker/TimePicker\";\nimport Summary from \"./Summary/Summary\";\nimport { isIframe } from \"../Utilities/iframeUtils\";\nimport be from \"../BE\";\nimport \"./booking.css\";\n\nfunction Booking(props) {\n try {\n window.tidioChatApi.hide();\n } catch {}\n\n const isDesktop = useMediaQuery({ query: \"(min-width: 1025px)\" });\n const isMobile = useMediaQuery({ query: \"(max-width: 1024px)\" });\n\n const history = useHistory();\n const urlUsername = props.match.params.user;\n const urlEventType = props.match.params.event;\n const urlBookingId = props.match.params.bookingid;\n const searchParams = new URLSearchParams(props.location.search);\n const mode = props?.mode;\n const [bookingStep, setBookingStep] = useState(\n isIframe() && searchParams.get(\"step\") ? searchParams.get(\"step\") : 1\n );\n const [infoResponseStatus, setInfoResponseStatus] = useState(0);\n const [loadingInfo, setLoadingInfo] = useState(false);\n const [stylingParams, setStylingParams] = useState({});\n const storeDetails = useCreateBookingStore((state) => state.details);\n const storeCalendar = useCreateBookingStore((state) => state.calendar);\n const storeGuest = useCreateBookingStore((state) => state.guest);\n const setDetails = useCreateBookingStore((state) => state.setDetails);\n const setCalendar = useCreateBookingStore((state) => state.setCalendar);\n const setGuestDay = useCreateBookingStore((state) => state.setGuestDay);\n const setGuestTime = useCreateBookingStore((state) => state.setGuestTime);\n const setGuestTimezone = useCreateBookingStore(\n (state) => state.setGuestTimezone\n );\n\n useEffect(() => {\n document.title = `Calendbook - ${mode} event`;\n // styling state setter with key and value\n // this state will be passed to components\n const setKeyValueStyle = (_key, _value) => {\n setStylingParams((prevState) => ({\n ...prevState,\n [_key]: _value,\n }));\n };\n\n // styling params from url\n const backgroundPageStyle = searchParams.get(\"background\");\n const backgroundComponentsStyle = searchParams.get(\"components-bg\");\n const textColorComponentsStyle = searchParams.get(\"components-text-color\");\n const accentComponentsStyle = searchParams.get(\"components-accent-color\");\n\n // --- STYLING OPTIONS ---\n // valid only when the page is in Iframe\n if (isIframe()) {\n if (backgroundPageStyle) {\n document.getElementById(\n \"root\"\n ).style.background = `${backgroundPageStyle}`;\n }\n if (backgroundComponentsStyle) {\n setKeyValueStyle(\"details-bg\", backgroundComponentsStyle);\n setKeyValueStyle(\"calendar-navigation-bg\", backgroundComponentsStyle);\n setKeyValueStyle(\"calendar-day-bg\", backgroundComponentsStyle);\n setKeyValueStyle(\"timezone-bg\", backgroundComponentsStyle);\n setKeyValueStyle(\"timeslot-bg\", backgroundComponentsStyle);\n setKeyValueStyle(\"summary-bg\", backgroundComponentsStyle);\n }\n if (textColorComponentsStyle) {\n setKeyValueStyle(\"details-text-color\", textColorComponentsStyle);\n setKeyValueStyle(\n \"details-schedule-btn-text-color\",\n textColorComponentsStyle\n );\n setKeyValueStyle(\"calendar-date-text-color\", textColorComponentsStyle);\n setKeyValueStyle(\n \"calendar-navigation-text-color\",\n textColorComponentsStyle\n );\n setKeyValueStyle(\n \"calendar-weekdays-text-color\",\n textColorComponentsStyle\n );\n setKeyValueStyle(\"calendar-day-text-color\", textColorComponentsStyle);\n setKeyValueStyle(\n \"calendar-active-day-text-color\",\n textColorComponentsStyle\n );\n setKeyValueStyle(\"timezone-text-color\", textColorComponentsStyle);\n setKeyValueStyle(\"timeslot-text-color\", textColorComponentsStyle);\n setKeyValueStyle(\"summary-text-color\", textColorComponentsStyle);\n }\n if (accentComponentsStyle) {\n setKeyValueStyle(\"details-schedule-btn-bg\", accentComponentsStyle);\n setKeyValueStyle(\"calendar-active-day-bg\", accentComponentsStyle);\n setKeyValueStyle(\"calendar-active-day-border\", accentComponentsStyle);\n setKeyValueStyle(\"timezone-active-bg\", accentComponentsStyle);\n setKeyValueStyle(\"timeslot-active-text-color\", accentComponentsStyle);\n setKeyValueStyle(\"summary-active-text-color\", accentComponentsStyle);\n }\n }\n\n const getBookingInfo = (_username, _event) => {\n let body = {\n ownerUsername: _username,\n eventKey: _event,\n };\n if (isIframe()) {\n body.isEmbed = true;\n }\n if (searchParams.get(\"paid\")) {\n body.paid = searchParams.get(\"paid\");\n }\n setLoadingInfo(true);\n be.get(\"jubilant-booking\", \"/booking/details\", body, false, true)\n .then((response) => {\n // save response to state\n console.info(\"[booking][getBookingInfo] Success:\");\n console.log(response);\n setInfoResponseStatus(200);\n setLoadingInfo(false);\n setDetails(response);\n })\n .catch((error) => {\n if (error?.response?.status === 302) {\n // redirect the guest to owner public page if 302\n history.push({ pathname: `/${_username}` });\n } else {\n console.info(\"[booking][getBookingInfo] Error:\");\n console.error(error);\n setInfoResponseStatus(error?.response?.status);\n setLoadingInfo(false);\n toast.error(`Error Fetching Event Details`);\n }\n });\n };\n\n const getBookedInfo = async (_id) => {\n // this is needed to avoid summary stage when rescheduling\n // the summary triggers only when the time is set\n // it can happen to visit reschedule page with 'time' state not empty\n // (not empty time state means that i have a previous booking state)\n mode === \"reschedule\" && setGuestTime(\"\");\n\n const body = {\n bookingId: _id,\n };\n\n setLoadingInfo(true);\n await be\n .get(\"jubilant-booking\", \"/booked\", body, false, true)\n .then((response) => {\n // save response to state\n console.info(\"[booking][getRescheduleInfo] Success:\");\n console.log(response);\n setInfoResponseStatus(200);\n setLoadingInfo(false);\n setDetails(response);\n mode === \"delete\" && setGuestTime(response?.booked?.bookingDateTime);\n })\n .catch((error) => {\n console.info(\"[booking][getRescheduleInfo] Error:\");\n console.error(error);\n setInfoResponseStatus(error?.response?.status);\n setLoadingInfo(false);\n toast.error(`Error Fetching Event Details`);\n });\n };\n mode === \"reschedule\" || mode === \"delete\"\n ? getBookedInfo(urlBookingId)\n : getBookingInfo(urlUsername, urlEventType);\n }, [\n props.history,\n mode,\n urlUsername,\n urlEventType,\n urlBookingId,\n setDetails,\n ]);\n\n const stageRenderer = (_stage, _storeGuest, _loading, _mode) => {\n switch (_stage) {\n case \"details\":\n if (isDesktop) {\n return true;\n } else if (isMobile && bookingStep === 1) {\n return true;\n } else {\n return false;\n }\n case \"date\":\n if (isDesktop && (_storeGuest?.day || !_loading) && !_storeGuest.time) {\n return true;\n } else if (isMobile && bookingStep === 2) {\n return true;\n } else {\n return false;\n }\n case \"time\":\n if (isDesktop && (_storeGuest?.day || !_loading) && !_storeGuest.time) {\n return true;\n } else if (isMobile && bookingStep === 3) {\n return true;\n } else {\n return false;\n }\n case \"summary\":\n if (isDesktop && _storeGuest?.time) {\n return true;\n } else if (isMobile && bookingStep === 4) {\n return true;\n } else {\n return false;\n }\n default:\n return false;\n }\n };\n\n return (\n <div className=\"booking-container\">\n {stageRenderer(\"details\", null, null, mode) && (\n <div className=\"details-container\">\n <Details\n event={storeDetails?.event}\n owner={storeDetails?.owner}\n payment={storeDetails?.payment}\n loading={loadingInfo}\n setBookingStep={setBookingStep}\n stylingParams={stylingParams}\n />\n </div>\n )}\n <div className=\"datetime-container\">\n {stageRenderer(\"date\", storeGuest, loadingInfo, mode) && (\n <div className=\"date-timezone-container\">\n <div className=\"date-picker-container\">\n <DatePicker\n username={storeDetails?.owner?.name}\n eventType={urlEventType || storeDetails?.event?.key}\n mode={mode}\n setBookingStep={setBookingStep}\n stylingParams={stylingParams}\n />\n </div>\n\n <div className=\"timezone-picker-container\">\n <TimezonePicker mode={mode} stylingParams={stylingParams} />\n </div>\n </div>\n )}\n\n {stageRenderer(\"time\", storeGuest, loadingInfo, mode) && (\n <div className=\"time-picker-container\">\n <TimePicker\n username={storeDetails?.owner?.name}\n eventType={urlEventType || storeDetails?.event?.key}\n mode={mode}\n setBookingStep={setBookingStep}\n stylingParams={stylingParams}\n />\n </div>\n )}\n </div>\n {stageRenderer(\"summary\", storeGuest, mode) && (\n <div className=\"summary-container\">\n <Summary\n username={storeDetails?.owner?.name}\n eventType={urlEventType || storeDetails?.event?.key}\n mode={mode}\n urlBookingId={urlBookingId}\n setBookingStep={setBookingStep}\n stylingParams={stylingParams}\n />\n </div>\n )}\n <Toaster />\n </div>\n );\n}\n\nexport default Booking;\n","import {useTranslation} from 'react-i18next';\n\nconst titleStyle = {\n fontSize:35,\n fontWeight:900,\n}\nconst subtitleStyle = {\n fontSize:18,\n}\n\nfunction Header({owner,deleted,needsApproval}){\n const {t} = useTranslation(['booking']);\n return(\n <>\n {deleted \n ? <div style={titleStyle} className=\"mb-2\">{t('confirmed.header.canceled')} {owner}</div>\n : <div style={titleStyle} className=\"mb-2\">{t('confirmed.header.scheduled')} {owner}</div>\n }\n <div style={subtitleStyle}>{t('confirmed.header.subtitle')}</div>\n {needsApproval &&\n <div style={subtitleStyle}><b>{t('confirmed.header.approval.disclaimerNote')} </b>{t('confirmed.header.approval.disclaimerText')}</div>\n }\n </>\n );\n}\n\nexport default Header\n","function Name({name}){\n return(\n <div className=\"mt-4 h4\">{name}</div>\n );\n}\n\nexport default Name;\n","function Description({description}){\n return(\n <div style={{color:'var(--color-secondary)'}} className=\"mb-5\">{description}</div>\n );\n}\n\nexport default Description;\n","import {useTranslation} from 'react-i18next';\nimport spacetime from 'spacetime';\nimport { getTimeZones } from \"@vvo/tzdb\";\nimport i18n from '../../i18n';\n\nfunction getTimezoneLongName(timezone){\n let result = '';\n try{\n let timezoneData = getTimeZones().find(tz => tz?.name === timezone);\n if (timezoneData){\n result = timezoneData?.alternativeName;\n }else{\n console.info('[booking][confirmation] Error parsing timezone long name, timezoneData is not valid, returning to standard timezone country.');\n result = timezone;\n }\n }catch(e){\n console.info('[booking][confirmation] Error parsing timezone long name: ',e);\n if (timezone !== null || timezone !== undefined || timezone !== ''){\n result = timezone;\n }\n }finally{\n return result;\n }\n}\nfunction getUserLanguage(){\n return i18n.language.substring(0,2);\n}\n\nfunction isAmpm(){\n if(getUserLanguage() === \"it\"){return false}\n return true\n}\n\nfunction formatDate(date){\n // Date formatting options\n var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n // Getting date object from db\n var dateFormatted = new Date(date);\n // Format: weekday, monthname daynumber, year\n dateFormatted = dateFormatted.toLocaleDateString(getUserLanguage(), options);\n // To uppercase string\n dateFormatted = dateFormatted.toString();\n\n return dateFormatted;\n}\nfunction formatTime(date, duration){\n let time = spacetime(date, );\n let start = ''\n isAmpm() ? start = time.format('{time}') : start = time.format('{time-24}')\n time = time.add(duration,'minutes');\n let end = ''\n isAmpm() ? end = time.format('{time}') : end = time.format('{time-24}')\n return `${start} - ${end}`\n}\nfunction DateTime({datetime,duration,timezone}){\n const {t} = useTranslation(['booking']);\n const displayTime = formatTime(datetime, duration)\n const displayDate = formatDate(datetime)\n return(\n <div className=\"my-3 d-flex align-items-center\">\n \n <div className=\"event-info-icon\">\n <i className=\"fa-solid fa-clock\"></i>\n </div>\n\n <div>\n <div className=\"mx-3\" style={{fontSize:12,color:'var(--color-secondary)'}}>{t('confirmed.datetime')}</div>\n <div>\n <span className=\"mx-3 text-capitalize d-block d-sm-inline\">{displayDate},</span>\n <span className=\"ms-3 ms-sm-0 me-2 d-block d-sm-inline\">{displayTime}</span>\n <span style={{color:'var(--color-secondary)'}} className=\"ms-3 ms-sm-2 d-block d-sm-inline\">({getTimezoneLongName(timezone)})</span>\n </div>\n </div>\n \n </div>\n );\n}\n\nexport default DateTime;\n","import {useTranslation} from 'react-i18next';\nfunction Location({location}){\n const {t} = useTranslation(['booking']);\n return(\n <div className=\"my-3 d-flex align-items-center\">\n \n <div className=\"event-info-icon\">\n <i className=\"fa-solid fa-location-dot\"></i>\n </div>\n\n <div>\n <div className=\"mx-3\" style={{fontSize:12,color:'var(--color-secondary)'}}>{t('confirmed.location')}</div>\n <div className=\"d-flex align-items-center\">\n {location?.type === \"googleMeet\" && <img src=\"/app-assets/img/meet-logo.png\" alt=\"Google Meet\" width=\"20px\" height=\"20px\" className=\"ms-3\"/>}\n {location?.type === \"zoom\" && <img src=\"/app-assets/img/zoom-logo.png\" alt=\"Zoom\" width=\"20px\" height=\"20px\" className=\"ms-3\"/>}\n <span className={location?.type === \"custom\" ? \"ms-3\" : \"ms-2\"}>{location?.value}</span>\n </div>\n </div>\n\n </div>\n );\n}\n\nexport default Location;\n","import {useTranslation} from 'react-i18next';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport './event.css';\n\nconst frontendFormatter = (number) => {\n console.info('[BookingConfirmation][payment] parsing be price:');\n let result = '';\n if(number !== undefined){\n result = Number(number)/100;\n }\n console.info(result);\n return result;\n };\n\nfunction Payment({isPaidEvent,paidEvent}){\n const {t} = useTranslation(['booking']);\n return(\n <>\n {isPaidEvent && paidEvent &&\n <div className=\"my-3 d-flex align-items-center\">\n\n <div className=\"event-info-icon\">\n <i className=\"fa-solid fa-credit-card\"></i>\n </div>\n\n <div>\n <div className=\"mx-3\" style={{fontSize:12,color:'var(--color-secondary)'}}>{t('confirmed.price')}Event price</div>\n <div>\n <span className={paidEvent?.currency ? \"ms-3\" : \"\"}>{paidEvent?.currency && getSymbolFromCurrency(paidEvent?.currency) !== undefined && getSymbolFromCurrency(paidEvent?.currency)}</span>\n <span className={paidEvent?.currency ? \"ms-2\" : \"ms-3\"}>{frontendFormatter(paidEvent?.amount)}</span>\n </div>\n </div>\n \n </div>\n }\n </>\n );\n}\n\nexport default Payment;\n","import Name from './Name';\nimport Description from './Description';\nimport DateTime from './DateTime';\nimport Location from './Location';\nimport Payment from './Payment';\n\nfunction Event({name,description,datetime,duration,timezone,location,isPaidEvent,paidEvent}){\n return(\n <div className=\"text-start col col-12 col-md-10 mx-auto my-5\">\n <Name name={name}/>\n <Description description={description}/>\n <DateTime datetime={datetime} duration={duration} timezone={timezone}/>\n <Location location={location}/>\n <Payment isPaidEvent={isPaidEvent} paidEvent={paidEvent}/>\n </div>\n );\n}\n\nexport default Event;\n","import { useTranslation } from 'react-i18next';\n\nfunction Redirect({url}){\n const { t } = useTranslation(['booking']);\n const redirectionTime = 5000;\n\n if(url){\n setTimeout(() => {\n window.location.href = url;\n },redirectionTime)\n }\n\n return(\n <>\n {url && <div className=\"text-center h6 my-3\">{t('confirmed.redirect')} {url} ...</div>}\n </>\n );\n}\n\nexport default Redirect;\n","import {Button} from 'react-bootstrap';\nimport {Link} from 'react-router-dom';\nimport Login from '../../Login';\n\nfunction CTAButton({redirect, loggedIn,isIframePage}){\n return(\n <>\n {!redirect &&\n <div className=\"text-center\">\n {loggedIn && !isIframePage \n ? <Link to='/'><Button>Homepage</Button></Link>\n : <Login redirect='/'/>\n }\n </div>\n }\n </>\n );\n}\n\nexport default CTAButton;\n","import React, { useContext, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Toast from \"react-bootstrap/Toast\";\nimport UserContext from \"../UserContext\";\nimport Header from \"./Header/Header\";\nimport Event from \"./Event/Event\";\nimport Redirect from \"./Redirect/Redirect\";\nimport CTAButton from \"./CTAButton/CTAButton\";\nimport be from \"../BE\";\nimport { isIframe } from \"../Utilities/iframeUtils\";\n\nfunction BookingConfirmation(props) {\n const { t } = useTranslation([\"booking\"]);\n const [bookingData, setBookingData] = useState(props.location.state);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(0);\n const bookingId = props.match.params.bookingid;\n const [user, setUser] = useContext(UserContext);\n const isIframePage = isIframe();\n\n useEffect(() => {\n const getBookingData = () => {\n setError(0);\n setLoading(true);\n be.get(\"booking\", \"/bookingConfirmation\", { bookingId: bookingId })\n .then((response) => setBookingData(response))\n .catch((error) => setError(error?.response?.status));\n setLoading(false);\n };\n if (!bookingData) {\n getBookingData();\n }\n const titleSuffix = bookingData?.deleted ? \"canceled\" : \"scheduled\";\n document.title = `Booking Confirmation (event ${titleSuffix})`;\n try {\n window.tidioChatApi.hide();\n } catch {}\n }, [bookingData, bookingId]);\n\n return (\n <div\n style={{ maxWidth: 1080 }}\n className=\"my-4 my-md-5 mx-3 mx-lg-auto w-sm-100 w-lg-50\"\n >\n <Toast show={error !== 0}>\n <Toast.Header closeButton={false}>\n <strong className=\"me-auto\">{t(\"confirmed.error.title\")}</strong>\n </Toast.Header>\n <Toast.Body>\n {t(\"confirmed.error.subtitle\")} {error}.\n </Toast.Body>\n </Toast>\n {loading && <>Loading...</>}\n {bookingData && (\n <>\n <Header\n owner={bookingData?.owner}\n deleted={bookingData?.deleted}\n needsApproval={bookingData?.needsApproval}\n />\n <Event\n name={bookingData?.event}\n description={bookingData?.description}\n datetime={bookingData?.datetime}\n duration={bookingData?.duration}\n timezone={bookingData?.timezone}\n location={bookingData?.location}\n isPaidEvent={bookingData?.isPaidEvent}\n paidEvent={bookingData?.paidEvent}\n />\n <Redirect url={bookingData?.redirectionUrl} />\n <CTAButton\n redirect={bookingData?.redirectionUrl}\n loggedIn={user?.logged}\n isIframePage={isIframePage}\n />\n </>\n )}\n </div>\n );\n}\n\nexport default BookingConfirmation;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Nav} from 'react-bootstrap';\n\nfunction AccountTab(){\n const { t } = useTranslation(['settings']);\n return(\n <Nav.Item>\n <Nav.Link eventKey=\"account\" style={{fontSize:14}} className=\"text-center text-md-start\">\n <i style={{width:20}} className=\"fas fa-user text-center me-2\"></i>{t('account.panelName')}\n </Nav.Link>\n </Nav.Item>\n );\n}\n\nexport default AccountTab;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Nav} from 'react-bootstrap';\n\nfunction SubscriptionTab(){\n const { t } = useTranslation(['settings']);\n return(\n <Nav.Item>\n <Nav.Link eventKey=\"agency\" style={{fontSize:14}} className=\"text-center text-md-start\">\n <i style={{width:20}} className=\"fa-solid fa-user-tie text-center me-2\"></i>Agency\n </Nav.Link>\n </Nav.Item>\n );\n}\n\nexport default SubscriptionTab;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Nav} from 'react-bootstrap';\n\nfunction SubscriptionTab(){\n const { t } = useTranslation(['settings']);\n return(\n <Nav.Item>\n <Nav.Link eventKey=\"subscription\" style={{fontSize:14}} className=\"text-center text-md-start\">\n <i style={{width:20}} className=\"fas fa-money-check-alt text-center me-2\"></i>{t('subscription.panelName')}\n </Nav.Link>\n </Nav.Item>\n );\n}\n\nexport default SubscriptionTab;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Nav} from 'react-bootstrap';\n\nfunction NotificationsTab(){\n const { t } = useTranslation(['settings']);\n return(\n <Nav.Item>\n <Nav.Link eventKey=\"notifications\" style={{fontSize:14}} className=\"text-center text-md-start\">\n <i style={{width:20}} className=\"fa-solid fa-bell text-center me-2\"></i>{t('notifications.panelName')}\n </Nav.Link>\n </Nav.Item>\n );\n}\n\nexport default NotificationsTab;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {Nav} from 'react-bootstrap';\n\nfunction AvailabilitiesTab(){\n const { t } = useTranslation(['settings']);\n return(\n <Nav.Item>\n <Nav.Link eventKey=\"availabilities\" style={{fontSize:14}} className=\"text-center text-md-start\">\n <i style={{width:20}} className=\"fa-solid fa-calendar text-center me-2\"></i>Availabilities\n </Nav.Link>\n </Nav.Item>\n );\n}\n\nexport default AvailabilitiesTab;\n","import React, { useState} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport FormControl from 'react-bootstrap/FormControl';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\n\nfunction FullName(){\n const {t} = useTranslation(['settings']);\n const [fullName, setFullName] = useState(auth.getFullName());\n const [processing,setProcessing] = useState(false)\n const [status, setStatus] = useState(0);\n\n const responseFeedbackStyle = {\n fontSize:14\n }\n\n const handleChange = (event) => {\n setStatus(0);\n setFullName(event.target.value);\n }\n\n const isValidName = () => {\n const regex = /^(\\p{L}+ ?)*\\p{L}+$/gu\n return regex.test(fullName)\n }\n async function setOwnerFullName(e) {\n if(!isValidName()){\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"account\",\"/setOwnerFullName\",{name : fullName},true)\n .then((r) => setStatus(200))\n .then(async () => await auth.refresh())\n //.then(() => window.location.reload(false))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n }\n return(\n <>\n <h4>{t(\"fullName.title\")}</h4>\n <Form noValidate validated={isValidName()} onSubmit={setOwnerFullName}>\n <InputGroup hasValidation>\n <FormControl\n type=\"text\"\n name=\"full-name\"\n id=\"full-name-field\"\n aria-describedby=\"full-name\"\n value={fullName}\n onChange={handleChange}\n isInvalid={!isValidName()}\n />\n <Button disabled={processing} type='submit'>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n <span>{t(\"fullName.invalid.message\")}</span>\n <br/>\n <span>{t(\"fullName.invalid.hint\")}</span> \n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n {(status > 400 && status <= 500) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t(\"fullName.error\")}</p>\n }\n {status === 200 &&\n <p className=\"text-success\" style={responseFeedbackStyle}>{t(\"fullName.success\")}</p>\n }\n\n </>\n );\n}\n\nexport default FullName;\n","import React, {useState,useEffect} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport FormControl from 'react-bootstrap/FormControl';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction WelcomeSentence(){\n const {t} = useTranslation(['settings']);\n const [welcomeSentence, setWelcomeSentence] = useState(auth.getFullName());\n const [loadingInfo,setLoadingInfo] = useState(false)\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const [processing,setProcessing] = useState(false)\n const [status, setStatus] = useState(0);\n\n useEffect(()=>{\n const getWelcomeSentence = async () => {\n const body = {};\n setLoadingInfo(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('account-jubilant','/account/settings/sentence',body,true,true)\n .then(response => {\n console.info(\"[settings][welcomeSentence] Success: \");\n console.log(response?.status);\n setInfoResponseStatus(200);\n setLoadingInfo(false);\n setWelcomeSentence(response?.status);\n })\n .catch(error => {\n console.info(\"[settings][welcomeSentence] Unable to fetch: \");\n console.error(error);\n setInfoResponseStatus(error?.response?.status);\n setLoadingInfo(false);\n })\n })\n .catch((e) => {console.log(e)})\n }\n getWelcomeSentence();\n },[])\n\n const responseFeedbackStyle = {\n fontSize:14\n }\n\n const handleChange = (e) => {\n setStatus(0);\n let inputText = e.target.value;\n if (inputText.length > 800) {\n inputText = inputText.slice(0, 800); // Truncate the input to the maxLength\n }\n setWelcomeSentence(inputText);\n }\n\n const isValidWelcomeSentence = () => {\n //const regex = /^(\\p{L}+ ?)*\\p{L}+$/gu\n //return regex.test(welcomeSentence)\n return true;\n }\n\n async function setWelcomeSentenceBE(e) {\n if(!isValidWelcomeSentence()){\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"account-jubilant\",\"/account/settings/sentence\",{sentence : welcomeSentence},true,true)\n .then((r) => setStatus(200))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n }\n\n return(\n <>\n <h4>{t(\"bio.title\")}</h4>\n <p>{t(\"bio.subtitle\")}</p>\n <Form noValidate validated={isValidWelcomeSentence()} onSubmit={setWelcomeSentenceBE}>\n <InputGroup hasValidation>\n <FormControl\n as=\"textarea\"\n rows={3}\n type=\"text\"\n max=\"800\"\n name=\"welcome-sentence\"\n id=\"welcome-sentence-field\"\n aria-describedby=\"welcome-sentence\"\n value={loadingInfo ? \"Loading...\" : welcomeSentence}\n disabled={loadingInfo}\n onChange={handleChange}\n isInvalid={!isValidWelcomeSentence()}\n />\n <Button disabled={loadingInfo || processing} type='submit'>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n <span>{t(\"bio.invalid.message\")}</span>\n <br/>\n <span>{t(\"bio.invalid.hint\")}</span> \n </Form.Control.Feedback>\n </InputGroup>\n <div>\n <small style={{float:'right',marginRight:42,color:'var(--color-secondary)'}}>\n {welcomeSentence && welcomeSentence.length\n ? welcomeSentence.length\n : 0\n }\n /800\n </small>\n </div>\n </Form>\n {(status > 400 && status <= 500) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t(\"bio.error\")}</p>\n }\n {status === 200 &&\n <p className=\"text-success\" style={responseFeedbackStyle}>{t(\"bio.success\")}</p>\n }\n </>\n );\n}\n\nexport default WelcomeSentence;\n","import React, { useState} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport FormControl from 'react-bootstrap/FormControl';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction BookingLink(){\n const {t} = useTranslation(['settings']);\n const [userSlug, setUserSlug] = useState(auth.getName());\n const [processing,setProcessing] = useState(false)\n const [status, setStatus] = useState(0);\n\n const responseFeedbackStyle = {\n fontSize:14\n }\n\n const handleChange = (event) => {\n setStatus(0);\n setUserSlug(event.target.value);\n }\n\n const isValidSlug = () => {\n return /^[a-zA-Z0-9]+([-]?[a-zA-Z0-9])*$/.test(userSlug)\n }\n\n async function setSlug(e) {\n if(!isValidSlug()){\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n let formattedSlug = userSlug.toLowerCase();\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"account\",\"/bookingSlug\",{slug : formattedSlug},true)\n .then((r) => setStatus(200))\n .then(async () => await auth.refresh())\n //.then(() => window.location.reload(false))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n }\n\n return(\n <>\n <h4>{t('account.bookingLink')}</h4>\n <p>{t('account.bookingLinkDisclaimer')}</p>\n <Form noValidate validated={isValidSlug()} onSubmit={setSlug}>\n <InputGroup hasValidation>\n <InputGroup.Text id=\"booking-link-hostname\">calendbook.com/</InputGroup.Text>\n <FormControl\n type=\"text\"\n name=\"booking-link\"\n id=\"booking-link-field\"\n aria-describedby=\"booking-link-hostname\"\n value={userSlug}\n onChange={handleChange}\n isInvalid={!isValidSlug()}\n />\n <Button disabled={processing} type='submit'>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n <span>Please provide a valid username.</span>\n <br/>\n <span>Only letters and numbers divided by dash (-)</span> \n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n {(status > 400 && status <= 500) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>Oops, there was an error!</p>\n }\n {(status === 400) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}><b>{userSlug}</b> Already Exists!</p>\n }\n {status === 200 &&\n <p className=\"text-success\" style={responseFeedbackStyle}>Changed!</p>\n }\n </>\n );\n};\n\nexport default BookingLink;\n","import React, { useState} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport TimezonePicker from 'react-bootstrap-timezone-picker';\nimport {useHistory} from 'react-router-dom';\nimport SweetAlert from 'react-bootstrap-sweetalert';\nimport {Tab, Row, Col, Button, ButtonGroup, Dropdown, DropdownButton, Accordion} from 'react-bootstrap';\nimport ProfilePic from './ProfilePic/ProfilePic';\nimport Banner from './Banner/Banner';\nimport FullName from './FullName/FullName';\nimport WelcomeSentence from './WelcomeSentence/WelcomeSentence';\nimport BookingLink from './BookingLink/BookingLink';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport UpgradePath from '../../Utilities/UpgradePath/UpgradePath';\n\n// printing console.info logs only in localhost\nconst DEBUG = window.location.hostname === 'localhost';\n\nfunction AccountPanel(props){\n const { t, i18n } = useTranslation(['settings']);\n const history = useHistory();\n const switchLng = async (lng) => {i18n.changeLanguage(lng); await setUserLanguage(lng);}\n const [selectedTimezone, setSelectedTimezone] = useState(getUserTimezone())\n const [revokeAlert,setRevokeAlert] = useState(false)\n const [deleteAlert,setDeleteAlert] = useState(false)\n\n const rulerStyle = {\n borderColor:'var(--color-ruler)',\n marginTop:10,\n marginBottom:0\n }\n\n function getFlag(language){\n // getting only first 2 chars of the language (it, en, ...)\n language = language.toLowerCase().substring(0,2)\n if(language === 'it') return <span role=\"img\" aria-label=\"italiano\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1ee-1f1f9.png\" alt=\"italiano\" width=\"16px\"/> it</span>\n if(language === 'en') return <span role=\"img\" aria-label=\"english\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1fa-1f1f8.png\" alt=\"english\" width=\"16px\"/> en</span>\n if(language === 'es') return <span role=\"img\" aria-label=\"español\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1ea-1f1f8.png\" alt=\"español\" width=\"16px\"/> es </span>\n if(language === 'de') return <span role=\"img\" aria-label=\"deutsch\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1e9-1f1ea.png\" alt=\"deutsch\" width=\"16px\"/> de </span>\n if(language === 'fr') return <span role=\"img\" aria-label=\"francais\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1eb-1f1f7.png\" alt=\"francais\" width=\"16px\"/> fr </span>\n }\n\n async function setUserLanguage(language){\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('account',\"/setOwnerLanguage\",{language:language},true)\n .then(() => auth.refresh())\n .catch((error) => console.log(error));\n })\n .catch(() => history.push({pathname:'/login'}))\n }\n\n async function deleteAccount() {\n await auth.isAuthenticated()\n .then(async () => {\n await be.get(\"account\",\"/delete\",false,true)\n .then(response => {\n auth.logout();\n window.location.href = '/'\n })\n .catch(error => console.log(error));\n })\n .catch(() => history.push({pathname:'/login'}))\n }\n\n async function setOwnerTimezone(timezone){\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('account',\"/setOwnerTimezone\",{timezone:timezone},true)\n .then(async () => await auth.refresh())\n //.then(() => window.location.reload(false))\n .catch((error) => console.log(error));\n })\n .catch(() => history.push({pathname:'/login'}))\n }\n\n function getUserTimezone(){\n // try to get timezone from localStorage\n let tz = auth.getTimezone()\n if(tz){return tz}\n else {\n // if no timezone is found, guess it and save it to db\n console.log('timezone not found, guessing it...');\n tz = Intl.DateTimeFormat().resolvedOptions().timeZone\n setOwnerTimezone(tz)\n return tz\n }\n }\n function handleDelete(){\n setDeleteAlert(true)\n }\n\n function handleTimezoneChange(timezone){\n setOwnerTimezone(timezone)\n setSelectedTimezone(timezone)\n }\n\n return(\n <Tab.Pane eventKey=\"account\">\n\n {DEBUG && <button onClick={async () => {try{await auth.refresh()}catch(e){console.info(\"error: \",e)}}}>refresh session</button>}\n\n <Row className=\"mt-3 mb-4\">\n <Col>\n <h4>Email</h4>\n <span>{auth.getEmail()}</span>\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Row className=\"mt-3 mb-4\">\n <Col>\n <UpgradePath\n featureName=\"change-profile-pic\"\n position=\"right\"\n >\n <ProfilePic/>\n </UpgradePath>\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Row>\n <Col>\n <UpgradePath\n featureName=\"change-banner-pic\"\n position=\"right\"\n >\n <Banner/>\n </UpgradePath>\n </Col>\n </Row>\n <hr style={rulerStyle}/>\n\n <Row className=\"mt-3 mb-4\">\n <Col>\n <FullName/>\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Row className=\"mt-3 mb-4\">\n <Col>\n <WelcomeSentence/>\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Row className=\"mt-3 mb-4\">\n <Col>\n <h4>{t('account.language')}</h4>\n <span>{t('account.yourLanguage')} </span>\n <ButtonGroup className=\"d-inline text-center\">\n <DropdownButton as={ButtonGroup} variant=\"link\" title={getFlag(i18n.language)} id=\"bg-nested-dropdown\">\n <Dropdown.Item className=\"text-capitalize d-inline-flex align-items-center gap-2\" onClick={() => switchLng('it')}><span role=\"img\" aria-label=\"italiano\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1ee-1f1f9.png\" alt=\"italiano\" width=\"16px\"/></span> italiano</Dropdown.Item>\n <Dropdown.Item className=\"text-capitalize d-inline-flex align-items-center gap-2\" onClick={() => switchLng('en')}><span role=\"img\" aria-label=\"english\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1fa-1f1f8.png\" alt=\"english\" width=\"16px\"/></span> english</Dropdown.Item>\n <Dropdown.Item className=\"text-capitalize d-inline-flex align-items-center gap-2\" onClick={() => switchLng('es')}><span role=\"img\" aria-label=\"español\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1ea-1f1f8.png\" alt=\"español\" width=\"16px\"/></span> español</Dropdown.Item>\n <Dropdown.Item className=\"text-capitalize d-inline-flex align-items-center gap-2\" onClick={() => switchLng('de')}><span role=\"img\" aria-label=\"deutsch\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1e9-1f1ea.png\" alt=\"deutsch\" width=\"16px\"/></span> deutsch</Dropdown.Item>\n <Dropdown.Item className=\"text-capitalize d-inline-flex align-items-center gap-2\" onClick={() => switchLng('fr')}><span role=\"img\" aria-label=\"francais\" className=\"d-inline-flex align-items-center gap-2\"><img src=\"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/1f1eb-1f1f7.png\" alt=\"francais\" width=\"16px\"/></span> francais</Dropdown.Item>\n </DropdownButton>\n </ButtonGroup>\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Row className=\"my-4\">\n <Col>\n <h4>{t('account.timezone')}</h4>\n <div>{t('account.yourTimezone')} </div>\n <TimezonePicker\n absolute={true}\n defaultValue={selectedTimezone}\n onChange={(timezone) => {handleTimezoneChange(timezone)}}\n />\n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n \n <Row className=\"my-4\">\n <Col>\n <BookingLink/> \n </Col>\n </Row>\n\n <hr style={rulerStyle}/>\n\n <Accordion className=\"mt-4\">\n <Accordion.Item eventKey=\"0\" style={{background:'var(--color-background-1)'}}>\n <Accordion.Header className=\"text-danger\" eventKey=\"0\">\n Danger Zone\n </Accordion.Header>\n\n <Accordion.Body eventKey=\"0\">\n <Row>\n <Col xs={12} className=\"my-3\">\n <Row>\n <Col xs={12} md={8} className=\"my-auto\" style={{color:'var(--color-secondary)'}}>\n {t('account.dangerous.deleteAccountDescription')}\n </Col>\n <Col xs=\"auto\" md={4} className=\"my-2 my-md-auto float-start float-md-end\">\n <Button block variant='outline-danger' onClick={() => (handleDelete())}>{t('account.dangerous.deleteAccountButton')}</Button>\n {deleteAlert &&\n <SweetAlert\n warning\n showCancel\n confirmBtnText=\"Yes, delete my account\"\n confirmBtnStyle={{border:'none',boxShadow:'none'}}\n confirmBtnBsStyle=\"link\"\n cancelBtnBsStyle=\"primary\"\n title=\"Are you sure?\"\n onConfirm={async () => deleteAccount()}\n onCancel={() => setDeleteAlert(false)}\n reverseButtons={true}\n focusCancelBtn={true}\n style={{background:'var(--color-background-1)',color:'var(--color-text)'}}\n />\n }\n </Col>\n </Row>\n </Col>\n </Row>\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n\n </Tab.Pane>\n );\n}\n\nexport default AccountPanel;\n","import React, {useState,useEffect} from 'react';\nimport Form from 'react-bootstrap/Form';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport {Tab, Row, Col, Button, Card, Accordion} from 'react-bootstrap';\nimport {FormControl, Spinner} from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction AgencyName({loading, agency, setAgency}){\n const [processing,setProcessing] = useState(false);\n const [status,setStatus] = useState(0);\n\n async function setAgencyName(e) {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"agency\",\"/agency/settings/name\",{agencyName : agency?.agencyName},true,true,true)\n .then((r) => setStatus(200))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n\n const handleChange = (e) => {\n setStatus(0);\n let inputText = e.target.value;\n let name = e.target.name;\n setAgency({...agency , [name] : inputText});\n }\n\n return(\n <>\n <h4>Name</h4>\n <span>set here the name of your agency</span>\n <Form onSubmit={setAgencyName}>\n <InputGroup>\n <FormControl\n type=\"text\"\n name=\"agencyName\"\n id=\"agency-name-field\"\n aria-describedby=\"agency name\"\n value={loading ? \"Loading...\" : agency?.agencyName}\n disabled={loading}\n onChange={handleChange}\n />\n <Button disabled={loading || processing} type='submit'>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n </InputGroup>\n </Form>\n {(status >= 400 && status <= 500) &&\n <p className=\"text-danger\"><small>error</small></p>\n }\n {status === 200 &&\n <p className=\"text-success\"><small>success</small></p>\n }\n </>\n );\n}\n\nexport default AgencyName\n","import React, {useState,useEffect} from 'react';\nimport Form from 'react-bootstrap/Form';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport {Tab, Row, Col, Button, Card, Accordion} from 'react-bootstrap';\nimport {FormControl, Spinner} from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction AgencyName({loading, agency, setAgency}){\n const [processing,setProcessing] = useState(false);\n const [status,setStatus] = useState(0);\n\n async function setAgencyDescription(e) {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"agency\",\"/agency/settings/description\",{agencyDescription : agency?.description},true,true,true)\n .then((r) => setStatus(200))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n\n const handleChange = (e) => {\n setStatus(0);\n let inputText = e.target.value;\n let name = e.target.name;\n setAgency({...agency , [name] : inputText});\n }\n\n return(\n <>\n <h4>Description</h4>\n <span>set here the description of your agency</span>\n <Form onSubmit={setAgencyDescription}>\n <InputGroup>\n <FormControl\n type=\"text\"\n name=\"description\"\n id=\"agency-description-field\"\n aria-describedby=\"agency description\"\n value={loading ? \"Loading...\" : agency?.description}\n disabled={loading}\n onChange={handleChange}\n />\n <Button disabled={loading || processing} type='submit'>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n </InputGroup>\n </Form>\n {(status >= 400 && status <= 500) &&\n <p className=\"text-danger\"><small>error</small></p>\n }\n {status === 200 &&\n <p className=\"text-success\"><small>success</small></p>\n }\n </>\n );\n}\n\nexport default AgencyName\n","import React, {useState,useEffect} from 'react';\nimport {Tab, Row, Col} from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport ProfilePic from './AgencyPic/ProfilePic';\nimport AgencyName from './AgencyName/AgencyName';\nimport AgencyDescription from './AgencyDescription/AgencyDescription';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction AgencyPanel(){\n const [loading,setLoading] = useState(false);\n const [agency, setAgency] = useState({});\n\n useEffect(()=>{\n const getAgency = async () =>{\n setLoading(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('agency','/agency/settings',false,true,true)\n .then(response => {\n setAgency(response);\n })\n .catch(error => {\n console.info(\"[settings][agency] Unable to fetch: \");\n console.error(error);\n })\n setLoading(false);\n })\n .catch((e) => {console.log(e)})\n }\n getAgency();\n },[])\n\n return(\n <Tab.Pane eventKey=\"agency\">\n {auth.getAgencyId() \n ?\n <>\n <Row className=\"mt-3 mb-3\">\n <Col>\n <ProfilePic pic={agency?.profilePic}/>\n </Col>\n </Row>\n <Row className=\"mt-3 mb-3\">\n <Col>\n <AgencyName loading={loading} agency={agency} setAgency={setAgency}/>\n </Col>\n </Row>\n <Row className=\"mt-3 mb-3\">\n <Col>\n <AgencyDescription loading={loading} agency={agency} setAgency={setAgency}/>\n </Col>\n </Row>\n </>\n :\n <Row className=\"mt-3 mb-3\">\n <Col>\n <h4>Get an Agency</h4>\n <span>you can get an agency plan and set here your preferences</span>\n <p><a href=\"/upgrade#agency\">upgrade to get an agency</a></p>\n </Col>\n </Row>\n }\n </Tab.Pane>\n );\n}\n\nexport default AgencyPanel\n","import React, {useState} from 'react';\nimport {FormControl, Button,Spinner} from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction RedeemCode(){\n const { t } = useTranslation(['settings']);\n const [lifetimeCode,setLifetimeCode] = useState('');\n const [processing, setProcessing] = useState(false);\n const [status, setStatus] = useState(0);\n\n const handleChange = (event) => {\n setLifetimeCode(event.target.value);\n }\n\n async function redeemCode() {\n setProcessing(true);\n setStatus(0);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post(\"payments\",\"/redeem\",{redeemCode : lifetimeCode},true)\n .then((r) => setStatus(200))\n .then(() => auth.refresh())\n .then(() => window.location.reload(false))\n .catch((e) => {setStatus(e?.response?.status)})\n })\n .catch(error => console.log(error))\n setProcessing(false);\n }\n\n return(\n <>\n <h4 className=\"tw-text-xl tw-font-extrabold\">{t('subscription.redeemCode.title')}</h4>\n <p>{t('subscription.redeemCode.subtitle')}</p>\n <InputGroup>\n <FormControl\n type=\"text\"\n name=\"lifetime-code\"\n id=\"lifetime-code-input\"\n placeholder=\"xxxxx-xxxxx-xxxxx-xxxxx\"\n value={lifetimeCode}\n onChange={handleChange}\n maxLength={40}\n minLength={23}\n />\n <Button disabled={processing} onClick={redeemCode}>\n {processing \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n </InputGroup>\n {(status >= 404 && status <= 500) &&\n <p className=\"h6 text-danger\">{t('subscription.redeemCode.error')}</p>\n }\n {(status === 400) &&\n <p className=\"h6 text-danger\">{t('subscription.redeemCode.alreadyRedeemed')}</p>\n }\n {status === 200 &&\n <p className=\"h6 text-success\">{t('subscription.redeemCode.success')}</p>\n }\n </>\n );\n};\n\nexport default RedeemCode;\n","import { useTranslation } from 'react-i18next';\n\nfunction CurrentFeatures(props) {\n const { t } = useTranslation([\"upgrade\",\"common\"]);\n const check = <i className=\"fas fa-check me-2 text-primary\"></i>\n const cross = <i className=\"fas fa-times me-2 text-secondary\"></i>\n\n return(\n <>\n {Object.keys(props.features).map(feature => (\n <div key={`current-plan-${feature}`} className=\"text-start my-3\">\n {props.features[feature] ? check : cross}\n {t(`premium.features.${feature}`)}\n </div>\n ))}\n </>\n );\n}\n\nexport default CurrentFeatures;\n","import React, { useState, useEffect } from 'react';\nimport { Modal, Button, Spinner } from 'react-bootstrap';\nimport auth from '../../../Account/Auth';\nimport be from '../../../BE';\n\nconst Proration = ({ show, onHide, prorationDetails, priceId, quantity }) => {\n const [confirmLoading, setConfirmLoading] = useState(false);\n const [confirmSuccess, setConfirmSuccess] = useState(false);\n const [confirmError, setConfirmError] = useState('');\n\n // Reset states when the modal is opened\n useEffect(() => {\n if (show) {\n setConfirmLoading(false);\n setConfirmSuccess(false);\n setConfirmError('');\n }\n }, [show]);\n\n const handleConfirm = async () => {\n setConfirmLoading(true);\n setConfirmSuccess(false);\n setConfirmError('');\n\n const body = {\n priceId: prorationDetails?.priceId,\n quantity: prorationDetails?.quantity,\n };\n\n try {\n await auth.isAuthenticated();\n const response = await be.patch(\"payment-jubilant\", \"/subscriptions\", body, true, true);\n console.log(response);\n setConfirmSuccess(true);\n setTimeout(() => {\n onHide(); // Close modal after 3 seconds\n }, 3000);\n } catch (error) {\n console.error(error);\n setConfirmError('Unable to Confirm');\n } finally {\n setConfirmLoading(false);\n }\n };\n\n // Determine the button variant based on the state\n const getButtonVariant = () => {\n if (confirmError) return \"danger\"; // Red if there's an error\n if (confirmSuccess) return \"success\"; // Green if confirmed\n return \"primary\"; // Blue if not yet clicked\n };\n\n return (\n <Modal show={show} onHide={onHide} centered>\n <Modal.Header closeButton>\n <Modal.Title>Subscription Change Confirmation</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {prorationDetails && \n <div>\n {prorationDetails?.action === \"charge\"\n ?\n <div>You will be now charged <strong>{prorationDetails?.amount / 100} {prorationDetails?.currency}</strong> for the update.</div>\n :\n <div>You will now get a <strong>{prorationDetails?.amount / 100} {prorationDetails?.currency}</strong> credit for the update. The credit will be used in your next billing.</div>\n }\n {Number(prorationDetails?.quantity) &&\n <small className=\"mt-3\">Once confirmed, you will have {Number(prorationDetails?.quantity)} {Number(prorationDetails?.quantity) === 1 ? <>seat</> : <>seats</>}.</small> \n }\n </div>\n }\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={onHide} disabled={confirmLoading}>Cancel</Button>\n <Button \n variant={getButtonVariant()} \n onClick={handleConfirm} \n disabled={confirmLoading}>\n {confirmLoading ? (\n <Spinner as=\"span\" animation=\"border\" size=\"sm\" role=\"status\" aria-hidden=\"true\" />\n ) : confirmSuccess ? (\n 'Confirmed!'\n ) : (\n confirmError || 'Confirm'\n )}\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default Proration;\n\n","import React, {useState} from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Proration from './Proration';\nimport {useTranslation} from 'react-i18next';\nimport auth from '../../../Account/Auth';\nimport be from '../../../BE';\n\nconst DEBUG = (window.location.hostname === 'localhost' || window.location.hostname === 'dev.calendbook.com');\nconst TEST_YEARLY_PROFESSIONAL = \"pri_01hrc18ywbwns9mev9kqk54e03\";\nconst TEST_MONTHLY_PROFESSIONAL = \"pri_01hrc188kzp7m8x2paw3x6chwq\";\nconst LIVE_YEARLY_PROFESSIONAL = \"pri_01hrc1cdmrhmnz9t7xpz1jp15y\";\nconst LIVE_MONTHLY_PROFESSIONAL = \"pri_01hrc1bfh4v2whzkvy9d4db067\"\n\nfunction Subscription({loadingSubscription, subscription, setSubscriptionsLoading, getSubscriptions }) {\n const {t,i18n} = useTranslation(['booking'])\n const [loadingSeatsDecreasePreview,setLoadingSeatsDecreasePreview] = useState(false)\n const [loadingSeatsIncreasePreview,setLoadingSeatsIncreasePreview] = useState(false)\n const [loadingUpgradePreview, setLoadingUpgradePreview] = useState(false)\n const [showProrationModal, setShowProrationModal] = useState(false);\n const [prorationDetails, setProrationDetails] = useState(null); // New state for proration details\n\n const user={\n profilePic : auth.getPic(),\n name : auth.getFullName(),\n email : auth.getEmail(),\n plan : auth.getRole(),\n }\n\n const formatDate = (date) => {\n const getUserLanguage = () => {try{return i18n.language.substring(0,2)}catch(e){return 'en'}}\n // Date formatting options\n var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n // Getting date object from db\n var dateFormatted = new Date(date);\n // Format: weekday, monthname daynumber, year\n dateFormatted = dateFormatted.toLocaleDateString(getUserLanguage(), options);\n // To uppercase string\n dateFormatted = dateFormatted.toString();\n\n return dateFormatted;\n }\n\n const areAllFieldsPresent = (obj) => {\n return Object.values(obj).every(value => value !== null && value !== undefined);\n }\n\n const handleProrationModalClose = async () => {\n setShowProrationModal(false);\n setProrationDetails(null);\n setSubscriptionsLoading(true);\n await auth.refresh();\n await getSubscriptions();\n };\n\n const getUpgradePriceId = (_cadency) => {\n switch(_cadency){\n case \"year\":\n if(DEBUG){return TEST_YEARLY_PROFESSIONAL}\n else {return LIVE_YEARLY_PROFESSIONAL}\n break;\n case \"month\":\n if(DEBUG){return TEST_MONTHLY_PROFESSIONAL}\n else {return LIVE_MONTHLY_PROFESSIONAL}\n break;\n default:\n return LIVE_YEARLY_PROFESSIONAL\n } \n }\n\n const seatsPreview = async (_priceId,_seats,_action) => {\n const seatsNumber = Number(_seats)\n if(seatsNumber){\n let previewSeatsNumber = seatsNumber\n if(_action === \"increase\"){ \n setLoadingSeatsIncreasePreview(true)\n previewSeatsNumber += 1 \n }\n if(_action === \"decrease\"){\n setLoadingSeatsDecreasePreview(true)\n previewSeatsNumber -= 1\n } \n if(_action === \"upgrade\"){\n setLoadingUpgradePreview(true)\n } \n let body = {\n priceId: _priceId,\n quantity: previewSeatsNumber\n }\n await auth.isAuthenticated()\n .then(\n await be.get(\"payment-jubilant\",\"/subscriptions/preview\",body,true,true)\n .then((response) => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n setLoadingUpgradePreview(false)\n const updateObj = {\n action: response?.action,\n amount: response?.amount,\n currency: response?.currency_code,\n priceId: _priceId,\n quantity: previewSeatsNumber\n }\n if(areAllFieldsPresent(updateObj)){\n setProrationDetails(updateObj);\n setShowProrationModal(true);\n }\n console.log(response);\n })\n .catch(error => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n setLoadingUpgradePreview(false)\n console.log(error);\n })\n )\n .catch(error => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n setLoadingUpgradePreview(false)\n console.log(error);\n })\n }\n\n }\n\n return (\n <>\n {/* Proration Modal */}\n <Proration\n show={showProrationModal}\n onHide={handleProrationModalClose}\n prorationDetails={prorationDetails}\n />\n\n <div className=\"tw-inline-flex tw-w-full\">\n {/* Subscription */}\n <div className=\"tw-w-8/12 tw-p-5 tw-my-5 tw-mx-auto tw-rounded-lg tw-shadow-md tw-bg-white tw-flex tw-flex-col tw-gap-3\">\n {/* User Information */}\n {/*\n <div className=\"tw-flex tw-items-center tw-gap-3 tw-mb-5\">\n {user?.profilePic && (\n <img\n src={user?.profilePic}\n alt=\"Profile\"\n className=\"tw-w-12 tw-h-12 tw-rounded-full tw-object-cover\"\n />\n )}\n <div>\n <div className=\"tw-font-semibold tw-text-lg\">{user?.name}</div>\n <div className=\"tw-text-sm tw-text-gray-500\">{user?.email}</div>\n </div>\n </div>\n */}\n {/* Loading Subscription Skeleton */}\n {loadingSubscription &&\n <div className=\"tw-animate-pulse\"> Loading your Subscription... </div>\n }\n <div className=\"tw-inline-flex\">\n {/* Subscription Plan */}\n {subscription?.planName && (\n <div className=\"tw-mb-2\">\n <div>\n <h3 className=\"tw-capitalize tw-text-xl tw-font-bold\">{subscription?.planName} <i className=\"tw-text-green-600 fa-solid fa-circle-check\"></i> </h3>\n {subscription?.amount && subscription?.currency && subscription?.billingCycle && (\n <div className=\"tw-text-gray-500\">\n <small className=\"tw-capitalize\">\n {Number(subscription?.amount) / 100}{subscription?.currency}/\n {subscription?.billingCycle} × seat\n </small>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Available Seats */}\n {subscription?.availableSeats && (\n <div className=\"tw-ms-auto tw-my-auto\">\n <div className=\"tw-flex tw-items-center tw-mt-1\">\n <span class=\"tw-bg-gray-100 tw-text-gray-800 tw-text-sm tw-font-medium tw-me-2 tw-px-2.5 tw-py-1 tw-rounded dark:tw-bg-gray-700 dark:tw-text-gray-300\">\n {/*\n\n <button\n className={`tw-px-2 tw-me-1 tw-font-black tw-rounded ${\n loadingSeatsDecreasePreview ||\n loadingSeatsIncreasePreview ||\n Number(subscription?.availableSeats) === 1\n ? 'tw-cursor-not-allowed tw-opacity-50'\n : 'hover:tw-bg-gray-400 tw-cursor-pointer'\n }`}\n onClick={() =>\n seatsPreview(subscription?.priceId, subscription?.availableSeats, 'decrease')\n }\n disabled={\n loadingSeatsDecreasePreview ||\n loadingSeatsIncreasePreview ||\n Number(subscription?.availableSeats) === 1\n }\n >\n {loadingSeatsDecreasePreview ? <Spinner size=\"sm\" /> : '-'}\n </button>\n\n*/}\n\n {subscription?.availableSeats && Number(subscription?.availableSeats) === 1\n ?\n <>\n <i className=\"tw-text-xs fa-solid fa-user tw-me-0.5\"></i>{subscription?.availableSeats} Seat\n </>\n :\n <>\n <i className=\"tw-text-xs fa-solid fa-users tw-me-0.5\"></i>{subscription?.availableSeats} Seats\n </>\n }\n\n {/*\n\n <button\n className={`tw-px-2 tw-ms-1 tw-font-black tw-rounded ${\n loadingSeatsDecreasePreview || loadingSeatsIncreasePreview\n ? 'tw-cursor-not-allowed tw-opacity-50'\n : 'hover:tw-bg-gray-400 tw-cursor-pointer'\n }`}\n onClick={() =>\n seatsPreview(subscription?.priceId, subscription?.availableSeats, 'increase')\n }\n disabled={loadingSeatsDecreasePreview || loadingSeatsIncreasePreview}\n >\n {loadingSeatsIncreasePreview ? <Spinner size=\"sm\" /> : '+'}\n </button>\n */}\n\n </span>\n\n </div>\n </div>\n )}\n </div>\n\n {/* Next Payment Date */}\n {subscription?.nextPaymentDate && (\n <div className=\"\">\n <div className=\"tw-font-medium\">Next Payment</div>\n <div className=\"tw-capitalize tw-text-gray-500\">\n <small>{formatDate(subscription?.nextPaymentDate)}</small>\n </div>\n </div>\n )}\n\n {/*<hr class=\"tw-h-px tw-my-2 tw-bg-gray-400 tw-border-0 dark:tw-bg-gray-700\"/>*/}\n\n <div className=\"tw-inline-flex tw-mt-auto\">\n {/* Scheduled Cancellation or Manage Subscription */}\n {subscription?.scheduledCancelAt ? (\n <div className=\"tw-mb-4\">\n <div className=\"tw-font-medium\">Scheduled Cancellation:</div>\n <div className=\"tw-capitalize tw-text-gray-500 tw-mt-1\">\n <small>{formatDate(subscription?.scheduledCancelAt)}</small>\n </div>\n </div>\n ) : (\n <div className=\"tw-flex tw-flex-row sm:tw-flex-row tw-gap-4 tw-mt-4 tw-justify-start\">\n {subscription?.cancelSubscriptionUrl && (\n <a\n href={subscription?.cancelSubscriptionUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"tw-py-2 tw-px-4 tw-text-sm tw-rounded tw-bg-gray-400 tw-text-white tw-font-semibold hover:tw-bg-gray-600 tw-transition-colors tw-text-center\"\n >\n Cancel Subscription\n </a>\n )}\n {subscription?.updatePaymentMethodUrl && (\n <a\n href={subscription?.updatePaymentMethodUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"tw-py-2 tw-px-4 tw-text-sm tw-rounded tw-bg-black tw-text-white tw-font-semibold hover:tw-bg-primary-500 tw-transition-colors tw-text-center\"\n >\n Update Payment Method\n </a>\n )}\n </div>\n )}\n\n {/* Customer Portal */}\n <div className=\"tw-inline-flex tw-text-xs tw-ms-auto tw-items-end\">\n <a href=\"https://customer-portal.paddle.com/cpl_01hg8rb7vrvnqgm34sry730a82\" target=\"_blank\" rel=\"nooperner noreferrer\"> Invoices on Customer Portal</a>\n <span>\n <svg className=\"tw-ms-1 tw-w-4 tw-h-4 tw-my-auto\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" viewBox=\"0 0 24 24\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 14v4.833A1.166 1.166 0 0 1 16.833 20H5.167A1.167 1.167 0 0 1 4 18.833V7.167A1.166 1.166 0 0 1 5.167 6h4.618m4.447-2H20v5.768m-7.889 2.121 7.778-7.778\"/>\n </svg>\n </span>\n </div>\n </div>\n\n </div>\n\n {!loadingSubscription && user?.plan === \"premium\" &&\n <div className=\"tw-w-4/12 tw-p-5 tw-my-5 tw-ms-3 tw-rounded-lg tw-shadow-md tw-bg-gradient-to-b tw-from-[#ff5828] tw-to-[#993518] tw-flex tw-flex-col tw-gap-3\">\n <h3 className=\"tw-text-xl tw-font-bold tw-text-white\">Professional Plan</h3>\n <ul className=\"tw-my-2 lg:tw-mb-0 tw-space-y-4 tw-text-sm\">\n <li className=\"tw-flex tw-space-x-2.5\">\n {/* Icon */}\n <svg className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"tw-leading-tight tw-text-gray-100\">Zapier & Webhooks</span>\n </li>\n <li className=\"tw-flex tw-space-x-2.5\">\n {/* Icon */}\n <svg className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"tw-leading-tight tw-text-gray-100\">Advanced Availability</span>\n </li>\n <li className=\"tw-flex tw-space-x-2.5\">\n {/* Icon */}\n <svg className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"tw-leading-tight tw-text-gray-100\">Accept/Reject Schedulings</span>\n </li>\n <li className=\"tw-flex tw-space-x-2.5\">\n {/* Icon */}\n <svg className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"tw-leading-tight tw-text-gray-100\">Whatsapp & Telegram Notifications</span>\n </li>\n <li className=\"tw-flex tw-space-x-2.5\">\n {/* Icon */}\n <svg className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-white\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"tw-leading-tight tw-text-gray-100\">Unlimited Leads</span>\n </li>\n </ul>\n <button\n className=\"tw-mt-2 tw-py-2 tw-px-4 tw-text-sm tw-rounded tw-bg-black tw-text-white hover:tw-text-black tw-ease-in tw-font-semibold hover:tw-bg-white disabled:tw-text-gray-500 disabled:tw-bg-gray-700 tw-transition-colors tw-duration-300 tw-flex tw-items-center tw-justify-between\"\n onClick={() => seatsPreview(getUpgradePriceId(subscription?.billingCycle), subscription?.availableSeats, 'upgrade')}\n disabled={loadingUpgradePreview}\n >\n <div className=\"tw-flex tw-items-center\">\n {loadingUpgradePreview && <Spinner size=\"sm\" />}\n </div>\n <div className=\"tw-flex tw-grow tw-justify-center\">\n <div>\n {subscription?.billingCycle === \"year\" &&\n <>\n <span>Upgrade at $5/mo</span>\n <div>\n <small>billed annually</small>\n </div>\n </>\n }\n {subscription?.billingCycle === \"month\" &&\n <>\n <span>Upgrade at $10/mo</span>\n <div>\n <small>billed monthly</small>\n </div>\n </>\n }\n </div>\n </div>\n </button>\n </div>\n }\n </div>\n </>\n );\n}\n\nexport default Subscription;\n","import React, { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { initializePaddle } from \"@paddle/paddle-js\";\nimport { useTranslation } from \"react-i18next\";\nimport { Tab, Row, Col, Button } from \"react-bootstrap\";\nimport ToggleButton from \"react-bootstrap/ToggleButton\";\nimport ToggleButtonGroup from \"react-bootstrap/ToggleButtonGroup\";\nimport RedeemCode from \"./RedeemCode/RedeemCode\";\nimport CurrentFeatures from \"./CurrentFeatures/CurrentFeatures\";\nimport Subscription from \"./Subscription/Subscription\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nconst DEBUG =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"dev.calendbook.com\";\nconst TEST_TOKEN = \"test_2ee936d492e84b8c70ff282cacf\";\nconst LIVE_TOKEN = \"live_f9e2fd79f6f00aa1b9f8a4f55ec\";\n\nconst TEST_YEARLY_PREMIUM = \"pri_01hnd8w440pst7jaenb4pxjeap\";\nconst TEST_MONTHLY_PREMIUM = \"pri_01hnd8x6tzhbd13qw6d7tdkyn5\";\nconst LIVE_YEARLY_PREMIUM = \"pri_01hg8swx54tmf43w05cpgk97cc\";\nconst LIVE_MONTHLY_PREMIUM = \"pri_01hg8sw20z338km4mns1n08bxg\";\n\nconst TEST_YEARLY_PROFESSIONAL = \"pri_01hrc18ywbwns9mev9kqk54e03\";\nconst TEST_MONTHLY_PROFESSIONAL = \"pri_01hrc188kzp7m8x2paw3x6chwq\";\nconst LIVE_YEARLY_PROFESSIONAL = \"pri_01hrc1cdmrhmnz9t7xpz1jp15y\";\nconst LIVE_MONTHLY_PROFESSIONAL = \"pri_01hrc1bfh4v2whzkvy9d4db067\";\n\nconst TEST_YEARLY_AGENCY_TIER_1 = \"pri_01hpppgpswcs3m0bgsv6y4s5w7\";\nconst TEST_YEARLY_AGENCY_TIER_2 = \"pri_01hpppj8gv63sqrpfy0m903y54\";\nconst TEST_YEARLY_AGENCY_TIER_3 = \"pri_01hpppmdaz4wfanashe34nrqn0\";\nconst TEST_MONTHLY_AGENCY_TIER_1 = \"pri_01hpppfymkva8vdrkdc9txpzya\";\nconst TEST_MONTHLY_AGENCY_TIER_2 = \"pri_01hppphhxptgqa11m9rqyfbte9\";\nconst TEST_MONTHLY_AGENCY_TIER_3 = \"pri_01hpppkttbrjt8trn5jmy73ks1\";\nconst LIVE_YEARLY_AGENCY_TIER_1 = \"pri_01hprnktqvvgf6akr4h7sb5nmg\";\nconst LIVE_YEARLY_AGENCY_TIER_2 = \"pri_01hprnpk590pqkqc02jzhga165\";\nconst LIVE_YEARLY_AGENCY_TIER_3 = \"pri_01hprns7fxfacgn6mkjv4qwz2h\";\nconst LIVE_MONTHLY_AGENCY_TIER_1 = \"pri_01hprnjbazy7hftyh1cxvx8qtp\";\nconst LIVE_MONTHLY_AGENCY_TIER_2 = \"pri_01hprnnkjrcgt8mv7vy8s4fp5k\";\nconst LIVE_MONTHLY_AGENCY_TIER_3 = \"pri_01hprnr0jz2q72fqgn1z2wg0ww\";\n\nconst rulerStyle = {\n borderColor: \"var(--color-ruler)\",\n marginTop: 10,\n marginBottom: 0,\n};\n\nconst sleep = (ms) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nfunction SubscriptionPanel() {\n const PricingCard = window.calendbookUI.PricingCard;\n const Button = window.calendbookUI.Button;\n\n const history = useHistory();\n\n const { i18n, t } = useTranslation([\"settings\", \"common\"]);\n const [subscription, setSubscription] = useState({});\n const [paddle, setPaddle] = useState();\n const [customerId, setCustomerId] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [pricingCadency, setPricingCadency] = useState(\"yearly\");\n const userPlan = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n\n const getUserLanguage = () => {\n try {\n return i18n.language.substring(0, 2);\n } catch (e) {\n return \"en\";\n }\n };\n\n const getSubscriptions = async () => {\n setLoading(true);\n\n function checkForAdditionalFields(\n response,\n reference = { customerId: null }\n ) {\n for (let key in response) {\n if (!(key in reference)) {\n console.log(`[upgrade][subscription] extra fields found`);\n return true;\n }\n }\n return false;\n }\n\n try {\n await auth.isAuthenticated();\n const response = await be.get(\n \"payment-jubilant\",\n \"/subscriptions\",\n false,\n true,\n true\n );\n setLoading(false);\n console.log(response);\n if (response?.customerId) {\n setCustomerId(response?.customerId);\n }\n if (checkForAdditionalFields(response, { customerId: null })) {\n setSubscription(response);\n }\n } catch (error) {\n setLoading(false);\n console.log(error);\n }\n };\n\n const sendAbandonedCartEvent = async (body) => {\n try {\n await auth.isAuthenticated();\n const response = await be.post(\n \"payment-jubilant\",\n \"/payments/abandoned\",\n body,\n true,\n true\n );\n console.log(\n \"[upgrade][subscription] sent abandoned cart event: \",\n response\n );\n } catch (error) {\n console.log(error);\n }\n };\n\n var createNestedObject = function (base, names) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for (var i = 0; i < names.length; i++) {\n base = base[names[i]] = base[names[i]] || {};\n }\n };\n\n useEffect(() => {\n initializePaddle({\n environment: DEBUG ? \"sandbox\" : \"production\",\n checkout: {\n settings: {\n displayMode: \"overlay\",\n theme: \"light\",\n locale: getUserLanguage(),\n },\n },\n token: DEBUG ? TEST_TOKEN : LIVE_TOKEN,\n eventCallback: async function (data) {\n switch (data.name) {\n case \"checkout.loaded\":\n console.log(\"Checkout opened\");\n break;\n case \"checkout.customer.created\":\n console.log(\"Customer created\");\n break;\n case \"checkout.closed\":\n const status = data?.data?.status;\n if (status === \"draft\") {\n const body = {\n productId: data?.data?.items[0]?.product?.id,\n priceId: data?.data?.items[0]?.price_id,\n };\n await sendAbandonedCartEvent(body);\n }\n break;\n case \"checkout.completed\":\n console.log(\n \"[upgrade] checkout completed, updating user profile...\"\n );\n setLoading(true);\n await sleep(5000);\n await auth.refresh();\n //await getSubscriptions();\n history.push(\"/settings#subscription\");\n history.go(0);\n break;\n default:\n }\n },\n }).then((paddleInstance) => {\n if (paddleInstance) {\n setPaddle(paddleInstance);\n }\n });\n\n if (auth.sessionExist()) {\n getSubscriptions();\n }\n }, []);\n\n const openCheckout = (product) => {\n const getSubscriptionPriceId = (_product) => {\n if (_product === \"premium\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_PREMIUM;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_PREMIUM;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_PREMIUM;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_PREMIUM;\n }\n }\n }\n if (_product === \"professional\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_PROFESSIONAL;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_PROFESSIONAL;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_PROFESSIONAL;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_PROFESSIONAL;\n }\n }\n }\n if (_product === \"agency-tier-1\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_1;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_1;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_1;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_1;\n }\n }\n }\n if (_product === \"agency-tier-2\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_2;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_2;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_2;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_2;\n }\n }\n }\n if (_product === \"agency-tier-3\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_3;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_3;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_3;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_3;\n }\n }\n }\n };\n let checkoutObj = {\n items: [\n {\n priceId: getSubscriptionPriceId(product),\n quantity: 1,\n },\n ],\n customData: {\n tolt_referral: window.tolt_referral,\n },\n };\n if (customerId) {\n createNestedObject(checkoutObj, [\"customer\", \"id\"]);\n checkoutObj[\"customer\"][\"id\"] = customerId;\n } else if (auth.getEmail()) {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = auth.getEmail();\n } else {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = \"your@email.com\";\n }\n paddle?.Checkout.open(checkoutObj);\n };\n\n return (\n <Tab.Pane eventKey=\"subscription\">\n {(auth.isTrial() || auth.isFree() || auth.isLifetime()) && (\n <Row className=\"mb-4\">\n <Col xs={12} md={12}>\n <div>\n <div className=\"tw-text-3xl tw-font-extrabold tw-leading-tight tw-racking-tight\">\n {\" \"}\n You are a {userPlan} user{\" \"}\n </div>\n <p className=\"tw-mt-2 tw-text-base tw-font-normal tw-text-gray-500\">\n Get the best offer from calendbook with Premium & Professional\n Plan!\n </p>\n </div>\n\n <div className=\"tw-my-20 tw-mx-auto tw-w-max tw-bg-gray-200 tw-p-0.5 tw-gap-0.5 tw-rounded-full tw-flex tw-flex-row\">\n <Button\n buttonText=\"Monthly\"\n color={pricingCadency === \"monthly\" ? \"dark\" : \"alternative\"}\n onClick={() => setPricingCadency(\"monthly\")}\n />\n <Button\n buttonText=\"Yearly (50% Off)\"\n color={pricingCadency === \"yearly\" ? \"dark\" : \"alternative\"}\n onClick={() => setPricingCadency(\"yearly\")}\n />\n </div>\n\n <div className=\"tw-my-10 tw-items-center md:tw-items-stretch tw-flex tw-flex-col md:tw-flex-row tw-gap-8\">\n <PricingCard\n variant=\"secondary\"\n plan=\"Premium\"\n description=\"For Premium users\"\n currency={i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"}\n price={pricingCadency === \"monthly\" ? \"5\" : \"2\"}\n cadency=\"month\"\n callback={() => openCheckout(\"premium\")}\n features={[\n \"Everything in Free Plan plus...\",\n \"Unlimited Event Types\",\n \"10 Calendar Connections\",\n \"Zoom Integration\",\n \"Questions to Qualify Leads\",\n \"Send email from your Gmail\",\n ]}\n />\n <PricingCard\n variant=\"primary\"\n plan=\"Professional\"\n description=\"For Advanced users\"\n currency={i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"}\n price={pricingCadency === \"monthly\" ? \"10\" : \"5\"}\n cadency=\"month\"\n callback={() => openCheckout(\"professional\")}\n features={[\n \"Everything in Premium Plan plus...\",\n \"Zapier & Webhook Integrations\",\n \"Advanced Availability\",\n \"Company Branding\",\n \"Accept/Reject Schedulings\",\n \"Whatsapp & Telegram Notifications\",\n ]}\n />\n </div>\n\n <RedeemCode />\n </Col>\n </Row>\n )}\n\n {(userPlan === \"professional\" || userPlan === \"premium\") && (\n <Row>\n <Col>\n <Subscription\n loadingSubscription={loading}\n subscription={subscription}\n setSubscriptionsLoading={setLoading}\n getSubscriptions={getSubscriptions}\n />\n </Col>\n </Row>\n )}\n </Tab.Pane>\n );\n}\n\nexport default SubscriptionPanel;\n","import { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Tab from 'react-bootstrap/Tab';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nconst WhatsappIcon = () => (<i className=\"fa-brands fa-whatsapp me-2\" style={{fontSize:31,color:'#25D366'}}> </i>);\nconst TelegramIcon = () => (<i className=\"fa-brands fa-telegram me-2\" style={{fontSize:28,color:'#0088cc'}}> </i>);\nconst EmailIcon = () => (<i className=\"fa-solid fa-envelope me-2\" style={{fontSize:27,color:'var(--color-text)'}}> </i>);\n\nconst editButtonStyle = {\n fontSize:12,\n padding:'0 5px',\n border:'1px solid var(--color-primary)',\n color:'var(--color-text)',\n background:'var(--color-background-1)',\n borderRadius:5,\n verticalAlign:'text-bottom',\n}\n\n\n\nfunction NotificationsPanel(){\n const history = useHistory();\n const { t } = useTranslation(['settings']);\n const [loadingInfo, setLoadingInfo] = useState(false);\n const [notifications, setNotifications] = useState(false);\nconst getNotifications = async () => {\n const body = {};\n setLoadingInfo(true);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('account-jubilant','/settings/notifications',body,true,true)\n .then(response => {\n setNotifications(response);\n })\n .catch(error => {\n console.error(\"[settings][notifications] network error while retrieving info:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[settings][notifications] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[settings][notifications] functional error while retrieving info:\",error);\n }finally{\n setLoadingInfo(false);\n }\n }\n useEffect(()=>{\n \n getNotifications();\n },[]) \n\nconst saveNotification = async (_provider) => {\n try{\n const body = {provider:_provider};\n setLoadingInfo(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('account-jubilant','/settings/notifications',body,true,true)\n .then(response => {\n getNotifications()\n })\n .catch(error => {\n console.error(\"[settings][notifications] network error while retrieving info:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[settings][notifications] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[settings][notifications] functional error while retrieving info:\",error);\n setLoadingInfo(false);\n }finally{\n }\n }\n\n\n const Action = ({provider}) => {\n switch(provider){\n case 'whatsapp':\n return <button style={editButtonStyle} onClick={(e) => {e.preventDefault();history.push('integrations#whatsapp')}}>{t('notifications.editConnection')}</button>\n case 'telegram':\n return <button style={editButtonStyle} onClick={(e) => {e.preventDefault();history.push('integrations#telegram')}}>{t('notifications.editConnection')}</button>\n case 'email':\n return null;\n default:\n return null;\n }\n }\n\n const Label = ({value,icon,text,action}) =>(\n <div style={{marginLeft:15,width:350,display:'flex',alignItems:'center'}}>\n <div>{icon}</div>\n <div>\n <div style={{fontWeight:700}}>{text}</div>\n <div style={{fontSize:14, color:'var(--color-secondary)'}}>{value || t('notifications.notConnected')}</div>\n </div>\n <div style={{display:'flex',width:120,justifyContent:'end',marginLeft:'auto'}}>{action}</div>\n </div>\n )\n\n return(\n\n <Tab.Pane eventKey=\"notifications\">\n <Form className=\"d-flex flex-column\">\n <Form.Check\n className=\"my-3 d-inline-flex align-items-center\"\n name=\"notifications\"\n type=\"radio\"\n label={<Label value={notifications?.whatsapp?.value} icon={<WhatsappIcon/>} text={\"Whatsapp\"} action={<Action provider='whatsapp'/>}/>}\n disabled={!notifications?.whatsapp?.value || loadingInfo}\n checked={notifications?.whatsapp?.broker}\n onChange={(e) => saveNotification('whatsapp')}\n />\n <Form.Check\n className=\"my-3 d-inline-flex align-items-center\"\n name=\"notifications\"\n type=\"radio\"\n label={<Label value={notifications?.telegram?.value} icon={<TelegramIcon/>} text={\"Telegram\"} action={<Action provider='telegram'/>}/>}\n disabled={!notifications?.telegram?.value || loadingInfo}\n checked={notifications?.telegram?.broker}\n onChange={(e) => saveNotification('telegram')}\n />\n <Form.Check\n className=\"my-3 d-inline-flex align-items-center\"\n name=\"notifications\"\n type=\"radio\"\n label={<Label value={notifications?.email?.value} icon={<EmailIcon/>} text={\"Email\"} action={<Action provider='email'/>}/>}\n disabled={!notifications?.email?.value || loadingInfo}\n checked={notifications?.email?.broker}\n onChange={(e) => saveNotification('email')}\n />\n </Form>\n </Tab.Pane>\n );\n}\n\nexport default NotificationsPanel;\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\n\nfunction DayCheckbox ({day,availability,toggleDayAvailability,setDayRange}) {\n const {t} = useTranslation(['eventCreator']);\n\n return(\n <Form.Check\n name={day}\n id={day}\n value={day}\n type=\"checkbox\"\n label={t(`availability.days.${day}`)}\n checked={availability.days[day]}\n onChange={() => {\n toggleDayAvailability(day);\n // if availability check is becoming true but there are no ranges\n if (availability.ranges[day].length === 0 && availability.days[day] === true){\n // add new range for that day\n let index = availability.ranges[day].length\n let interval = {start:'09:00', end:'19:00'}\n // interval = utils.addIntervalCheck(availability,day,index,interval)\n setDayRange(day,index,interval)\n }}\n }\n />\n );\n}\n\nexport default DayCheckbox;\n","import React from 'react';\nimport TimeField from 'react-simple-timefield';\nimport {Row,Col} from 'react-bootstrap';\n\nfunction Range({availability,setDayRange,index,wday,disabled,rangeState,timeFormat}){\n\n return(\n <> \n <Row className=\"h-100 py-1\" style={{lineHeight:\"34px\"}}>\n <Col xs={5}>\n <TimeField\n key={`range-start-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['start']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = time\n let end = interval.end\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n\n <span className=\"text-center mx-0 col-1\"> - </span>\n\n <Col xs={5}>\n <TimeField\n key={`range-end-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['end']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = interval.start\n let end = time\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n </Row>\n </>\n );\n}\n\nexport default Range;\n","import {useTranslation} from 'react-i18next';\nimport DayCheckbox from './DayCheckbox';\nimport Range from './Range';\nimport {Form, Row, Col, Button} from 'react-bootstrap';\n\nfunction WeekView({availability, toggleDayAvailability, setDayRange, deleteDayRange}){\n var days = ['mon','tue','wed','thu','fri','sat','sun']\n const timeFormat = \"24\";\n const {t} = useTranslation(['eventCreator']);\n return(\n <Form.Group controlId=\"ranges\">\n {\n days.map((day,dayIndex) => (\n <Row key={`availabilities-${day}`} className=\"mx-2\">\n <Col xs={12} md={2} className={availability.ranges[day].length <= 1 ? \"mt-1 py-2 my-md-auto\" : \"mt-1 py-2\"}>\n <DayCheckbox day={day} availability={availability} toggleDayAvailability={toggleDayAvailability} setDayRange={setDayRange}/>\n </Col>\n\n <Col className=\"my-auto\">\n {availability.ranges[day].length === 0 && \n <Row>\n <Col className=\"my-2 text-muted\">\n {t(`availability.unavailable`)}\n </Col>\n </Row>\n }\n\n {availability.ranges[day].map((range,rangeIndex) => (\n <Row key={`ranges-${rangeIndex}-${day}`} id={`${range.start}-${range.end}-${day}`}>\n <Col>\n <Range availability={availability} setDayRange={setDayRange} wday={day} index={rangeIndex} rangeState={availability.ranges[day][rangeIndex]} disabled={!availability.days[day]} timeFormat={timeFormat}/>\n </Col>\n <Col xs={2} className=\"ps-0 my-auto\">\n <div className=\"d-grid gap-2\">\n <Button style={{border : \"none\", background : \"transparent\", color : \"var(--colot-text)\"}} onClick={() => {deleteDayRange(day,rangeIndex)}}>\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </div>\n </Col>\n </Row>\n ))}\n </Col>\n <Col xs={2} className={availability.ranges[day].length <= 1 ? \"my-auto\" : \"\"} style={availability.ranges[day].length > 1 ? {marginTop:\"6px\"} : {}}>\n <div className=\"d-grid gap-2\">\n <Button className=\"text-start\" style={{border : \"none\", background : \"transparent\", color : \"var(--color-text)\"}} onClick={() => { \n let interval = {start:\"08:00\",end:\"19:00\"};\n let index = availability.ranges[day].length;\n // interval = utils.addIntervalCheck(availability,day,index,interval);\n setDayRange(day,index,interval);\n }}>\n <i className=\"fas fa-plus\"></i>\n </Button>\n </div>\n </Col>\n {dayIndex < 6 &&\n <Col xs={12}>\n <hr style={{color:\"var(--color-ruler)\", backgroundColor:\"var(--color-ruler)\", height: \"2\", width:\"100%\"}}/>\n </Col>\n }\n </Row>\n ))}\n </Form.Group>\n );\n}\n\nexport default WeekView;\n","import { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Hop({ availability, setTimeslotHop }) {\n const { t } = useTranslation([\"eventCreator\"]);\n\n return (\n <Form.Group as={Row} controlId=\"event-booking-limit\" className=\"mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-booking-limit\" />\n <br />\n {t(\"availability.timeslotHop.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.timeslotHop.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Select\n className=\"dark-field text-center\"\n aria-label=\"Booking Limit Unit\"\n value={availability?.hop || \"15\"}\n onChange={(e) => setTimeslotHop(e.target.value)}\n >\n <option value=\"15\">15</option>\n <option value=\"30\">30</option>\n <option value=\"60\">60</option>\n </Form.Select>\n </Col>\n <Col\n xs={2}\n className=\"d-flex justify-content-center my-auto\"\n style={{ color: \"var(--color-secondary)\" }}\n >\n {t(\"availability.timeslotHop.minutes\")}\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Hop;\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case \"day\":\n return \"0\";\n case \"week\":\n return \"0\";\n case \"month\":\n return \"0\";\n default:\n return \"0\";\n }\n};\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case \"day\":\n return \"100\";\n case \"week\":\n return \"200\";\n case \"month\":\n return \"500\";\n default:\n return \"0\";\n }\n};\n\nconst getUnit = () => {\n return document.getElementById(`booking-limit-unit`)?.value;\n};\n\nfunction Notice({\n availability,\n setBookingLimitQuantity,\n setBookingLimitUnit,\n}) {\n const { t } = useTranslation([\"eventCreator\"]);\n const [minQuantity, setMinQuantity] = useState(\"0\");\n const [maxQuantity, setMaxQuantity] = useState(\"0\");\n\n useEffect(() => {\n // setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n }, []);\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === \"\" ? minQuantity : inputValue;\n setBookingLimitQuantity(valueToSet);\n setBookingLimitUnit(document.getElementById(\"booking-limit-unit\").value);\n };\n\n const disableBookingLimit = () => {\n setBookingLimitQuantity(\"0\");\n setBookingLimitUnit(\"day\");\n };\n\n return (\n <Form.Group as={Row} controlId=\"event-booking-limit\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-booking-limit\" />\n <br />\n {t(\"availability.bookingLimit.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.bookingLimit.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Control\n id=\"booking-limit-quantity\"\n className=\"dark-field text-center\"\n name=\"bookingLimit-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.bookingLimit?.quantity || 0}\n onChange={handleInputChange}\n />\n </Col>\n <Col\n xs={2}\n className=\"d-flex justify-content-center my-auto\"\n style={{ color: \"var(--color-secondary)\" }}\n >\n {t(\"availability.bookingLimit.per\")}\n </Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"booking-limit-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Booking Limit Unit\"\n value={availability?.bookingLimit?.unit || \"day\"}\n onChange={(e) => {\n setBookingLimitUnit(e.target.value);\n setBookingLimitQuantity(\n document.getElementById(\"booking-limit-quantity\").value\n );\n // setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}\n >\n <option value=\"day\">\n {t(\"availability.bookingLimit.units.day\")}\n </option>\n <option value=\"week\">\n {t(\"availability.bookingLimit.units.week\")}\n </option>\n <option value=\"month\">\n {t(\"availability.bookingLimit.units.month\")}\n </option>\n </Form.Select>\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableBookingLimit}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Notice;\n","import { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"0\";\n case \"hours\":\n return \"1\";\n case \"days\":\n return \"1\";\n default:\n return \"0\";\n }\n};\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case \"minutes\":\n return \"59\";\n case \"hours\":\n return \"23\";\n case \"days\":\n return \"30\";\n default:\n return \"0\";\n }\n};\n\nconst getUnit = () => {\n return document.getElementById(`notice-unit`)?.value;\n};\n\nfunction Notice({ availability, setNoticeQuantity, setNoticeUnit }) {\n const { t } = useTranslation([\"eventCreator\"]);\n const [minQuantity, setMinQuantity] = useState(\"0\");\n const [maxQuantity, setMaxQuantity] = useState(\"0\");\n\n useEffect(() => {\n // setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n }, []);\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === \"\" ? minQuantity : inputValue;\n setNoticeQuantity(valueToSet);\n setNoticeUnit(document.getElementById(\"notice-unit\").value);\n };\n\n const disableNotice = () => {\n setNoticeQuantity(\"0\");\n setNoticeUnit(\"minutes\");\n };\n\n return (\n <Form.Group as={Row} controlId=\"event-notice\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-notice\" />\n <br />\n {t(\"availability.notice.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.notice.hint\")}\n </small>\n </Row>\n <Col xs={6}>\n <Form.Control\n id=\"notice-quantity\"\n className=\"dark-field text-center\"\n name=\"notice-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.notice?.quantity || minQuantity}\n onChange={handleInputChange}\n />\n </Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"notice-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Notice Unit\"\n value={availability?.notice?.unit || \"minutes\"}\n onChange={(e) => {\n setNoticeUnit(e.target.value);\n setNoticeQuantity(\n document.getElementById(\"notice-quantity\").value\n );\n // setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}\n >\n <option value=\"minutes\">\n {t(\"availability.notice.units.minutes\")}\n </option>\n <option value=\"hours\">\n {t(\"availability.notice.units.hours\")}\n </option>\n <option value=\"days\">\n {t(\"availability.notice.units.days\")}\n </option>\n </Form.Select>\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableNotice}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Notice;\n","import { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction LastAvailable({\n availability,\n setLastAvailabilityDate,\n setLastAvailabilityTime,\n}) {\n const { t } = useTranslation([\"eventCreator\"]);\n\n const disableLastAvailableDate = () => {\n setLastAvailabilityDate(\"\");\n setLastAvailabilityTime(\"00:00\");\n };\n\n return (\n <Form.Group\n as={Row}\n controlId=\"event-last-availability\"\n className=\"mt-3 mx-2\"\n >\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-last-availability\" />\n <br />\n {t(\"availability.lastAvailability.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.lastAvailability.hint\")}\n </small>\n </Row>\n <Col xs={6}>\n <Form.Control\n className=\"dark-field text-center\"\n name=\"last-availability-date\"\n type=\"date\"\n value={availability?.lastAvailability?.date || \"\"}\n onChange={(e) => setLastAvailabilityDate(e.target.value)}\n />\n </Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Control\n className=\"dark-field text-center\"\n name=\"last-availability-time\"\n type=\"time\"\n value={availability?.lastAvailability?.time || \"\"}\n onChange={(e) => setLastAvailabilityTime(e.target.value)}\n />\n <Button\n style={{\n border: \"none\",\n background: \"transparent\",\n color: \"var(--color-text)\",\n }}\n onClick={disableLastAvailableDate}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default LastAvailable;\n","import { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction LastAvailable({ availability, setApproval }) {\n const { t } = useTranslation([\"eventCreator\"]);\n\n return (\n <Form.Group as={Row} controlId=\"event-approval\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-approval\" />\n <br />\n {t(\"availability.approval.title\")}\n </Form.Label>\n <Col sm={10} lg={6}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.approval.hint\")}\n </small>\n </Row>\n <Col>\n <Form.Check\n name=\"event-approval-checkbox\"\n type=\"checkbox\"\n label={t(\"availability.approval.label\")}\n checked={availability?.needsApproval || false}\n onChange={(e) => setApproval(e.target.checked)}\n />\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default LastAvailable;\n","import { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport auth from \"../../../Account/Auth\";\nimport be from \"../../../BE\";\nimport UpgradeBadge from \"../../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Calendar({ availability, setCalendar }) {\n const history = useHistory();\n const { t } = useTranslation([\"eventCreator\"]);\n const [availableCalendars, setAvailableCalendars] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const getAvailableCalendars = async () => {\n setLoading(true);\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.get(\"jubilant-events\", \"/events/calendars\", false, true, true)\n .then((response) => {\n console.log(\"[etype-creator][calendars] calendars fetched\");\n setAvailableCalendars(response);\n if (!availability?.calendar && availableCalendars.length) {\n setCalendar(response[0]);\n }\n })\n .catch((error) => {\n console.error(\n \"[etype-creator][calendars] network error while fetching calendars:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[etype-creator][calendars] authentication error while fetching calendars:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[etype-creator][calendars] functional error while fetching calendars:\",\n error\n );\n } finally {\n setLoading(false);\n }\n };\n\n getAvailableCalendars();\n }, []);\n\n return (\n <Form.Group as={Row} controlId=\"event-calendar\" className=\"mt-3 mx-2\">\n <Form.Label column sm={2} className=\"mt-auto\">\n <UpgradeBadge featureName=\"event-calendar\" />\n <br />\n {t(\"availability.calendar.title\")}\n </Form.Label>\n <Col sm={10} lg={8}>\n <Row>\n <Row>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"availability.calendar.hint\")}\n </small>\n </Row>\n <Col xs={5}>\n <Form.Select\n className=\"dark-field text-center\"\n aria-label=\"Calendar\"\n defaultValue=\"\"\n value={availability?.calendar || \"\"}\n onChange={(e) => {\n console.log(e.target.value);\n setCalendar(e.target.value);\n }}\n >\n <option value=\"\"> all calendars </option>\n {!loading &&\n availableCalendars.length &&\n availableCalendars.map((calendar) => {\n return (\n <option key={`calendar-${calendar}`} value={calendar}>\n {calendar}\n </option>\n );\n })}\n </Form.Select>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Calendar;\n","import { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport {useTranslation} from 'react-i18next';\nimport WeekView from './WeekView';\nimport Hop from './Hop';\nimport BookingLimit from './BookingLimit';\nimport Notice from './Notice';\nimport LastAvailable from './LastAvailable';\nimport Approval from './Approval';\nimport Calendar from './Calendar';\nimport Tab from 'react-bootstrap/Tab';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\nimport AvailabilityMock from '../../../Mocks/EventTypeCreator/Availability';\nimport toast from 'react-hot-toast';\nimport UpgradePath from '../../../Utilities/UpgradePath/UpgradePath'; \n\n\nfunction AvailabilitiesPanel(){\n const history = useHistory();\n const {t} = useTranslation(['eventCreator']);\n const [loadingTemplates, setLoadingTemplates] = useState(false);\n const [templates, setTemplates] = useState(null);\n const [selectedTemplate, setSelectedTemplate] = useState(null);\n const [creatingTemplate, setCreatingTemplate] = useState(false);\n const [newTemplate, setNewTemplate] = useState({name:'', availability:AvailabilityMock});\n const [saving, setSaving] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const CBButton = window.calendbookUI.Button;\n\n useEffect(()=>{\n const getAvailabilityTemplates = async () => {\n setLoadingTemplates(true);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('jubilant-events','/events/templates/availabilities',false,true,true)\n .then(response => {\n setTemplates(response);\n\n if (Object.keys(response).length === 0) {\n setCreatingTemplate(true);\n }\n else {\n setSelectedTemplate(Object.keys(response)[0]);\n }\n })\n .catch(error => {\n console.error(\"[settings][availabilities] network error while retrieving info:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[settings][availabilities] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[settings][availabilities] functional error while retrieving info:\",error);\n }finally{\n setLoadingTemplates(false);\n }\n }\n getAvailabilityTemplates();\n },[])\n\n // the updateTemplateState function is used to update the state of either newTemplate\n // or a specific template within the templates object based on the presence of templateId.\n // If templateId is null, it updates newTemplate; otherwise,\n // it updates the specified template in templates.\n const updateTemplateState = (templateId, updater) => {\n if (templateId) {\n setTemplates((prevTemplates) => {\n const updatedTemplate = updater(prevTemplates[templateId]);\n return {\n ...prevTemplates,\n [templateId]: updatedTemplate,\n };\n });\n } else {\n setNewTemplate((prevTemplate) => {\n return updater(prevTemplate);\n });\n // setNewTemplate((prevTemplate) => updater(prevTemplate));\n }\n };\n\n const toggleDayAvailability = (templateId, _day) => {\n updateTemplateState(templateId, (template) => {\n const updatedDays = templateId\n ? { ...template.days, [_day]: !template.days[_day] }\n : { ...template.availability.days, [_day]: !template.availability.days[_day] };\n\n const updatedRanges = templateId\n ? { ...template.ranges }\n : { ...template.availability.ranges };\n\n if (updatedRanges[_day].length === 0 && updatedDays[_day]) {\n let interval = { start: '09:00', end: '19:00' };\n updatedRanges[_day].push(interval);\n }\n\n return templateId\n ? { ...template, days: updatedDays, ranges: updatedRanges }\n : { ...template, availability: { ...template.availability, days: updatedDays, ranges: updatedRanges } };\n });\n };\n\n const setDayRange = (templateId, _day, _index, _interval) => {\n updateTemplateState(templateId, (template) => {\n const updatedRanges = templateId\n ? { ...template.ranges }\n : { ...template.availability.ranges };\n\n if (updatedRanges[_day].length === 0 && (!templateId ? !template.availability.days[_day] : !template.days[_day])) {\n updatedRanges[_day] = [_interval];\n return templateId\n ? { ...template, days: { ...template.days, [_day]: true }, ranges: updatedRanges }\n : { ...template, availability: { ...template.availability, days: { ...template.availability.days, [_day]: true }, ranges: updatedRanges } };\n } else {\n updatedRanges[_day][_index] = _interval;\n return templateId\n ? { ...template, ranges: updatedRanges }\n : { ...template, availability: { ...template.availability, ranges: updatedRanges } };\n }\n });\n };\n\n const deleteDayRange = (templateId, _day, _index) => {\n updateTemplateState(templateId, (template) => {\n const updatedRanges = templateId\n ? { ...template.ranges }\n : { ...template.availability.ranges };\n\n updatedRanges[_day].splice(_index, 1);\n\n const updatedDays = templateId\n ? { ...template.days }\n : { ...template.availability.days };\n\n if (updatedRanges[_day].length === 0) {\n updatedDays[_day] = false;\n }\n\n return templateId\n ? { ...template, days: updatedDays, ranges: updatedRanges }\n : { ...template, availability: { ...template.availability, days: updatedDays, ranges: updatedRanges } };\n });\n };\n\n const setTimeslotHop = (templateId, _hop) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, hop: _hop }\n : { ...template, availability: { ...template.availability, hop: _hop } });\n };\n\n const setBookingLimitQuantity = (templateId, _quantity) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, bookingLimit: { ...template.bookingLimit, quantity: _quantity } }\n : { ...template, availability: { ...template.availability, bookingLimit: { ...template.availability.bookingLimit, quantity: _quantity } } });\n };\n\n const setBookingLimitUnit = (templateId, _unit) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, bookingLimit: { ...template.bookingLimit, unit: _unit } }\n : { ...template, availability: { ...template.availability, bookingLimit: { ...template.availability.bookingLimit, unit: _unit } } });\n };\n\n const setNoticeQuantity = (templateId, _quantity) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, notice: { ...template.notice, quantity: _quantity } }\n : { ...template, availability: { ...template.availability, notice: { ...template.availability.notice, quantity: _quantity } } });\n };\n\n const setNoticeUnit = (templateId, _unit) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, notice: { ...template.notice, unit: _unit } }\n : { ...template, availability: { ...template.availability, notice: { ...template.availability.notice, unit: _unit } } });\n };\n\n const setLastAvailabilityDate = (templateId, _date) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, lastAvailability: { ...template.lastAvailability, date: _date } }\n : { ...template, availability: { ...template.availability, lastAvailability: { ...template.availability.lastAvailability, date: _date } } });\n };\n\n const setLastAvailabilityTime = (templateId, _time) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, lastAvailability: { ...template.lastAvailability, time: _time } }\n : { ...template, availability: { ...template.availability, lastAvailability: { ...template.availability.lastAvailability, time: _time } } });\n };\n\n const setApproval = (templateId, _needsApproval) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, needsApproval: _needsApproval }\n : { ...template, availability: { ...template.availability, needsApproval: _needsApproval } });\n };\n\n const setCalendar = (templateId, _calendar) => {\n updateTemplateState(templateId, (template) => templateId\n ? { ...template, calendar: _calendar }\n : { ...template, availability: { ...template.availability, calendar: _calendar } });\n };\n\n\n const handleTemplateCreation = () => {\n setCreatingTemplate(true);\n setSelectedTemplate(null);\n setNewTemplate({ name: '', availability: AvailabilityMock });\n }\n\n const handleNewTemplateName = (e) => {\n const { value } = e.target;\n if (creatingTemplate) {\n setNewTemplate(obj => ({ ...obj, name: value.replace(/ /g, '') }));\n } else {\n setTemplates(prevTemplates => ({\n ...prevTemplates,\n [selectedTemplate]: {\n ...prevTemplates[selectedTemplate],\n newName: value.replace(/ /g, '')\n }\n }));\n }\n };\n\n const handleTemplateSelection = (_key) => {\n setCreatingTemplate(false);\n setSelectedTemplate(_key);\n }\n\n const saveTemplate = async (e, templateId = null) => {\n e.preventDefault();\n setSaving(true);\n try {\n await auth.isAuthenticated()\n .then(async () => {\n const templateToSave = templateId ? \n {\n name: templateId,\n ...(templates[templateId].newName ? { newName: templates[templateId].newName } : {}),\n availability: (() => {\n const { newName, ...availability } = templates[templateId];\n return availability;\n })()\n } : \n newTemplate;\n await be.post(\"jubilant-events\", \"/events/templates/availabilities\", templateToSave, true, true, true)\n .then((r) => {\n const savedTemplateName = templateToSave.name || newTemplate.name;\n const newTemplateKey = savedTemplateName.replace(/ /g, '');\n setTemplates((prevTemplates) => ({\n ...prevTemplates,\n [newTemplateKey]: templateToSave.availability || templateToSave\n }));\n setSelectedTemplate(newTemplateKey);\n console.log(`${templateToSave?.name} template saved successfully`);\n toast.success(`Template Saved`)\n })\n .catch((error) => {\n console.error(\"[settings][availabilities] network error while saving template:\", error);\n });\n })\n .catch(error => {\n console.error(\"[settings][availabilities] authentication error while saving template:\", error);\n });\n } catch (error) {\n console.error(\"[settings][availabilities] network error while saving template:\", error);\n } finally {\n setSaving(false);\n setCreatingTemplate(false);\n }\n };\n\n const deleteTemplateState = (templateId) => {\n setTemplates((prevTemplates) => {\n \n const { [templateId]: _, ...remainingTemplates } = prevTemplates;\n // Set selectedTemplate to the first available template or null if none remain\n const newSelectedTemplate = Object.keys(remainingTemplates)[0] || null;\n\n if (!newSelectedTemplate) { \n setCreatingTemplate(true); \n setSelectedTemplate(null); \n setNewTemplate({ name: '', availability: AvailabilityMock });\n }\n else { \n setCreatingTemplate(false);\n setSelectedTemplate(newSelectedTemplate); \n }\n \n\n return remainingTemplates;\n });\n };\n\n const deleteTemplate = async (e, templateId = null) => {\n e.preventDefault();\n setDeleting(true);\n try {\n await auth.isAuthenticated()\n .then(async () => {\n const templateToDelete = {name: templateId}; \n await be.del(\"jubilant-events\", \"/events/templates/availabilities\", templateToDelete, true, true, true)\n .then((r) => {\n console.log(`${templateToDelete?.name} template deleted successfully`);\n deleteTemplateState(templateId);\n toast.success('Template deleted successfully', {\n icon: '🗑️',\n });\n })\n .catch((error) => {\n console.error(\"[settings][availabilities] network error while deleting template:\", error);\n });\n })\n .catch(error => {\n console.error(\"[settings][availabilities] authentication error while deleting template:\", error);\n });\n } catch (error) {\n console.error(\"[settings][availabilities] network error while deleting template:\", error);\n } finally {\n setDeleting(false);\n }\n\n }\n\n return(\n <Tab.Pane eventKey=\"availabilities\">\n <div className=\"tw-flex tw-flex-col tw-gap-4\">\n <h2>Availability Templates</h2>\n <div>\n\n {loadingTemplates \n ? \n <>\n loading...\n </> \n : \n <div className=\"tw-flex tw-gap-2 tw-items-center tw-overflow-auto\">\n \n {templates && Object.keys(templates).map(templateKey => (\n <CBButton\n key={templateKey}\n radius=\"rounded\"\n color=\"primary\"\n outline={creatingTemplate || (templateKey !== selectedTemplate)}\n onClick={() => handleTemplateSelection(templateKey)}\n buttonText={templateKey}\n />\n ))}\n <CBButton\n radius=\"rounded\"\n color=\"primary\"\n outline={!creatingTemplate}\n iconStyle=\"plus\"\n iconOnly\n onClick={handleTemplateCreation}\n />\n </div>\n }\n\n {!loadingTemplates && creatingTemplate && (\n \n <form onSubmit={(e) => saveTemplate(e)}>\n\n <div className=\"tw-mb-6\">\n <label htmlFor=\"default-input\" className=\"tw-block tw-mb-2 tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-white\">\n Template Name\n </label>\n <input\n required\n onChange={handleNewTemplateName}\n type=\"text\"\n id=\"default-input\"\n className=\"tw-bg-gray-50 tw-border tw-border-gray-300 tw-text-gray-900 tw-text-sm tw-rounded-lg focus:tw-ring-blue-500 focus:tw-border-blue-500 tw-block tw-w-full tw-p-2.5 tw-dark:bg-gray-700 tw-dark:border-gray-600 tw-dark:placeholder-gray-400 tw-dark:text-white tw-dark:focus:tw-ring-blue-500 tw-dark:focus:tw-border-blue-500\"\n />\n </div>\n <WeekView availability={newTemplate?.availability} toggleDayAvailability={(day) => toggleDayAvailability(null, day)} setDayRange={(day, index, interval) => setDayRange(null, day, index, interval)} deleteDayRange={(day, index) => deleteDayRange(null, day, index)} />\n <div className=\"advanced-rules-separator\"><span>Advanced rules</span></div>\n <UpgradePath \n featureName=\"event-timeslot-hop\"\n position=\"right\">\n <Hop availability={newTemplate.availability} setTimeslotHop={(hop) => setTimeslotHop(null, hop)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-booking-limit\"\n position=\"right\">\n <BookingLimit availability={newTemplate.availability} setBookingLimitQuantity={(quantity) => setBookingLimitQuantity(null, quantity)} setBookingLimitUnit={(unit) => setBookingLimitUnit(null, unit)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-notice\"\n position=\"right\">\n <Notice availability={newTemplate.availability} setNoticeQuantity={(quantity) => setNoticeQuantity(null, quantity)} setNoticeUnit={(unit) => setNoticeUnit(null, unit)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-last-availability\"\n position=\"right\">\n <LastAvailable availability={newTemplate.availability} setLastAvailabilityDate={(date) => setLastAvailabilityDate(null, date)} setLastAvailabilityTime={(time) => setLastAvailabilityTime(null, time)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-approval\"\n position=\"right\">\n <Approval availability={newTemplate.availability} setApproval={(needsApproval) => setApproval(null, needsApproval)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-calendar\"\n position=\"right\">\n <Calendar availability={newTemplate.availability} setCalendar={(calendar) => setCalendar(null,setCalendar)} />\n </UpgradePath>\n <div className=\"tw-flex tw-justify-end\">\n <CBButton buttonText={saving ? <>Save Template...</> : <>Save Template</>} color=\"primary\" size=\"sm\" radius=\"rounded\" type=\"submit\" />\n </div>\n </form>\n )}\n\n {!loadingTemplates && !creatingTemplate && selectedTemplate && (\n <form onSubmit={(e) => saveTemplate(e, selectedTemplate)}>\n <div className=\"tw-mb-6\">\n <label htmlFor=\"default-input\" className=\"tw-block tw-mb-2 tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-white\">\n Template Name\n </label>\n <div className=\"tw-inline-flex tw-items-center tw-gap-4\">\n <input\n required\n value={templates[selectedTemplate]?.newName || selectedTemplate} // Prefill with template key if name is not set\n onChange={handleNewTemplateName}\n type=\"text\"\n id=\"default-input\"\n className=\"tw-min-w-80 tw-bg-gray-50 tw-border tw-border-gray-300 tw-text-gray-900 tw-text-sm tw-rounded-lg focus:tw-ring-blue-500 focus:tw-border-blue-500 tw-block tw-w-full tw-p-2.5 tw-dark:bg-gray-700 tw-dark:border-gray-600 tw-dark:placeholder-gray-400 tw-dark:text-white tw-dark:focus:tw-ring-blue-500 tw-dark:focus:tw-border-blue-500\"\n />\n <div className=\"tw-flex tw-justify-end\">\n <CBButton buttonText=\"Save Template\" color=\"primary\" size=\"sm\" radius=\"rounded\" type=\"submit\" />\n </div>\n {/* <CBButton buttonText={deleting ? <>Delete Template...</> : <>Delete Template</>} color=\"red\" size=\"xs\" radius=\"rounded\" onClick={async (e) => await deleteTemplate(e,selectedTemplate)}/> */}\n <CBButton \n buttonText={\n <div className=\"tw-inline-flex tw-items-center\">\n <i className=\"far fa-trash-alt tw-mr-2\"></i>\n {deleting ? 'Deleting...' : 'Delete'}\n </div>\n } \n color=\"red\" \n size=\"xs\" \n radius=\"rounded\" \n onClick={async (e) => await deleteTemplate(e, selectedTemplate)}\n />\n </div>\n </div>\n <WeekView availability={templates[selectedTemplate]} toggleDayAvailability={(day) => toggleDayAvailability(selectedTemplate, day)} setDayRange={(day, index, interval) => setDayRange(selectedTemplate, day, index, interval)} deleteDayRange={(day, index) => deleteDayRange(selectedTemplate, day, index)} />\n <div className=\"advanced-rules-separator\"><span>Advanced rules</span></div>\n <UpgradePath \n featureName=\"event-timeslot-hop\"\n position=\"right\">\n <Hop availability={templates[selectedTemplate]} setTimeslotHop={(hop) => setTimeslotHop(selectedTemplate, hop)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-booking-limit\"\n position=\"right\">\n <BookingLimit availability={templates[selectedTemplate]} setBookingLimitQuantity={(quantity) => setBookingLimitQuantity(selectedTemplate, quantity)} setBookingLimitUnit={(unit) => setBookingLimitUnit(selectedTemplate, unit)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-notice\"\n position=\"right\">\n <Notice availability={templates[selectedTemplate]} setNoticeQuantity={(quantity) => setNoticeQuantity(selectedTemplate, quantity)} setNoticeUnit={(unit) => setNoticeUnit(selectedTemplate, unit)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-last-availability\"\n position=\"right\">\n <LastAvailable availability={templates[selectedTemplate]} setLastAvailabilityDate={(date) => setLastAvailabilityDate(selectedTemplate, date)} setLastAvailabilityTime={(time) => setLastAvailabilityTime(selectedTemplate, time)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-approval\"\n position=\"right\">\n <Approval availability={templates[selectedTemplate]} setApproval={(needsApproval) => setApproval(selectedTemplate, needsApproval)} />\n </UpgradePath>\n <UpgradePath \n featureName=\"event-calendar\"\n position=\"right\">\n <Calendar availability={templates[selectedTemplate]} setCalendar={(calendar) => setCalendar(selectedTemplate, calendar)}/>\n </UpgradePath>\n <div className=\"tw-flex tw-justify-end\">\n <CBButton buttonText={saving ? <>Save Template ...</> : <>Save Template</>} color=\"primary\" size=\"sm\" radius=\"rounded\" type=\"submit\" />\n </div>\n </form>\n )}\n </div>\n </div>\n </Tab.Pane>\n );\n}\n\nexport default AvailabilitiesPanel;\n","import React, { useEffect } from \"react\";\nimport { Tab, Nav, Container, Row, Col } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport \"./settings.css\";\n\nimport AccountTab from \"./Tabs/AccountTab\";\nimport AgencyTab from \"./Tabs/AgencyTab\";\nimport SubscriptionTab from \"./Tabs/SubscriptionTab\";\nimport NotificationsTab from \"./Tabs/NotificationsTab\";\nimport AvailabilitiesTab from \"./Tabs/AvailabilitiesTab\";\n\nimport AccountPanel from \"./Panels/AccountPanel\";\nimport AgencyPanel from \"./Panels/AgencyPanel\";\nimport SubscriptionPanel from \"./Panels/SubscriptionPanel\";\nimport NotificationsPanel from \"./Panels/NotificationsPanel\";\nimport AvailabilitiesPanel from \"./Panels/Availabilities/AvailabilitiesPanel\";\n\nfunction _Settings() {\n try {\n window.tidioChatApi.show();\n } catch {}\n\n let activeKey = \"account\";\n const tab = window.location.href.split(\"#\")[1];\n\n if (tab === \"subscription\") {\n activeKey = \"subscription\";\n }\n if (tab === \"agency\") {\n activeKey = \"agency\";\n }\n if (tab === \"account\") {\n activeKey = \"account\";\n }\n if (tab === \"notifications\") {\n activeKey = \"notifications\";\n }\n if (tab === \"availabilities\") {\n activeKey = \"availabilities\";\n }\n\n useEffect(() => {\n document.title = `Calendbook - Settings - ${activeKey}`;\n }, [activeKey]);\n\n return (\n <>\n <Container className=\"mt-5\">\n <Tab.Container id=\"left-tabs-example\" defaultActiveKey={activeKey}>\n <Row>\n <Col sm={3}>\n <Nav fill variant=\"pills\" className=\"flex-row flex-md-column\">\n <AccountTab />\n <AgencyTab />\n <SubscriptionTab />\n <NotificationsTab />\n <AvailabilitiesTab />\n </Nav>\n </Col>\n\n <Col sm={9}>\n <Tab.Content>\n <AccountPanel />\n <AgencyPanel />\n <SubscriptionPanel />\n <NotificationsPanel />\n <AvailabilitiesPanel />\n </Tab.Content>\n </Col>\n </Row>\n </Tab.Container>\n </Container>\n </>\n );\n}\n\nexport default _Settings;\n","import {useState,useEffect} from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport auth from './Account/Auth';\n\nconst componentStyle = {\n display:'flex',\n width:350,\n textDecoration:'none',\n border:'1px solid var(--color-border-light)',\n borderRadius:4,\n backgroundColor:'white',\n padding:7,\n}\n\nconst msLogoStyle = {\n display:'inline-flex',\n marginLeft:3,\n width:21,\n height:21\n}\n\nconst textStyle = {\n display:'inline-flex',\n marginRight:'auto',\n marginLeft:'auto',\n color:'#3C4043',\n fontSize:14,\n fontWeight:500,\n}\n\nfunction MicrosoftLogin({redirect, callback, setLoggingProvider}){\n const [loading,setLoading] = useState(false)\n\n useEffect(()=>{\n const microsoftLogin = async () => { \n if (window.location.search) {\n const qs = window.location.search.substring(1)\n const qsParams = qs.split(['&'])\n let qsMsCode = qsParams.find(x => x.startsWith('mscode='))\n if(qsMsCode){\n try{\n (setLoggingProvider && setLoggingProvider(\"microsoft\"))\n setLoading(true);\n qsMsCode = qsMsCode.substring(7)\n await auth.login({code:qsMsCode},'/account/microsoft/login')\n .then(() => {\n // check on '/onboarding' pathname helps avoiding redirect override\n // in case auth module needs to bring the user on onboarding page\n if (redirect && window.location.pathname !== '/onboarding') { window.location.href = redirect }\n if (callback) { callback() }\n })\n .catch(e => {\n console.log(\"request catch: error while logging in with microsoft provider: \", e)\n })\n }catch(e){\n console.log(\"functional catch: error while logging in with microsoft provider: \", e)\n }finally{\n setLoading(false);\n (setLoggingProvider && setLoggingProvider(\"none\"))\n }\n }\n }\n }\n microsoftLogin();\n },[])\n\n return(\n <a\n style={componentStyle}\n href=\"https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=a6b54902-9538-43da-b3ab-1a575cc386e5&response_type=code&scope=Calendars.ReadWrite+User.Read.All+offline_access+openid+profile\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img style={msLogoStyle} src=\"/app-assets/img/ms-logo.png\"/>\n <span style={textStyle}>Sign in with Microsoft</span>\n {loading && <Spinner animation=\"border\" size=\"sm\" className=\"my-auto me-1\"/>}\n </a>\n );\n}\n\nexport default MicrosoftLogin;\n","import { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Form from \"react-bootstrap/Form\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport Button from \"react-bootstrap/Button\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\nimport Tooltip from \"react-bootstrap/Tooltip\";\nimport { Amplify, Auth } from \"aws-amplify\";\nimport spacetime from \"spacetime\";\nimport BE from \"../../BE\";\nimport \"./passwordless.css\";\n\n// printing console.info logs only in localhost\nconst DEBUG = window.location.hostname === \"localhost\";\nvar CLIENT = \"\";\nif (DEBUG) {\n CLIENT = \"8oqrf7a5het2vkb0u06km15us\";\n} else {\n CLIENT = \"4de86ece06uce62qeoqvsfkuef\";\n}\n\nfunction Passwordless({ setLoggingProvider }) {\n const { i18n, t } = useTranslation([\"passwordless\"]);\n const getUserLanguage = () => {\n return i18n.language.substring(0, 2);\n };\n\n Amplify.configure({\n Auth: {\n region: \"eu-central-1\",\n userPoolId: \"eu-central-1_j3ieIXUaN\",\n userPoolWebClientId: CLIENT,\n mandatorySignIn: true,\n },\n });\n\n const [email, setEmail] = useState(\"\");\n const [urlEmail, setUrlEmail] = useState(\"\");\n const [urlToken, setUrlToken] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [status, setStatus] = useState(0);\n // --- STAGES ---\n // signIn: Email recognition\n // signInSuccess: Email xxx recognized\n // signInError: Error while recognizing xxx email\n // challenge: Authenticating\n // challengeSuccess: Authenticated\n // challengError: Authentication Error\n // getUser: Loading your data\n // getUserSuccess: User data loaded, logging in\n // getUserError: Error while getting user data\n const [stage, setStage] = useState(\"\");\n let cognitoUser;\n\n useEffect(() => {\n const loadCustomChallenge = async () => {\n if (window.location.search) {\n const qs = window.location.search.substring(1);\n const qsParams = qs.split([\"&\"]);\n const qsEmail = qsParams.find((x) => x.startsWith(\"email=\"));\n const qsToken = qsParams.find((x) => x.startsWith(\"token=\"));\n if (qsToken) {\n setLoading(true);\n setLoggingProvider && setLoggingProvider(\"passwordless\");\n DEBUG &&\n console.info(`[passwordless] calling signIn for ${urlEmail}...`);\n setStage(\"signIn\");\n setUrlEmail(decodeURIComponent(qsEmail.substring(6)).toLowerCase());\n await signIn(decodeURIComponent(qsEmail.substring(6)).toLowerCase());\n\n DEBUG &&\n console.info(\n `[passwordless] calling customChallenge for ${urlEmail} with token...`\n );\n setStage(\"challenge\");\n setUrlToken(decodeURIComponent(qsToken.substring(6)));\n await answerCustomChallenge(decodeURIComponent(qsToken.substring(6)));\n setLoading(false);\n setLoggingProvider && setLoggingProvider(\"none\");\n }\n }\n };\n loadCustomChallenge();\n }, []);\n\n const signIn = async (_email) => {\n try {\n cognitoUser = await Auth.signIn(_email);\n DEBUG &&\n console.info(\n `%c[passwordless] signed in ${_email} with cognitoUser response`,\n \"color:lightgreen\"\n );\n setStage(\"signInSuccess\");\n } catch (e) {\n DEBUG &&\n console.info(\n `%c[passwordless][error] unable to sign in ${_email} with cognitoUser response: ${e?.message}`,\n \"color:salmon\"\n );\n setStage(\"signInError\");\n }\n };\n\n async function answerCustomChallenge(_token) {\n try {\n const challengeResult = await Auth.sendCustomChallengeAnswer(\n cognitoUser,\n _token\n );\n DEBUG &&\n console.info(\n `%c[passwordless] customChallenge success for ${challengeResult?.username}`,\n \"color:lightgreen\"\n );\n DEBUG &&\n console.info(\n `[passwordless] calling BE for ${challengeResult?.username} profileObj...`\n );\n setStage(\"challengeSuccess\");\n setStage(\"getUser\");\n await getUserInfo(createAccessObj(challengeResult));\n } catch (e) {\n DEBUG &&\n console.info(\n `%c[passwordless][error] unable to resolve CustomChallenge: ${e?.message}`,\n \"color:salmon\"\n );\n setStage(\"challengeError\");\n }\n }\n\n const createAccessObj = (_challengeResult) => {\n const access = _challengeResult?.signInUserSession?.accessToken?.jwtToken;\n const refresh = _challengeResult?.signInUserSession?.refreshToken?.token;\n const accessObj = { access_token: access, refresh_token: refresh };\n return accessObj;\n };\n\n const getUserInfo = async (_accessObj) => {\n localStorage.setItem(\"userSession\", JSON.stringify({ access: _accessObj }));\n await BE.get(\"account-jubilant\", \"/account/me\", false, true, true)\n .then((response) => {\n localStorage.setItem(\n \"userSession\",\n JSON.stringify({ access: _accessObj, profileObj: response })\n );\n DEBUG &&\n console.info(\n \"%c[passwordless] built localStorage userSession, redirecting...\",\n \"color:lightgreen\"\n );\n setStage(\"getUserSuccess\");\n // redirect to onboarding page if profile obj indicates that the user needs onboarding\n // otherwise, redirect to dashboard page\n if (response?.needsOnboard) {\n window.location.href = \"/onboarding\";\n } else {\n window.location.href = \"/\";\n }\n })\n .catch((e) => {\n DEBUG &&\n console.info(\n `%c[passwordless][error] unable to set localStorage userSession: ${e?.message}`,\n \"color:salmon\"\n );\n setStage(\"getUserError\");\n localStorage.removeItem(\"userSession\");\n DEBUG &&\n console.info(\"[passwordless] cleaned userSession localStorage\");\n });\n };\n\n const sendMagicLink = async (e) => {\n if (!isValidEmail()) {\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setLoading(true);\n setStatus(0);\n const timezone = spacetime.now().timezone().name;\n const language = getUserLanguage();\n const body = { email, timezone, language };\n DEBUG &&\n console.info(`[passwordless] requesting magic link for ${email}...`);\n await BE.post(\n \"account-jubilant\",\n \"/account/login/magicLink\",\n body,\n false,\n true,\n true\n )\n .then((response) => {\n setStatus(response?.status);\n if (response?.status === 200) {\n DEBUG &&\n console.info(\n `%c[passwordless] sent magic link to ${email}`,\n \"color:lightgreen\"\n );\n } else {\n DEBUG &&\n console.info(\n `%c[passwordless][error] received response unrecognized response status: ${response?.status}`,\n \"color:salmon\"\n );\n }\n })\n .catch((error) => {\n setStatus(error?.response?.status);\n DEBUG &&\n console.info(\n `%c[passwordless][error] unable to send magic link: ${error?.response.status} - ${error?.response?.statusText}`,\n \"color:salmon\"\n );\n });\n setLoading(false);\n }\n };\n\n const isValidEmail = () => {\n if (urlEmail) {\n return true;\n } else {\n if (email) {\n const regex = /^[\\w.-]+@[a-zA-Z\\d.-]+\\.[a-zA-Z]{2,}$/i;\n return regex.test(email);\n } else {\n return true;\n }\n }\n };\n\n return (\n <div className=\"passwordless-container\">\n <div className=\"separator\">{t(\"or\")}</div>\n <div className=\"d-inline-flex align-items-baseline\">\n <h6>{t(\"title\")}</h6>\n <OverlayTrigger\n overlay={\n <Tooltip id=\"magic-link-explanation\" className=\"magic-link-tooltip\">\n {\" \"}\n 📬 {t(\"tooltip\")}\n </Tooltip>\n }\n >\n <i className=\"fa-regular fa-circle-question ms-2\"></i>\n </OverlayTrigger>\n </div>\n <Form noValidate validate={isValidEmail()} onSubmit={sendMagicLink}>\n <InputGroup hasValidation>\n <FormControl\n disabled={loading || urlEmail}\n name=\"passwordless-email\"\n placeholder=\"your.email@provider.com\"\n id=\"passwordless-email-field\"\n aria-describedby=\"passwordless-email\"\n value={urlEmail || email}\n onChange={(e) => {\n setEmail(e.target.value.toLowerCase());\n setStatus(0);\n }}\n isInvalid={!isValidEmail()}\n />\n <Button disabled={loading || urlEmail} type=\"submit\">\n {loading ? (\n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" />\n ) : (\n <i className=\"fas fa-long-arrow-alt-right\"></i>\n )}\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n <span className=\"feedback invalid\">\n {t(\"feedbacks.invalidRegex\")}\n </span>\n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n {status >= 400 && status <= 500 && (\n <p className=\"feedback invalid\">\n {t(\"feedbacks.statusError\", { status })}\n </p>\n )}\n {status === 200 && (\n <p className=\"feedback valid\">{t(\"feedbacks.statusSuccess\")}</p>\n )}\n {stage === \"signIn\" && (\n <p className=\"feedback\">{t(\"feedbacks.stageSignIn\")}</p>\n )}\n {stage === \"signInSuccess\" && (\n <p className=\"feedback valid\">{t(\"feedbacks.stageSignInSuccess\")}</p>\n )}\n {stage === \"signInError\" && (\n <p className=\"feedback invalid\">{t(\"feedbacks.stageSignInError\")}</p>\n )}\n {stage === \"challenge\" && (\n <p className=\"feedback\">{t(\"feedbacks.stageChallenge\")}</p>\n )}\n {stage === \"challengeSuccess\" && (\n <p className=\"feedback valid\">{t(\"feedbacks.stageChallengeSuccess\")}</p>\n )}\n {stage === \"challengeError\" && (\n <p className=\"feedback invalid\">{t(\"feedbacks.stageChallengeError\")}</p>\n )}\n {stage === \"getUser\" && (\n <p className=\"feedback\">{t(\"feedbacks.stageGetUser\")}</p>\n )}\n {stage === \"getUserSuccess\" && (\n <p className=\"feedback valid\">{t(\"feedbacks.stageGetUserSuccess\")}</p>\n )}\n {stage === \"getUserError\" && (\n <p className=\"feedback invalid\">{t(\"feedbacks.stageGetUserError\")}</p>\n )}\n </div>\n );\n}\n\nexport default Passwordless;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nconst BentoGrid = () => {\n const { i18n, t } = useTranslation([\"landing\"]);\n\n const boxes = [\n {\n id: 1,\n imgSrc: \"img/notifications-feature.png\",\n alt: \"Communication Platforms\",\n title: t(\"bento.notifications.title\"),\n description: t(\"bento.notifications.description\"),\n },\n {\n id: 2,\n imgSrc: \"img/accept-reject-feature.png\",\n alt: \"Scheduling\",\n title: t(\"bento.scheduling.title\"),\n description: t(\"bento.scheduling.description\"),\n },\n {\n id: 3,\n imgSrc: \"img/integrations-feature.png\",\n alt: \"Automation Tools\",\n title: t(\"bento.integrations.title\"),\n description: t(\"bento.integrations.description\"),\n },\n {\n id: 4,\n imgSrc: \"img/leads-feature.png\",\n alt: \"Leads Management\",\n title: t(\"bento.leads.title\"),\n description: t(\"bento.leads.description\"),\n },\n {\n id: 5,\n imgSrc: \"img/payments-feature.png\",\n alt: \"Earn Money\",\n title: t(\"bento.earn.title\"),\n description: t(\"bento.earn.description\"),\n additionalClasses:\n \"md:tw-col-span-2 lg:tw-col-start-1 lg:tw-row-start-2 lg:tw-col-span-2\",\n },\n ];\n\n return (\n <div className=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-3 tw-gap-6 tw-p-6 tw-w-full\">\n {boxes.map((box) => (\n <div\n style={{ background: \"var(--color-background-1)\" }}\n key={box.id}\n className={`tw-relative tw-border tw-border-gray-400 tw-rounded-xl tw-shadow-lg tw-transform tw-transition tw-duration-300 hover:tw-scale-105 lg:hover:tw-scale-110 hover:tw-z-10 hover:tw-shadow-2xl tw-overflow-hidden ${\n box.additionalClasses || \"\"\n }`}\n >\n {/* Image Section */}\n <div className=\"tw-relative tw-w-full tw-h-64 tw-overflow-hidden tw-rounded-t-xl\">\n {/* Image */}\n <img\n src={box.imgSrc}\n alt={box.alt}\n className=\"tw-w-full tw-h-64 tw-object-cover\"\n />\n </div>\n\n {/* Text Content */}\n <div className=\"tw-p-4 tw-border-t tw-border-t-gray-400\">\n <h3 className=\"tw-text-base tw-font-semibold tw-mb-1\">\n {box.title}\n </h3>\n <p className=\"tw-text-xs\">{box.description}</p>\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nexport default BentoGrid;\n","import React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { TypeAnimation } from \"react-type-animation\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Login from \"../Login\";\nimport MicrosoftLogin from \"../MicrosoftLogin\";\nimport \"./Landing.css\";\nimport YouTube from \"react-youtube\";\nimport Passwordless from \"./Passwordless/Passwordless\";\nimport BentoGrid from \"./BentoGrid/BentoGrid\";\n\nfunction _Landing() {\n const Button = window.calendbookUI.Button;\n const Icon = window.calendbookUI.Icon;\n const PricingCard = window.calendbookUI.PricingCard;\n const ComparisonTable = window.calendbookUI.ComparisonTable;\n const Accordion = window.calendbookUI.Accordion;\n const root = document.getElementById(\"root\");\n const html = document.getElementById(\"html\");\n root.setAttribute(\"data-theme\", \"light\");\n html.setAttribute(\"data-theme\", \"light\");\n // useTranslation parameter is an array of namespaces\n // namespaces are the categories object in the translation json\n // example:\n // landing:{title:\"this is the title\", description:\"this is the description\"}\n // useful for loading specific translations for specific components\n const { i18n, t } = useTranslation([\"landing\", \"common\", \"upgrade\"]);\n const getUserLanguage = () => {\n try {\n return i18n.language.substring(0, 2);\n } catch (e) {\n return \"en\";\n }\n };\n const [pricingCadency, setPricingCadency] = useState(\"yearly\");\n const [loggingProvider, setLoggingProvider] = useState(\"none\");\n try {\n window.tidioChatApi.show();\n } catch {}\n\n useEffect(() => {\n document.title = \"Calendbook - Share your Calendar with a Link\";\n }, []);\n\n return (\n <>\n <Container className=\"col-lg-10 col-md-11 col-sm-12 h-100\">\n <div className=\"tw-my-32 tw-text-center\">\n <div className=\" tw-max-w-[768px] tw-mx-auto tw-my-10 tw-gap-4 tw-flex tw-flex-col\">\n <h1 className=\"tw-leading-none tw-text-6xl tw-font-extrabold tw-text-gray-900\">\n {t(\"title\")}\n <br />\n <TypeAnimation\n sequence={[\n t(\"titleSequence.1\"),\n 1000,\n t(\"titleSequence.2\"),\n 1000,\n t(\"titleSequence.3\"),\n 1000,\n t(\"titleSequence.4\"),\n 1000,\n t(\"titleSequence.5\"),\n 1000,\n t(\"titleSequence.6\"),\n 1000,\n ]}\n preRenderFirstString={true}\n speed={50}\n repeat={Infinity}\n className=\"tw-text-primary-500\"\n />\n </h1>\n <div className=\"tw-text-xl tw-font-normal tw-text-gray-500\">\n {t(\"description\")}\n </div>\n </div>\n <div className=\"tw-flex tw-flex-col tw-items-center\">\n <div className=\"tw-flex tw-flex-col md:tw-flex-row tw-gap-1 md:tw-gap-2\">\n {(loggingProvider === \"none\" || loggingProvider === \"google\") && (\n <div className=\"my-3\" style={{ width: 350 }}>\n {\n <Login\n redirect=\"/\"\n setLoggingProvider={setLoggingProvider}\n />\n }\n </div>\n )}\n {(loggingProvider === \"none\" ||\n loggingProvider === \"microsoft\") && (\n <div className=\"my-3\" style={{ width: 350 }}>\n {\n <MicrosoftLogin\n redirect=\"/\"\n setLoggingProvider={setLoggingProvider}\n />\n }\n </div>\n )}\n </div>\n <div>\n {(loggingProvider === \"none\" ||\n loggingProvider === \"passwordless\") && (\n <Passwordless setLoggingProvider={setLoggingProvider} />\n )}\n </div>\n </div>\n </div>\n\n <Row>\n <Col className=\"py-5 tw-text-center\">\n <h3 className=\"tw-text-center tw-text-4xl tw-font-bold tw-text-gray-900\">\n {t(\"socialProof.title\")}\n </h3>\n <div className=\"m-4 d-flex justify-content-center flex-column flex-md-row\">\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n marginRight: 20,\n justifyContent: \"center\",\n }}\n className=\"my-3\"\n >\n <i\n style={{\n fontSize: 48,\n marginTop: \"auto\",\n marginBottom: \"auto\",\n marginRight: 20,\n }}\n className=\"fa-solid fa-users\"\n ></i>\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n <span style={{ fontWeight: 900, fontSize: 24 }}>\n {t(\"socialProof.customers.quantity\")}\n </span>\n <span style={{ fontWeight: 300 }}>\n {t(\"socialProof.customers.unit\")}\n </span>\n </div>\n </div>\n\n <a\n style={{ marginRight: 20 }}\n className=\"mx-auto my-3\"\n href=\"https://www.capterra.com/reviews/343567/Calendbook?utm_source=vendor&utm_medium=badge&utm_campaign=capterra_reviews_badge\"\n >\n {\" \"}\n <img\n style={{ width: 200 }}\n border=\"0\"\n src=\"https://assets.capterra.com/badge/c61e3f861e4ae35d055bb5967e386481.svg?v=2290534&p=343567\"\n />{\" \"}\n </a>\n <a\n className=\"mx-auto my-3\"\n href=\"https://www.capterra.com/p/343567/Calendbook/\"\n >\n {\" \"}\n <img\n style={{ marginRight: 20, width: 75 }}\n border=\"0\"\n src=\"https://capterra.s3.amazonaws.com/assets/images/gdm-badges/ca-value-2023.png\"\n />{\" \"}\n </a>\n <a\n className=\"mx-auto my-3\"\n href=\"https://www.capterra.com/p/343567/Calendbook/\"\n >\n {\" \"}\n <img\n style={{ marginRight: 20, width: 75 }}\n border=\"0\"\n src=\"https://capterra.s3.amazonaws.com/assets/images/gdm-badges/ca-ease_of_use-2023.png\"\n />{\" \"}\n </a>\n <a\n className=\"mx-auto my-3\"\n href=\"https://www.wix.com/app-market/calendbook\"\n target=\"_blank\"\n >\n <img\n src=\"/app-assets/img/wix-logo.png\"\n alt=\"Calendbook & Wix App\"\n width=\"200px\"\n />\n </a>\n </div>\n <div className=\"m-4 d-flex justify-content-center\">\n {t(\"socialProof.trello.title\")}\n </div>\n <center>\n <a\n style={{\n display: \"block\",\n width: 150,\n border: \"1px solid\",\n padding: 10,\n textDecoration: \"none\",\n color: \"var(--color-text)\",\n borderRadius: 10,\n }}\n href=\"https://app.getuservotes.com/public-board/840705cd-c672-4e05-a5bd-41c7a32ebaec\"\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {t(\"socialProof.trello.cta\")}\n </a>\n </center>\n </Col>\n </Row>\n\n <Row sm={12} className=\"my-5 text-center\">\n <Col sm={12}>\n <h3 className=\"tw-text-center tw-text-4xl tw-font-bold tw-text-gray-900\">\n {t(\"steps.title\")}\n </h3>\n </Col>\n <Col sm={12} md={4} className=\"my-5\">\n <div>\n <i className=\"fa-solid fa-calendar-days h1\"></i>\n </div>\n <div className=\"mt-2\">{t(\"steps.1\")}</div>\n </Col>\n <Col sm={12} md={4} className=\"my-5\">\n <div>\n <i className=\"far fa-paper-plane h1\"></i>\n </div>\n <div className=\"mt-2\">{t(\"steps.2\")}</div>\n </Col>\n <Col sm={12} md={4} className=\"my-5\">\n <div>\n <i className=\"far fa-calendar-check h1\"></i>\n </div>\n <div className=\"mt-2\">{t(\"steps.3\")}</div>\n </Col>\n </Row>\n\n <Row sm={12} className=\"my-5\">\n <Col sm={12}>\n <h3 className=\"tw-text-center tw-text-4xl tw-font-bold tw-text-gray-900\">\n {t(\"howItWorks.title\")}\n </h3>\n </Col>\n <Col sm={12} className=\"mt-5 d-flex justify-content-center\">\n <YouTube\n videoId={\n getUserLanguage() === \"es\" ? \"Gt0dkUe4qco\" : \"MIL8h8tirkU\"\n }\n containerClassName={\"youtubeContainer\"}\n />\n </Col>\n\n <Col sm={12} className=\"my-5\">\n <h4 className=\"tw-text-center tw-text-4xl tw-font-bold tw-text-gray-900\">\n {t(\"howItWorks.1.title\")}\n </h4>\n <div className=\"tw-text-center tw-mt-2\" style={{ fontWeight: 300 }}>\n {t(\"howItWorks.1.subtitle\")}\n </div>\n {(loggingProvider === \"none\" || loggingProvider === \"google\") && (\n <div className=\"my-2 d-flex justify-content-center\">\n {<Login redirect=\"/\" setLoggingProvider={setLoggingProvider} />}\n </div>\n )}\n </Col>\n\n {/* Bento grid for features */}\n <BentoGrid />\n </Row>\n\n {/* tailwind integrations section */}\n <div className=\"tw-hidden lg:tw-block tw-max-w-7xl tw-mx-auto tw-my-50\">\n <div className=\"tw-mb-20\">\n <h1 className=\"tw-text-center tw-mb-4 tw-text-4xl tw-font-extrabold tw-leading-none tw-tracking-tight tw-text-gray-900 md:tw-text-5xl lg:tw-text-6xl dark:tw-text-white\">\n {t(\"integrations.title\")}\n </h1>\n <p className=\"tw-text-center tw-mb-6 tw-text-lg tw-font-normal tw-text-gray-500 lg:tw-text-xl sm:tw-px-16 xl:tw-px-48 dark:tw-text-gray-400\">\n {t(\"integrations.subtitle\")}\n </p>\n </div>\n\n <div className=\"tw-flex\">\n <div className=\"tw-grid tw-grid-cols-2 tw-gap-[61px]\">\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-bg-[#635BFF] tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <img src=\"/app-assets/png/stripe-logo.png\" />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-items-center tw-justify-center\">\n {t(\"integrations.integration.stripe.description\")}\n </div>\n </div>\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <img src=\"/app-assets/png/google-calendar-logo.png\" />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-items-center tw-justify-center\">\n {t(\"integrations.integration.calendar.description\")}\n </div>\n </div>\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <img src=\"/app-assets/png/google-meet-logo.png\" />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-items-center tw-justify-center\">\n {t(\"integrations.integration.meet.description\")}\n </div>\n </div>\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-bg-[#FF4F00] tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <img src=\"/app-assets/png/zapier-logo.png\" />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-items-center tw-justify-center\">\n {t(\"integrations.integration.zapier.description\")}\n </div>\n </div>\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <img src=\"/app-assets/png/zoom-logo.png\" />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-items-center tw-justify-center\">\n {t(\"integrations.integration.zoom.description\")}\n </div>\n </div>\n <div className=\"tw-inline-flex tw-gap-6\">\n <div className=\"tw-border-[1.5px] tw-justify-center tw-flex tw-rounded-3xl tw-w-32 tw-h-32 tw-bg-white\">\n <div className=\"tw-w-[128px] tw-h-[128px] tw-m-auto tw-flex tw-items-center tw-justify-center\">\n <div className=\"tw-bg-black tw-rounded-xl tw-w-[71.11px] tw-h-[71.11px] tw-flex tw-items-center tw-justify-center\">\n <Icon\n name=\"plus\"\n fillColor=\"white\"\n width=\"35\"\n height=\"35\"\n />\n </div>\n </div>\n </div>\n <div className=\"tw-text-start tw-flex tw-flex-col tw-justify-center tw-items-center tw-gap-5\">\n <div className=\"tw-text-start\">\n {t(\"integrations.request.title\")}\n </div>\n <div>\n {\" \"}\n <Button\n outline\n buttonText={t(\"integrations.request.CTA\")}\n rightIconStyle=\"chevron-right\"\n showRightIcon\n onClick={() =>\n window.open(\n \"https://gignlvdncn6.typeform.com/to/sthPsbx4\",\n \"_blank\"\n )\n }\n />{\" \"}\n </div>\n </div>\n </div>\n </div>\n\n {/*\n --- ORBIT ---\n <div className=\"tw-w-[299px]\">\n <div className=\"orbit\">\n <ul className=\"orbit-wrap\">\n <li className=\"orbit-center\"> <i className=\"orbit-center__icon\" /> </li>\n <li>\n <ul className=\"ring-0\">\n <li> <i className=\"orbit-icon fa fa-git\" /> </li>\n </ul>\n </li>\n <li>\n <ul className=\"ring-1\">\n <li> <i className=\"orbit-icon fa fa-html5\" /> </li>\n </ul>\n </li>\n <li>\n <ul className=\"ring-2\">\n <li> <i className=\"orbit-icon fa fa-windows\" /> </li>\n </ul>\n </li>\n <li>\n <ul className=\"ring-3\">\n <li> <i className=\"orbit-icon fa fa-heart-o\" /> </li>\n </ul>\n </li>\n </ul>\n </div>\n\n </div>\n */}\n </div>\n </div>\n {/* end tailwind integrations section */}\n\n <div id=\"pricing\" className=\"tw-text-center tw-gap-4 tw-mt-10\">\n <div className=\"tw-my-10\">\n <span className=\"tw-bg-gray-200 tw-text-gray-800 tw-text-sm tw-font-medium tw-me-2 tw-px-2.5 tw-py-0.5 tw-rounded tw-dark:bg-gray-700 tw-dark:text-gray-300\">\n {t(\"pricing.anchor\")}\n </span>\n </div>\n\n <div className=\"tw-mb-20\">\n <h1 className=\"tw-text-center tw-mb-4 tw-text-4xl tw-font-extrabold tw-leading-none tw-tracking-tight tw-text-gray-900 md:tw-text-5xl lg:tw-text-6xl dark:tw-text-white\">\n {t(\"pricing.title\")}\n </h1>\n <p className=\"tw-text-center tw-mb-6 tw-text-lg tw-font-normal tw-text-gray-500 lg:tw-text-xl sm:tw-px-16 xl:tw-px-48 dark:tw-text-gray-400\">\n {t(\"pricing.subtitle\")}\n </p>\n </div>\n </div>\n\n <div className=\"tw-my-20 tw-mx-auto tw-w-max tw-bg-gray-200 tw-p-0.5 tw-gap-0.5 tw-rounded-full tw-flex tw-flex-row\">\n <Button\n buttonText={t(\"pricing.cards.cadency.monthly\")}\n color={pricingCadency === \"monthly\" ? \"dark\" : \"alternative\"}\n onClick={() => setPricingCadency(\"monthly\")}\n />\n <Button\n buttonText={t(\"pricing.cards.cadency.yearlyDiscounted\", {\n discount: \"50\",\n })}\n color={pricingCadency === \"yearly\" ? \"dark\" : \"alternative\"}\n onClick={() => setPricingCadency(\"yearly\")}\n />\n </div>\n\n <div className=\"tw-my-10 tw-items-center md:tw-items-stretch tw-flex tw-flex-col md:tw-flex-row tw-gap-8\">\n <PricingCard\n variant=\"secondary\"\n plan=\"Free\"\n description={t(\"pricing.cards.free.description\")}\n currency={i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"}\n price=\"0\"\n cadency={t(\"pricing.cards.cadency.month\")}\n callback={() => window.scrollTo(0, 0)}\n features={[\n t(\"pricing.cards.free.0\"),\n t(\"pricing.cards.free.1\"),\n t(\"pricing.cards.free.2\"),\n t(\"pricing.cards.free.3\"),\n t(\"pricing.cards.free.4\"),\n t(\"pricing.cards.free.5\"),\n ]}\n />\n <PricingCard\n variant=\"secondary\"\n plan=\"Premium\"\n description={t(\"pricing.cards.premium.description\")}\n currency={i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"}\n price={pricingCadency === \"monthly\" ? \"5\" : \"2\"}\n cadency={t(\"pricing.cards.cadency.month\")}\n callback={() => window.scrollTo(0, 0)}\n features={[\n t(\"pricing.cards.premium.0\"),\n t(\"pricing.cards.premium.1\"),\n t(\"pricing.cards.premium.2\"),\n t(\"pricing.cards.premium.3\"),\n t(\"pricing.cards.premium.4\"),\n t(\"pricing.cards.premium.5\"),\n ]}\n />\n <PricingCard\n variant=\"primary\"\n plan=\"Professional\"\n description={t(\"pricing.cards.professional.description\")}\n currency={i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"}\n price={pricingCadency === \"monthly\" ? \"10\" : \"5\"}\n cadency={t(\"pricing.cards.cadency.month\")}\n callback={() => window.scrollTo(0, 0)}\n features={[\n t(\"pricing.cards.professional.0\"),\n t(\"pricing.cards.professional.1\"),\n t(\"pricing.cards.professional.2\"),\n t(\"pricing.cards.professional.3\"),\n t(\"pricing.cards.professional.4\"),\n t(\"pricing.cards.professional.5\"),\n ]}\n />\n </div>\n\n <div className=\"tw-gap-2 tw-hidden md:tw-flex tw-justify-center tw-flex-col\">\n <button\n type=\"button\"\n className=\"tw-my-12 tw-text-base tw-font-medium tw-bg-transparent tw-mx-auto tw-items-center tw-inline-flex tw-gap-3\"\n data-collapse-toggle=\"comparison-content\"\n aria-expanded=\"false\"\n aria-controls=\"comparison-content\"\n >\n {t(\"pricing.comparison.title\")}\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.99957 15C9.30943 15 8.63894 14.7188 8.16095 14.23L1.18625 7.1038C0.692547 6.59881 0.720048 5.80756 1.2478 5.33632C1.77555 4.86757 2.60581 4.89257 3.0982 5.39632L9.99957 12.4463L16.9009 5.39632C17.3933 4.89132 18.2249 4.86632 18.7513 5.33632C19.2791 5.80756 19.3079 6.59881 18.8142 7.1038L11.8395 14.23C11.3602 14.7188 10.6897 15 9.99957 15Z\"\n fill=\"#000\"\n />\n </svg>\n </button>\n\n <div id=\"comparison-content\" className=\"hidden\">\n <ComparisonTable\n plans={[\n {\n name: t(\"pricing.comparison.unlimitedBookings\"),\n free: true,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.googleCalendarSync\"),\n free: true,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.googleMeetEvents\"),\n free: true,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.stripe\"),\n free: true,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.unlimitedEventTypes\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.customEventDuration\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.customEmailNotifications\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.advancedEventReminders\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.calendarConnections\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.embed\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.zoom\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.wix\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.salesforza\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.questions\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.team\"),\n free: false,\n premium: true,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.unlimitedLeadsRetention\"),\n free: false,\n premium: false,\n professional: true,\n },\n\n {\n name: t(\"pricing.comparison.zapier\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.webhooks\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.redirect\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.timeslotHop\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.bookingLimit\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.notice\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.lastAvailability\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.branding\"),\n free: false,\n premium: false,\n professional: true,\n },\n {\n name: t(\"pricing.comparison.eventApproval\"),\n free: false,\n premium: false,\n professional: true,\n },\n ]}\n />\n </div>\n </div>\n <h1 className=\"tw-my-20 tw-text-center tw-mb-4 tw-text-4xl tw-font-extrabold tw-leading-none tw-tracking-tight tw-text-gray-900 md:tw-text-5xl lg:tw-text-6xl dark:tw-text-white\">\n {t(\"FAQ.title\")}\n </h1>\n <div className=\"tw-my-20\">\n <Accordion\n items={[\n {\n content: [t(\"FAQ.1.answer\")],\n title: t(\"FAQ.1.question\"),\n },\n {\n content: [t(\"FAQ.2.answer\")],\n title: t(\"FAQ.2.question\"),\n },\n {\n content: [t(\"FAQ.4.answer\")],\n title: t(\"FAQ.4.question\"),\n },\n {\n content: [t(\"FAQ.5.answer\")],\n title: t(\"FAQ.5.question\"),\n },\n ]}\n />\n </div>\n\n <div className=\"tw-mb-20\">\n <h1 className=\"tw-text-center tw-mb-4 tw-text-4xl tw-font-extrabold tw-leading-none tw-tracking-tight tw-text-gray-900 md:tw-text-5xl lg:tw-text-6xl dark:tw-text-white\">\n {t(\"bottomCta.title\")}\n </h1>\n <p className=\"tw-text-center tw-mb-6 tw-text-lg tw-font-normal tw-text-gray-500 lg:tw-text-xl sm:tw-px-16 xl:tw-px-48 dark:tw-text-gray-400\">\n {t(\"bottomCta.subtitle\")}\n </p>\n {(loggingProvider === \"none\" || loggingProvider === \"google\") && (\n <div className=\"my-4 d-flex justify-content-center\">\n {<Login redirect=\"/\" setLoggingProvider={setLoggingProvider} />}\n </div>\n )}\n </div>\n </Container>\n </>\n );\n}\n\nexport default _Landing;\n","import React from 'react';\nimport 'bootstrap/dist/css/bootstrap.min.css';\n\nfunction OwnerName(props){\n return(\n <>\n <div className=\"h2\"> {props.name} </div>\n </>\n );\n}\n\nexport default OwnerName;\n","import React from \"react\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\n\nfunction OwnerPic(props) {\n return (\n <img\n src={props.pic}\n width=\"96px\"\n height=\"96px\"\n className=\"tw-border-4 tw-mx-auto img-fluid rounded-circle\"\n alt=\"avatar\"\n />\n );\n}\n\nexport default OwnerPic;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport './owner-info.css';\n\nfunction OwnerWelcome({sentence}){\n const {t} = useTranslation(['publicEvents']);\n const [isExpanded, setIsExpanded] = useState(false);\n const maxLength = 300; // Define max length for the content\n if (sentence === undefined || sentence === null){sentence = \"\"}\n const sentenceShort = sentence.length > maxLength ? sentence.slice(0, maxLength) + '...' : sentence;\n\n const toggleText = () => {\n setIsExpanded(!isExpanded);\n };\n\n return(\n <>\n <div className=\"bio-container\">\n <span className={isExpanded ? 'expanded' : 'collapsed'}>\n {isExpanded ? sentence : sentenceShort}\n </span>\n {sentence.length > maxLength && (\n <b onClick={toggleText} className=\"toggle-text\">\n {isExpanded ? t('showLess') : t('showMore')}\n </b>\n )}\n </div>\n\n </>\n );\n}\n\nexport default OwnerWelcome;\n","import React from \"react\";\nimport { Col } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport OwnerName from \"./OwnerName\";\nimport OwnerPic from \"./OwnerPic\";\nimport OwnerWelcome from \"./OwnerWelcome\";\nimport auth from \"../../Account/Auth\";\n\nfunction _OwnerInfo(props) {\n return (\n <>\n {Object.keys(props?.ownerInfo).length > 0 && (\n <div>\n {props?.ownerInfo?.bannerPic && (\n <div className=\"tw-border-2 tw-rounded-xl tw-max-w-3xl tw-mx-auto\">\n <img\n src={props?.ownerInfo?.bannerPic}\n className=\"tw-rounded-xl\"\n width=\"100%\"\n alt=\"banner\"\n />\n </div>\n )}\n <div\n className={`${\n props?.ownerInfo?.bannerPic ? \"tw-relative tw--mt-[60px]\" : \"\"\n } tw-mb-8`}\n >\n <OwnerPic pic={props?.ownerInfo?.pic} />\n </div>\n <OwnerName name={props?.ownerInfo?.name} />\n <OwnerWelcome sentence={props?.ownerInfo?.sentence} />\n </div>\n )}\n </>\n );\n}\n\nexport default _OwnerInfo;\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport DOMPurify from \"dompurify\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport Color from \"../../EventType/Color\";\nimport Up from \"../../EventType/Up\";\nimport Middle from \"../../EventType/Middle\";\n\nfunction _PublicEvent(props) {\n const multiLineTruncate = {\n overflow: \"hidden\",\n display: \"-webkit-box\",\n WebkitLineClamp: \"3\",\n WebkitBoxOrient: \"vertical\",\n color: \"var(--color-secondary)\",\n };\n\n const hasTrailingSlash = (str) => {\n return str.charAt(str.length - 1) === \"/\";\n };\n\n const removeLastChar = (str) => {\n return str.substr(0, str.length - 1);\n };\n\n const location = props.state.location;\n var locationValue = \"\";\n\n if (typeof location === \"string\") {\n console.info(\"[public-page][location] location type is 'string'...\");\n locationValue = location;\n }\n if (typeof location === \"object\") {\n console.info(\"[public-page][location] location type is 'object'...\");\n locationValue = location.value;\n }\n locationValue = DOMPurify.sanitize(locationValue);\n\n const description = DOMPurify.sanitize(props.state.description);\n\n return (\n <>\n <Link\n to={`${props.state.url}`}\n style={{\n minHeight: \"100%\",\n textDecoration: \"none\",\n }}\n >\n <div className=\"event-type-parent\" style={{ height: \"100%\" }}>\n <Color enabled={true} color={props.state.color} />\n <div\n className=\"event-type-container\"\n style={{\n height: \"100%\",\n background: \"var(--color-background-1)\",\n }}\n >\n <Up name={props.state.name} publicPage={true} />\n <Middle\n enabled={true}\n duration={props.state.duration}\n location={locationValue}\n />\n {props.state.description !== \"\" ? (\n <div style={multiLineTruncate}>{description}</div>\n ) : (\n <div> </div>\n )}\n </div>\n </div>\n </Link>\n </>\n );\n}\n\nexport default _PublicEvent;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Col } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport _PublicEvent from \"../PublicEvent/_PublicEvent\";\n\nfunction _EventTypes(props) {\n const { t } = useTranslation([\"publicEvents\"]);\n return (\n <>\n {Object.keys(props.eventTypes).length > 0 ? (\n Object.keys(props.eventTypes).map((key) => (\n <Col\n sm={12}\n className=\"mx-auto\"\n style={{ height: 200, maxWidth: 768 }}\n key={\"eventType-\" + key}\n >\n <_PublicEvent key={key} id={key} state={props.eventTypes[key]} />\n </Col>\n ))\n ) : (\n <span className=\"mx-auto\"> {t(\"unavailable\")} </span>\n )}\n </>\n );\n}\n\nexport default _EventTypes;\n","import React, { useEffect } from \"react\";\nimport { Container, Row, Col, Spinner } from \"react-bootstrap\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport be from \"../BE\";\nimport _OwnerInfo from \"./OwnerInfo/_OwnerInfo\";\nimport _EventTypes from \"./EventTypes/_EventTypes\";\n\nfunction _PublicEvents(props) {\n try {\n window.tidioChatApi.hide();\n } catch {}\n const [eventTypes, setEventTypes] = React.useState({});\n const [ownerInfo, setOwnerInfo] = React.useState({});\n const [loading, setLoading] = React.useState(true);\n\n React.useEffect(() => {\n document.title = \"Calendbook - Public Page\";\n const getPublicEvents = async () => {\n await be\n .get(\"eventtypes\", \"/public\", { owner: props.match.params.user }, false)\n .then((response) => {\n setEventTypes(response.eventTypes);\n setOwnerInfo(response.ownerInfo);\n setLoading(false);\n })\n .catch((response) => {\n props.history.push(\"/404\");\n });\n };\n getPublicEvents();\n }, []);\n\n return (\n <div className=\"tw-my-5 tw-container tw-max-w-3xl tw-mx-auto tw-px-4\">\n {loading ? (\n <div className=\"tw-flex tw-justify-center tw-items-center tw-h-64\">\n {/* Tailwind CSS Spinner */}\n <svg\n className=\"tw-animate-spin tw-h-10 tw-w-10 tw-text-blue-500\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <circle\n className=\"tw-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"tw-opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n </div>\n ) : (\n <div>\n {/* Owner Information */}\n <div className=\"tw-my-3 tw-text-center\">\n <_OwnerInfo ownerInfo={ownerInfo} />\n </div>\n\n {/* Event Types Grid */}\n <div className=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-auto-rows-fr\">\n <_EventTypes eventTypes={eventTypes} />\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default _PublicEvents;\n","import { useEffect } from \"react\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Zapier() {\n useEffect(() => {\n const calendbookTheme = document\n .getElementById(\"root\")\n .getAttribute(\"data-theme\");\n\n // Load JS\n const script = document.createElement(\"script\");\n script.type = \"module\";\n script.src =\n \"https://cdn.zapier.com/packages/partner-sdk/v0/zapier-elements/zapier-elements.esm.js\";\n document.head.appendChild(script);\n\n // Load CSS\n const stylesheet = document.createElement(\"link\");\n stylesheet.rel = \"stylesheet\";\n stylesheet.href =\n \"https://cdn.zapier.com/packages/partner-sdk/v0/zapier-elements/zapier-elements.css\";\n document.head.appendChild(stylesheet);\n }, []);\n\n return (\n <>\n <UpgradeBadge featureName=\"zapier-integration\" />\n <br />\n <zapier-full-experience\n client-id=\"IOYXBOagDzsf27fwzeAl6NKwxeKz5OTffEHCUndy\"\n theme=\"auto\"\n app-search-bar-display=\"show\"\n zap-style=\"card\"\n />\n </>\n );\n}\n\nexport default Zapier;\n","import { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Heading() {\n const { t } = useTranslation([\"integrations\"]);\n return (\n <>\n <div\n className=\"h3 my-3\"\n style={{ fontFamily: \"Roboto\", fontWeight: 600 }}\n >\n <UpgradeBadge featureName=\"webhooks\" />\n <br />\n {t(\"webhooks.title\")}\n </div>\n <div style={{ fontFamily: \"Roboto\", color: \"var(--color-secondary)\" }}>\n {t(\"webhooks.subtitle\")}\n </div>\n </>\n );\n}\n\nexport default Heading;\n","import React, {useState} from 'react';\nimport {useWebhooksConnectionsStore} from '../../store';\nimport {useTranslation} from 'react-i18next';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Form from 'react-bootstrap/Form';\nimport InputGroup from 'react-bootstrap/InputGroup';\nimport Dropdown from 'react-bootstrap/Dropdown';\nimport DropdownButton from 'react-bootstrap/DropdownButton';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction AddWebhook() {\n const {t} = useTranslation(['integrations','common']);\n const [processing,setProcessing] = useState(false)\n const [validateForm,setValidateForm] = useState(false);\n const [webHookStatus,setWebHookStatus] = useState({})\n const [selectedTrigger,setSelectedTrigger] = useState(\"booking\")\n const [webHookUrl,setWebHookUrl] = useState(\"\")\n const addWebhook = useWebhooksConnectionsStore((state) => state.addWebhook);\n\n async function setWebHook(e){\n e.preventDefault();\n const form = e.currentTarget;\n if(form.checkValidity() === false){\n setValidateForm(true);\n e.stopPropagation();\n } else {\n setValidateForm(true);\n setProcessing(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('webhook',\"/setWebhook\",{hook:selectedTrigger,url:webHookUrl},true)\n .then((response) => {\n addWebhook(response);\n setWebHookStatus(response)\n })\n .catch((error) => console.log('error in /settings/webhook page: ',error));\n })\n .catch(() => this.props.history.push('/login'))\n setProcessing(false);\n }\n }\n\n return(\n <>\n <Row className=\"mt-3 mb-4\">\n <Col>\n <div className=\"h4\" style={{fontWeight:600}}>{t('webhooks.addWebhook')}</div>\n </Col>\n </Row>\n <Row>\n <Col>\n <Form noValidate validated={validateForm} onSubmit={setWebHook}>\n <InputGroup hasValidation>\n <DropdownButton\n variant=\"outline-primary\"\n title={t(`common:${selectedTrigger}`)}\n id=\"trigger-selection\"\n >\n <Dropdown.Item onClick={() => setSelectedTrigger(\"booking\")}>{t('common:booking')}</Dropdown.Item>\n <Dropdown.Item onClick={() => setSelectedTrigger(\"reschedule\")}>{t('common:reschedule')}</Dropdown.Item>\n <Dropdown.Item onClick={() => setSelectedTrigger(\"delete\")}>{t('common:delete')}</Dropdown.Item>\n <Dropdown.Item onClick={() => setSelectedTrigger(\"reminder\")}>{t('common:reminder')}</Dropdown.Item>\n </DropdownButton>\n <Form.Control\n required\n type=\"url\"\n name=\"webhook-url\"\n id=\"webhook-url-input\"\n placeholder=\"https://your-integration-website.com\"\n value={webHookUrl}\n onChange={(event) => setWebHookUrl(event.target.value)}\n />\n <Button disabled={processing} type=\"submit\">\n {processing\n ?\n <Spinner size=\"sm\" animation=\"border\" variant=\"light\"/> \n :\n <span><i className=\"fa-solid fa-circle-plus me-2\"></i> {t('webhooks.addWebhookButton')} </span>\n }\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n {t('webhooks.addWebhookValidation')}\n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n </Col>\n </Row>\n </>\n );\n}\n\nexport default AddWebhook;\n","import { useContext } from 'react';\nimport ThemeContext from '../../../ThemeContext';\n\nfunction PartnerCard({partnerName,partnerData}){\n const [theme] = useContext(ThemeContext)\n const componentStyle = {\n display : \"flex\",\n justifyContent : \"center\",\n alignItems : \"center\",\n width : \"100%\",\n minWidth : 150,\n minHeight : 75,\n border : `1px solid ${partnerData[theme][\"border\"]}`,\n borderRadius : \"10px\",\n color : partnerData[theme][\"text\"],\n backgroundColor : partnerData[theme][\"background\"],\n textTransform : \"capitalize\",\n fontFamily : \"Roboto\",\n fontWeight : \"900\",\n letterSpacing : \"-0.050em\",\n fontSize : 25 \n }\n\n return(\n <a href={partnerData.link} className=\"d-flex w-100 text-decoration-none\" target=\"_blank\" rel=\"noopener noreferrer\">\n <div className=\"my-2 mx-0 mx-lg-2\" style={componentStyle}>\n {partnerName}\n </div>\n </a>\n );\n}\n\nexport default PartnerCard;\n","const partners = {\n standard : {\n light : { text : 'rgb(0, 0, 0)', border:'rgba(0, 0, 0, 0.3)', background : 'rgba(0, 0, 0, 0.1)'},\n dark : { text : 'rgb(180, 180, 180)', border : 'rgba(180, 180, 180, 0.3)', background : 'rgba(255, 255, 255, 0.1)'},\n },\n make : {\n link : \"https://www.make.com\",\n light : { text : 'rgb(109, 0, 201)', border : 'rgba(109, 0, 201, 0.3)', background : 'rgba(109, 0, 201, 0.1)'},\n dark : { text : 'rgb(213, 163, 255)', border : 'rgba(213, 163, 255, 0.3)', background : 'rgba(109, 0, 201, 0.3)'},\n },\n integrately : {\n link : \"https://integrately.com/\",\n light : { text : 'rgb(243, 90, 56)', border : 'rgba(243, 90, 56, 0.3)', background : 'rgba(243, 90, 56, 0.1)'},\n dark : { text : 'rgb(243, 90, 56)', border : 'rgba(243, 90, 56, 0.3)', background : 'rgba(243, 90, 56, 0.1)'},\n },\n pabbly : {\n link : \"https://www.pabbly.com/\",\n light : { text : 'rgb(34, 178, 118)', border : 'rgba(34, 178, 118, 0.3)', background : 'rgba(34, 178, 118, 0.1)'},\n dark : { text : 'rgb(34, 178, 118)', border : 'rgba(34, 178, 118, 0.3)', background : 'rgba(34, 178, 118, 0.1)'},\n },\n konnectzit : {\n link : \"https://konnectzit.com/\",\n light : { text : 'rgb(21, 47, 115)', border : 'rgba(21, 47, 115, 0.3)', background : 'rgba(21, 47, 115, 0.1)'},\n dark : { text : 'rgb(150, 180, 255)', border : 'rgba(150, 180, 255, 0.3)', background : 'rgba(21, 47, 115, 0.3)'},\n },\n syncspider : {\n link : \"https://syncspider.com\",\n light : { text : 'rgb(28, 68, 117)', border : 'rgb(28, 68, 117, 0.3)', background : 'rgba(28, 68, 117, 0.1)'},\n dark : { text : 'rgb(138, 190, 255)', border : 'rgb(138, 190, 255, 0.3)', background : 'rgba(28, 68, 117, 0.3)'},\n } \n}\n\n\nexport default partners;\n","import PartnerCard from './PartnerCard';\nimport partners from '../partners-list.js';\n\nfunction Partners() {\n\n return(\n <>\n <div className=\"d-block d-lg-flex my-1 my-lg-4 justify-content-center\">\n {Object.keys(partners) && Object.keys(partners).map(partnerKey => (\n <>\n {console.log(partnerKey)}\n {partnerKey !== \"standard\" &&\n <PartnerCard key={partnerKey} partnerName={partnerKey} partnerData={partners[partnerKey]}/>\n }\n </>\n ))}\n </div>\n </>\n );\n}\n\n\nexport default Partners;\n","import React, {useState} from 'react';\nimport {useWebhooksConnectionsStore} from '../../../store';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction DeleteWebhook({hook}){\n const [processing,setProcessing] = useState(false)\n const deleteWebhookStore = useWebhooksConnectionsStore((state) => state.deleteWebhook);\n\n async function deleteWebHook(_hook){\n setProcessing(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('webhook',\"/cancelWebhook\",{hook:_hook},true)\n .then((response) => {\n deleteWebhookStore(response?.hook)\n })\n .catch((error) => {\n console.log('error in /settings/webhook page: ',error)\n });\n })\n .catch(() => this.props.history.push('/login'))\n setProcessing(false)\n }\n\n const iconButton = {\n width:35,\n color:\"var(--color-text)\",\n backgroundColor:\"transparent\",\n border:\"none\",\n }\n\n return(\n <button onClick={() => deleteWebHook(hook)} style={iconButton} disabled={processing}>\n {processing\n ?\n <Spinner size=\"sm\" animation=\"border\"/> \n :\n <i className=\"fa-solid fa-trash\"></i>\n }\n </button>\n );\n}\nexport default DeleteWebhook;\n","import React, {useState} from 'react';\nimport {useWebhooksConnectionsStore} from '../../../store';\nimport {useTranslation} from 'react-i18next';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction TestWebhook({hook}){\n const {t} = useTranslation(['integrations','common']);\n const [processing,setProcessing] = useState(false)\n const deleteWebhookStore = useWebhooksConnectionsStore((state) => state.deleteWebhook);\n\n async function testWebHook(_hook){\n setProcessing(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('webhook',\"/webHookTester\",{hook:_hook},true)\n .then((response) => {\n console.log(response)\n })\n .catch((error) => {\n console.log('error in /settings/webhook page: ',error)\n });\n })\n .catch(() => this.props.history.push('/login'))\n setProcessing(false)\n }\n\n const testButton = {\n minWidth:45.85,\n marginRight:10,\n marginTop:'auto',\n marginBottom:'auto'\n }\n\n const sendTestTooltip = (props) => (\n <Tooltip id=\"button-tooltip\" {...props}>\n {t('webhooks.sendTestTooltip')}\n </Tooltip>\n );\n\n return(\n <OverlayTrigger\n delay={{ show: 250, hide: 400 }}\n overlay={sendTestTooltip}\n >\n <Button onClick={() => testWebHook(hook)} clasName=\"me-2\" style={testButton} size=\"sm\" disabled={processing}>\n {processing\n ?\n <Spinner size=\"sm\" animation=\"border\"/> \n :\n <span>{t('webhooks.sendTestButton')}</span>\n\n }\n </Button>\n </OverlayTrigger>\n );\n}\nexport default TestWebhook;\n","import React,{useContext} from 'react';\nimport ThemeContext from '../../../ThemeContext';\nimport Card from 'react-bootstrap/Card'\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport DeleteWebhook from './DeleteWebhook';\nimport TestWebhook from './TestWebhook';\nimport partners from '../partners-list.js';\n\nconst getProvider = (_url,_supportedProviders) => {\n let fullHostname = _url.split('/')[2]\n let urlComponents = fullHostname.split('.')\n let provider = urlComponents[urlComponents.length -2]\n provider = checkProvider(provider,_supportedProviders)\n return provider\n}\n\nconst checkProvider = (_provider, _supportedProviders) => {\n if(_supportedProviders.includes(_provider)){\n return _provider\n } else {\n return 'standard'\n }\n}\n\nfunction WebhookCard({hook,hookName,url}){\n\n const [theme] = useContext(ThemeContext)\n const supportedProviders = Object.keys(partners)\n const provider = getProvider(url,supportedProviders)\n\n const componentStyle={\n overflow:'hidden',\n maxWidth:'60ch',\n textOverflow:'ellipsis',\n whiteSpace:'nowrap',\n border:'1px solid',\n borderRadius:'15px',\n margin:'10px 0px',\n padding:'3px 10px',\n fontSize:14,\n borderColor:partners[provider][theme].border,\n color:partners[provider][theme].text,\n backgroundColor:partners[provider][theme].background,\n }\n\n return(\n <Card className=\"my-2\" style={{color:'var(--color-text)',background:'var(--color-background-1)'}}>\n <Card.Body>\n <Row>\n <Col xs={8}>\n <Card.Title className=\"text-capitalize\">\n {hookName}\n </Card.Title>\n\n <Card.Subtitle className=\"mb-2\" style={componentStyle}>\n {url}\n </Card.Subtitle>\n\n </Col>\n\n <Col xs={4} className=\"d-flex justify-content-end\">\n <TestWebhook hook={hook}/>\n <DeleteWebhook hook={hook}/>\n </Col>\n </Row>\n </Card.Body>\n </Card>\n\n );\n\n}\nexport default WebhookCard;\n","import React, { useState, useEffect } from 'react';\nimport {useWebhooksConnectionsStore} from '../../store';\nimport {useTranslation} from 'react-i18next';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport WebhookCard from './WebhookCard/WebhookCard';\n\nfunction ConnectedWebhooks(){\n const {t,i18n} = useTranslation(['integrations','common']);\n const [processing,setProcessing] = useState(false)\n const webhooksList = useWebhooksConnectionsStore((state) => state.webhooksList);\n const setWebhooksList = useWebhooksConnectionsStore((state) => state.setWebhooksList);\n\n useEffect(() => {\n const getConnectedWebhooks = async () => {\n setProcessing(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.get(\"webhook\",\"/getWebhook\",{},true)\n .then((response) => {\n if(!Array.isArray(response))\n setWebhooksList([])\n else\n setWebhooksList(response);\n })\n .catch((response) => {console.log('error in /integrations/webhooks page: ',response);})\n })\n .catch(()=>{})\n setProcessing(false)\n }\n getConnectedWebhooks();\n },[setWebhooksList])\n\n \n return(\n <>\n <Row className=\"mt-4 mb-4\">\n <Col>\n <div className=\"h4\" style={{fontWeight:600}}>{t('webhooks.connectedWebhooks')}</div>\n </Col>\n </Row>\n <Row>\n <Col>\n {processing\n ?\n <Spinner size=\"sm\" animation=\"border\"/> \n :\n <>\n {Array.isArray(webhooksList) &&\n <>\n {webhooksList.length > 0 \n ?\n webhooksList.map((webhook) => (\n <WebhookCard\n hook={webhook?.hook}\n hookName={t(`common:${webhook?.hook}`)}\n url={webhook?.url}\n />\n ))\n :\n <>\n <div style={{color:'var(--color-secondary)'}}>{t('webhooks.noConnectedWebhooks')}</div>\n {i18n.language.includes('en') &&\n <div style={{color:'var(--color-secondary)'}}>Don't know how to do it? <a href=\"https://www.youtube.com/watch?v=Wgd0aFtwxAs\" target=\"_blank\" rel=\"noopener noreferrer\">Whatch the video tutorial.</a></div>\n }\n </>\n }\n </>\n }\n </>\n }\n </Col>\n </Row>\n </>\n );\n}\n\nexport default ConnectedWebhooks;\n","import React from 'react';\nimport Heading from './Heading';\nimport AddWebhook from './AddWebhook';\nimport Partners from './Partners/_Partners';\nimport ConnectedWebhooks from './ConnectedWebhooks';\n\nfunction Webhooks(){\n return (\n <>\n <Heading/>\n <Partners/>\n <AddWebhook/>\n <ConnectedWebhooks/>\n </>\n );\n}\n\nexport default Webhooks;\n","import UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Heading() {\n return (\n <div>\n <div\n className=\"h3 my-3\"\n style={{ fontFamily: \"Roboto\", fontWeight: 600 }}\n >\n <UpgradeBadge featureName=\"zoom\" />\n <br />\n Calendbook & Zoom\n </div>\n <div style={{ fontFamily: \"Roboto\", color: \"var(--color-secondary)\" }}>\n Connect Calendbook to your Zoom account to create video conference links\n for your bookings.\n </div>\n </div>\n );\n}\n\nexport default Heading;\n","import {useState} from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Alert from 'react-bootstrap/Alert';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction ConnectZoom(){\n const [zoomLink,setZoomLink] = useState('');\n const [loading,setLoading] = useState(false)\n\n const getZoomLink = async () => {\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('integrations','/zoom/init',false,true)\n .then(response => {\n setZoomLink(response?.url);\n console.info(\"[integrations][zoom] Created zoom link:\",zoomLink);\n window.open(response?.url);\n })\n .catch((e) => {\n console.info(\"[integrations][zoom] Error creating zoom link:\",e);\n });\n })\n .catch((e) => {\n console.info(\"[integrations][zoom] Error authenticating user:\",e);\n });\n setLoading(false)\n }\n\n return(\n <div className=\"mt-4\">\n\n {/*\n <Alert variant=\"warning\">\n Dear Calendbook User! \n <br/>\n We are currently changing our zoom connection flow and you will be able to connect your zoom account in the next few days :)\n <br/>\n For any question about this, please reach out to us in the website chat.\n </Alert>\n */}\n\n <div className=\"mb-3\">\n Add Calendbook to your Zoom Account!\n </div>\n\n <button onClick={getZoomLink} style={{border:'none',background:'transparent'}}>\n <img \n src=\"https://marketplacecontent.zoom.us/zoom_marketplace/img/add_to_zoom.png\"\n height=\"32px\"\n width=\"150px\"\n alt=\"Add to ZOOM\"\n />\n </button>\n {loading &&\n <span>\n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"me-3\"/>\n </span>\n }\n </div>\n );\n}\n\nexport default ConnectZoom;\n\n","import {useState} from 'react';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction DisconnectZoom({zoomUser,setZoomUser}){\n const [loading,setLoading] = useState(false)\n\n const disconnectZoom = async () => {\n console.info(\"[zoom] disconnecting zoom user account\")\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('integrations','/zoom/internal/revoke',false,true)\n .then(response => {\n // if 200 ok set zoomUser obj to {}\n setZoomUser({})\n console.log(response)\n });\n });\n setLoading(false)\n }\n\n return(\n <div className=\"mt-4\">\n <div className=\"mb-3\">\n You can disconnect your Zoom Account here:\n </div>\n \n <Button \n variant=\"outline-danger\"\n size=\"sm\"\n disabled={loading}\n onClick={disconnectZoom}\n >\n Disconnect Zoom {loading && \n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"ms-2\"/>\n }\n </Button>\n </div>\n );\n}\n\nexport default DisconnectZoom;\n","function ProfilePic({pic}){\n return(\n <>\n <img className=\"profile-pic\" src={pic} alt=\"user-pic\" width=\"60px\" height=\"60px\"></img>\n <img src=\"/app-assets/svg/zoom-logo.svg\" className=\"zoom-logo\" alt=\"Zoom\" width=\"20px\" height=\"20px\"/>\n </>\n );\n}\n\nexport default ProfilePic;\n\n","function FullName({fullName}){\n return(\n <div className=\"full-name\">{fullName}</div>\n );\n}\n\nexport default FullName;\n\n","function Email({email}){\n return(\n <div className=\"email\">{email}</div>\n );\n}\n\nexport default Email;\n\n","import ProfilePic from './ProfilePic';\nimport FullName from './FullName';\nimport Email from './Email';\nimport './user-info.css';\n\nfunction UserInfo({zoomUser}){\n return(\n <>\n {zoomUser &&\n <div className=\"mt-4\">\n <div className=\"user-info\">\n <ProfilePic pic={zoomUser.picUrl}/>\n <div className=\"user-details\">\n <FullName fullName={zoomUser.displayName}/>\n <Email email={zoomUser.email}/>\n </div>\n </div>\n </div>\n }\n </>\n )\n}\n\nexport default UserInfo;\n\n","import { useEffect, useState, useRef } from 'react';\nimport Heading from './Heading';\nimport ConnectZoom from './ConnectZoom';\nimport DisconnectZoom from './DisconnectZoom';\nimport UserInfo from './UserInfo/UserInfo';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction Zoom() {\n // State to manage the Zoom user information\n const [ZoomUser, setZoomUser] = useState({});\n // State to manage the loading status\n const [loading, setLoading] = useState(false);\n // Ref to track whether the component is currently mounted\n const isMounted = useRef(true);\n\n useEffect(() => {\n // Mark the component as mounted when the effect runs\n isMounted.current = true;\n\n console.info(\"[Zoom] loading user info\");\n\n // Function to check the connection status with Zoom\n const checkConnectionStatus = async () => {\n setLoading(true); // Start loading\n\n try {\n // Check if the user is authenticated\n const isAuthenticated = await auth.isAuthenticated();\n if (isAuthenticated && isMounted.current) {\n // Fetch the Zoom user profile if authenticated\n const response = await be.get('integrations', '/zoom/userProfile', false, true);\n if (response && isMounted.current) {\n setZoomUser(response); // Update the Zoom user state if component is still mounted\n }\n }\n } catch (e) {\n // Log any errors that occur during authentication or fetching user profile\n console.info(\"[integrations][Zoom] Error fetching user profile:\", e);\n } finally {\n // Stop loading if the component is still mounted\n if (isMounted.current) {\n setLoading(false);\n }\n }\n };\n\n // Invoke the connection status check\n checkConnectionStatus();\n\n // Cleanup function to mark the component as unmounted\n return () => {\n isMounted.current = false;\n };\n }, []); // Empty dependency array ensures this effect runs only once\n\n // Utility function to check if an object is non-empty\n const isConnected = (_obj) => {\n return Object.keys(_obj).length > 0;\n };\n\n return (\n <>\n {/* Render the heading */}\n <Heading />\n {/* Conditionally render content based on the loading state */}\n {loading ? (\n <>Loading...</>\n ) : (\n <>\n {/* Conditionally render components based on whether the user is connected */}\n {isConnected(ZoomUser) && <UserInfo zoomUser={ZoomUser} />}\n {isConnected(ZoomUser) && (\n <DisconnectZoom zoomUser={ZoomUser} setZoomUser={setZoomUser} />\n )}\n {!isConnected(ZoomUser) && <ConnectZoom />}\n </>\n )}\n </>\n );\n}\n\nexport default Zoom;\n","import {useTranslation} from 'react-i18next';\n\nfunction Heading(){\n const {t} = useTranslation(['integrations']);\n return(\n <div>\n <div className=\"h3 my-3\" style={{fontFamily:\"Roboto\",fontWeight:600}}>{t('stripe.heading.title')}</div>\n <div style={{fontFamily:\"Roboto\",color:'var(--color-secondary)'}}>{t('stripe.heading.subtitle')}</div>\n </div>\n );\n}\n\nexport default Heading;\n","import {useTranslation} from 'react-i18next';\nimport {useState} from 'react';\nimport Select from 'react-select';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport './stripe.css';\n\nfunction ConnectStripe(){\n\n const {t} = useTranslation(['integrations']);\n const [selectedCountry, setSelectedCountry] = useState(\"\");\n const [loading,setLoading] = useState(false)\n const [stripeOnboarding,setStripeOnboarding] = useState(false)\n\n const countries = [\n {label:\"Australia\", value:\"AU\"},\n {label:\"Austria\", value:\"AT\"},\n {label:\"Belgium\", value:\"BE\"},\n {label:\"Brazil\", value:\"BR\"},\n {label:\"Bulgaria\", value:\"BG\"},\n {label:\"Canada\", value:\"CA\"},\n {label:\"Croatia\", value:\"HR\"},\n {label:\"Cyprus\", value:\"CY\"},\n {label:\"Czech Republic\", value:\"CZ\"},\n {label:\"Denmark\", value:\"DK\"},\n {label:\"Estonia\", value:\"EE\"},\n {label:\"Finland\", value:\"FI\"},\n {label:\"France\", value:\"FR\"},\n {label:\"Germany\", value:\"DE\"},\n {label:\"Gibraltar\", value:\"GI\"},\n {label:\"Greece\", value:\"GR\"},\n {label:\"Hong Kong SAR\", value:\"HK\"},\n {label:\"Hungary\", value:\"HU\"},\n {label:\"India\", value:\"IN\"},\n {label:\"Ireland\", value:\"IE\"},\n {label:\"Italy\", value:\"IT\"},\n {label:\"Japan\", value:\"JP\"},\n {label:\"Latvia\", value:\"LV\"},\n {label:\"Liechtenstein\", value:\"LI\"},\n {label:\"Lithuania\", value:\"LT\"},\n {label:\"Luxembourg\", value:\"LU\"},\n {label:\"Malaysia\", value:\"MY\"},\n {label:\"Malta\", value:\"MT\"},\n {label:\"Mexico\", value:\"MX\"},\n {label:\"Netherlands\", value:\"NL\"},\n {label:\"New zealand\", value:\"NZ\"},\n {label:\"Norway\", value:\"NO\"},\n {label:\"Poland\", value:\"PL\"},\n {label:\"Portugal\", value:\"PT\"},\n {label:\"Romania\", value:\"RO\"},\n {label:\"Singapore\", value:\"SG\"},\n {label:\"Slovakia\", value:\"SK\"},\n {label:\"Slovenia\", value:\"SI\"},\n {label:\"Spain\", value:\"ES\"},\n {label:\"Sweden\", value:\"SE\"},\n {label:\"Switzerland\", value:\"CH\"},\n {label:\"Thailand\", value:\"TH\"},\n {label:\"United Arab Emirates\", value:\"AE\"},\n {label:\"United Kingdom\", value:\"GB\"},\n {label:\"United States\", value:\"US\"}\n ] \n \n const selectStyle = {\n control: (baseStyles,state) => ({\n ...baseStyles,\n width:'100%',\n minWidth:200,\n background:'var(--color-background-2)',\n color:'var(--color-text)',\n border:'1px solid var(--color-border)'\n }),\n singleValue: (baseStyles,state) => ({\n ...baseStyles,\n color:'var(--color-text)'\n }),\n menu: (baseStyles,state) => ({\n ...baseStyles, \n width:'100%',\n minWidth:200,\n background:'var(--color-background-2)',\n color:'var(--color-text)'\n }),\n option : (baseStyles,state) => ({\n ...baseStyles, \n background: state.isFocused ? 'var(--color-primary)' : 'var(--color-background-2)',\n color: state.isFocused ? 'white' : 'var(--color-text)'\n })\n ,}\n\n const renderTooltip = (props) => (\n <Tooltip id=\"button-tooltip\" {...props}>\n {t('stripe.connect.selectCountry.tooltip')}\n </Tooltip>\n );\n \nconst getStripeOnboarding = async () => {\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('stripe-connect','/connect/onboarding',{country:selectedCountry},true,true)\n .then(response => {\n setStripeOnboarding(response?.url);\n console.info(\"[integrations][stripe] Created stripe onboarding link:\",stripeOnboarding);\n window.location.assign(response?.url);\n })\n .catch((e) => {\n console.info(\"[integrations][stripe] Error creating stripe onboarding link:\",e);\n });\n })\n .catch((e) => {\n console.info(\"[integrations][stripe] Error authenticating user:\",e);\n });\n setLoading(false)\n }\n return(\n <div className=\"mt-4\">\n <div className=\"mb-3\">\n {t('stripe.connect.title')}\n </div>\n\n <div className=\"d-block d-sm-flex align-items-center\">\n <Select styles={selectStyle} placeholder={t('stripe.connect.selectCountry.placeholder')} options={countries} onChange={(selection) => setSelectedCountry(selection.value)}/>\n\n <div className=\"d-grid gap-2\">\n <OverlayTrigger\n placement={window.screen.width > 576 ? \"right\" : \"bottom\"}\n delay={{ show: 250, hide: 400 }}\n overlay={!selectedCountry ? renderTooltip : <></>}\n >\n <button disabled={!selectedCountry} className=\"d-block d-sm-inline-block mx-sm-2 my-2 stripe-button\" onClick={getStripeOnboarding}>\n <img \n src=\"app-assets/img/stripe-logo.png\"\n height=\"34\"\n width=\"34\"\n alt=\"STRIPE\"\n />\n <span className=\"mx-2\">{t('stripe.connect.button')}</span>\n {loading &&\n <span>\n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"me-3\"/>\n </span>\n }\n </button>\n </OverlayTrigger>\n </div>\n </div>\n\n <div className=\"iframe-container mb-3\">\n <iframe width=\"805\" height=\"503\" src=\"https://www.youtube.com/embed/OfwfA-U8lmU\" title=\"Get paid for your time with @stripe & @calendbook FREE users can charge for a super low $1 fee\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe>\n </div>\n </div>\n );\n}\n\nexport default ConnectStripe;\n\n","import {useTranslation} from 'react-i18next';\nimport Button from 'react-bootstrap/Button';\n\nfunction DisconnectStripe({stripeUser,setStripeUser,toggleShowDisconnectAlert}){\n const {t} = useTranslation(['integrations']);\n return(\n <div className=\"mt-2 d-block d-sm-flex align-items-center\">\n\n <div style={{color:'var(--color-secondary)'}} className=\"me-0 me-sm-auto mb-3 mb-sm-0\">\n {t('stripe.dangerZone.disconnect.title')}\n </div>\n \n <Button \n className=\"ms-0 ms-sm-auto \"\n variant=\"outline-danger\"\n size=\"sm\"\n onClick={toggleShowDisconnectAlert}\n >\n {t('stripe.dangerZone.disconnect.button')}\n </Button>\n\n </div>\n );\n}\n\nexport default DisconnectStripe;\n","import {useTranslation} from 'react-i18next';\nimport Toast from 'react-bootstrap/Toast';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\n\nfunction DisconnectAlert({showDisconnectAlert,toggleShowDisconnectAlert,disconnectStripe,disconnecting}){\n const {t} = useTranslation(['integrations']);\n return(\n <Toast style={{background:'var(--color-background-1'}} className=\"mt-3 w-100\" show={showDisconnectAlert} onClose={toggleShowDisconnectAlert}>\n <Toast.Header style={{background:'var(--color-background-2'}}>\n <div className=\"d-inline me-auto\"><strong className=\"text-danger\">{t('stripe.dangerZone.disconnect.alert.dangerousOperation')} </strong> <span style={{color:'var(--color-secondary)'}} className=\"me-0 ms-sm-2\">{t('stripe.dangerZone.disconnect.alert.operation')}</span></div>\n </Toast.Header>\n <Toast.Body>\n <div>{t('stripe.dangerZone.disconnect.alert.question')}</div>\n <ul>\n <li><small>{t('stripe.dangerZone.disconnect.alert.consequences.etype')}</small></li>\n <li><small>{t('stripe.dangerZone.disconnect.alert.consequences.refund')}</small></li>\n </ul>\n <div className=\"mt-2 d-flex\">\n <Button \n variant=\"outline-secondary\"\n className=\"flex-grow-1 me-1\"\n size=\"sm\"\n onClick={toggleShowDisconnectAlert}>\n {t('stripe.dangerZone.disconnect.alert.buttons.cancel')}\n </Button>\n\n <Button\n disabled={disconnecting}\n variant=\"outline-danger\"\n className=\"flex-grow-1 ms-1\"\n size=\"sm\"\n onClick={disconnectStripe}>\n <span>{t('stripe.dangerZone.disconnect.alert.buttons.confirm')}</span>\n <span className=\"vertical-align-middle\">\n {disconnecting && \n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"ms-2\"/>\n }\n </span>\n </Button>\n </div>\n </Toast.Body>\n </Toast>\n\n );\n}\n\nexport default DisconnectAlert;\n","import {useState} from 'react';\nimport DisconnectStripe from './DisconnectStripe';\nimport DisconnectAlert from './DisconnectAlert';\nimport Accordion from 'react-bootstrap/Accordion';\nimport be from '../../../BE';\nimport auth from '../../../Account/Auth';\n\nfunction DangerZone({stripeUser, setStripeUser}){\n const [showDisconnectAlert,setShowDisconnectAlert] = useState(false)\n const [disconnecting,setDisconnecting] = useState(false)\n\n const toggleShowDisconnectAlert= () => {\n setShowDisconnectAlert(!showDisconnectAlert);\n }\n \n const disconnectStripe = async () => {\n console.info(\"[integrations][stripe] disconnecting stripe user account\")\n setDisconnecting(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('stripe-connect','/connect/disconnect',false,true,true)\n .then(response => {\n setStripeUser({})\n console.info(\"[integrations][stripe] disconnected stripe user account\")\n });\n });\n setDisconnecting(false)\n }\n\n return(\n <>\n <DisconnectAlert \n showDisconnectAlert={showDisconnectAlert}\n setShowDisconnectAlert={setShowDisconnectAlert}\n toggleShowDisconnectAlert={toggleShowDisconnectAlert}\n disconnecting={disconnecting}\n disconnectStripe={disconnectStripe}\n />\n <Accordion className=\"mt-4\">\n <Accordion.Item eventKey=\"0\" style={{background:'var(--color-background-1'}}>\n <Accordion.Header>\n Danger Zone\n </Accordion.Header>\n <Accordion.Body>\n <DisconnectStripe\n stripeUser={stripeUser}\n setStripeUser={setStripeUser}\n toggleShowDisconnectAlert={toggleShowDisconnectAlert}\n />\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n </>\n );\n}\n\nexport default DangerZone\n","import auth from '../../../Account/Auth';\n\nfunction ProfilePic({pic}){\n // using calendbook profile pic if not set in stripe\n const calendbookPic = auth.getPic()\n return(\n <>\n <img className=\"profile-pic\" src={pic ? pic : calendbookPic} alt=\"user-pic\" width=\"60px\" height=\"60px\"></img>\n <img src=\"/app-assets/img/stripe-logo.png\" className=\"stripe-logo\" alt=\"Zoom\" width=\"20px\" height=\"20px\"/>\n </>\n );\n}\n\nexport default ProfilePic;\n\n","function FullName({fullName}){\n return(\n <>\n {fullName &&\n <div className=\"full-name\">{fullName}</div>\n }\n </>\n );\n}\n\nexport default FullName;\n\n","function Email({email}){\n return(\n <>\n {email &&\n <div className=\"email\">{email}</div>\n }\n </>\n );\n}\n\nexport default Email;\n\n","import {useTranslation} from 'react-i18next';\n\nfunction Dashboard({url}){\n const {t} = useTranslation(['integrations']);\n return(\n <div>\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">{t('stripe.dashboard.link')}</a> {t('stripe.dashboard.subtitle')} \n </div>\n );\n}\n\nexport default Dashboard;\n","import {useTranslation} from 'react-i18next';\nimport ProfilePic from './ProfilePic';\nimport FullName from './FullName';\nimport Email from './Email';\nimport Dashboard from './Dashboard';\nimport './user-info.css';\n\nfunction UserInfo({stripeUser}){\n const {t} = useTranslation(['integrations']);\n return(\n <>\n {stripeUser &&\n <div className=\"mt-4\">\n <div className=\"user-info\">\n <ProfilePic pic={stripeUser?.picUrl}/>\n <div className=\"user-details\">\n <FullName fullName={stripeUser?.displayName}/>\n <Email email={stripeUser?.email}/>\n </div>\n </div>\n <p>{t('stripe.userInfo.fee')}</p>\n <Dashboard url={stripeUser?.dashboardUrl}/>\n </div>\n }\n </>\n )\n}\n\nexport default UserInfo;\n\n","import {useEffect, useState} from 'react';\nimport Heading from './Heading';\nimport ConnectStripe from './ConnectStripe';\nimport DangerZone from './DangerZone/DangerZone';\nimport UserInfo from './UserInfo/UserInfo';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction Stripe(){\n const [stripeUser,setStripeUser] = useState({})\n const [loading,setLoading] = useState(false)\n\n useEffect(() => {\n console.info(\"[integrations][stripe] loading user info\")\n const checkConnectionStatus = async () => {\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('stripe-connect','/connect/userProfile',false,true,true)\n .then(response => {\n if(response.email !== null){\n setStripeUser(response);\n console.info(\"[integrations][stripe] Set stripe user profile:\", response)\n }else{\n setStripeUser({});\n console.info(\"[integrations][stripe] Fetched empty user profile:\",response);\n }\n })\n .catch((e) => {\n console.info(\"[integrations][stripe] Error fetching user profile:\",e);\n });\n })\n .catch((e) => {\n console.info(\"[integrations][stripe] Error authenticating user:\",e);\n });\n setLoading(false)\n }\n checkConnectionStatus()\n },[])\n\n const isConnected = (_obj) => {\n return Object.keys(_obj).length > 0\n }\n\n return(\n <>\n <Heading/>\n {loading\n ?\n <>Loading...</>\n :\n <>\n {isConnected(stripeUser) && <UserInfo stripeUser={stripeUser}/>}\n {isConnected(stripeUser) && <DangerZone stripeUser={stripeUser} setStripeUser={setStripeUser}/>}\n {!isConnected(stripeUser) && <ConnectStripe/>}\n </>\n }\n </>\n );\n}\n\nexport default Stripe;\n","import { useTranslation } from \"react-i18next\";\nimport UpgradeBadge from \"../../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction Heading() {\n const { t } = useTranslation([\"integrations\"]);\n return (\n <div>\n <div\n className=\"h3 my-3\"\n style={{ fontFamily: \"Roboto\", fontWeight: 600 }}\n >\n <UpgradeBadge featureName=\"salesforza\" />\n <br />\n {t(\"salesforza.heading.title\")}\n </div>\n <div style={{ fontFamily: \"Roboto\", color: \"var(--color-secondary)\" }}>\n {t(\"salesforza.heading.subtitle\")}\n </div>\n </div>\n );\n}\n\nexport default Heading;\n","import {useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport FormControl from 'react-bootstrap/FormControl';\nimport Button from 'react-bootstrap/Button';\nimport InputGroup from 'react-bootstrap/InputGroup'\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction ConnectSalesForza({setSalesForzaUser}){\n const {t} = useTranslation(['integrations']);\n const [email,setEmail] = useState('');\n const [loading,setLoading] = useState(false)\n const [status, setStatus] = useState(0);\n\n const responseFeedbackStyle = {\n fontSize:14\n }\n \n const handleChange = (event) => {\n setStatus(0);\n setEmail(event.target.value);\n }\n\n const isValidEmail = () => {\n return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?:\\.[a-zA-Z]{2,}){0,1}$/.test(email)\n }\n\n const connectSalesForza = async (e) => {\n if(!isValidEmail()){\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setLoading(true)\n setStatus(0);\n\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('account-jubilant','/salesforza',{email: email},true,true)\n .then(response => {\n setStatus(200);\n console.info(\"[integrations][salesforza] connected email:\",email);\n setSalesForzaUser({email})\n })\n .catch((e) => {\n setStatus(e?.response?.status)\n console.info(\"[integrations][salesforza] Error connecting email:\",e);\n });\n })\n .catch((e) => {\n setStatus(e?.response?.status)\n console.info(\"[integrations][salesforza] Error authenticating user:\",e);\n });\n setLoading(false)\n }\n }\n\n return(\n <div className=\"mt-4\">\n\n <div className=\"mb-3\">\n 1. {t('salesforza.connect.extension')} <a href=\"https://chromewebstore.google.com/detail/salesforza-gmail-mail-mer/fnopnjoidnndbjeppcliehigoajogiba\" target=\"_blank\" rel=\"noopener noreferrer\">link</a>\n </div>\n <div>2. {t('salesforza.connect.email')}</div>\n <Form noValidate validated={isValidEmail()} onSubmit={connectSalesForza}>\n <InputGroup hasValidation>\n <FormControl\n type=\"email\"\n name=\"email\"\n id=\"email\"\n placeholder={auth.getEmail() || \"email@domain.com\"}\n aria-describedby=\"salesforza-email\"\n value={email}\n onChange={handleChange}\n isInvalid={!isValidEmail()}\n />\n <Button disabled={loading} type='submit'>\n {loading \n ? \n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> \n : \n <i className=\"fas fa-long-arrow-alt-right\"></i>\n }\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n <span>{t('salesforza.invalid')}</span>\n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n {(status >= 400 && status <= 500) &&\n <p className=\"text-danger\" style={responseFeedbackStyle}>{t('salesforza.error')}</p>\n }\n {status === 200 &&\n <p className=\"text-success\" style={responseFeedbackStyle}>{t('salesforza.success')}</p>\n }\n\n \n </div>\n );\n}\n\nexport default ConnectSalesForza;\n\n","import {useTranslation} from 'react-i18next';\nimport {useState} from 'react';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction DisconnectSalesForza({salesForzaUser,setSalesForzaUser}){\n const {t} = useTranslation(['integrations']);\n const [loading,setLoading] = useState(false)\n\n const disconnectSalesForza = async () => {\n console.info(\"[salesforza] disconnecting salesforza user account\")\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.del('account-jubilant','/salesforza/',false,true,true)\n .then(response => {\n // if 200 ok set user obj to {}\n setSalesForzaUser({})\n console.log(response)\n });\n });\n setLoading(false)\n }\n\n return(\n <div className=\"mt-4\">\n <div className=\"mb-3\">\n {t('salesforza.disconnect.title')}\n </div>\n \n <Button \n variant=\"outline-danger\"\n size=\"sm\"\n disabled={loading}\n onClick={disconnectSalesForza}\n >\n {t('salesforza.disconnect.button')}\n {loading && \n <Spinner\n animation=\"border\"\n size=\"sm\"\n className=\"ms-2\"/>\n }\n </Button>\n </div>\n );\n}\n\nexport default DisconnectSalesForza;\n","function ProfilePic({pic}){\n return(\n <>\n {pic && <img className=\"profile-pic\" src={pic} alt=\"user-pic\" width=\"60px\" height=\"60px\"></img>}\n </>\n );\n}\n\nexport default ProfilePic;\n\n","function FullName({fullName}){\n return(\n <>\n {fullName && <div className=\"full-name\">{fullName}</div>}\n </>\n );\n}\n\nexport default FullName;\n\n","function Email({email}){\n return(\n <>\n {email && <div className=\"email\">{email}</div>}\n </>\n );\n}\n\nexport default Email;\n\n","import ProfilePic from './ProfilePic';\nimport FullName from './FullName';\nimport Email from './Email';\nimport './user-info.css';\n\nfunction UserInfo({salesForzaUser}){\n return(\n <>\n {salesForzaUser &&\n <div className=\"mt-4\">\n <div className=\"user-info\">\n <ProfilePic pic={salesForzaUser?.picUrl}/>\n <div className=\"user-details\">\n <FullName fullName={salesForzaUser?.displayName}/>\n <Email email={salesForzaUser?.email}/>\n </div>\n </div>\n </div>\n }\n </>\n )\n}\n\nexport default UserInfo;\n\n","import {useEffect, useState} from 'react';\nimport Heading from './Heading';\nimport ConnectSalesForza from './ConnectSalesForza';\nimport DisconnectSalesForza from './DisconnectSalesForza';\nimport UserInfo from './UserInfo/UserInfo';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction SalesForza(){\n const [salesForzaUser,setSalesForzaUser] = useState({})\n const [loading,setLoading] = useState(false)\n\n useEffect(() => {\n console.info(\"[SalesForza] loading user info\")\n const checkConnectionStatus = async () => {\n setLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('account-jubilant','/salesforza',false,true,true)\n .then(response => {\n setSalesForzaUser(response);\n })\n .catch((e) => {\n console.info(\"[integrations][SalesForza] Error fetching user profile:\",e);\n });\n })\n .catch((e) => {\n console.info(\"[integrations][SalesForza] Error authenticating user:\",e);\n });\n setLoading(false)\n }\n checkConnectionStatus()\n },[])\n\n const isConnected = (_obj) => {\n return Object.keys(_obj).length > 0 && _obj?.email\n }\n\n return(\n <>\n <Heading/>\n {loading\n ?\n <>Loading...</>\n :\n <>\n {isConnected(salesForzaUser) && <UserInfo salesForzaUser={salesForzaUser}/>}\n {isConnected(salesForzaUser) && <DisconnectSalesForza salesForzaUser={salesForzaUser} setSalesForzaUser={setSalesForzaUser}/>}\n {!isConnected(salesForzaUser) && <ConnectSalesForza setSalesForzaUser={setSalesForzaUser}/>}\n </>\n }\n </>\n );}\n\nexport default SalesForza;\n","import {useTranslation} from 'react-i18next';\n\nfunction Heading(){\n const {t} = useTranslation(['integrations']);\n return(\n <div className=\"mb-4\">\n <div className=\"h3 my-3\" style={{fontFamily:\"Roboto\",fontWeight:600}}>{t('telegram.heading.title')}</div>\n <div style={{fontFamily:\"Roboto\",color:'var(--color-secondary)'}}>{t('telegram.heading.subtitle')}</div>\n </div>\n );\n}\n\nexport default Heading;\n","import React, { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Form, Button, Spinner, InputGroup } from 'react-bootstrap';\nimport { IMaskInput } from 'react-imask';\nimport Heading from './Heading';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nconst ResponseFeedback = ({ status, message }) => (\n <p className={status === 200 ? 'text-success' : 'text-danger'}>{message}</p>\n);\n\nconst TelegramIcon = () => (\n <i\n className=\"fa-brands fa-telegram justify-content-center\"\n style={{\n padding:'2px 5px',\n color:'#0088cc',\n background:'var(--color-background-1)',\n fontSize:32,\n border:'1px solid var(--color-border-light)',\n borderRadius:'5px 0 0 5px'\n }}>\n </i>\n\n);\n\nfunction Telegram(){\n const history = useHistory();\n const { t } = useTranslation(['integrations']);\n const [telegram, setTelegram] = useState('');\n const [status, setStatus] = useState(0);\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const [loadingInfo, setLoadingInfo] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n useEffect(()=>{\n const getTelegram = async () => {\n const body = {};\n setLoadingInfo(true);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('account-jubilant','/account/telegram',body,true,true)\n .then(response => {\n setInfoResponseStatus(200);\n setTelegram(response?.handle);\n })\n .catch(error => {\n console.error(\"[integrations][telegram] network error while retrieving info:\",error);\n setInfoResponseStatus(error?.response?.status);\n })\n })\n .catch((error) => {\n console.error(\"[integrations][telegram] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[integrations][telegram] functional error while retrieving info:\",error);\n setInfoResponseStatus(500);\n }finally{\n setLoadingInfo(false);\n }\n }\n getTelegram();\n },[])\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n const body = {\n handle: telegram.replace(\"https://t.me/\",\"\")\n }\n await be.post(\"account-jubilant\",\"/account/telegram\",body,true,true)\n .then((r) => {\n setStatus(200);\n })\n .catch((error) => {\n console.error(\"[integrations][telegram] network error while saving:\",error);\n setStatus(error?.response?.status);\n })\n })\n .catch(error => {\n console.error(\"[integrations][telegram] authentication error while saving:\", error)\n history.push({pathname:'/login'})\n })\n } catch (error) {\n console.error(\"[integrations][telegram] functional error while saving:\",error);\n setStatus(500);\n } finally {\n setProcessing(false)\n }\n }\n return (\n <>\n <Heading/>\n <Form onSubmit={handleSubmit}>\n <InputGroup style={{flexWrap:'nowrap',height:38}}>\n <TelegramIcon />\n <IMaskInput\n type=\"text\"\n value={telegram}\n disabled={loadingInfo || processing}\n mask={'{https://t.me/}username'}\n unmask={true}\n blocks={{ username: { mask: /^[a-zA-Z0-9_]*$/ } }}\n maxLength={32}\n placeholder=\"Enter your username (e.g. https//t.me/username)\"\n onAccept={(tg) => setTelegram(tg)}\n style={{ width: '100%', padding: '6px 12px', border:'1px solid var(--color-border-light)', background:'var(--color-background-1)', color:'var(--color-text)' }}\n />\n <Button variant=\"outline-primary\" disabled={loadingInfo || processing} type='submit'>\n {processing ? <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> : t(\"telegram.save\")}\n </Button>\n <Button variant=\"outline-primary\" disabled={loadingInfo || processing} onClick={() => window.open('https://t.me/CalendbookBot?start=start', '_blank')}>\n {t(\"telegram.connect\")}\n </Button>\n </InputGroup>\n </Form>\n {status > 400 && status <= 500 && <ResponseFeedback status={status} message={t(\"telegram.error\")} />}\n {status === 200 && <ResponseFeedback status={status} message={t(\"telegram.success\")} />}\n </>\n );\n};\n\nexport default Telegram;\n","import {useTranslation} from 'react-i18next';\n\nfunction Heading(){\n const {t} = useTranslation(['integrations']);\n return(\n <div className=\"mb-4\">\n <div className=\"h3 my-3\" style={{fontFamily:\"Roboto\",fontWeight:600}}>{t('whatsapp.heading.title')}</div>\n <div style={{fontFamily:\"Roboto\",color:'var(--color-secondary)'}}>{t('whatsapp.heading.subtitle')}</div>\n </div>\n );\n}\n\nexport default Heading;\n","import { useTranslation } from \"react-i18next\";\nimport { useHistory } from \"react-router-dom\";\nimport Button from 'react-bootstrap/Button';\n\nfunction Upgrade(){\n const { t } = useTranslation(['integrations']);\n\n const history = useHistory();\n const routeChange = () =>{\n let path = `/upgrade`;\n history.push(path);\n }\n\n return(\n <Button variant=\"outline-primary\" size=\"sm\" onClick={routeChange}>\n {t('whatsapp.upgrade')}\n </Button>\n );\n}\n\nexport default Upgrade;\n","import {useTranslation} from 'react-i18next';\n\nfunction Credits({credits}){\n const { t } = useTranslation(['integrations']);\n\n let messageColor = 'var(--color-text))';\n if(Number(credits) <= 10) { messageColor = 'var(--color-error)'; }\n\n return(\n <>\n <div style={{fontSize:20,fontWeight:700,color:messageColor}}>{t('whatsapp.credits.left',{credits : credits})}</div>\n <div>{t('whatsapp.credits.upgrade')}</div>\n </>\n );\n}\n\nexport default Credits;\n","import { useEffect,useState } from 'react';\nimport { initializePaddle, Paddle } from '@paddle/paddle-js';\nimport { useTranslation } from 'react-i18next';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport auth from '../../Account/Auth';\n\nconst DEBUG = (window.location.hostname !== 'www.calendbook.com');\nconst TEST_TOKEN = \"test_2ee936d492e84b8c70ff282cacf\";\nconst LIVE_TOKEN = \"live_f9e2fd79f6f00aa1b9f8a4f55ec\";\n\nfunction Checkout({priceId,customerId}){\n const {i18n,t} = useTranslation(['integrations']);\n const [loading, setLoading] = useState(false);\n const [paddle, setPaddle] = useState(null);\n const getUserLanguage = () => {try{return i18n.language.substring(0,2)}catch(e){return 'en'}}\n\n var createNestedObject = function( base, names ) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for( var i = 0; i < names.length; i++ ) {\n base = base[ names[i] ] = base[ names[i] ] || {};\n }\n };\n\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve,ms));\n }\n \n useEffect(() => {\n initializePaddle(\n {\n environment: (DEBUG ? 'sandbox' : 'production'),\n checkout: {\n settings: {\n displayMode:\"overlay\",\n theme:'light',\n locale:getUserLanguage()\n }\n },\n token: (DEBUG ? TEST_TOKEN : LIVE_TOKEN),\n eventCallback: async function(data) {\n switch(data.name) {\n case \"checkout.loaded\":\n console.log(\"Checkout opened\");\n break;\n case \"checkout.customer.created\":\n console.log(\"Customer created\");\n break;\n case \"checkout.completed\":\n console.log(\"[upgrade] checkout completed, updating user profile...\");\n setLoading(true)\n await sleep(5000)\n window.location.replace(\"/integrations#whatsapp\");\n window.location.reload();\n break;\n default:\n }\n } \n })\n .then((paddleInstance) => {\n if(paddleInstance) {setPaddle(paddleInstance)}\n });\n }, []);\n\n const openCheckout = () => {\n let checkoutObj = {\n items: [\n {\n priceId: priceId,\n quantity: 1\n }\n ]\n }\n if(customerId){\n createNestedObject(checkoutObj,[\"customer\",\"id\"]);\n checkoutObj['customer']['id'] = customerId;\n }else if(auth.getEmail()){\n createNestedObject(checkoutObj,[\"customer\",\"email\"]);\n checkoutObj['customer']['email'] = auth.getEmail();\n }else{\n createNestedObject(checkoutObj,[\"customer\",\"email\"]);\n checkoutObj['customer']['email'] = \"your@email.com\";\n }\n paddle?.Checkout.open(checkoutObj);\n }\n\n return(\n <Button size=\"sm\" onClick={openCheckout} disabled={loading}>{t('whatsapp.checkout')} {loading && <Spinner size=\"sm\"/>}</Button>\n );\n}\n\nexport default Checkout;\n","import { useTranslation } from 'react-i18next';\nimport Card from 'react-bootstrap/Card';\nimport Badge from 'react-bootstrap/Badge'\nimport Button from 'react-bootstrap/Button';\nimport Checkout from './Checkout';\n\nfunction Subscription({price,notifications,customerId,currentPriceId,priceId,cancel,update}){\n const {i18n,t} = useTranslation(['integrations']);\n const isActive = currentPriceId === priceId;\n\n const getUserLanguage = () => {\n try{\n return i18n.language.substring(0,2)\n }catch(e){\n return 'en'\n }\n }\n\n const cardStyle={\n background: isActive\n ? 'linear-gradient(-90deg, var(--color-success), var(--color-background-1))'\n : 'var(--color-background-1)',\n border: isActive\n ? '1px solid var(--color-success)'\n : '1px solid var(--color-border-light)' \n }\n\n return(\n <Card className=\"w-100\" style={cardStyle}>\n <Card.Body>\n <Card.Title style={{color:'var(--color-text)'}}>\n {t('whatsapp.subscription.name',{notifications})}\n {isActive && <Badge pill bg=\"success\" style={{fontSize:12, verticalAlign:'middle', marginLeft:5}}>{t('whatsapp.subscription.badge')}</Badge>}\n </Card.Title>\n <Card.Subtitle style={{color:'var(--color-secondary)'}} className=\"mb-2\">{getUserLanguage() === 'en' ? '$' : '€' }{t('whatsapp.subscription.price',{price})}</Card.Subtitle>\n <Card.Text></Card.Text>\n <div style={{float:'right'}}>\n {(isActive && cancel) && <Button onClick={() => window.open(cancel,'_blank')} variant=\"danger\" size=\"sm\" className=\"mx-1\">{t('whatsapp.subscription.cancel')}</Button>}\n {(isActive && update) && <Button onClick={() => window.open(update,'_blank')} variant=\"primary\" size=\"sm\" className=\"mx-1\">{t('whatsapp.subscription.update')}</Button>}\n {!isActive && <Checkout customerId={customerId} priceId={priceId}/>}\n </div>\n </Card.Body>\n </Card>\n );\n}\n\nexport default Subscription;\n","import React, { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Form, Button, Spinner, InputGroup } from 'react-bootstrap';\nimport { IMaskInput } from 'react-imask';\nimport Heading from './Heading';\nimport Upgrade from './Upgrade';\nimport Credits from './Credits';\nimport Subscription from './Subscription';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport PhoneInput from 'react-phone-number-input'\nimport './whatsapp-input.css';\n\nconst DEBUG = (window.location.hostname !== 'www.calendbook.com');\nconst TEST_WHATSAPP_MONTHLY_TIER_1 = \"pri_01hwda8p8x571v35agx4jqkcy1\"\nconst TEST_WHATSAPP_MONTHLY_TIER_2 = \"pri_01hwda9e6khrg3absq585a9kk5\"\nconst TEST_WHATSAPP_MONTHLY_TIER_3 = \"pri_01hwdaa0wcjtttaejz1rxd2kt3\"\nconst LIVE_WHATSAPP_MONTHLY_TIER_1 = \"pri_01hwctn81s3wmk4pg38v7fmb4p\"\nconst LIVE_WHATSAPP_MONTHLY_TIER_2 = \"pri_01hwctpencc7seksj0th0xs8ag\"\nconst LIVE_WHATSAPP_MONTHLY_TIER_3 = \"pri_01hwctq07cj5568k7fqxfqt5m3\"\n\nconst ResponseFeedback = ({ status, message }) => (\n <p className={status === 200 ? 'text-success' : 'text-danger'}>{message}</p>\n);\n\nconst WhatsappIcon = () => (\n <i\n className=\"fa-brands fa-whatsapp justify-content-center\"\n style={{\n padding:'2px 5px',\n color:'#25D366',\n background:'var(--color-background-1)',\n fontSize:32,\n border:'1px solid var(--color-border-light)',\n borderRadius:'5px 0 0 5px'\n }}>\n </i>\n\n);\n\nfunction Whatsapp(){\n const history = useHistory();\n const { t } = useTranslation(['integrations']);\n const [whatsapp, setWhatsapp] = useState('');\n const [credits, setCredits] = useState(0);\n const [currentPriceId, setCurrentPriceId] = useState('');\n const [cancelLink, setCancelLink] = useState('');\n const [updateLink, setUpdateLink] = useState('');\n const [customerId, setCustomerId] = useState('');\n const [status, setStatus] = useState(0);\n const [infoResponseStatus,setInfoResponseStatus] = useState(0);\n const [loadingInfo, setLoadingInfo] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n const userPlan = auth.getProperty({\n storageKey: 'userSession',\n path: ['profileObj','planStatus','status'],\n fallback: 'free',\n })\n\n useEffect(()=>{\n const getWhatsapp = async () => {\n const body = {};\n setLoadingInfo(true);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('account-jubilant','/settings/whatsapp',body,true,true)\n .then(response => {\n setInfoResponseStatus(200);\n setWhatsapp(response?.value);\n setCredits(response?.credits);\n setCurrentPriceId(response?.priceId);\n setCancelLink(response?.cancelUrl);\n setUpdateLink(response?.updatePaymentUrl);\n setCustomerId(response?.customerId);\n })\n .catch(error => {\n console.error(\"[integrations][whatsapp] network error while retrieving info:\",error);\n setInfoResponseStatus(error?.response?.status);\n })\n })\n .catch((error) => {\n console.error(\"[integrations][whatsapp] authentication error while retireving info:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[integrations][whatsapp] functional error while retrieving info:\",error);\n setInfoResponseStatus(500);\n }finally{\n setLoadingInfo(false);\n }\n }\n getWhatsapp();\n },[])\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setProcessing(true);\n setStatus(0);\n try{\n await auth.isAuthenticated()\n .then(async () => {\n const body = {\n value: whatsapp.replace(\"https://wa.me/\",\"\")\n }\n await be.post(\"account-jubilant\",\"/settings/whatsapp\",body,true,true)\n .then((r) => {\n setStatus(200);\n })\n .catch((error) => {\n console.error(\"[integrations][whatsapp] network error while saving:\",error);\n setStatus(error?.response?.status);\n })\n })\n .catch(error => {\n console.error(\"[integrations][whatsapp] authentication error while saving:\", error)\n history.push({pathname:'/login'})\n })\n } catch (error) {\n console.error(\"[integrations][whatsapp] functional error while saving:\",error);\n setStatus(500);\n } finally {\n setProcessing(false)\n }\n }\n return (\n <>\n <Heading/>\n <Form onSubmit={handleSubmit} className=\"tw-w-full\">\n <div className=\"tw-flex tw-items-center tw-w-full tw-p-1 tw-border tw-border-gray-300 tw-rounded-lg tw-bg-white hover:tw-shadow-md focus-within:tw-shadow-lg tw-transition-all tw-duration-200 tw-ease-in-out\">\n {/* WhatsApp Icon */}\n <div className=\"tw-pl-3 tw-flex tw-items-center\">\n <i className=\"fa-brands fa-whatsapp tw-mr-3\" style={{ color: '#25D366', fontSize: '32px' }} />\n </div>\n\n {/* Phone Input */}\n <PhoneInput\n required={true}\n international\n countryCallingCodeEditable={true}\n placeholder=\"Enter WhatsApp number\"\n value={whatsapp}\n onChange={(number) => setWhatsapp(number)}\n />\n\n {/* Save Button */}\n <Button\n variant=\"primary\"\n disabled={loadingInfo || processing}\n type=\"submit\"\n className=\"tw-bg-blue-600 tw-text-white tw-mx-2 tw-px-5 tw-py-2 tw-h-full tw-rounded-r-lg hover:tw-bg-blue-700 focus:tw-outline-none focus:tw-ring-2 focus:tw-ring-blue-500 tw-transition-all tw-duration-200\"\n >\n {processing ? <Spinner size=\"sm\" animation=\"border\" variant=\"light\" /> : t(\"whatsapp.save\")}\n </Button>\n </div>\n</Form>\n \n\n {status > 400 && status <= 500 && <ResponseFeedback status={status} message={t(\"whatsapp.error\")} />}\n {status === 200 && <ResponseFeedback status={status} message={t(\"whatsapp.success\")} />}\n\n {!loadingInfo &&\n <div className=\"mt-3\">\n {userPlan === 'professional'\n ?\n <>\n <Credits credits={credits}/>\n <div className=\"my-3 gap-3 d-flex flex-column flex-md-row\">\n <Subscription price={10} notifications={100} customerId={customerId} currentPriceId={currentPriceId} priceId={DEBUG ? TEST_WHATSAPP_MONTHLY_TIER_1 : LIVE_WHATSAPP_MONTHLY_TIER_1} cancel={cancelLink} update={updateLink}/>\n <Subscription price={20} notifications={200} customerId={customerId} currentPriceId={currentPriceId} priceId={DEBUG ? TEST_WHATSAPP_MONTHLY_TIER_2 : LIVE_WHATSAPP_MONTHLY_TIER_2} cancel={cancelLink} update={updateLink}/>\n <Subscription price={50} notifications={500} customerId={customerId} currentPriceId={currentPriceId} priceId={DEBUG ? TEST_WHATSAPP_MONTHLY_TIER_3 : LIVE_WHATSAPP_MONTHLY_TIER_3} cancel={cancelLink} update={updateLink}/>\n </div>\n </>\n : <Upgrade/>\n }\n </div>\n }\n </>\n );\n};\n\nexport default Whatsapp;\n","import React, { useEffect } from \"react\";\nimport Container from \"react-bootstrap/Container\";\nimport Tabs from \"react-bootstrap/Tabs\";\nimport Tab from \"react-bootstrap/Tab\";\nimport Zapier from \"./Zapier/Zapier\";\nimport Webhooks from \"./Webhooks/Webhooks\";\nimport UpgradePath from \"../Utilities/UpgradePath/UpgradePath\";\nimport Zoom from \"./Zoom/Zoom\";\nimport Stripe from \"./Stripe/Stripe\";\nimport SalesForza from \"./SalesForza/SalesForza\";\nimport Telegram from \"./Telegram/Telegram\";\nimport Whatsapp from \"./Whatsapp/Whatsapp\";\n\nfunction Integrations() {\n let activeKey = \"\";\n switch (window.location.href.split(\"#\")[1]) {\n case \"stripe\":\n activeKey = \"stripe\";\n break;\n case \"zoom\":\n activeKey = \"zoom\";\n break;\n case \"zapier\":\n activeKey = \"zapier\";\n break;\n case \"webhooks\":\n activeKey = \"webhooks\";\n break;\n case \"salesforza\":\n activeKey = \"salesforza\";\n break;\n case \"telegram\":\n activeKey = \"telegram\";\n break;\n case \"whatsapp\":\n activeKey = \"whatsapp\";\n break;\n default:\n activeKey = \"stripe\";\n }\n try {\n window.tidioChatApi.show();\n } catch {}\n\n useEffect(() => {\n document.title = `Calendbook - Integrations - ${activeKey}`;\n }, [activeKey]);\n\n return (\n <Container className=\"mt-5\">\n <Tabs defaultActiveKey={activeKey} id=\"integrations-tab\">\n <Tab eventKey=\"stripe\" title=\"Stripe\">\n <Stripe />\n </Tab>\n\n <Tab eventKey=\"zoom\" title=\"Zoom\">\n <UpgradePath featureName=\"zoom\" position=\"right\">\n <Zoom />\n </UpgradePath>\n </Tab>\n\n <Tab eventKey=\"zapier\" title=\"Zapier\">\n <UpgradePath featureName=\"zapier-integration\" position=\"right\">\n <Zapier />\n </UpgradePath>\n </Tab>\n\n <Tab eventKey=\"webhooks\" title=\"Webhooks\">\n <UpgradePath featureName=\"webhooks\" position=\"right\">\n <Webhooks />\n </UpgradePath>\n </Tab>\n\n <Tab eventKey=\"salesforza\" title=\"Salesforza\">\n <UpgradePath featureName=\"salesforza\" position=\"right\">\n <SalesForza />\n </UpgradePath>\n </Tab>\n\n <Tab eventKey=\"telegram\" title=\"Telegram\">\n <Telegram />\n </Tab>\n\n <Tab eventKey=\"whatsapp\" title=\"Whatsapp\">\n <Whatsapp />\n </Tab>\n </Tabs>\n </Container>\n );\n}\n\nexport default Integrations;\n","import React from 'react';\nimport { Container, Row, Col, ListGroup, Button } from 'react-bootstrap';\n\nconst CalendBookPage = () => {\n return (\n <div>\n <header className=\"bg-primary text-white text-center p-5\">\n <Container>\n <h1>Calendbook for Wix</h1>\n <p>Seamlessly schedule events directly on your WIX website</p>\n </Container>\n </header>\n <main className=\"my-5\">\n <Container>\n <Row>\n <Col md={6} className=\"text-center mb-4\">\n <h3>Login First</h3>\n <p>Ensure you're logged in via the dashboard to synchronize your events.</p>\n </Col>\n <Col md={6} className=\"text-center\">\n <h3>Easy Setup</h3>\n <p>Open settings (cog icon), select your event type, and you're all set.</p>\n </Col>\n </Row>\n </Container>\n </main>\n <footer className=\"bg-light text-center p-4\">\n <Container>\n <p>Explore more about CALENDBOOK. Contact us for further information!</p>\n </Container>\n </footer>\n </div>\n );\n};\n\nexport default CalendBookPage;\n\n","import { useTranslation } from 'react-i18next';\nimport Button from 'react-bootstrap/Button';\n\nfunction CopyButton ({copyCode, copied}) {\n const {t} = useTranslation(['navbar'])\n return(\n <div className=\"d-flex justify-content-end\">\n <Button onClick={() => copyCode()} style={{minWidth:150}}>\n {copied\n ?\n <i className=\"far fa-check-circle\"></i>\n :\n <>{t('embed.modalCopyBtn')}</>\n }\n </Button>\n </div>\n );\n}\n\nexport default CopyButton;\n","function EmbeddedCode ({code}) {\n const componentStyle = {\n border: '1px dashed gray',\n background:'var(--color-background-0)',\n padding:'10px'\n }\n \n return(\n <pre style={componentStyle}>\n <code>\n {code}\n </code>\n </pre>\n );\n}\n\nexport default EmbeddedCode;\n","import { useEffect } from \"react\";\n\n// Improved version of https://usehooks.com/useOnClickOutside/\nconst useClickOutside = (ref, handler) => {\n useEffect(() => {\n let startedInside = false;\n let startedWhenMounted = false;\n\n const listener = (event) => {\n // Do nothing if `mousedown` or `touchstart` started inside ref element\n if (startedInside || !startedWhenMounted) return;\n // Do nothing if clicking ref's element or descendent elements\n if (!ref.current || ref.current.contains(event.target)) return;\n\n handler(event);\n };\n\n const validateEventStart = (event) => {\n startedWhenMounted = ref.current;\n startedInside = ref.current && ref.current.contains(event.target);\n };\n\n document.addEventListener(\"mousedown\", validateEventStart);\n document.addEventListener(\"touchstart\", validateEventStart);\n document.addEventListener(\"click\", listener);\n\n return () => {\n document.removeEventListener(\"mousedown\", validateEventStart);\n document.removeEventListener(\"touchstart\", validateEventStart);\n document.removeEventListener(\"click\", listener);\n };\n }, [ref, handler]);\n};\n\nexport default useClickOutside;\n\n","import React, { useCallback, useRef, useState } from \"react\";\nimport useClickOutside from \"./useClickOutside\";\nimport Form from \"react-bootstrap/Form\";\nimport UpgradePath from \"../Utilities/UpgradePath/UpgradePath\";\nimport UpgradeBadge from \"../Utilities/UpgradePath/UpgradeBadge\";\nimport { HexColorPicker, HexColorInput } from \"react-colorful\";\nimport { useTranslation } from \"react-i18next\";\n\nfunction Options({\n color,\n setColor,\n isBorder,\n setBorder,\n isResponsive,\n setResponsive,\n setFixed,\n hideDetails,\n setHideDetails,\n}) {\n const { t } = useTranslation([\"navbar\"]);\n const popover = useRef();\n const [isOpen, toggle] = useState(false);\n\n const close = useCallback(() => toggle(false), []);\n useClickOutside(popover, close);\n\n return (\n <p>\n <strong>{t(\"embed.options.title\")}</strong>\n <Form.Switch\n label={t(\"embed.options.border\")}\n checked={isBorder()}\n onClick={() => {\n isBorder() ? setBorder(\"none\") : setBorder(\"1px solid black\");\n }}\n />\n <Form.Switch\n label={t(\"embed.options.responsive\")}\n checked={isResponsive()}\n onClick={() => {\n isResponsive() ? setFixed() : setResponsive();\n }}\n />\n <Form.Switch\n label=\"hide details card\"\n checked={hideDetails}\n onClick={() => {\n hideDetails ? setHideDetails(false) : setHideDetails(true);\n }}\n />\n <UpgradePath featureName=\"embed\" position=\"right\">\n <UpgradeBadge featureName=\"embed\" />\n <br />\n <div className=\"picker\">\n <div\n className=\"swatch\"\n style={{ backgroundColor: color }}\n onClick={() => toggle(true)}\n />\n <HexColorInput\n className=\"hex-input\"\n color={color}\n onChange={setColor}\n />\n <span className=\"swatch-label\">background</span>\n\n {isOpen && (\n <div className=\"popover\" ref={popover}>\n <HexColorPicker\n style={{ width: 115, height: 115 }}\n color={color}\n onChange={setColor}\n />\n </div>\n )}\n </div>\n </UpgradePath>\n </p>\n );\n}\n\nexport default Options;\n","import Form from 'react-bootstrap/Form';\nimport {useTranslation} from 'react-i18next';\n\nfunction PageChoice({setSelectedLink,publicAddress,username,eventTypes}){\n const {t} = useTranslation(['navbar'])\n const componentStyle = {\n backgroundColor: 'var(--color-background-1)',\n color: 'var(--color-text)',\n borderColor: 'var(--color-border-light)'\n }\n return(\n <p>\n <strong>{t('embed.pageChoice.title')}</strong>\n <Form.Select style={componentStyle} aria-label=\"visualized page in the embedding frame\" onChange={(e) => setSelectedLink(e.target.value)}>\n {/*\n <>\n <option value={publicAddress}>\n {`${t('embed.pageChoice.selectPublic')} - (calendbook.com/${username})`}\n </option>\n {eventTypes && eventTypes.length > 0 &&\n <option disabled>{t('embed.pageChoice.selectBooking')}</option>\n }\n </>\n */}\n\n {Object.keys(eventTypes).length !== 0 && eventTypes.map((event) => \n <option key={event} value={publicAddress + '/' + event}>\n {`calendbook.com/${username}/${event}`}\n </option>\n )}\n </Form.Select>\n </p>\n );\n}\n\nexport default PageChoice;\n","import React, { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport CopyButton from \"./CopyButton\";\nimport EmbeddedCode from \"./EmbeddedCode\";\nimport Options from \"./Options\";\nimport PageChoice from \"./PageChoice\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\nimport \"./embed.css\";\n\nfunction hexToRgb(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? `rgb(${parseInt(result[1], 16)},${parseInt(result[2], 16)},${parseInt(\n result[3],\n 16\n )})`\n : null;\n}\n\nfunction Embed() {\n try {\n window.tidioChatApi.show();\n } catch {}\n const { t } = useTranslation([\"navbar\"]);\n const protocol = window.location.protocol;\n const host = window.location.host;\n const username = auth.getName();\n const publicAddress = protocol + \"//\" + host + \"/\" + username;\n const [eventTypes, setEventTypes] = useState([]);\n const [loadingEventTypes, setLoadingEventTypes] = useState(false);\n const [selectedLink, setSelectedLink] = useState(publicAddress);\n const [copied, setCopied] = useState(false);\n const [border, setBorder] = useState(\"none\");\n const [width, setWidth] = useState(\"100%\");\n const [height, setHeight] = useState(\"100%\");\n const [hideDetails, setHideDetails] = useState(false);\n const [color, setColor] = useState(\"var(--color-background-0)\");\n var embedCode = `<!-- Calendbook public page begin -->\n<iframe\n name=\"calendbook-embed-frame\"\n src=\"${selectedLink}${hexToRgb(color) || hideDetails ? \"?\" : \"\"}${\n hexToRgb(color) ? `background=${hexToRgb(color)}` : \"\"\n }${hideDetails ? `${hexToRgb(color) && hideDetails ? \"&\" : \"\"}step=2` : \"\"}\"\n width=\"${width}\"\n height=\"${height}\"\n style=\"border:${border}\">\n</iframe>\n<!-- Calendbook public page end -->`;\n\n useEffect(() => {\n document.title = \"Calendbook - Embed\";\n const getEventTypes = async () => {\n setLoadingEventTypes(true);\n await auth\n .isAuthenticated()\n .then(() => {\n be.get(\"eventtypes\", \"/eventypes\", \"\", true)\n .then((response) => {\n setEventTypes(Object.keys(response));\n setLoadingEventTypes(false);\n if (Object.keys(response) !== 0) {\n setSelectedLink(publicAddress + \"/\" + Object.keys(response)[0]);\n }\n })\n .catch((error) => {\n console.log(error);\n setEventTypes({});\n setLoadingEventTypes(false);\n });\n })\n .catch(() => {\n setLoadingEventTypes(false);\n setEventTypes({});\n });\n };\n getEventTypes();\n }, [setEventTypes, setLoadingEventTypes]);\n\n const copyCode = () => {\n navigator.clipboard.writeText(embedCode);\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 3000);\n };\n\n const isBorder = () => {\n return border !== \"none\";\n };\n\n const isResponsive = () => {\n return width === \"100%\" && height === \"100%\";\n };\n\n const setFixed = () => {\n setWidth(\"800px\");\n setHeight(\"650px\");\n };\n\n const setResponsive = () => {\n setWidth(\"100%\");\n setHeight(\"100%\");\n };\n\n return (\n <div className=\"container my-5\">\n <p className=\"h2 text-center my-3\">{t(\"embed.modalTitle\")}</p>\n <p>{t(\"embed.modalDescription\")}</p>\n <Row>\n <Col xs={12} md={6}>\n <PageChoice\n setSelectedLink={setSelectedLink}\n publicAddress={publicAddress}\n username={username}\n eventTypes={eventTypes}\n />\n </Col>\n <Col xs={12} md={6}>\n <Options\n color={color}\n setColor={setColor}\n isBorder={isBorder}\n setBorder={setBorder}\n isResponsive={isResponsive}\n setResponsive={setResponsive}\n setFixed={setFixed}\n hideDetails={hideDetails}\n setHideDetails={setHideDetails}\n />\n </Col>\n </Row>\n <EmbeddedCode code={embedCode} />\n <CopyButton copyCode={copyCode} copied={copied} />\n </div>\n );\n}\n\nexport default Embed;\n","import React, { useState } from 'react';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction Name({ name, canEdit }) {\n const [isEditing, setIsEditing] = useState(false);\n const [editedName, setEditedName] = useState(name || '');\n const [isLoading, setIsLoading] = useState(false);\n\n const handleEditClick = () => {\n if (canEdit) {\n setIsEditing(true);\n }\n };\n\n const handleSave = async () => {\n try{\n setIsLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('team-manager', '/team/settings/name', { name: editedName }, true, true)\n .then((response) => {\n console.log('[team][settings] team name updated')\n })\n .catch((error) => {\n console.error('[team][settings] network error while updating team name:', error)\n })\n })\n .catch((error) => {\n console.error('[team][settings] authentication error while updating team name:', error)\n })\n } catch (error) {\n console.error(`[team][settings] functional error while fetching upgradable members`);\n } finally {\n setIsLoading(false)\n setIsEditing(false)\n }\n };\n\n return (\n <div className=\"tw-flex tw-items-center\">\n {isEditing ? (\n <input\n type=\"text\"\n value={editedName}\n onChange={(e) => setEditedName(e.target.value)}\n className=\"tw-border tw-border-gray-300 tw-p-1 tw-rounded tw-mr-2\"\n disabled={isLoading}\n autoFocus\n />\n ) : (\n <h2 className=\"tw-text-xl tw-font-semibold tw-mr-2\">{editedName || 'Team Name'}</h2>\n )}\n {canEdit && (\n <button\n onClick={isEditing ? handleSave : handleEditClick}\n className=\"tw-text-gray-600 tw-hover:text-gray-800\"\n disabled={isLoading}\n >\n {isLoading ? (\n <div role=\"status\">\n <svg\n aria-hidden=\"true\"\n className=\"tw-inline tw-w-4 tw-h-4 tw-text-gray-200 tw-animate-spin dark:tw-text-gray-600 tw-fill-black\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n </div>\n ) : isEditing ? (\n <i className=\"fas fa-check\" aria-hidden=\"true\"></i>\n ) : (\n <i className=\"fas fa-pencil-alt\" aria-hidden=\"true\"></i>\n )}\n </button>\n )}\n </div>\n );\n}\n\nexport default Name;\n\n","import React, { useState } from 'react';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction Url({ url, canEdit }) {\n const [isEditing, setIsEditing] = useState(false);\n const [editedUrl, setEditedUrl] = useState(url || '');\n const [isLoading, setIsLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleEditClick = () => {\n if (canEdit) {\n setIsEditing(true);\n }\n };\n\n const handleSave = async () => {\n try {\n setIsLoading(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('team-manager', '/team/settings/url', { url: editedUrl }, true, true)\n .then((response) => {\n console.log('[team][settings] team URL updated');\n })\n .catch((error) => {\n // Handle 400 error response when URL already exists\n if (error.response && error.response.status === 400) {\n setErrorMessage('This URL already exists.');\n } else {\n console.error('[team][settings] network error while updating team URL:', error);\n }\n });\n })\n .catch((error) => {\n console.error('[team][settings] authentication error while updating team URL:', error);\n });\n } catch (error) {\n console.error(`[team][settings] functional error while updating team URL`);\n } finally {\n setIsLoading(false);\n setIsEditing(false);\n }\n };\n\n const handleCopy = () => {\n navigator.clipboard.writeText(editedUrl || url);\n setCopySuccess(true);\n setTimeout(() => {\n setCopySuccess(false);\n }, 2000);\n };\n\n return (\n <div>\n <div className=\"tw-flex tw-items-center\">\n {isEditing ? (\n <input\n type=\"text\"\n value={editedUrl}\n onChange={(e) => {\n setEditedUrl(e.target.value);\n setErrorMessage('');\n }}\n className=\"tw-border tw-border-gray-300 tw-p-1 tw-rounded tw-mr-2\"\n disabled={isLoading}\n autoFocus\n />\n ) : (\n <span\n onClick={handleEditClick}\n className=\"tw-text-sm tw-text-blue-500 hover:tw-underline cursor-pointer tw-flex-grow\"\n >\n {editedUrl || 'https://team-url.com'}\n </span>\n )}\n {canEdit && (\n <button\n onClick={isEditing ? handleSave : handleEditClick}\n className=\"tw-text-gray-600 tw-hover:text-gray-800\"\n disabled={isLoading}\n >\n {isLoading ? (\n <div role=\"status\">\n {/* Loading spinner SVG */}\n <svg\n aria-hidden=\"true\"\n className=\"tw-inline tw-w-4 tw-h-4 tw-text-gray-200 tw-animate-spin dark:tw-text-gray-600 tw-fill-black\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n </div>\n ) : isEditing ? (\n <i className=\"fas fa-check tw-mx-1 tw-px-1\" aria-hidden=\"true\"></i>\n ) : (\n <i className=\"fas fa-pencil-alt tw-mx-1 tw-px-1\" aria-hidden=\"true\"></i>\n )}\n </button>\n )}\n {/* Copy and Open link buttons are only shown when not editing */}\n {!isEditing && (\n <>\n {/* Copy button */}\n <button\n onClick={handleCopy}\n className=\"tw-p-1 tw-mx-1 tw-text-gray-600\"\n disabled={isLoading}\n >\n {copySuccess ? (\n <i className=\"fas fa-check\"></i>\n ) : (\n <i className=\"fa-solid fa-copy\"></i>\n )}\n </button>\n {/* Open link button */}\n <a\n href={editedUrl || url || '#'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"tw-p-1 tw-mx-1 tw-text-gray-600\"\n >\n <i className=\"fa-solid fa-up-right-from-square\"></i>\n </a>\n </>\n )}\n </div>\n {errorMessage && <p className=\"tw-text-red-500 tw-text-sm\">{errorMessage}</p>}\n </div>\n );\n}\n\nexport default Url;\n\n","import React, { useState } from 'react';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction Bio({ bio, canEdit }) {\n const [isEditing, setIsEditing] = useState(false);\n const [editedBio, setEditedBio] = useState(bio || '');\n const [isLoading, setIsLoading] = useState(false);\n\n const handleEditClick = () => {\n if (canEdit) {\n setIsEditing(true);\n }\n };\n\nconst handleSave = async () => {\n try{\n setIsLoading(true)\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('team-manager', '/team/settings/bio', { bio: editedBio }, true, true)\n .then((response) => {\n console.log('[team][settings] team name updated')\n })\n .catch((error) => {\n console.error('[team][settings] network error while updating team name:', error)\n })\n })\n .catch((error) => {\n console.error('[team][settings] authentication error while updating team name:', error)\n })\n } catch (error) {\n console.error(`[team][settings] functional error while fetching upgradable members`);\n } finally {\n setIsLoading(false)\n setIsEditing(false)\n }\n };\n\n return (\n <div className=\"tw-w-full\">\n {isEditing ? (\n <div className=\"tw-w-full tw-inline-flex\">\n <textarea\n value={editedBio}\n onChange={(e) => setEditedBio(e.target.value)}\n className=\"tw-w-full tw-border tw-border-gray-100 tw-p-2 tw-rounded\"\n rows=\"4\"\n disabled={isLoading}\n autoFocus\n />\n {canEdit && (\n <button\n onClick={handleSave}\n className=\"tw-content-start tw-ms-2 tw-text-gray-600 tw-hover:text-gray-800\"\n disabled={isLoading}\n >\n {isLoading ? (\n <div role=\"status\">\n <svg\n aria-hidden=\"true\"\n className=\"tw-inline tw-w-4 tw-h-4 tw-text-gray-200 tw-animate-spin dark:tw-text-gray-600 tw-fill-black\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n </div>\n ) : (\n <i className=\"fas fa-check\" aria-hidden=\"true\"></i>\n )}\n </button>\n )}\n </div>\n ) : (\n <div className=\"tw-w-full tw-inline-flex\">\n <p className=\"tw-border tw-border-gray-300 tw-p-2 tw-rounded\">\n {editedBio || 'No bio available.'}\n </p>\n {canEdit && (\n <button\n onClick={handleEditClick}\n className=\"tw-ms-2 tw-text-gray-600 tw-hover:text-gray-800\"\n >\n <i className=\"fas fa-pencil-alt\" aria-hidden=\"true\"></i>\n </button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport default Bio;\n\n","import {useState, useEffect } from 'react';\nimport Pic from './Pic';\nimport Name from './Name';\nimport Url from './Url';\nimport Bio from './Bio';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nfunction Settings() {\n const [teamSettings, setTeamSettings] = useState({});\n const [loadingSettings, setLoadingSettings] = useState(false);\n\n useEffect(() => {\n const fetchTeamSettings = async () => {\n try {\n setLoadingSettings(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be\n .get('team-manager', '/team/settings', false, true, true)\n .then((response) => {\n console.log('[team][settings] got team settings');\n setTeamSettings(response);\n })\n .catch((error) => {\n console.error('[team][settings] network error while fetching team settings', error);\n });\n })\n .catch((error) => {\n console.error('[team][settings] authentication error while fetching team settings', error);\n });\n } catch (error) {\n console.error('[team][settings] functional error while fetching team settings', error);\n } finally {\n setLoadingSettings(false);\n }\n };\n fetchTeamSettings();\n }, []);\n\n return (\n <div className=\"tw-flex tw-items-center tw-space-x-4 tw-py-6\">\n <div className=\"tw-w-full tw-flex tw-flex-col tw-space-y-2 tw-items-center\">\n\n <div className=\"tw-flex tw-me-auto tw-flex-row tw-gap-4\">\n {loadingSettings ? (\n <div className=\"tw-w-16 tw-h-16 tw-rounded-full tw-bg-gray-300 tw-animate-pulse\"></div>\n ) : (\n <Pic pic={teamSettings?.profilePic} canEdit={teamSettings?.canEdit} />\n )}\n\n <div className=\"tw-flex tw-flex-col tw-content-center\">\n {loadingSettings ? (\n <div className=\"tw-w-48 tw-h-6 tw-bg-gray-300 tw-rounded tw-animate-pulse\"></div>\n ) : (\n <Name name={teamSettings?.teamName} canEdit={teamSettings?.canEdit} />\n )}\n {loadingSettings ? (\n <div className=\"tw-w-32 tw-h-4 tw-bg-gray-300 tw-rounded tw-animate-pulse\"></div>\n ) : (\n <Url url={teamSettings?.teamUrl} canEdit={teamSettings?.canEdit} />\n )}\n </div>\n </div>\n\n <div className=\"tw-flex tw-mr-auto tw-w-full\">\n {loadingSettings ? (\n <div className=\"tw-w-full tw-h-24 tw-bg-gray-300 tw-rounded tw-animate-pulse\"></div>\n ) : (\n <Bio bio={teamSettings?.teamBio} canEdit={teamSettings?.canEdit} />\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport default Settings;\n\n","import React, { useState } from \"react\";\nimport { useEffect } from \"react\";\nimport { initFlowbite } from \"flowbite\";\nimport { Form, Spinner, Badge } from \"react-bootstrap\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\nconst MemberRow = ({\n canUpgrade,\n member,\n canPromoteList,\n viewerRole,\n removeMember,\n}) => {\n const [selectedRole, setSelectedRole] = useState(member.role);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n initFlowbite();\n }, []);\n\n const handleChangeRole = async (newRole) => {\n setIsLoading(true);\n const body = {\n key: member.key,\n role: newRole,\n };\n try {\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"team-manager\", \"/team/members/roles\", body, true, true)\n .then((response) => {\n setSelectedRole(newRole);\n })\n .catch((response) => {\n console.error(\"[team] error changing user role: \", response);\n });\n })\n .catch(() => {});\n } catch (error) {\n console.error(\"Error updating member role:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n const canChangeRole = () => {\n if (member?.status === \"pending\") {\n return false;\n }\n if (auth.getUsername() !== member?.key) {\n if (member?.role !== \"owner\") {\n if (\n (viewerRole === \"owner\" || viewerRole === \"admin\") &&\n canPromoteList.length > 0\n ) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n };\n\n const getPlanColor = (_role) => {\n switch (_role) {\n case \"LTD\":\n return \"green\";\n case \"professional\":\n return \"blue\";\n case \"premium\":\n return \"orange\";\n case \"free\":\n return \"gray\";\n default:\n return \"gray\";\n }\n };\n\n return (\n <tr className=\"tw-border-b tw-dark:border-gray-600 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-700\">\n {/*--- user info ---*/}\n <th\n scope=\"row\"\n className=\"tw-px-4 tw-py-2 tw-font-medium tw-text-gray-900 tw-whitespace-nowrap tw-dark:text-white hover:tw-text-primary-500 tw-cursor-pointer\"\n >\n <div className=\"tw-flex tw-items-center\">\n <div className=\"tw-inline-flex tw-align-center tw-me-2\">\n <img\n width=\"38px\"\n height=\"38px\"\n src={member?.pic}\n alt=\"profile-pic\"\n className=\"tw-rounded-full\"\n style={{ border: \"3px solid var(--color-border-light)\" }}\n />\n </div>\n <div className=\"tw-inline-block\">\n <div>{member?.name}</div>\n <div className=\"text-secondary\">{member?.email}</div>\n </div>\n </div>\n </th>\n\n {/*--- plan ---*/}\n <td className=\"tw-text-capitalize tw-align-middle\">\n {member?.plan && (\n <span\n className={`tw-bg-${getPlanColor(\n member?.plan\n )}-100 tw-text-${getPlanColor(\n member?.plan\n )}-800 tw-text-xs tw-font-medium tw-me-2 tw-px-2.5 tw-py-0.5 tw-rounded dark:tw-bg-blue-900 dark:tw-text-blue-300`}\n >\n {member?.plan}\n </span>\n )}\n </td>\n\n {/*--- change/view role ---*/}\n <td className=\"align-middle\">\n {canChangeRole() ? (\n <>\n <button\n disabled={isLoading}\n id={`${member?.key}-role-button`}\n data-dropdown-toggle={`${member?.key}-role-dropdown`}\n className=\"tw-w-full tw-text-gray-900 tw-bg-gray-100 hover:tw-bg-gray-50 tw-font-medium tw-rounded-lg tw-text-sm tw-px-4 tw-py-1.5 tw-text-center tw-inline-flex tw-items-center dark:tw-bg-blue-600 dark:hover:tw-bg-blue-700 dark:focus:tw-ring-blue-800\"\n type=\"button\"\n >\n {selectedRole}\n {isLoading ? (\n <Spinner\n className=\"tw-ms-auto\"\n as=\"span\"\n animation=\"border\"\n size=\"sm\"\n />\n ) : (\n <i className=\"fa-solid fa-angle-down tw-ms-auto\"></i>\n )}\n </button>\n <div\n id={`${member?.key}-role-dropdown`}\n className=\"tw-z-10 hidden tw-bg-white tw-divide-y tw-divide-gray-100 tw-rounded-lg tw-shadow tw-w-44 dark:tw-bg-gray-700\"\n >\n <ul\n className=\"tw-py-2 tw-text-sm tw-text-gray-700 dark:tw-text-gray-200\"\n aria-labelledby={`${member?.key}-role-button`}\n >\n {canPromoteList.map((role) => (\n <li key={`option-role-${member.key}-${role}`}>\n <span\n onClick={() => handleChangeRole(role)}\n className=\"tw-block tw-px-4 tw-py-1 hover:tw-bg-gray-100 dark:hover:tw-bg-gray-600 dark:hover:tw-text-white\"\n >\n {role}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </>\n ) : (\n <span className=\"tw-px-4\">{selectedRole}</span>\n )}\n </td>\n\n {/*--- connection status ---*/}\n <td className=\"\">\n {member?.status === \"connected\" ? (\n <i className=\"fas fa-check-circle text-success tw-px-4\"></i>\n ) : (\n <i className=\"fas fa-times-circle text-warning tw-px-4\"></i>\n )}\n {member?.status}\n </td>\n\n {/*--- remove member ---*/}\n {member?.role !== \"owner\" &&\n (viewerRole === \"owner\" || viewerRole === \"admin\") && (\n <td className=\"text-center align-middle\">\n <button\n style={{ border: \"none\", background: \"transparent\" }}\n onClick={() => removeMember(member?.key)}\n >\n <i className=\"fas fa-user-minus text-danger me-2\"></i>\n </button>\n </td>\n )}\n </tr>\n );\n};\n\nexport default MemberRow;\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Button from \"react-bootstrap/Button\";\n\nfunction CopyInviteLink({ inviteLink }) {\n const { t } = useTranslation([\"team\"]);\n const [copied, setCopied] = useState(false);\n\n const copyLink = () => {\n navigator.clipboard.writeText(inviteLink);\n setCopied(true);\n setTimeout(() => {\n setCopied(false);\n }, 3000);\n };\n\n return (\n <Button size=\"sm\" variant=\"light\" onClick={copyLink}>\n <b className=\"me-1\"> {t(\"invite.copyLink\")} </b>\n {copied ? (\n <i className=\"far fa-check-circle\"></i>\n ) : (\n <i className=\"fa-solid fa-copy\"></i>\n )}\n </Button>\n );\n}\n\nexport default CopyInviteLink;\n","import { useEffect,useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { initializePaddle, Paddle } from '@paddle/paddle-js';\nimport auth from '../Account/Auth';\nimport be from '../BE';\n\nconst DEBUG = (window.location.hostname === 'localhost' || window.location.hostname === 'dev.calendbook.com');\nconst TEST_TOKEN = \"test_2ee936d492e84b8c70ff282cacf\";\nconst LIVE_TOKEN = \"live_f9e2fd79f6f00aa1b9f8a4f55ec\";\n\nconst TEST_YEARLY_PREMIUM = \"pri_01hnd8w440pst7jaenb4pxjeap\";\nconst TEST_MONTHLY_PREMIUM = \"pri_01hnd8x6tzhbd13qw6d7tdkyn5\";\nconst LIVE_YEARLY_PREMIUM = \"pri_01hg8swx54tmf43w05cpgk97cc\";\nconst LIVE_MONTHLY_PREMIUM = \"pri_01hg8sw20z338km4mns1n08bxg\"\n\nconst TEST_YEARLY_PROFESSIONAL = \"pri_01hrc18ywbwns9mev9kqk54e03\";\nconst TEST_MONTHLY_PROFESSIONAL = \"pri_01hrc188kzp7m8x2paw3x6chwq\";\nconst LIVE_YEARLY_PROFESSIONAL = \"pri_01hrc1cdmrhmnz9t7xpz1jp15y\";\nconst LIVE_MONTHLY_PROFESSIONAL = \"pri_01hrc1bfh4v2whzkvy9d4db067\"\n\nfunction Checkout({showCheckout, setShowCheckout, quantity, getTeamStatus}){\n const {i18n,t} = useTranslation(['landing','common',\"upgrade\"]);\n const [loading, setLoading] = useState(false);\n const [paddle, setPaddle] = useState();\n const [view, setView] = useState(window.location.hash === '#agency' ? 'agency' : 'upgrade');\n const [subscription,setSubscription] = useState({});\n const [pricingCadency,setPricingCadency] = useState(\"yearly\");\n const [customerId,setCustomerId] = useState(\"\");\n\n const getUserLanguage = () => {try{return i18n.language.substring(0,2)}catch(e){return 'en'}}\n\n var createNestedObject = function( base, names ) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for( var i = 0; i < names.length; i++ ) {\n base = base[ names[i] ] = base[ names[i] ] || {};\n }\n };\n\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve,ms));\n }\n\n const sendAbandonedCartEvent = async (body) => {\n await auth.isAuthenticated()\n .then(\n await be.post(\"payment-jubilant\",\"/payments/abandoned\",body,true,true)\n .then((response) => {\n console.log(\"[upgrade][subscription] sent bandoned cart event: \", response);\n })\n .catch(error => {\n console.log(error);\n })\n )\n .catch(error => {\n console.log(error);\n })\n }\n\n useEffect(() => {\n initializePaddle(\n {\n // environment is 'sandbox' when testing, 'production' when live\n environment: (DEBUG ? 'sandbox' : 'production'),\n checkout: {\n settings: {\n displayMode:\"overlay\",\n theme:'light',\n locale:getUserLanguage()\n }\n },\n token: (DEBUG ? TEST_TOKEN : LIVE_TOKEN),\n eventCallback: async function(data) {\n switch(data.name) {\n case \"checkout.loaded\":\n console.log(\"Checkout opened\");\n break;\n case \"checkout.customer.created\":\n console.log(\"Customer created\");\n break;\n case \"checkout.closed\":\n setShowCheckout(false);\n const status = data?.data?.status;\n if (status === \"draft\"){\n const body = {\n productId: data?.data?.items[0]?.product?.id,\n priceId: data?.data?.items[0]?.price_id\n }\n await sendAbandonedCartEvent(body);\n }\n break;\n case \"checkout.completed\":\n setLoading(true)\n await sleep(5000)\n //recall team status\n await getTeamStatus();\n setShowCheckout(false);\n break;\n default:\n }\n } \n }).then(\n (paddleInstance) => {\n if (paddleInstance) {\n setPaddle(paddleInstance);\n }\n },\n );\n }, []);\n\n const openCheckout = (product) => {\n const getSubscriptionPriceId = (_product) => {\n if(_product === 'premium'){\n if(DEBUG){\n if(pricingCadency === \"monthly\"){return TEST_MONTHLY_PREMIUM}\n if(pricingCadency === \"yearly\"){return TEST_YEARLY_PREMIUM}\n }else{\n if(pricingCadency === \"monthly\"){return LIVE_MONTHLY_PREMIUM}\n if(pricingCadency === \"yearly\"){return LIVE_YEARLY_PREMIUM}\n }\n }\n if(_product === 'professional'){\n if(DEBUG){\n if(pricingCadency === \"monthly\"){return TEST_MONTHLY_PROFESSIONAL}\n if(pricingCadency === \"yearly\"){return TEST_YEARLY_PROFESSIONAL}\n }else{\n if(pricingCadency === \"monthly\"){return LIVE_MONTHLY_PROFESSIONAL}\n if(pricingCadency === \"yearly\"){return LIVE_YEARLY_PROFESSIONAL}\n }\n }\n }\n let checkoutObj = {\n items: [\n {\n priceId: getSubscriptionPriceId(product),\n quantity: quantity\n }\n ]\n }\n if(customerId){\n createNestedObject(checkoutObj,[\"customer\",\"id\"]);\n checkoutObj['customer']['id'] = customerId;\n }else if(auth.getEmail()){\n createNestedObject(checkoutObj,[\"customer\",\"email\"]);\n checkoutObj['customer']['email'] = auth.getEmail();\n }else{\n createNestedObject(checkoutObj,[\"customer\",\"email\"]);\n checkoutObj['customer']['email'] = \"your@email.com\";\n }\n paddle?.Checkout.open(checkoutObj);\n };\n\n if(showCheckout){\n openCheckout('premium');\n }\n\n return(null);\n}\n\nexport default Checkout;\n","import PropTypes from \"prop-types\";\nimport React, { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Checkout from \"./Checkout\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\nfunction UpgradeModal({\n canUpgrade,\n teamId,\n showUpgrade,\n setShowUpgrade,\n getTeamStatus,\n}) {\n const { t } = useTranslation([\"team\"]);\n const [upgradableMembers, setUpgradableMembers] = useState([]);\n const [selectedMembers, setSelectedMembers] = useState([]);\n const [billingAmount, setBillingAmount] = useState(0);\n const [billingCurrency, setBillingCurrency] = useState(\"USD\");\n const [loading, setLoading] = useState(false);\n const [loadingBilling, setLoadingBilling] = useState(false);\n const [loadingUpgrade, setLoadingUpgrade] = useState(false);\n const [upgradeSuccess, setUpgradeSuccess] = useState(false);\n const [upgradeError, setUpgradeError] = useState(false);\n const [showCheckout, setShowCheckout] = useState(false);\n\n useEffect(() => {\n // Fetch the upgradable members from the backend\n const fetchUpgradableMembers = async () => {\n try {\n setLoading(true);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .get(\n \"team-manager\",\n \"/team/members/to-upgrade\",\n { teamId },\n true,\n true\n )\n .then((response) => {\n console.log(\"[team][upgrade-modal] got upgradable members\");\n setUpgradableMembers(response);\n console.log(upgradableMembers);\n const initialSelectedMembers = response.map(\n (member) => member.key\n );\n setSelectedMembers(initialSelectedMembers);\n if (!canUpgrade) {\n fetchBillingAmount(initialSelectedMembers);\n }\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] network error while fetching upgradable members:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] authentication error while fetching upgradable members:\",\n error\n );\n });\n } catch (error) {\n console.error(\n `[team][upgrade-modal] functional error while fetching members to upgrade`\n );\n } finally {\n setLoading(false);\n }\n };\n if (showUpgrade) {\n fetchUpgradableMembers();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [showUpgrade]);\n\n const fetchBillingAmount = async (selectedMembers) => {\n try {\n let body = {\n teamId: teamId,\n members: selectedMembers,\n operation: \"upgrade\",\n };\n setLoadingBilling(true);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"payment-jubilant\", \"/team/members/preview\", body, true, true)\n .then((response) => {\n console.log(\"[team][upgrade-modal] got billing amount\");\n setBillingAmount(response?.amount);\n setBillingCurrency(response?.currency_code);\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] network error while fetching billing amount:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] authentication error while fetching billing amount:\",\n error\n );\n });\n } catch (error) {\n console.error(\n `[team][upgrade-modal] functional error while fetching members to upgrade`\n );\n } finally {\n setLoadingBilling(false);\n }\n };\n\n const handleUpgrade = async () => {\n try {\n let body = {\n teamId: teamId,\n members: selectedMembers,\n operation: \"upgrade\",\n };\n setLoadingUpgrade(true);\n setUpgradeSuccess(false);\n setUpgradeError(false);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"payment-jubilant\", \"/team/members/upgrade\", body, true, true)\n .then((response) => {\n console.log(\n \"[team][upgrade-modal] upgraded selected members:\",\n body?.members\n );\n setUpgradeSuccess(true);\n // Optionally, refresh the team status after successful upgrade\n getTeamStatus();\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] network error while upgrading members:\",\n error\n );\n setUpgradeError(true);\n });\n })\n .catch((error) => {\n console.error(\n \"[team][upgrade-modal] authentication error while upgrading members:\",\n error\n );\n setUpgradeError(true);\n });\n } catch (error) {\n console.error(\n `[team][upgrade-modal] functional error while upgrading members`\n );\n setUpgradeError(true);\n } finally {\n setLoadingUpgrade(false);\n }\n };\n\n const handleCheckboxChange = (memberKey) => {\n const updatedSelectedMembers = selectedMembers.includes(memberKey)\n ? selectedMembers.filter((key) => key !== memberKey)\n : [...selectedMembers, memberKey];\n setSelectedMembers(updatedSelectedMembers);\n if (!canUpgrade) {\n fetchBillingAmount(updatedSelectedMembers);\n }\n };\n\n return (\n <>\n <button\n className=\"tw-py-2 tw-px-4 tw-text-sm tw-rounded tw-bg-black tw-text-white hover:tw-text-black tw-ease-in tw-font-semibold hover:tw-bg-white disabled:tw-text-gray-500 disabled:tw-bg-gray-700 tw-transition-colors tw-duration-300 tw-flex tw-items-center tw-justify-between\"\n onClick={() => setShowUpgrade(!showUpgrade)}\n >\n {t(\"upgrade.btnTitle\")}\n </button>\n\n {showUpgrade && (\n <div\n id=\"upgradeModal\"\n tabIndex=\"-1\"\n aria-hidden=\"true\"\n className=\"tw-fixed tw-inset-0 tw-z-50 tw-flex tw-items-center tw-justify-center tw-bg-black/50\"\n >\n <div className=\"tw-relative tw-p-4 tw-w-full tw-max-w-2xl tw-h-auto\">\n {/* Modal content */}\n <div className=\"tw-relative tw-p-4 tw-bg-white tw-rounded-lg tw-shadow dark:tw-bg-gray-800 sm:tw-p-5\">\n {/* Modal header */}\n <div className=\"tw-flex tw-justify-between tw-items-center tw-pb-4 tw-mb-4 tw-rounded-t tw-border-b sm:tw-mb-5 dark:tw-border-gray-600\">\n <h3 className=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-white\">\n {selectedMembers.length === 1 ? (\n <>\n {t(\"upgrade.header_one\", {\n count: selectedMembers.length,\n })}\n </>\n ) : (\n <>\n {t(\"upgrade.header_other\", {\n count: selectedMembers.length,\n })}\n </>\n )}\n </h3>\n <svg\n onClick={() => setShowUpgrade(!showUpgrade)}\n aria-hidden=\"true\"\n className=\"hover:tw-cursor-pointer tw-w-5 tw-h-5\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n ></path>\n </svg>\n </div>\n {/* Modal body */}\n <div className=\"tw-grid tw-gap-4 tw-mb-4 sm:tw-grid-cols-1\">\n {!loading &&\n upgradableMembers &&\n upgradableMembers.length === 0 && (\n <div>{t(\"upgrade.noUpgradableMembers\")}</div>\n )}\n {loading &&\n upgradableMembers &&\n upgradableMembers.length === 0 && (\n <div className=\"tw-animate-pulse\">\n {t(\"upgrade.loadingUpgradable\")}\n </div>\n )}\n {upgradableMembers &&\n upgradableMembers.map((member) => (\n <div\n key={member.id}\n className=\"tw-flex tw-items-center tw-gap-2\"\n >\n <input\n type=\"checkbox\"\n checked={selectedMembers.includes(member.key)}\n disabled={loading || loadingBilling}\n onChange={() => handleCheckboxChange(member.key)}\n className=\"tw-h-4 tw-w-4 tw-text-primary-600 tw-border-gray-300 tw-rounded focus:tw-ring-primary-500 disabled:tw-animate-pulse\"\n />\n <img\n width=\"38px\"\n height=\"38px\"\n src={member.pic}\n alt=\"pic\"\n className=\"tw-text-center tw-items-center tw-rounded-full tw-border-2 tw-border-gray-300\"\n />\n <div>\n <label className=\"tw-text-sm tw-font-medium tw-text-gray-900 dark:tw-text-white\">\n {member.name}{\" \"}\n {member.username === auth.getUsername() && (\n <span className=\"tw-text-xs tw-bg-blue-100 tw-text-blue-800 tw-font-medium tw-px-2 tw-py-0.5 tw-rounded\">\n {t(\"upgrade.you\")}\n </span>\n )}\n </label>\n <div className=\"tw-text-xs tw-text-gray-500 dark:tw-text-gray-400\">\n {member.email}\n </div>\n </div>\n </div>\n ))}\n </div>\n {canUpgrade &&\n selectedMembers &&\n selectedMembers.length > 0 &&\n upgradableMembers &&\n upgradableMembers.length > 0 && (\n <div className=\"tw-inline-flex tw-w-full tw-justify-between tw-items-center\">\n <div className=\"tw-content-center tw-text-lg tw-font-semibold tw-text-gray-900\">\n {selectedMembers.length === 1 ? (\n <>\n {t(\"upgrade.readyToUpgrade_one\", {\n count: selectedMembers.length,\n })}\n </>\n ) : (\n <>\n {t(\"upgrade.readyToUpgrade_other\", {\n count: selectedMembers.length,\n })}\n </>\n )}\n </div>\n <button\n type=\"button\"\n disabled={showCheckout}\n className=\"tw-text-white tw-bg-primary-700 hover:tw-bg-primary-800 tw-font-medium tw-rounded tw-text-sm tw-px-2.5 tw-py-2 tw-text-center disabled:tw-animate-pulse\"\n onClick={() => setShowCheckout(true)}\n >\n {loadingUpgrade ? (\n <span>{t(\"upgrade.upgradeBtnLoading\")}</span>\n ) : (\n <span>{t(\"upgrade.upgradeBtn\")}</span>\n )}\n </button>\n </div>\n )}\n {!canUpgrade &&\n selectedMembers &&\n selectedMembers.length > 0 &&\n upgradableMembers &&\n upgradableMembers.length > 0 && (\n <>\n {/* Billing amount */}\n <div className=\"\">\n <span className=\"tw-text-lg tw-font-semibold tw-text-gray-900\">\n {loadingBilling ? (\n <span className=\"tw-animate-pulse\">\n {t(\"upgrade.loadingBilling\")}\n </span>\n ) : (\n <div className=\"tw-inline-flex tw-w-full tw-justify-between tw-items-center\">\n <div className=\"tw-content-center\">\n {t(\"upgrade.billedNow\", {\n amount: billingAmount / 100,\n currency: billingCurrency,\n })}\n </div>\n <button\n type=\"button\"\n disabled={loadingUpgrade}\n className=\"tw-text-white tw-bg-primary-700 hover:tw-bg-primary-800 tw-font-medium tw-rounded tw-text-sm tw-px-2.5 tw-py-2 tw-text-center disabled:tw-animate-pulse\"\n onClick={handleUpgrade}\n >\n {loadingUpgrade ? (\n <div className=\"tw-inline-flex\">\n {t(\"upgrade.upgradeBtnLoading\")}\n <div role=\"status\" className=\"tw-ms-1\">\n <svg\n aria-hidden=\"true\"\n className=\"tw-inline tw-w-4 tw-h-4 tw-text-gray-200 tw-animate-spin dark:tw-text-gray-600 tw-fill-black\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n </div>\n </div>\n ) : (\n <span>{t(\"upgrade.upgradeBtn\")}</span>\n )}\n </button>\n </div>\n )}\n </span>\n </div>\n </>\n )}\n {upgradeSuccess && (\n <div className=\"tw-text-green-500 tw-text-sm tw-text-end tw-mt-1\">\n {t(\"upgrade.success\")}\n </div>\n )}\n {upgradeError && (\n <div className=\"tw-text-red-500 tw-text-sm tw-text-end tw-mt-1\">\n {t(\"upgrade.error\")}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n <Checkout\n showCheckout={showCheckout}\n setShowCheckout={setShowCheckout}\n quantity={selectedMembers.length}\n getTeamStatus={getTeamStatus}\n />\n </>\n );\n}\n\nUpgradeModal.propTypes = {\n teamId: PropTypes.string.isRequired,\n canUpgrade: PropTypes.bool.isRequired,\n showUpgrade: PropTypes.bool.isRequired,\n setShowUpgrade: PropTypes.func.isRequired,\n getTeamStatus: PropTypes.func.isRequired,\n};\n\nexport default UpgradeModal;\n","import { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport UpgradePath from \"../Utilities/UpgradePath/UpgradePath\";\nimport UpgradeBadge from \"../Utilities/UpgradePath/UpgradeBadge\";\nimport Settings from \"./Settings/Settings\";\nimport MemberRow from \"./MemberRow\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Button from \"react-bootstrap/Button\";\nimport Form from \"react-bootstrap/Form\";\nimport InputGroup from \"react-bootstrap/InputGroup\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport FormControl from \"react-bootstrap/FormControl\";\nimport CopyInviteLink from \"./CopyInviteLink\";\nimport UpgradeModal from \"./UpgradeModal\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\nfunction Team(props) {\n const { t } = useTranslation([\"team\"]);\n try {\n window.tidioChatApi.show();\n } catch {}\n\n const [teamStatus, setTeamStatus] = useState({\n viewerRole: \"\",\n seats: {\n occupied: 0,\n total: 0,\n },\n members: [],\n });\n\n const [pageLoading, setPageLoading] = useState(false);\n const [invitingMember, setInvitingMember] = useState(false);\n const [validatedForm, setValidatedForm] = useState(false);\n const [newMember, setNewMember] = useState(\"\");\n const [showUpgrade, setShowUpgrade] = useState(false);\n\n const getTeamStatus = async () => {\n setPageLoading(true);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .get(\"team-manager\", \"/team/members\", {}, true, true)\n .then((response) => {\n setTeamStatus(response);\n })\n .catch((response) => {\n console.log(\"error in /team page: \", response);\n });\n })\n .catch(() => {});\n setPageLoading(false);\n };\n\n useEffect(() => {\n document.title = \"Calendbook - Team\";\n if (!showUpgrade) {\n getTeamStatus();\n }\n }, [showUpgrade]);\n\n const handleChange = (event) => {\n setNewMember(event.target.value);\n };\n\n async function inviteMember(e) {\n const form = e.currentTarget;\n if (form.checkValidity() === false) {\n e.preventDefault();\n e.stopPropagation();\n } else {\n e.preventDefault();\n setValidatedForm(true);\n setInvitingMember(true);\n\n /* be call */\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\n \"team-manager\",\n \"/team/invitee\",\n { email: newMember },\n true,\n true\n )\n .then((response) => {\n console.log(\"invited member: \", newMember);\n window.location.reload();\n })\n .catch((response) => {\n console.log(\"error in inviting member: \", response);\n });\n })\n .catch(() => {});\n\n setInvitingMember(false);\n }\n }\n\n async function removeMember(_key) {\n /* be call */\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .post(\"team-manager\", \"/team/remove\", { member: _key }, true, true)\n .then((response) => {\n console.log(\"removed member: \", _key);\n window.location.reload();\n })\n .catch((response) => {\n console.log(\"error in removing member: \", response);\n });\n })\n .catch(() => {});\n }\n\n return (\n <Container className=\"my-5\">\n {pageLoading ? (\n <>Loading...</>\n ) : (\n <>\n <h3 className=\"tw-text-3xl tw-font-extrabold\">{t(\"title\")}</h3>\n <Row></Row>\n\n <UpgradePath featureName=\"team-settings\" position=\"right\">\n <UpgradeBadge featureName=\"team-settings\" />\n <br />\n <Settings />\n </UpgradePath>\n\n <Row className=\"mb-4\">\n <Col xs={12} className=\"mb-2\">\n <b>{t(\"invite.title\")}</b>\n {teamStatus?.invitationLink && (\n <>\n <b> {t(\"invite.or\")} </b>\n <CopyInviteLink inviteLink={teamStatus?.invitationLink} />\n </>\n )}\n </Col>\n\n <Col xs={12} sm={8} md={6} lg={4}>\n <Form\n noValidate\n validated={validatedForm}\n onSubmit={inviteMember}\n >\n <InputGroup hasValidation>\n <FormControl\n required\n type=\"email\"\n name=\"invite-member-email\"\n id=\"invited-member-email\"\n placeholder=\"team.member@gmail.com\"\n value={newMember}\n onChange={handleChange}\n style={{\n color: \"var(--color-text)\",\n backgroundColor: \"var(--color-background-2)\",\n borderColor: \"var(--color-border-light)\",\n }}\n />\n <Button disabled={invitingMember} type=\"submit\">\n {invitingMember ? (\n <Spinner size=\"sm\" animation=\"border\" variant=\"light\" />\n ) : (\n <i className=\"fas fa-long-arrow-alt-right\"></i>\n )}\n </Button>\n <Form.Control.Feedback type=\"invalid\">\n {t(\"invite.invalid\")}\n </Form.Control.Feedback>\n </InputGroup>\n </Form>\n </Col>\n <Col xs={12} sm={4} md={6}>\n {(teamStatus?.canUpgrade || teamStatus?.viewerRole === \"owner\") &&\n teamStatus?.totalMembers &&\n teamStatus?.members.length > 0 && (\n <div className=\"tw-flex tw-my-1\">\n {teamStatus?.teamId && (\n <UpgradeModal\n canUpgrade={teamStatus?.canUpgrade}\n teamId={teamStatus?.teamId}\n showUpgrade={showUpgrade}\n setShowUpgrade={setShowUpgrade}\n getTeamStatus={getTeamStatus}\n />\n )}\n </div>\n )}\n </Col>\n </Row>\n\n <div className=\"tw-mt-2 tw-inline-flex tw-gap-2\">\n <>\n {teamStatus?.totalMembers && teamStatus?.members.length > 0 && (\n <div className=\"tw-content-center\">\n <span className=\"tw-items-center tw-my-auto\">\n <b>{t(\"totalMembers\")} </b>\n {teamStatus?.totalMembers}\n </span>\n </div>\n )}\n </>\n </div>\n {teamStatus?.members.length > 0 ? (\n <div className=\"tw-relative tw-overflow-hidden tw-bg-white tw-shadow-md tw-dark:bg-gray-800 sm:tw-rounded-lg\">\n <div className=\"tw-overflow-x-auto\">\n <table className=\"tw-w-full tw-text-sm tw-text-left tw-text-gray-500 tw-dark:text-gray-400\">\n <thead className=\"tw-text-xs tw-text-gray-700 tw-uppercase tw-bg-gray-50 tw-dark:bg-gray-700 tw-dark:text-gray-400\">\n <tr>\n <th className=\"tw-px-4 tw-py-3\">\n {t(\"table.headings.member\")}\n </th>\n <th className=\"tw-px-4 tw-py-3\">\n {t(\"table.headings.plan\")}\n </th>\n <th className=\"tw-px-4 tw-py-3\">\n {t(\"table.headings.role\")}\n </th>\n <th className=\"tw-px-4 tw-py-3\">\n {t(\"table.headings.status\")}\n </th>\n {teamStatus?.viewerRole !== \"member\" && (\n <th className=\"tw-px-4 tw-py-3\">\n {t(\"table.headings.actions\")}\n </th>\n )}\n </tr>\n </thead>\n <tbody>\n {teamStatus?.members.map((member) => (\n <MemberRow\n key={member?.key}\n viewerRole={teamStatus?.viewerRole}\n canPromoteList={teamStatus?.canPromoteList}\n member={member}\n removeMember={removeMember}\n canUpgrade={teamStatus?.canUpgrade}\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n ) : (\n <>{t(\"noMembers\")}</>\n )}\n </>\n )}\n </Container>\n );\n}\n\nexport default Team;\n","import React, { useState, useEffect, useContext } from 'react';\nimport {useHistory} from 'react-router-dom';\nimport UserContext from '../../UserContext'\nimport Button from 'react-bootstrap/Button';\nimport Modal from 'react-bootstrap/Modal';\nimport Spinner from 'react-bootstrap/Spinner';\nimport './invite-control.css';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\nimport ReactGA from \"react-ga4\";\n\nfunction InviteControl ({ inviteId }) {\n ReactGA.send({ hitType: \"pageview\", page: \"/team/invite\", title: \"Team Invite\" });\n const [user,setUser] = useContext(UserContext);\n const [teamInvite, setTeamInvite] = useState({});\n const [loading, setLoading] = useState(false);\n const [acceptLoading, setAcceptLoading] = useState(false);\n const [declineLoading, setDeclineLoading] = useState(false);\n const [inviteResponse,setInviteResponse] = useState(null);\n const [error, setError] = useState(null);\n const history = useHistory();\n\n const mockResponse={\n teamName: \"giovandimeo\",\n totalMembers: \"1\",\n owner: {\n key: \"giovandimeo\",\n username: \"giovandimeo\",\n name: \"giovandimeo\",\n email: \"giovandimeo@gmail.com\",\n profile_pic: \"https://jubilant-users-profile.s3.eu-central-1.amazonaws.com/assets/profile-pic/standard-user-pic.png\",\n role: \"owner\",\n status: \"connected\"\n }\n}\n\n useEffect(() => {\n async function fetchData() {\n setLoading(true);\n try {\n await be.get('team-manager',\"/team/invitee\",{id:inviteId},false,true)\n .then((response) => {\n setTeamInvite(response);\n })\n .catch((error) => {\n console.log(error);\n setError(error?.message);\n setTeamInvite(mockResponse);\n });\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n setError(error);\n }\n setLoading(false);\n }\n fetchData()\n },[])\n\n const handleResponse = async (accept) => {\n if(accept === true){setAcceptLoading(true);}\n else{setDeclineLoading(true);}\n\n const body = {\n id: inviteId,\n accept: accept,\n };\n\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('team-manager',\"/team/invitee/response\",body,true,true,true)\n .then(async (response) => {\n setInviteResponse(response?.data?.accepted);\n await new Promise(resolve => setTimeout(resolve, 1500));\n history.push({pathname:'/team'})\n })\n .catch((error) => {\n console.log(error);\n setError(error?.response?.data?.status);\n });\n })\n .catch(() => history.push({pathname:'/login'}))\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n setError(error);\n } \n\n if(accept === true){setAcceptLoading(false);}\n else{setDeclineLoading(false);}\n };\n\n if (loading) return <p><center>Loading...</center></p>;\n //if (error) return <p><center>Error: {error}</center></p>;\n\n return (\n <Modal\n show\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n >\n <Modal.Header closeButton={false}>\n <Modal.Title id=\"contained-modal-title-vcenter\">\n <div>\n <img src={teamInvite?.owner?.profilePic || '/app-assets/img/standard-user-pic.png'} alt={teamInvite?.teamName} className=\"team-image\" />\n <span className=\"team-name\">{teamInvite?.teamName}</span>\n </div>\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div>\n <strong>{teamInvite?.owner?.name}</strong>, from <strong>{teamInvite?.teamName}</strong> team, invited you to join his team.\n <br />\n <i>If you're part of a different team, accepting this invite will move you from your existing team to join this one.</i>\n </div>\n\n </Modal.Body>\n {user.logged\n ?\n <Modal.Footer>\n {inviteResponse !== null\n ?\n <>\n {inviteResponse === true && <div>Invite Accepted! Returning to Homepage...</div>}\n {inviteResponse === false && <div>Invite Declined! Returning to Homepage...</div>}\n </>\n :\n <>\n <Button variant=\"danger\" onClick={() => handleResponse(false)}>\n {declineLoading && <Spinner size=\"sm\"/>} Decline\n </Button>\n <Button variant=\"primary\" onClick={() => handleResponse(true)}>\n {acceptLoading && <Spinner size=\"sm\"/>} Accept\n </Button>\n </>\n }\n </Modal.Footer>\n :\n <Modal.Footer className=\"d-block\" style={{color:'var(--color-error)'}}>To accept or decline this invite, you need to <a href=\"/login\">log in.</a> Once you are logged in, come back to this link again.</Modal.Footer>\n }\n </Modal>\n );\n};\n\nexport default InviteControl;\n\n","import InviteControl from './InviteControl';\n\nconst InvitePage = () => {\n try{window.tidioChatApi.show()}catch{}\n const queryParams = new URLSearchParams(window.location.search);\n const inviteId = queryParams.get('id');\n\n return (\n <div>\n <InviteControl inviteId={inviteId} />\n </div>\n );\n};\n\nexport default InvitePage;\n\n","import React, { useState } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport './account.css';\n\nfunction Account({ accountId, name, email, profilePic, isActive, switchingToAccount, switchToAccount, deletingAccount, deleteAccount }) {\n const [isConfirmingDelete, setIsConfirmingDelete] = useState(false);\n\n const handleDeleteClick = () => {\n if (isConfirmingDelete) {\n deleteAccount(accountId);\n } else {\n setIsConfirmingDelete(true);\n setTimeout(() => setIsConfirmingDelete(false), 3000); // Reset after 3 seconds\n }\n };\n\n return (\n <div className={`account ${isActive ? 'active' : ''}`}>\n <img src={profilePic || '/app-assets/img/standard-user-pic.png'} alt={name} className=\"account-image\" />\n <div className=\"account-info\">\n <h3>{name}</h3>\n <p>{email}</p>\n </div>\n {(isActive && !switchingToAccount) ? null : (\n <button onClick={() => switchToAccount(accountId)} className=\"account-button\" disabled={switchingToAccount}>\n {switchingToAccount && <Spinner size=\"sm\"/>} Switch To\n </button>\n )}\n <button onClick={handleDeleteClick} className={`account-button danger ${isConfirmingDelete ? 'confirming' : ''}`} disabled={deletingAccount === accountId}>\n {deletingAccount === accountId && <Spinner size=\"sm\"/>}\n {isConfirmingDelete ? ' Click Again to Confirm' : 'Delete'}\n </button>\n </div>\n );\n}\n\nexport default Account;\n","// Agent.js\nimport React from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport './agent.css';\n\nfunction Agent({ name, email, profilePic, onSwitch, isSwitching, isActive }) {\n return (\n <div className=\"agent\">\n <img src={profilePic} alt={name} className=\"agent-image\" />\n <div className=\"agent-info\">\n <h3>{name}</h3>\n <p>{email}</p>\n </div>\n {isActive ? null : (\n <button onClick={onSwitch} className=\"agent-button\" disabled={isSwitching}>{isSwitching && <Spinner size=\"sm\"/>} Switch To</button>\n )}\n </div>\n );\n}\n\nexport default Agent;\n\n","import React, { useState } from 'react';\nimport './join.css';\n\nfunction Join({ joinLink }) {\n const STANDARD_TEXT = \"Copy Join Link\";\n const SUCCESS_TEXT = \"Copied!\";\n const ERROR_TEXT = \"Failed to Copy!\";\n\n const [buttonText, setButtonText] = useState(STANDARD_TEXT);\n\n const copyToClipboard = () => {\n navigator.clipboard.writeText(joinLink).then(() => {\n setButtonText(SUCCESS_TEXT);\n setTimeout(() => {\n setButtonText(STANDARD_TEXT);\n }, 1500);\n }, (err) => {\n console.error('Could not copy text: ', err);\n setButtonText(ERROR_TEXT);\n setTimeout(() => {\n setButtonText(STANDARD_TEXT);\n }, 1500);\n });\n };\n\n\n return (\n <div className=\"join\">\n <button onClick={copyToClipboard}>\n <i className=\"far fa-clipboard\"></i> {buttonText}\n </button>\n </div>\n );\n}\n\nexport default Join;\n\n","import React, { useState, useEffect, useContext } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport UserContext from \"../UserContext\";\nimport Account from \"./Account\";\nimport Agent from \"./Agent\";\nimport Join from \"./Join\";\nimport \"./agency.css\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\nfunction Agency() {\n try {\n window.tidioChatApi.show();\n } catch {}\n const [user, setUser] = useContext(UserContext);\n const [activeAccountId, setActiveAccountId] = useState(null);\n const [switchingToAgent, setSwitchingToAgent] = useState(false);\n const [switchingToAccount, setSwitchingToAccount] = useState(false);\n const [deletingAccount, setDeletingAccount] = useState(\"\");\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n const history = useHistory();\n\n useEffect(() => {\n document.title = \"Calendbook - Agency\";\n if (\n !auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"agencyId\"],\n })\n ) {\n history.push(\"/upgrade#agency\");\n } else {\n // check if an agent session already exists\n const agentSession = JSON.parse(localStorage.getItem(\"agentSession\"));\n if (agentSession && agentSession.accountId) {\n setActiveAccountId(agentSession.accountId);\n }\n\n async function fetchData() {\n try {\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .get(\"agency\", \"/agency/accounts\", false, true, true)\n .then((response) => {\n setData(response);\n })\n .catch((error) => {\n console.log(error);\n });\n })\n .catch(() => history.push({ pathname: \"/login\" }));\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n setError(error);\n }\n }\n\n fetchData();\n }\n }, []);\n\n const switchToMainAgent = async () => {\n setSwitchingToAgent(true);\n localStorage.removeItem(\"agentSession\");\n await auth.refresh();\n setActiveAccountId(null);\n setUser((prevState) => ({\n ...prevState,\n isImpersonated: false,\n impersonatingAgent: null,\n }));\n setSwitchingToAgent(false);\n };\n\n const switchToAccount = async (accountId) => {\n const agentSession = { accountId };\n setSwitchingToAccount(true);\n localStorage.setItem(\"agentSession\", JSON.stringify(agentSession));\n setActiveAccountId(accountId);\n await auth.refresh();\n setUser((prevState) => ({\n ...prevState,\n isImpersonated: true,\n impersonatingAgent: auth.getAgent(),\n }));\n setSwitchingToAccount(false);\n };\n\n const deleteAccount = async (accountId) => {\n setDeletingAccount(accountId);\n try {\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .del(\"agency\", \"/agency/accounts\", { accountId }, true, true)\n .then((response) => {\n const accountExists = data.accounts.some(\n (account) => account.accountId === accountId\n );\n setData((prevData) => ({\n ...prevData,\n accounts: prevData.accounts.filter(\n (account) => account.accountId !== accountId\n ),\n agencyOccupied: accountExists\n ? prevData.agencyOccupied - 1\n : prevData.agencyOccupied,\n }));\n })\n .catch((error) => {\n console.log(error);\n });\n })\n .catch(() => history.push({ pathname: \"/login\" }));\n } catch (error) {\n console.error(\"Error deleting account:\", error);\n setError(error);\n }\n setDeletingAccount(\"\");\n };\n\n if (error) {\n return <div className=\"loading\">An error occurred while loading data.</div>;\n }\n\n if (!data) {\n return <div className=\"loading\">Loading...</div>;\n }\n\n if (Object.keys(data).length === 0) {\n return (\n <div className=\"loading\">\n <i\n className=\"fa-solid fa-user-tie d-block my-5\"\n style={{ fontSize: 100 }}\n ></i>\n Oops, you don't have any agency, to get one go to{\" \"}\n <a href=\"/upgrade#agency\">upgrade to agency page</a>!\n </div>\n );\n }\n\n return (\n <div className=\"agency\">\n {data?.agencyName && data?.description && data?.profilePic && (\n <div className=\"header\">\n <div\n style={{ display: \"flex\", alignItems: \"center\", marginBottom: 10 }}\n >\n <img\n src={data?.profilePic || \"/app-assets/img/standard-user-pic.png\"}\n alt={data?.agencyName || \"Agency Pic\"}\n className=\"agency-account-image\"\n />\n <h1>{data?.agencyName} - Agency Dashboard </h1>\n <i\n className=\"fas fa-cog text-center ms-auto\"\n style={{ fontSize: 18, cursor: \"pointer\" }}\n onClick={() => history.push(\"/settings#agency\")}\n ></i>\n </div>\n <small>{data?.description}</small>\n </div>\n )}\n\n {data?.agent && <div className=\"seats-info\">Current Agent</div>}\n\n {data?.agent && (\n <Agent\n {...data.agent}\n onSwitch={switchToMainAgent}\n isSwitching={switchingToAgent}\n isActive={activeAccountId === null}\n />\n )}\n\n {data?.agencySeats && (\n <div className=\"seats-info\">\n {\" \"}\n Seats Occupied: {data.agencyOccupied}/{data.agencySeats}{\" \"}\n </div>\n )}\n\n {data?.accounts &&\n data?.accounts.map((account) => (\n <Account\n key={account.accountId}\n accountId={account.accountId}\n name={account.name}\n email={account.email}\n profilePic={account.profilePic}\n isActive={account.accountId === activeAccountId}\n switchingToAccount={\n switchingToAccount && account.accountId === activeAccountId\n }\n switchToAccount={() => switchToAccount(account.accountId)}\n deleteAccount={deleteAccount}\n deletingAccount={deletingAccount}\n />\n ))}\n\n {data?.joinLink && <Join joinLink={data.joinLink} />}\n </div>\n );\n}\n\nexport default Agency;\n","import React, { useState, useEffect } from 'react';\nimport {useHistory} from 'react-router-dom';\nimport Button from 'react-bootstrap/Button';\nimport Modal from 'react-bootstrap/Modal';\nimport Spinner from 'react-bootstrap/Spinner';\nimport './invite-control.css';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\nimport ReactGA from \"react-ga4\";\n\nfunction InviteControl ({ inviteId }) {\n ReactGA.send({ hitType: \"pageview\", page: \"/agency/invite\", title: \"Agency Invite\" });\n const [agencyName, setAgencyName] = useState('');\n const [agentUsername, setAgentUsername] = useState('');\n const [profilePic, setProfilePic] = useState('');\n const [agencyDescription, setAgencyDescription] = useState('');\n const [loading, setLoading] = useState(false);\n const [acceptLoading, setAcceptLoading] = useState(false);\n const [declineLoading, setDeclineLoading] = useState(false);\n const [inviteResponse,setInviteResponse] = useState(null);\n const [error, setError] = useState(null);\n const history = useHistory();\n\n useEffect(() => {\n async function fetchData() {\n setLoading(true);\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('agency',\"/agency/invitee\",{id:inviteId},true,true)\n .then((response) => {\n setAgencyName(response?.agencyName);\n setAgencyDescription(response?.description);\n setProfilePic(response?.profilePic);\n setAgentUsername(response?.agentUsername);\n })\n .catch((error) => {\n console.log(error);\n setError(error?.message);\n });\n })\n .catch(() => history.push({pathname:'/login'}))\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n setError(error);\n }\n setLoading(false);\n }\n fetchData()\n },[])\n\n const handleResponse = async (accept) => {\n if(accept === true){setAcceptLoading(true);}\n else{setDeclineLoading(true);}\n\n const body = {\n inviteeId: inviteId,\n accept: accept,\n };\n\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('agency',\"/agency/invitee\",body,true,true,true)\n .then(async (response) => {\n setInviteResponse(response?.data?.accepted);\n await new Promise(resolve => setTimeout(resolve, 1500));\n history.push({pathname:'/'})\n })\n .catch((error) => {\n console.log(error);\n setError(error?.response?.data?.status);\n });\n })\n .catch(() => history.push({pathname:'/login'}))\n } catch (error) {\n console.error(\"Error fetching data:\", error);\n setError(error);\n } \n\n if(accept === true){setAcceptLoading(false);}\n else{setDeclineLoading(false);}\n };\n\n if (loading) return <p><center>Loading...</center></p>;\n if (error) return <p><center>Error: {error}</center></p>;\n\n return (\n <Modal\n show\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n >\n <Modal.Header closeButton={false}>\n <Modal.Title id=\"contained-modal-title-vcenter\">\n <div>\n <img src={profilePic || '/app-assets/img/standard-user-pic.png'} alt={agencyName} className=\"agency-image\" />\n <span className=\"agency-name\">{agencyName}</span>\n </div>\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div><strong>{agentUsername}</strong>, from <strong>{agencyName}</strong> agency, wants to take your account. By accepting this invitation, <strong>{agencyName}</strong> will be able to manage your account.</div>\n <div style={{marginTop:20}}>Agency Description:</div>\n <div style={{fontSize:14,color:'var(--color-secondary)'}}>{agencyDescription}</div>\n </Modal.Body>\n <Modal.Footer>\n {inviteResponse !== null\n ?\n <>\n {inviteResponse === true && <div>Invite Accepted! Returning to Homepage...</div>}\n {inviteResponse === false && <div>Invite Declined! Returning to Homepage...</div>}\n </>\n :\n <>\n <Button variant=\"danger\" onClick={() => handleResponse(false)}>\n {declineLoading && <Spinner size=\"sm\"/>} Decline\n </Button>\n <Button variant=\"primary\" onClick={() => handleResponse(true)}>\n {acceptLoading && <Spinner size=\"sm\"/>} Accept\n </Button>\n </>\n }\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default InviteControl;\n\n","import InviteControl from './InviteControl';\n\nconst InvitePage = () => {\n try{window.tidioChatApi.show()}catch{}\n const queryParams = new URLSearchParams(window.location.search);\n const inviteId = queryParams.get('id');\n\n return (\n <div>\n <InviteControl inviteId={inviteId} />\n </div>\n );\n};\n\nexport default InvitePage;\n\n","function Title({view}){\n const componentStyle={\n fontWeight:900\n }\n\n return(\n <>\n {view === \"upgrade\" && <h1 className=\"tw-text-3xl\" style={componentStyle}>Upgrade Your Calendbook Plan</h1>}\n {view === \"manage\" && <h1 className=\"tw-text-3xl\" style={componentStyle}>Manage Your Calendbook Plan</h1>}\n </>\n );\n}\n\nexport default Title;\n","function Subtitle({view}){\n const componentStyle={\n fontWeight:300\n }\n return(\n <p style={componentStyle}></p>\n );\n}\n\nexport default Subtitle;\n","import Title from './Title';\nimport Subtitle from './Subtitle';\n\nfunction Header({view}){\n return(\n <div className=\"text-center my-5\">\n <Title view={view}/>\n <Subtitle view={view}/>\n </div>\n\n );\n}\n\nexport default Header;\n","import React, { useState, useEffect } from 'react';\nimport { Modal, Button, Spinner } from 'react-bootstrap';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\n\nconst Proration = ({ show, onHide, prorationDetails, priceId, quantity }) => {\n const [confirmLoading, setConfirmLoading] = useState(false);\n const [confirmSuccess, setConfirmSuccess] = useState(false);\n const [confirmError, setConfirmError] = useState('');\n\n // Reset states when the modal is opened\n useEffect(() => {\n if (show) {\n setConfirmLoading(false);\n setConfirmSuccess(false);\n setConfirmError('');\n }\n }, [show]);\n\n const handleConfirm = async () => {\n setConfirmLoading(true);\n setConfirmSuccess(false);\n setConfirmError('');\n\n const body = {\n priceId: prorationDetails?.priceId,\n quantity: prorationDetails?.quantity,\n };\n\n try {\n await auth.isAuthenticated();\n const response = await be.patch(\"payment-jubilant\", \"/subscriptions\", body, true, true);\n console.log(response);\n setConfirmSuccess(true);\n setTimeout(() => {\n onHide(); // Close modal after 3 seconds\n }, 3000);\n } catch (error) {\n console.error(error);\n setConfirmError('Unable to Confirm');\n } finally {\n setConfirmLoading(false);\n }\n };\n\n // Determine the button variant based on the state\n const getButtonVariant = () => {\n if (confirmError) return \"danger\"; // Red if there's an error\n if (confirmSuccess) return \"success\"; // Green if confirmed\n return \"primary\"; // Blue if not yet clicked\n };\n\n return (\n <Modal show={show} onHide={onHide} centered>\n <Modal.Header closeButton>\n <Modal.Title>Subscription Change Confirmation</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {prorationDetails && \n <div>\n {prorationDetails?.action === \"charge\"\n ?\n <div>You will be now charged <strong>{prorationDetails?.amount / 100} {prorationDetails?.currency}</strong> for the update.</div>\n :\n <div>You will now get a <strong>{prorationDetails?.amount / 100} {prorationDetails?.currency}</strong> credit for the update. The credit will be used in your next billing.</div>\n }\n {Number(prorationDetails?.quantity) &&\n <small className=\"mt-3\">Once confirmed, you will have {Number(prorationDetails?.quantity)} {Number(prorationDetails?.quantity) === 1 ? <>seat</> : <>seats</>}.</small> \n }\n </div>\n }\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={onHide} disabled={confirmLoading}>Cancel</Button>\n <Button \n variant={getButtonVariant()} \n onClick={handleConfirm} \n disabled={confirmLoading}>\n {confirmLoading ? (\n <Spinner as=\"span\" animation=\"border\" size=\"sm\" role=\"status\" aria-hidden=\"true\" />\n ) : confirmSuccess ? (\n 'Confirmed!'\n ) : (\n confirmError || 'Confirm'\n )}\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default Proration;\n\n","import React, {useState} from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Proration from './Proration';\nimport {useTranslation} from 'react-i18next';\nimport auth from '../../Account/Auth';\nimport be from '../../BE';\nimport './subscription-card.css';\n\nfunction Subscription({ subscription, setSubscriptionsLoading, getSubscriptions }) {\n const {t,i18n} = useTranslation(['booking'])\n const [loadingSeatsDecreasePreview,setLoadingSeatsDecreasePreview] = useState(false)\n const [loadingSeatsIncreasePreview,setLoadingSeatsIncreasePreview] = useState(false)\n const [showProrationModal, setShowProrationModal] = useState(false);\n const [prorationDetails, setProrationDetails] = useState(null); // New state for proration details\n\n const user={\n profilePic : auth.getPic(),\n name : auth.getFullName(),\n email : auth.getEmail(),\n }\n\n const formatDate = (date) => {\n const getUserLanguage = () => {try{return i18n.language.substring(0,2)}catch(e){return 'en'}}\n // Date formatting options\n var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\n // Getting date object from db\n var dateFormatted = new Date(date);\n // Format: weekday, monthname daynumber, year\n dateFormatted = dateFormatted.toLocaleDateString(getUserLanguage(), options);\n // To uppercase string\n dateFormatted = dateFormatted.toString();\n\n return dateFormatted;\n }\n\n const areAllFieldsPresent = (obj) => {\n return Object.values(obj).every(value => value !== null && value !== undefined);\n }\n\n const handleProrationModalClose = async () => {\n setShowProrationModal(false);\n setProrationDetails(null);\n setSubscriptionsLoading(true);\n await auth.refresh();\n await getSubscriptions();\n };\n\n const seatsPreview = async (_priceId,_seats,_action) => {\n const seatsNumber = Number(_seats)\n if(seatsNumber){\n let previewSeatsNumber = seatsNumber\n if(_action === \"increase\"){ \n setLoadingSeatsIncreasePreview(true)\n previewSeatsNumber += 1 \n }\n if(_action === \"decrease\"){\n setLoadingSeatsDecreasePreview(true)\n previewSeatsNumber -= 1\n } \n let body = {\n priceId: _priceId,\n quantity: previewSeatsNumber\n }\n await auth.isAuthenticated()\n .then(\n await be.get(\"payment-jubilant\",\"/subscriptions/preview\",body,true,true)\n .then((response) => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n const updateObj = {\n action: response?.action,\n amount: response?.amount,\n currency: response?.currency_code,\n priceId: _priceId,\n quantity: previewSeatsNumber\n }\n if(areAllFieldsPresent(updateObj)){\n setProrationDetails(updateObj);\n setShowProrationModal(true);\n }\n console.log(response);\n })\n .catch(error => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n console.log(error);\n })\n )\n .catch(error => {\n setLoadingSeatsIncreasePreview(false)\n setLoadingSeatsDecreasePreview(false)\n console.log(error);\n })\n }\n\n }\n\n return (\n <div className=\"subscription-card\">\n <div className=\"user-info\">\n {user?.profilePic && <img src={user?.profilePic} alt=\"Profile\" className=\"profile-pic\"/>}\n <div>\n <div><strong>{user?.name}</strong></div>\n <div><small>{user?.email}</small></div>\n </div>\n </div>\n {subscription?.planName &&\n <div>\n <div><strong>Your Plan: </strong></div>\n <div>\n <span><small>{subscription?.planName}</small></span>\n {subscription?.amount && subscription?.currency && subscription?.billingCycle &&\n <div><small className=\"plan-billing-cycle\">({Number(subscription?.amount)/100} {subscription?.currency} × {subscription?.billingCycle} × seat)</small></div>\n }\n </div>\n </div>\n }\n {subscription?.availableSeats &&\n <div>\n <div><strong>Seats: </strong></div>\n <div className=\"subscription-seats-info\">\n {/* <button className=\"seats-button\" onClick={() => seatsPreview(subscription?.priceId,subscription?.availableSeats,\"decrease\")} disabled={loadingSeatsDecreasePreview || loadingSeatsIncreasePreview || Number(subscription?.availableSeats) === 1}>{loadingSeatsDecreasePreview ? <Spinner/> : <>-</>}</button> */}\n <small>{subscription?.availableSeats}</small>\n {/* <button className=\"seats-button\" onClick={() => seatsPreview(subscription?.priceId,subscription?.availableSeats,\"increase\")} disabled={loadingSeatsDecreasePreview || loadingSeatsIncreasePreview}>{loadingSeatsIncreasePreview ? <Spinner/> : <>+</>}</button> */}\n </div>\n </div>\n }\n {subscription?.nextPaymentDate &&\n <div>\n <div><strong>Next Payment Date: </strong></div>\n <div className=\"date\"><small>{formatDate(subscription?.nextPaymentDate)}</small></div>\n </div>\n }\n {subscription?.scheduledCancelAt\n ?\n <div>\n <div><strong>Scheduled Cancellation:</strong></div>\n <div className=\"date\"><small>{formatDate(subscription?.scheduledCancelAt)}</small></div>\n </div>\n :\n <div className=\"manage-subscription-container\">\n {subscription?.cancelSubscriptionUrl &&\n <div>\n <a href={subscription?.cancelSubscriptionUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"cancel-button\">Cancel Subscription</a>\n </div>\n }\n {subscription?.updatePaymentMethodUrl &&\n <div>\n <a href={subscription?.updatePaymentMethodUrl} target=\"_blank\" rel=\"noopener noreferrer\" className=\"manage-button\">Update Payment Method</a>\n </div>\n }\n </div>\n }\n <Proration\n show={showProrationModal}\n onHide={handleProrationModalClose}\n prorationDetails={prorationDetails}\n />\n </div>\n );\n}\n\nexport default Subscription;\n","import React from 'react';\nimport { useMediaQuery } from 'react-responsive';\nimport { useTranslation } from 'react-i18next';\nimport Badge from 'react-bootstrap/Badge';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport './pricing-card.css';\n\nfunction _PricingCard(props){\n const { t } = useTranslation([\"features\",\"upgrade\",\"common\"]);\n const isTabletOrMobile = useMediaQuery({query: '(max-width: 1280px)'})\n const check = <i className=\"fas fa-check me-2 text-primary\"></i>\n const cross = <i className=\"fas fa-times me-2 text-secondary\"></i>\n const cardStyle = { background : props.background }\n const FeatureOverlay = ({id,description,children}) => (\n <OverlayTrigger\n placement={isTabletOrMobile ? 'bottom' : 'left'}\n overlay={ <Tooltip id={id}> {description} </Tooltip> }\n >\n <div>{children}</div>\n </OverlayTrigger>\n )\n\n return(\n <>\n <div \n className={props.overlay ? 'mx-auto mx-md-0 product-pricing-card overlay' : 'mx-auto mx-md-0 product-pricing-card'}\n style={cardStyle}\n >\n <div>\n {props?.planDisplayName\n ?<div className=\"d-inline h4 fw-bold text-capitalize\"> {props?.planDisplayName} </div>\n :<div className=\"d-inline h4 fw-bold text-capitalize\"> {props?.plan} </div>\n }\n <div className=\"d-inline\">\n {props.limited && <Badge className=\"\" variant=\"primary\">{t('common:limited')}</Badge> }\n </div>\n </div>\n <div>\n {props?.price &&\n <div className=\"my-3\">\n <span className=\"price\">{props.currency} {props.price}</span>\n <span className=\"ms-1\">{t('upgrade:premium.price')}</span>\n </div> \n }\n {props?.CTALink && !props?.hideCTA &&\n <div>\n {typeof(props.CTALink) === \"string\" \n ?\n <a href={props.CTALink} target=\"_blank\" rel=\"noopener noreferrer\">\n <button className=\"cta-btn\">{t('upgrade:premium.cta')}</button>\n </a>\n :\n <button onClick={() => props.CTALink()} className=\"cta-btn\">{t('upgrade:premium.cta')}</button>\n }\n </div>\n }\n <div className=\"my-5 mx-auto\">\n {Object.keys(props.features).map(feature => (\n <div key={`${props.plan}-plan-${feature}`} className=\"text-start my-3\">\n {props.features[feature] ? check : cross}\n <div style={{display:'inline-block',borderBottom:'1px dashed var(--color-border-light)'}}>\n <FeatureOverlay id={`${props.plan}-plan-${feature}-container`} description={t(`features:${feature}.subtitle`)}>\n {t(`features:${feature}.variants.prefix.${props.plan}`)} {t(`features:${feature}.title`)} {t(`features:${feature}.variants.suffix.${props.plan}`)}\n </FeatureOverlay>\n </div>\n </div>\n ))}\n </div>\n {props?.CTALink && !props?.hideCTA &&\n <div>\n {typeof(props.CTALink) === \"string\" \n ?\n <a href={props.CTALink} target=\"_blank\" rel=\"noopener noreferrer\">\n <button className=\"cta-btn\">{t('upgrade:premium.cta')}</button>\n </a>\n :\n <button onClick={() => props.CTALink()} className=\"cta-btn\">{t('upgrade:premium.cta')}</button>\n }\n </div>\n }\n </div>\n </div>\n </>\n );\n}\n\nexport default _PricingCard;\n","import { useEffect,useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport ToggleButton from 'react-bootstrap/ToggleButton';\nimport ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup';\nimport PricingCard from '../../Landing/PricingCard/_PricingCard';\nimport auth from '../../Account/Auth';\n\nfunction Pricing({openCheckout}){\n const {i18n,t} = useTranslation(['landing','common',\"upgrade\"]);\n const [pricingCadency,setPricingCadency] = useState(\"yearly\");\n return(\n <Row className=\"my-5 mx-auto\" style={{maxWidth:900}}>\n <ToggleButtonGroup type=\"radio\" name=\"pricing-cadency\" className=\"my-4\" value={pricingCadency} onChange={(value) => setPricingCadency(value)}>\n <ToggleButton id=\"pricing-cadency-monthly\" value=\"monthly\" name=\"pricing-cadency\" style={{borderRadius:'15px 0 0 15px'}} variant={pricingCadency === 'monthly' ? 'primary' : 'outline-primary'}>{t('upgrade:pricingCard.cadency.monthly')}</ToggleButton>\n <ToggleButton id=\"pricing-cadency-yearly\" value=\"yearly\" name=\"pricing-cadency\" style={{borderRadius:'0 15px 15px 0'}}variant={pricingCadency === 'yearly' ? 'primary' : 'outline-primary'}>{t('upgrade:pricingCard.cadency.yearly')}</ToggleButton>\n </ToggleButtonGroup>\n <Col xs={12} md={4} className=\"p-0 my-2\">\n <PricingCard\n background='var(--color-background-1)'\n plan=\"AgencyTier1\"\n planDisplayName=\"Agency 3\"\n currency={i18n.language.substring(0,2) === 'en' ? '$' : '€' }\n price={pricingCadency === 'monthly' ? '16' : '8'}\n hideCTA={!auth.sessionExist()}\n CTALink={() => openCheckout('agency-tier-1')}\n features={{\n premium:true,\n companySeats:true,\n agents:true,\n companyTeamSeats:true,\n }}\n />\n </Col>\n <Col xs={12} md={4} className=\"p-0 my-2\">\n <PricingCard\n overlay\n background='var(--color-background-1)'\n plan=\"AgencyTier2\"\n planDisplayName=\"Agency 5\"\n currency={i18n.language.substring(0,2) === 'en' ? '$' : '€' }\n price={pricingCadency === 'monthly' ? '33' : '16'}\n hideCTA={!auth.sessionExist()}\n CTALink={() => openCheckout('agency-tier-2')}\n features={{\n premium:true,\n companySeats:true,\n agents:true,\n companyTeamSeats:true,\n }}\n />\n </Col>\n <Col xs={12} md={4} className=\"p-0 my-2\">\n <PricingCard\n overlay\n background='var(--color-background-1)'\n plan=\"AgencyTier3\"\n planDisplayName=\"Agency 10\"\n currency={i18n.language.substring(0,2) === 'en' ? '$' : '€' }\n price={pricingCadency === 'monthly' ? '49' : '25'}\n hideCTA={!auth.sessionExist()}\n CTALink={() => openCheckout('agency-tier-3')}\n features={{\n premium:true,\n companySeats:true,\n agents:true,\n companyTeamSeats:true,\n }}\n />\n </Col>\n </Row>\n );\n}\n\nexport default Pricing;\n","import React, { useRef } from 'react';\nimport { Container, Row, Col, Button, Card, Accordion} from 'react-bootstrap';\nimport { FaRocket, FaPuzzlePiece, FaUserShield } from 'react-icons/fa';\nimport Pricing from '../Pricing';\nimport './agency-landing-page.css'\n\nfunction LandingPage({openCheckout}){\n const upgradeSectionRef = useRef(null);\n const scrollToUpgradeSection = () => {upgradeSectionRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });};\n\n const UpgradeSection = React.forwardRef((props, ref) => (\n <div ref={ref}>\n <Pricing openCheckout={props?.openCheckout}/>\n </div>\n ));\n\n const HeroSection = () => (\n <Container className=\"text-center my-5\">\n <Row className=\"justify-content-center\">\n <Col md={8}>\n <h1 className=\"display-4\">Revolutionize Your Agency's Operations</h1>\n <p className=\"lead\">Dive into a world where account management meets unparalleled efficiency, customization, and automation. \"Agency\" is not just a tool; it's your partner in redefining how your agency operates and thrives in the digital age.</p>\n <p>Embrace the future of agency management today and see how we transform challenges into opportunities, setting you miles apart from the competition.</p>\n <a className=\"btn btn-success\" onClick={scrollToUpgradeSection}>Upgrade Now</a>\n </Col>\n </Row>\n </Container>\n );\n\n const ProblemSolution = () => (\n <Container className=\"problem-solution-content\">\n <h2 className=\"problem-solution-header\">Streamline Your Workflow Like Never Before</h2>\n <p className=\"problem-solution-text problem-solution-animation\">\n Do constant account switches and cumbersome management tasks drain your team's productivity? \"Agency\" is here to revolutionize the way your agency operates. Our platform empowers you to manage multiple company accounts with unprecedented ease, ensuring seamless transitions, comprehensive customization, and powerful automation at your fingertips.\n </p>\n <p className=\"problem-solution-text problem-solution-animation\">\n Embrace the future of agency account management. Say goodbye to the inefficiencies holding you back and hello to a world where your potential is limitless.\n </p>\n <center><Button className=\"btn-success\" onClick={scrollToUpgradeSection}>Discover \"Agency\" Today</Button></center>\n </Container>\n );\n\n const HowItWorks = () => (\n <Container className=\"my-5\">\n <h2 className=\"text-center mb-4\">Getting Started with \"Agency\" is Easy</h2>\n <Row>\n <Col md={4} className=\"mb-3\">\n <Card className=\"step-animate step-1\">\n <Card.Body>\n <Card.Title>1. Sign Up</Card.Title>\n <Card.Text>Begin by creating your agency account. It's quick, easy, and you'll be up and running in no time.</Card.Text>\n </Card.Body>\n </Card>\n </Col>\n <Col md={4} className=\"mb-3\">\n <Card className=\"step-animate step-2\">\n <Card.Body>\n <Card.Title>2. Add Accounts</Card.Title>\n <Card.Text>Easily add and manage multiple company accounts from a single dashboard. No more hassle of logging in and out.</Card.Text>\n </Card.Body>\n </Card>\n </Col>\n <Col md={4} className=\"mb-3\">\n <Card className=\"step-animate step-3\">\n <Card.Body>\n <Card.Title>3. Customize & Automate</Card.Title>\n <Card.Text>Customize each account with unique settings, automate tasks, and take advantage of advanced integrations.</Card.Text>\n </Card.Body>\n </Card>\n </Col>\n </Row>\n <p className=\"text-center mt-4\">With \"Agency\", you can focus more on growing your business and less on the logistics of account management.</p>\n </Container>\n );\n\n const USPSection = () => (\n <Container className=\"usp-section my-5\">\n <h2 className=\"usp-title\">Why \"Agency\" is Your Best Choice</h2>\n <Row>\n <Col md={4} className=\"text-center\">\n <div className=\"usp-icon\"><FaRocket size=\"3em\" color=\"#ffbf69\" /></div>\n <h3>Speed & Efficiency</h3>\n <p>Launch projects faster with our streamlined account management system, designed for efficiency.</p>\n </Col>\n <Col md={4} className=\"text-center\">\n <div className=\"usp-icon\"><FaPuzzlePiece size=\"3em\" color=\"#ffbf69\" /></div>\n <h3>Unmatched Customization</h3>\n <p>Custom tailor every aspect of your account for a truly personalized experience that stands out.</p>\n </Col>\n <Col md={4} className=\"text-center\">\n <div className=\"usp-icon\"><FaUserShield size=\"3em\" color=\"#ffbf69\" /></div>\n <h3>Privacy & Security</h3>\n <p>Your data's security is our top priority, ensuring your information is protected at every level.</p>\n </Col>\n </Row>\n </Container>\n );\n\n const PricingStrategy = () => (\n <Container className=\"pricing-section my-5\">\n <Card className=\"pricing-card\">\n <Card.Body>\n <div className=\"special-offer\">Limited Time Offer</div>\n <Card.Title className=\"mb-4\">Exclusive Introductory Pricing</Card.Title>\n <Card.Text>\n <p>Unlock the full potential of \"Agency\" at an unbeatable price. </p>\n <p className=\"card-highlight\">Now starting only $8,2/month</p> {/* Example price, adjust as needed */}\n <p>for a limited time.</p>\n </Card.Text>\n <Button variant=\"primary\" onClick={scrollToUpgradeSection}>Get Started</Button>\n <Card.Text className=\"mt-3\">\n Don't miss this opportunity to enhance your agency's efficiency and customization capabilities at a fraction of the cost.\n </Card.Text>\n </Card.Body>\n </Card>\n </Container>\n );\n\n const FAQSection = () => (\n <Container className=\"faq-section my-5\">\n <h2 className=\"faq-header text-center\">Frequently Asked Questions</h2>\n <Accordion defaultActiveKey=\"0\" className=\"faq-accordion\">\n <Accordion.Item eventKey=\"0\">\n <Accordion.Header>What makes \"Agency\" different from other account management tools?</Accordion.Header>\n <Accordion.Body>\n Unlike other tools, \"Agency\" is specifically designed to empower agencies managing multiple company accounts with seamless switching, advanced customization, and automation features, setting a new standard in efficiency and control.\n </Accordion.Body>\n </Accordion.Item>\n <Accordion.Item eventKey=\"1\">\n <Accordion.Header>How does the pricing model work?</Accordion.Header>\n <Accordion.Body>\n Our pricing is simple and transparent, with no hidden fees. Starting at just $99/month, you get full access to all features. This introductory rate is part of our commitment to making advanced account management affordable for agencies of all sizes.\n </Accordion.Body>\n </Accordion.Item>\n <Accordion.Item eventKey=\"2\">\n <Accordion.Header>Can I cancel my subscription at any time?</Accordion.Header>\n <Accordion.Body>\n Absolutely. We believe in the value of our service, but if you decide it's not right for you, you can cancel your subscription without penalty.\n </Accordion.Body>\n </Accordion.Item>\n <Accordion.Item eventKey=\"3\">\n <Accordion.Header>What if I’m not sure about subscribing without a trial period?</Accordion.Header>\n <Accordion.Body>\n We understand the importance of making informed decisions, especially without a trial period. That's why we're committed to providing detailed resources, customer success stories, and 24/7 support to ensure you have all the information and assistance you need to see how \"Agency\" can revolutionize your account management. Our flexible subscription options and dedicated support are designed to make your transition as smooth as possible, ensuring you can confidently invest in \"Agency\" to drive your agency's success.\n </Accordion.Body>\n </Accordion.Item>\n <Accordion.Item eventKey=\"4\">\n <Accordion.Header>How secure is \"Agency\"?</Accordion.Header>\n <Accordion.Body>\n Security is our top priority. We employ the latest encryption and security practices to ensure your data and your clients' data is always protected.\n </Accordion.Body>\n </Accordion.Item>\n <Accordion.Item eventKey=\"5\">\n <Accordion.Header>What kind of support can I expect?</Accordion.Header>\n <Accordion.Body>\n Our dedicated support team is available 24/7 to assist with any questions or issues you may encounter. Exceptional customer service is a cornerstone of our business.\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n </Container>\n );\n\n return (\n <div>\n <HeroSection />\n <ProblemSolution />\n <HowItWorks />\n <PricingStrategy /> \n <USPSection />\n <UpgradeSection ref={upgradeSectionRef} openCheckout={openCheckout}/>\n <FAQSection />\n </div>\n );\n}\n\nexport default LandingPage;\n","export function createReport(eventData, auth, currentPage, eventName) {\n // Safely get user info from auth\n const userEmail = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"email\"],\n fallback: \"unknown\",\n });\n const userName = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"name\"],\n fallback: \"unknown\",\n });\n const userLanguage = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"language\"],\n fallback: \"unknown\",\n });\n const userTimezone = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"timezone\"],\n fallback: \"unknown\",\n });\n const userPlan = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n\n // Basic sections always included\n let message = \"\\n**User Journey**\\n\";\n message += `- **Current Page:** ${currentPage}\\n\\n`;\n\n message += \"**User Insights**\\n\";\n message += `- **Internal Username:** ${auth.getUsername()}\\n`;\n message += `- **Customer Email (from Local Profile):** ${userEmail}\\n`;\n message += `- **Customer Name:** ${userName}\\n`;\n message += `- **Language:** ${userLanguage}\\n`;\n message += `- **Timezone:** ${userTimezone}\\n`;\n message += `- **Plan Status:** ${userPlan}\\n\\n`;\n\n // Append event-specific details\n switch (eventName) {\n case \"checkout.closed\": {\n const d = eventData?.data;\n const item = d?.items?.[0];\n message = \"\\n**## Checkout Closed**\" + message; // Change heading as needed\n message += \"**Checkout Details**\\n\";\n message += `- **Customer Email (from Paddle):** ${\n d?.customer?.email ?? \"unknown\"\n }\\n`;\n message += `- **Checkout ID:** ${d?.id ?? \"unknown\"}\\n`;\n message += `- **Transaction ID:** ${d?.transaction_id ?? \"unknown\"}\\n`;\n message += `- **Status:** ${d?.status ?? \"unknown\"}\\n`;\n message += `- **Product Name:** ${item?.product?.name ?? \"unknown\"}\\n`;\n message += `- **Product Price Name:** ${item?.price_name ?? \"unknown\"}\\n`;\n message += `- **Billing Cycle:** ${\n item?.billing_cycle?.frequency ?? \"?\"\n } ${item?.billing_cycle?.interval ?? \"?\"}(s)\\n`;\n message += `- **Subtotal:** ${item?.totals?.subtotal ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n message += `- **Tax:** ${item?.totals?.tax ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n message += `- **Total:** ${item?.totals?.total ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n break;\n }\n\n case \"checkout.warning\": {\n const w = eventData?.data;\n message = \"\\n**## Checkout Warning**\" + message;\n message += \"**Warning Details**\\n\";\n message += `- **Type:** ${w?.type ?? \"unknown\"}\\n`;\n message += `- **Code:** ${w?.code ?? \"unknown\"}\\n`;\n message += `- **Detail:** ${w?.detail ?? \"none\"}\\n`;\n message += `- **Documentation:** ${w?.documentation_url ?? \"none\"}\\n\\n`;\n message += \"**Errors**\\n\";\n if (Array.isArray(w?.errors) && w.errors.length > 0) {\n w.errors.forEach((err) => {\n message += `- **Field:** ${err.field ?? \"unknown\"} | **Message:** ${\n err.message ?? \"none\"\n }\\n`;\n });\n } else {\n message += \"No additional errors\\n\";\n }\n break;\n }\n\n case \"checkout.error\": {\n const e = eventData?.error;\n message = \"\\n**## Checkout Error**\" + message;\n message += \"**Error Details**\\n\";\n if (e) {\n message += `- **Type:** ${e.type ?? \"unknown\"}\\n`;\n message += `- **Code:** ${e.code ?? \"unknown\"}\\n`;\n message += `- **Detail:** ${e.detail ?? \"none\"}\\n`;\n message += `- **Documentation:** ${e.documentation_url ?? \"none\"}\\n`;\n } else {\n message += \"No error details available\\n\";\n }\n break;\n }\n\n case \"checkout.payment.failed\": {\n const d = eventData?.data;\n const primaryItem = d?.items?.[0];\n\n message = \"\\n**## Checkout Payment Failed**\" + message;\n message += \"**Payment Failure Details**\\n\";\n message += `- **Customer Email (from Paddle):** ${\n d?.customer?.email ?? \"unknown\"\n }\\n`;\n message += `- **Checkout ID:** ${d?.id ?? \"unknown\"}\\n`;\n message += `- **Transaction ID:** ${d?.transaction_id ?? \"unknown\"}\\n`;\n message += `- **Status:** ${d?.status ?? \"unknown\"}\\n`;\n message += `- **Currency:** ${d?.currency_code ?? \"unknown\"}\\n`;\n message += `- **Payment Method:** ${\n d?.payment?.method_details?.type ?? \"unknown\"\n }\\n`;\n\n if (primaryItem) {\n message += \"\\n**Failed Product Details**\\n\";\n message += `- **Product Name:** ${\n primaryItem?.product?.name ?? \"unknown\"\n }\\n`;\n message += `- **Quantity:** ${primaryItem?.quantity ?? \"unknown\"}\\n`;\n message += `- **Subtotal:** ${primaryItem?.totals?.subtotal ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n message += `- **Tax:** ${primaryItem?.totals?.tax ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n message += `- **Discount:** ${primaryItem?.totals?.discount ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n message += `- **Total:** ${primaryItem?.totals?.total ?? \"?\"} ${\n d?.currency_code ?? \"\"\n }\\n`;\n }\n\n if (d?.discount) {\n message += \"\\n**Discount Applied**\\n\";\n message += `- **Discount ID:** ${d.discount.id ?? \"unknown\"}\\n`;\n message += `- **Discount Code:** ${d.discount.code ?? \"unknown\"}\\n`;\n }\n\n break;\n }\n\n case \"checkout.loaded\":\n case \"checkout.customer.created\":\n case \"checkout.completed\":\n default:\n break;\n }\n\n return message;\n}\n","import { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport { initializePaddle, Paddle } from \"@paddle/paddle-js\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport Row from \"react-bootstrap/Row\";\nimport Header from \"./Header/Header\";\nimport Subscription from \"./Subscription/Subscription\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\nimport LandingPage from \"./Agency/LandingPage/LandingPage\";\nimport { createReport } from \"../Utilities/paddleAbandonedCheckoutReport\";\n\nconst DEBUG =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"dev.calendbook.com\";\nconst TEST_TOKEN = \"test_2ee936d492e84b8c70ff282cacf\";\nconst LIVE_TOKEN = \"live_f9e2fd79f6f00aa1b9f8a4f55ec\";\n\nconst TEST_YEARLY_PREMIUM = \"pri_01hnd8w440pst7jaenb4pxjeap\";\nconst TEST_MONTHLY_PREMIUM = \"pri_01hnd8x6tzhbd13qw6d7tdkyn5\";\nconst LIVE_YEARLY_PREMIUM = \"pri_01hg8swx54tmf43w05cpgk97cc\";\nconst LIVE_MONTHLY_PREMIUM = \"pri_01hg8sw20z338km4mns1n08bxg\";\n\nconst TEST_YEARLY_PROFESSIONAL = \"pri_01hrc18ywbwns9mev9kqk54e03\";\nconst TEST_MONTHLY_PROFESSIONAL = \"pri_01hrc188kzp7m8x2paw3x6chwq\";\nconst LIVE_YEARLY_PROFESSIONAL = \"pri_01hrc1cdmrhmnz9t7xpz1jp15y\";\nconst LIVE_MONTHLY_PROFESSIONAL = \"pri_01hrc1bfh4v2whzkvy9d4db067\";\n\nconst TEST_YEARLY_AGENCY_TIER_1 = \"pri_01hpppgpswcs3m0bgsv6y4s5w7\";\nconst TEST_YEARLY_AGENCY_TIER_2 = \"pri_01hpppj8gv63sqrpfy0m903y54\";\nconst TEST_YEARLY_AGENCY_TIER_3 = \"pri_01hpppmdaz4wfanashe34nrqn0\";\nconst TEST_MONTHLY_AGENCY_TIER_1 = \"pri_01hpppfymkva8vdrkdc9txpzya\";\nconst TEST_MONTHLY_AGENCY_TIER_2 = \"pri_01hppphhxptgqa11m9rqyfbte9\";\nconst TEST_MONTHLY_AGENCY_TIER_3 = \"pri_01hpppkttbrjt8trn5jmy73ks1\";\nconst LIVE_YEARLY_AGENCY_TIER_1 = \"pri_01hprnktqvvgf6akr4h7sb5nmg\";\nconst LIVE_YEARLY_AGENCY_TIER_2 = \"pri_01hprnpk590pqkqc02jzhga165\";\nconst LIVE_YEARLY_AGENCY_TIER_3 = \"pri_01hprns7fxfacgn6mkjv4qwz2h\";\nconst LIVE_MONTHLY_AGENCY_TIER_1 = \"pri_01hprnjbazy7hftyh1cxvx8qtp\";\nconst LIVE_MONTHLY_AGENCY_TIER_2 = \"pri_01hprnnkjrcgt8mv7vy8s4fp5k\";\nconst LIVE_MONTHLY_AGENCY_TIER_3 = \"pri_01hprnr0jz2q72fqgn1z2wg0ww\";\n\nfunction Upgrade({ featureName }) {\n const PricingCard = window.calendbookUI.PricingCard;\n const Button = window.calendbookUI.Button;\n\n const history = useHistory();\n\n try {\n window.tidioChatApi.show();\n } catch {}\n const { i18n, t } = useTranslation([\"landing\", \"common\", \"upgrade\"]);\n const [loading, setLoading] = useState(false);\n const [paddle, setPaddle] = useState();\n const [view, setView] = useState(\n window.location.hash === \"#agency\" ? \"agency\" : \"upgrade\"\n );\n const [subscription, setSubscription] = useState({});\n const [pricingCadency, setPricingCadency] = useState(\"yearly\");\n const [customerId, setCustomerId] = useState(\"\");\n\n const userPlan = auth.getProperty({\n // get user role/plan\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"unknown\",\n });\n const getUserLanguage = () => {\n try {\n return i18n.language.substring(0, 2);\n } catch (e) {\n return \"en\";\n }\n };\n\n var createNestedObject = function (base, names) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for (var i = 0; i < names.length; i++) {\n base = base[names[i]] = base[names[i]] || {};\n }\n };\n\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n const getSubscriptions = async () => {\n setLoading(true);\n // check if subscription has extra fields\n // if yes, the customer already has a subscription\n function checkForAdditionalFields(\n response,\n reference = { customerId: null }\n ) {\n for (let key in response) {\n if (!(key in reference)) {\n console.log(`[upgrade][subscription] extra fields found`);\n return true;\n }\n }\n return false;\n }\n\n await auth\n .isAuthenticated()\n .then(\n await be\n .get(\"payment-jubilant\", \"/subscriptions\", false, true, true)\n .then((response) => {\n setLoading(false);\n console.log(response);\n if (response?.customerId) {\n setCustomerId(response?.customerId);\n }\n if (checkForAdditionalFields(response, { customerId: null })) {\n //setView(\"manage\");\n setSubscription(response);\n }\n })\n .catch((error) => {\n setLoading(false);\n console.log(error);\n })\n )\n .catch((error) => {\n setLoading(false);\n console.log(error);\n });\n };\n\n const sendAbandonedCartEvent = async (body) => {\n await auth\n .isAuthenticated()\n .then(\n await be\n .post(\"payment-jubilant\", \"/payments/abandoned\", body, true, true)\n .then((response) => {\n console.log(\n \"[upgrade][subscription] sent bandoned cart event: \",\n body\n );\n })\n .catch((error) => {\n console.log(error);\n })\n )\n .catch((error) => {\n console.log(error);\n });\n };\n\n useEffect(() => {\n document.title = \"Calendbook - Upgrade\";\n initializePaddle({\n environment: DEBUG ? \"sandbox\" : \"production\",\n checkout: {\n settings: {\n displayMode: \"overlay\",\n theme: \"light\",\n locale: getUserLanguage(),\n },\n },\n token: DEBUG ? TEST_TOKEN : LIVE_TOKEN,\n eventCallback: async function (data) {\n const currentPage = window.location.href;\n\n // Create the message\n const eventMessage = createReport(data, auth, currentPage, data.name);\n\n switch (data.name) {\n case \"checkout.closed\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.warning\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.error\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.payment.failed\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.completed\":\n console.log(\n \"[upgrade] checkout completed, updating user profile...\"\n );\n setLoading(true);\n await sleep(5000);\n await auth.refresh();\n history.push(\"/settings#subscription\");\n history.go(0);\n break;\n\n default:\n console.log(`Unhandled event: ${data.name}`);\n }\n },\n }).then((paddleInstance) => {\n if (paddleInstance) {\n setPaddle(paddleInstance);\n }\n });\n\n if (auth.sessionExist()) {\n // getSubscriptions();\n }\n }, []);\n\n const openCheckout = (product) => {\n const getSubscriptionPriceId = (_product) => {\n if (_product === \"premium\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_PREMIUM;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_PREMIUM;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_PREMIUM;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_PREMIUM;\n }\n }\n }\n if (_product === \"professional\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_PROFESSIONAL;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_PROFESSIONAL;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_PROFESSIONAL;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_PROFESSIONAL;\n }\n }\n }\n if (_product === \"agency-tier-1\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_1;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_1;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_1;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_1;\n }\n }\n }\n if (_product === \"agency-tier-2\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_2;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_2;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_2;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_2;\n }\n }\n }\n if (_product === \"agency-tier-3\") {\n if (DEBUG) {\n if (pricingCadency === \"monthly\") {\n return TEST_MONTHLY_AGENCY_TIER_3;\n }\n if (pricingCadency === \"yearly\") {\n return TEST_YEARLY_AGENCY_TIER_3;\n }\n } else {\n if (pricingCadency === \"monthly\") {\n return LIVE_MONTHLY_AGENCY_TIER_3;\n }\n if (pricingCadency === \"yearly\") {\n return LIVE_YEARLY_AGENCY_TIER_3;\n }\n }\n }\n };\n let checkoutObj = {\n items: [\n {\n priceId: getSubscriptionPriceId(product),\n quantity: 1,\n },\n ],\n customData: {\n tolt_referral: window.tolt_referral,\n },\n };\n if (customerId) {\n createNestedObject(checkoutObj, [\"customer\", \"id\"]);\n checkoutObj[\"customer\"][\"id\"] = customerId;\n } else if (auth.getEmail()) {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = auth.getEmail();\n } else {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = \"your@email.com\";\n }\n paddle?.Checkout.open(checkoutObj);\n };\n\n return (\n <div className=\"container\">\n {loading ? (\n <Spinner\n style={{ margin: \"150px calc(50% - 16px)\" }}\n animation=\"border\"\n size=\"lg\"\n />\n ) : (\n <>\n {userPlan === \"professional\" && (\n <div className=\"tw-justify-center tw-text-center tw-my-20\">\n <h2 className=\"tw-text-4xl tw-font-extrabold\">Awesome!</h2>\n <h3 className=\"tw-text-xl\"> You are on the top Plan! ❤️</h3>\n <p>\n You can manage your subscription in the{\" \"}\n <a href=\"/settings#subscription\" className=\"tw-underline\">\n settings page\n </a>\n </p>\n </div>\n )}\n {userPlan !== \"professional\" && <Header view={view} />}\n {view === \"upgrade\" && (\n <Row className=\"my-5 mx-auto\" style={{ maxWidth: 900 }}>\n {userPlan !== \"professional\" && (\n <div className=\"tw-my-20 tw-mx-auto tw-w-max tw-bg-gray-200 tw-p-0.5 tw-gap-0.5 tw-rounded-full tw-flex tw-flex-row\">\n <Button\n buttonText=\"Monthly\"\n color={\n pricingCadency === \"monthly\" ? \"dark\" : \"alternative\"\n }\n onClick={() => setPricingCadency(\"monthly\")}\n />\n <Button\n buttonText=\"Yearly (50% Off)\"\n color={pricingCadency === \"yearly\" ? \"dark\" : \"alternative\"}\n onClick={() => setPricingCadency(\"yearly\")}\n />\n </div>\n )}\n <div className=\"tw-my-10 tw-items-center tw-justify-center md:tw-items-stretch tw-flex tw-flex-col md:tw-flex-row tw-gap-8\">\n {(userPlan === \"free\" ||\n userPlan === \"LTD\" ||\n userPlan === \"trial\" ||\n userPlan === \"unknown\") && (\n <PricingCard\n variant=\"secondary\"\n plan=\"Premium\"\n description=\"For Premium users\"\n currency={\n i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"\n }\n price={pricingCadency === \"monthly\" ? \"5\" : \"2\"}\n cadency=\"month\"\n callback={() => openCheckout(\"premium\")}\n features={[\n \"Everything in Free Plan plus...\",\n \"Unlimited Event Types\",\n \"10 Calendar Connections\",\n \"Zoom Integration\",\n \"Questions to Qualify Leads\",\n \"Send email from your Gmail\",\n ]}\n />\n )}\n {(userPlan === \"free\" ||\n userPlan === \"LTD\" ||\n userPlan === \"trial\" ||\n userPlan === \"premium\" ||\n userPlan === \"unknown\") && (\n <PricingCard\n variant=\"primary\"\n plan=\"Professional\"\n description=\"For Advanced users\"\n currency={\n i18n.language.substring(0, 2) === \"en\" ? \"$\" : \"€\"\n }\n price={pricingCadency === \"monthly\" ? \"10\" : \"5\"}\n cadency=\"month\"\n callback={() => openCheckout(\"professional\")}\n features={[\n \"Everything in Premium Plan plus...\",\n \"Zapier & Webhook Integrations\",\n \"Advanced Availability\",\n \"Company Branding\",\n \"Accept/Reject Schedulings\",\n \"Whatsapp & Telegram Notifications\",\n ]}\n />\n )}\n </div>\n </Row>\n )}\n {view === \"agency\" && (\n <Row className=\"my-5 mx-auto\" style={{ maxWidth: 900 }}>\n <LandingPage openCheckout={openCheckout} />\n </Row>\n )}\n {view === \"manage\" && (\n <Subscription\n subscription={subscription}\n setSubscriptionsLoading={setLoading}\n getSubscriptions={getSubscriptions}\n />\n )}\n </>\n )}\n </div>\n );\n}\n\nexport default Upgrade;\n","import { useTranslation } from 'react-i18next';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport CalendarsList from './CalendarsList';\n\nfunction ConnectedCalendars(props){\n const { t } = useTranslation(['calendarConnections']);\n return(\n <>\n <Row style={{height:38}}>\n <Col>\n <div className=\"fs-4 d-inline\">{t('connectedCalendars')}</div>\n <div style={{color:'var(--color-secondary)'}} className=\"d-inline ms-3 align-text-bottom\">{props.connectedCalendars}/{props.maxCalendars}</div>\n </Col>\n <Col xs={2} md={5} lg={5} className=\"pe-0\">\n //addcalendar\n </Col>\n </Row>\n <Row>\n <small>Here you can add, remove and check the connection status of your calendars</small>\n </Row>\n <Row className=\"mt-4\">\n <CalendarsList calendarsList={props.calendarsList} isLoading={props.isLoading}/>\n </Row>\n </>\n );\n}\n\nexport default ConnectedCalendars;\n","import { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useGoogleLogin } from \"react-google-login\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport Button from \"react-bootstrap/Button\";\nimport { useCalendarConnectionsStore } from \"../store\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\nimport UpgradePath from \"../Utilities/UpgradePath/UpgradePath\";\nimport UpgradeBadge from \"../Utilities/UpgradePath/UpgradeBadge\";\n\nfunction AddCalendar({ connectedCalendars }) {\n const { t } = useTranslation([\"calendarConnections\"]);\n const setCalendarAccess = useCalendarConnectionsStore(\n (state) => state.setCalendarAccess\n );\n const setCalendarPic = useCalendarConnectionsStore(\n (state) => state.setCalendarPic\n );\n const addCalendarStore = useCalendarConnectionsStore(\n (state) => state.addCalendar\n );\n const [statusCode, setStatusCode] = useState(0);\n const [loading, setLoading] = useState(false);\n const addCalendar = async (_code) => {\n // prendo la radice dell'url corrente per usare il corrispettivo path\n let radixUrl = window.location.hostname;\n let path = \"\";\n if (radixUrl === \"localhost\") {\n path = \"/linkNewCalendar\";\n }\n if (radixUrl === \"dev.calendbook.com\") {\n path = \"/devNewCalendar\";\n }\n if (radixUrl === \"www.calendbook.com\") {\n path = \"/prodNewCalendar\";\n }\n setStatusCode(0);\n setLoading(true);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .get(\"calendarhandler\", path, { code: _code }, true)\n .then((response) => {\n console.log(response);\n addCalendarStore(response);\n setLoading(false);\n })\n .catch((error) => {\n console.log(error);\n setStatusCode(error?.response?.status);\n setLoading(false);\n });\n })\n .catch(() => this.props.history.push(\"/login\"));\n };\n const radixUrl =\n window.location.href.split(\"/\")[0] +\n \"//\" +\n window.location.href.split(\"/\")[2];\n const { signIn, loaded } = useGoogleLogin({\n uxMode: \"redirect\",\n clientId:\n \"93252394910-584iq1mr08q684hurrfma0i9fct9cs82.apps.googleusercontent.com\",\n scope: \"https://www.googleapis.com/auth/calendar\",\n accessType: \"offline\",\n redirectUri: radixUrl,\n cookiePolicy: \"single_host_origin\",\n responseType: \"code\",\n onSuccess: async (response) => {\n await addCalendar(response.code);\n },\n });\n\n return (\n <div className=\"d-inline-block float-end\">\n {connectedCalendars === 0 ? (\n <Button\n variant={\n statusCode >= 400 && statusCode <= 500\n ? \"outline-danger\"\n : \"primary\"\n }\n onClick={signIn}\n style={{ minWidth: 50 }}\n >\n {loading ? (\n <Spinner animation=\"border\" size=\"sm\" />\n ) : (\n <>\n <i className=\"fas fa-user-plus me-0 me-md-2\"></i>\n <span className=\"d-none d-md-inline-block\">\n {t(\"addCalendarBtn\")}\n </span>\n </>\n )}\n </Button>\n ) : (\n <UpgradePath featureName=\"multiple-calendars\" position=\"center\">\n <Button\n variant={\n statusCode >= 400 && statusCode <= 500\n ? \"outline-danger\"\n : \"primary\"\n }\n onClick={signIn}\n style={{ minWidth: 50 }}\n >\n {loading ? (\n <Spinner animation=\"border\" size=\"sm\" />\n ) : (\n <>\n <UpgradeBadge featureName=\"multiple-calendars\" />\n <i className=\"fas fa-user-plus me-0 ms-2 me-md-2\"></i>\n <span className=\"d-none d-md-inline-block\">\n {t(\"addCalendarBtn\")}\n </span>\n </>\n )}\n </Button>\n </UpgradePath>\n )}\n </div>\n );\n}\n\nexport default AddCalendar;\n","import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport { useCalendarConnectionsStore } from '../store';\nimport auth from '../Account/Auth';\nimport be from '../BE';\n\nfunction RemoveCalendar({email,index}){\n const { t } = useTranslation(['calendarConnections']);\n const deleteCalendar= useCalendarConnectionsStore((state) => state.deleteCalendar);\n const [statusCode,setStatusCode] = useState(0);\n const [loading,setLoading] = useState(false);\n const disconnectCalendar = async (_email) => {\n setStatusCode(0);\n setLoading(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('calendarhandler',\"/deleteCalendar\",{email:_email},true)\n .then((response) => {\n setStatusCode(200);\n deleteCalendar(_email);\n setLoading(false);\n })\n .catch((error) => {\n setStatusCode(error?.response?.status)\n setLoading(false);\n });\n })\n .catch(() => this.props.history.push('/login'))\n }\n return(\n <div className=\"ms-auto\">\n <Button \n variant={\n (statusCode >= 400 && statusCode <= 500) \n ? 'outline-danger' \n : 'outline-secondary'\n } \n size=\"sm\"\n style={{minWidth:50}}\n onClick={() => disconnectCalendar(email)}\n >\n {loading\n ?\n <Spinner animation=\"border\" size=\"sm\"/>\n :\n <>\n <i className=\"fas fa-user-times me-0 me-md-2\"></i>\n <span className=\"d-none d-md-inline-block\">{t('disconnectCalendarBtn')}</span> \n </>\n }\n </Button>\n </div>\n );\n}\n\nexport default RemoveCalendar;\n","import { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form'\nimport Spinner from 'react-bootstrap/Spinner';\nimport {useCalendarConnectionsStore} from '../store';\nimport auth from '../Account/Auth';\nimport be from '../BE.js';\n\nfunction ChangePermissions({mode,access,index,email,calendars,subIndex,subCalendarId,loadingPermissions,setLoadingPermissions}){\n\n const { t } = useTranslation(['calendarConnections']);\n const setCalendarAccess = useCalendarConnectionsStore((state) => state.setCalendarAccess);\n const [statusCode,setStatusCode] = useState(0);\n const [loading,setLoading] = useState(false);\n\n const getLabel = (mode) => {\n if(mode){\n if(mode === 'check'){return t('checkConflicts');}\n else if(mode === 'add'){return t('addEvents');}\n else return '';\n }else{return '';}\n }\n\n const shouldCheck = (mode,access) => {\n if (mode && access){\n if (mode === 'check' && access.includes('r')){return true;}\n else if (mode === 'add' && access.includes('w')){return true;}\n else return false;\n }else{return false;}\n }\n\n const changeCalendarAccess = async (_index,_email,_mode,_subIndex,_subCalendarId) => {\n setStatusCode(0);\n setLoading(true);\n setLoadingPermissions(true);\n const toggleAddToCalendar = (_access) => {\n if(_access === 'w'){return 'none'}\n if(_access === 'r/w'){return 'r'}\n if(_access === 'r'){return 'r/w'}\n if(_access === 'none'){return 'w'}\n return 'none'\n }\n const toggleCheckConflictsInCalendar = (_access) => {\n if(_access === 'w'){return 'r/w'}\n if(_access === 'r/w'){return 'w'}\n if(_access === 'r'){return 'none'}\n if(_access === 'none'){return 'r'}\n return 'none'\n }\n\n let currentAccess = calendars[_index].access\n if(subIndex >= 0){currentAccess = calendars[_index].subCalendars[_subIndex].access}\n let newAccess = 'none';\n if(_mode === 'add'){newAccess = toggleAddToCalendar(currentAccess)}\n else if(_mode === 'check'){newAccess = toggleCheckConflictsInCalendar(currentAccess)}\n const body = {\n access:newAccess,\n email:_email,\n ...(_subCalendarId ? {subCalendarId: _subCalendarId} : {})\n }\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('calendarhandler','/changeAccessCalendar',body,true)\n .then((response) => {\n setStatusCode(200);\n setLoading(false);\n setLoadingPermissions(false);\n setCalendarAccess(index,subIndex,newAccess);\n })\n .catch((error) => {\n setStatusCode(error?.response?.status)\n setLoading(false);\n setLoadingPermissions(false);\n })\n })\n .catch(() => this.props.history.push('/login'))\n }\n\n return(\n <div className=\"d-inline-flex me-3\">\n <div style={{marginLeft:7}}>\n {loading\n ?\n <Spinner animation=\"border\" size=\"sm\"/>\n :\n <Form.Check \n aria-label={`check-conflicts-${email}-${mode}`}\n checked={shouldCheck(mode,access)}\n onChange={() => changeCalendarAccess(index,email,mode,subIndex,subCalendarId)}\n disabled={loadingPermissions}\n />\n }\n </div>\n <span className=\"ms-2\"> {getLabel(mode)} </span>\n {(statusCode >= 400 && statusCode <= 500) &&\n <small className=\"ms-2 text-danger\" style={{lineHeight:'26px'}}>{t('error')}</small>\n }\n </div>\n );\n}\n\nexport default ChangePermissions;\n","import { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Form from 'react-bootstrap/Form'\nimport Spinner from 'react-bootstrap/Spinner';\nimport {useCalendarConnectionsStore} from '../store';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useAccordionButton } from 'react-bootstrap/AccordionButton';\nimport ChangePermissions from './ChangePermissions';\nimport auth from '../Account/Auth';\nimport be from '../BE.js';\n\nfunction SubCalendars({email,calendars,index,subCalendars}){\n const { t } = useTranslation(['calendarConnections']);\n const [collapsed,setCollapsed] = useState(index === 0 ? true : false);\n const [statusCode,setStatusCode] = useState(0);\n const [loading,setLoading] = useState(false);\n const [nowLoading,setNowLoading] = useState(false);\n //const [loadingPermissions,setLoadingPermissions] = useState(false);\n const setSubCalendarEnabled = useCalendarConnectionsStore((state) => state.setSubCalendarEnabled);\n\n function CustomToggle({ children, eventKey, collapsed, setCollapsed }) {\n const decoratedOnClick = useAccordionButton(eventKey, () => setCollapsed(!collapsed),);\n return (\n <button\n type=\"button\"\n style={{backgroundColor:'transparent',border:'none',margin:'10px auto 0 auto',display:'flex',color:'var(--color-primary)',fontSize:'12px',width:'100%',textAlign:'center',display:'inline-block'}}\n onClick={decoratedOnClick}\n >\n {children}\n </button>\n );\n }\n\n const toggleSubCalendar = async (_index,_subIndex,_email,_id,_enabled) => {\n setLoading(true);\n setNowLoading(_id);\n const body={email:_email,subCalendarId:_id,status:_enabled}\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('calendarhandler','/subcalendars/status',body,true)\n .then((response) => {\n setStatusCode(200);\n setLoading(false);\n setNowLoading(\"\");\n setSubCalendarEnabled(_index,_subIndex,_enabled)\n })\n .catch((error) => {\n setStatusCode(error?.response?.status)\n setLoading(false);\n setNowLoading(\"\");\n })\n })\n .catch(() => this.props.history.push('/login'))\n }\n\n return (\n <Accordion defaultActiveKey={index === 0 && email || ''}>\n <CustomToggle eventKey={email} collapsed={collapsed} setCollapsed={setCollapsed}>\n <span className=\"flex\">\n <span className=\"d-inline-flex me-1 mb-2\">\n {t('subCalendars')}\n </span>\n <span style={{display:'inline-flex',rotate:collapsed && '90deg',transition:'0.2s',transitionOrigin:'center'}}>\n <i className=\"fas fa-caret-right\" ></i>\n </span>\n </span>\n </CustomToggle>\n <Accordion.Item eventKey={email} style={{border:'none',background:'transparent',color:'var(--color-text)'}}>\n <Accordion.Collapse eventKey={email} style={{padding:'0 7px'}}>\n <div className=\"d-flex flex-column\">\n {subCalendars && subCalendars.map((subCalendar, subIndex) => (\n <div className=\"mb-1\">\n\n <div key={`${subCalendar?.id}`} className=\"d-inline-flex\">\n {loading && nowLoading === subCalendar?.id \n ?\n <span style={{width:32,marginRight:8}}>\n <Spinner animation=\"border\" size=\"sm\" className=\"d-flex mx-auto\"/>\n </span>\n :\n <Form.Check \n type=\"switch\"\n aria-label={`sub-calendar-${subCalendar?.id}`}\n checked={calendars[index]?.subCalendars[subIndex]?.enabled}\n onChange={() => toggleSubCalendar(index,subIndex,email,subCalendar?.id,!subCalendar?.enabled)}\n />\n }\n <span>{subCalendar?.displayName}</span>\n </div>\n {/*\n <div>\n <div>\n <ChangePermissions\n mode='check'\n index={index}\n email={email}\n access={subCalendar?.access}\n calendars={calendars}\n subIndex={subIndex}\n subCalendarId={subCalendar?.id}\n loadingPermissions={loadingPermissions}\n setLoadingPermissions={setLoadingPermissions}\n />\n </div>\n <div>\n <ChangePermissions\n mode='add'\n index={index}\n email={email}\n access={subCalendar?.access}\n calendars={calendars}\n subIndex={subIndex}\n subCalendarId={subCalendar?.id}\n loadingPermissions={loadingPermissions}\n setLoadingPermissions={setLoadingPermissions}\n />\n </div>\n </div>\n */}\n </div>\n ))}\n </div>\n </Accordion.Collapse>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nexport default SubCalendars;\n","import {useState} from 'react';\nimport RemoveCalendar from './RemoveCalendar';\nimport ChangePermissions from './ChangePermissions';\nimport SubCalendars from './SubCalendars';\nimport Syncronize from './Syncronize';\nimport './calendar.css';\n\nfunction Calendar({index,fullName,email,pic,access,calendars,setCalendars,sync}){\n const [loadingPermissions,setLoadingPermissions] = useState(false);\n\n return(\n <div className=\"calendar-container\">\n\n <div style={{display:'flex',alignItems:'center',marginBottom:10}}>\n <img width=\"32px\" height=\"32px\" src={pic} alt=\"profile-pic\" className=\"rounded-circle me-2\"/>\n <div style={{display:'flex',flexDirection:'column'}}>\n <span style={{fontWeight:500}}>{fullName}</span>\n <small style={{color:'var(--color-secondary)'}}>{email} {calendars[index]?.stopLight ? '✅' : '⚠️'}</small>\n </div>\n <RemoveCalendar email={email}/>\n </div>\n <ChangePermissions\n mode='check'\n index={index}\n email={email}\n access={access}\n calendars={calendars}\n setCalendars={setCalendars}\n loadingPermissions={loadingPermissions}\n setLoadingPermissions={setLoadingPermissions}\n />\n <ChangePermissions\n mode='add'\n index={index}\n email={email}\n access={access}\n calendars={calendars}\n setCalendars={setCalendars}\n loadingPermissions={loadingPermissions}\n setLoadingPermissions={setLoadingPermissions}\n />\n {/*<Syncronize index={index} email={email} sync={sync} />*/}\n <SubCalendars index={index} email={email} calendars={calendars} subCalendars={calendars[index]?.subCalendars}/>\n </div>\n );\n}\n\nexport default Calendar;\n","import { useLocation, useHistory } from \"react-router-dom\";\nimport { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport Container from \"react-bootstrap/Container\";\nimport Row from \"react-bootstrap/Row\";\nimport Col from \"react-bootstrap/Col\";\nimport Spinner from \"react-bootstrap/Spinner\";\nimport ConnectedCalendars from \"./ConnectedCalendars/_ConnectedCalendars\";\nimport AddCalendar from \"./AddCalendar\";\nimport Calendar from \"./Calendar\";\nimport CheckConflicts from \"./CheckConflicts/_CheckConflicts\";\nimport AddEvents from \"./AddEvents/_AddEvents\";\nimport { useCalendarConnectionsStore } from \"../store\";\nimport auth from \"../Account/Auth\";\nimport be from \"../BE\";\n\nfunction CalendarConnections() {\n try {\n window.tidioChatApi.show();\n } catch {}\n const { t } = useTranslation([\"calendarConnections\"]);\n const calendarsList = useCalendarConnectionsStore(\n (state) => state.calendarsList\n );\n const connectedCalendars = useCalendarConnectionsStore(\n (state) => state.connectedCalendars\n );\n const maxCalendars = useCalendarConnectionsStore(\n (state) => state.maxCalendars\n );\n const setCalendarsList = useCalendarConnectionsStore(\n (state) => state.setCalendarsList\n );\n const setConnectedCalendars = useCalendarConnectionsStore(\n (state) => state.setConnectedCalendars\n );\n const setMaxCalendars = useCalendarConnectionsStore(\n (state) => state.setMaxCalendars\n );\n const [loading, setLoading] = useState(false);\n\n const history = useHistory();\n const location = useLocation();\n const queryParameters = new URLSearchParams(location.search);\n const referrer = queryParameters.get(\"referrer\");\n\n if (referrer) {\n console.log(referrer);\n }\n\n useEffect(() => {\n document.title = \"Calendbook - Calendar Connections\";\n async function getCalendarConnections() {\n setLoading(true);\n await auth\n .isAuthenticated()\n .then(async () => {\n await be\n .get(\"calendarhandler\", \"/getCalendars\", false, true)\n .then((response) => {\n setCalendarsList(response?.calendarsList);\n setConnectedCalendars(response?.connectedCalendars);\n setMaxCalendars(response?.maxCalendars);\n setLoading(false);\n })\n .catch((error) => {\n console.log(error);\n setLoading(false);\n });\n })\n .catch(() => history.push({ pathname: \"/login\" }));\n }\n getCalendarConnections();\n }, []);\n\n return (\n <>\n <Row\n style={{ maxWidth: 1024 }}\n className=\"mt-0 mt-md-5 mx-0 mx-md-auto d-flex\"\n >\n <div style={{ marginTop: 20, marginBottom: 20 }}>\n <div style={{ display: \"flex\" }}>\n <div style={{ marginRight: 10, fontSize: 24, fontWeight: 600 }}>\n {t(\"connectedCalendars\")}\n </div>\n <div\n style={{\n fontSize: 18,\n color: \"var(--color-secondary)\",\n display: \"flex\",\n margin: \"auto 0\",\n }}\n >\n {connectedCalendars}/{maxCalendars}\n </div>\n <div style={{ marginLeft: \"auto\" }}>\n <AddCalendar connectedCalendars={connectedCalendars} />\n </div>\n </div>\n <small style={{ color: \"var(--color-secondary)\" }}>\n {t(\"subtitle\")}\n </small>\n </div>\n\n {loading && (\n <center>\n <Spinner />\n </center>\n )}\n\n {calendarsList &&\n calendarsList.map((calendar, index) => {\n return (\n <Calendar\n key={`calendar-connection-${calendar?.email}`}\n index={index}\n fullName={calendar?.fullName}\n email={calendar?.email}\n pic={calendar?.calendarPic}\n access={calendar?.access}\n calendars={calendarsList}\n setCalendars={setCalendarsList}\n sync={calendar?.sync}\n />\n );\n })}\n </Row>\n </>\n );\n}\n\nexport default CalendarConnections;\n","import { useHistory } from 'react-router-dom';\nimport { useIframeStore } from '../store';\nimport be from '../BE';\nimport auth from '../Account/Auth';\n\nfunction CloseOnboarding({stage}){\n const history = useHistory();\n const setShouldShowNavs = useIframeStore((state) => state.setShouldShowNavs);\n\n const closeOnboarding = async (_stage) => {\n try{\n await auth.isAuthenticated()\n .then(() => {\n be.post('Onboarding','/onboarding/close',false,true,true)\n .then(response => {\n console.log(`[onboarding][close] onbarding closed at stage: ${_stage}`)\n })\n .catch(error => {\n console.error(\"[onboarding][close] network error while closing onboarding:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[onboarding][close] authentication error while closing onboarding:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[onboarding][close] functional error while closing onboarding:\",error);\n }finally{\n history.push({pathname:'/'})\n // show navbar and footer\n setShouldShowNavs(true);\n document.getElementById(\"root\").style.paddingBottom=\"500px\";\n document.getElementById(\"root\").style.minHeight=\"1400px\";\n }\n }\n return(\n <div className=\"tw-w-full tw-p-4 tw-flex tw-items-end\">\n <a href=\"#\" onClick={() => closeOnboarding(stage)}\n className=\"tw-ml-auto tw-inline-flex tw-items-center tw-text-lg tw-font-medium\">\n <i className=\"fa-solid fa-xmark\"></i>\n </a>\n </div>\n );\n}\n\nexport default CloseOnboarding;\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction User({ setStage }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [fullName, setFullName] = useState(\"\");\n const [industry, setIndustry] = useState(\"\");\n const [teamSize, setTeamSize] = useState(\"\");\n\n const saveUser = async (e) => {\n e.preventDefault();\n const body = {\n fullName: fullName,\n industry: industry,\n teamSize: teamSize,\n };\n\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.post(\"Onboarding\", \"/onboarding/fullname\", body, true, true)\n .then((response) => {\n console.log(\"[onboarding][user] user saved\");\n })\n .catch((error) => {\n console.error(\n \"[onboarding][user] network error while saving user:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][user] authentication error while saving user:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][user] functional error while saving user:\",\n error\n );\n } finally {\n setStage(\"event-name\");\n }\n };\n\n return (\n <form onSubmit={saveUser}>\n <h1 className=\"tw-mb-4 tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 sm:tw-mb-6 tw-dark:text-white\">\n {t(\"user.title\")}\n </h1>\n\n <p className=\"tw-mb-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"user.fullName\")}\n </p>\n\n <input\n type=\"text\"\n name=\"full-name\"\n id=\"full-name\"\n className=\"tw-bg-gray-50 !tw-border-2 tw-border-gray-200 tw-text-gray-900 tw-rounded-lg focus:!tw-ring-primary-600 focus:!tw-border-primary-600 tw-w-full tw-p-5 tw-text-gray-500 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:bg-gray-800 tw-dark:border-gray-700 tw-dark:placeholder-gray-400 tw-dark:text-white tw-dark:hover:bg-gray-700\"\n placeholder=\"John Smith\"\n value={fullName}\n onChange={(e) => setFullName(e.target.value)}\n required\n />\n\n <p className=\"tw-my-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"user.role\")}\n </p>\n\n <ul className=\"tw-grid tw-grid-cols-3 tw-gap-6 tw-mb-6\">\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"designer\"\n name=\"profession\"\n value=\"designer\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"design\")}\n htmlFor=\"designer\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n >\n <path d=\"M0 32C0 14.3 14.3 0 32 0L160 0c17.7 0 32 14.3 32 32l0 384c0 53-43 96-96 96s-96-43-96-96L0 32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9l0-262 75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192L480 320c17.7 0 32 14.3 32 32l0 128c0 17.7-14.3 32-32 32l-297.2 0zM128 64L64 64l0 64 64 0 0-64zM64 192l0 64 64 0 0-64-64 0zM96 440a24 24 0 1 0 0-48 24 24 0 1 0 0 48z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.designer\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"developer\"\n name=\"profession\"\n value=\"developer\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"developer\")}\n htmlFor=\"developer\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 640 512\"\n >\n <path d=\"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.developer\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"sales\"\n name=\"profession\"\n value=\"sales\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"sales\")}\n htmlFor=\"sales\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 320 512\"\n >\n <path d=\"M160 0c17.7 0 32 14.3 32 32l0 35.7c1.6 .2 3.1 .4 4.7 .7c.4 .1 .7 .1 1.1 .2l48 8.8c17.4 3.2 28.9 19.9 25.7 37.2s-19.9 28.9-37.2 25.7l-47.5-8.7c-31.3-4.6-58.9-1.5-78.3 6.2s-27.2 18.3-29 28.1c-2 10.7-.5 16.7 1.2 20.4c1.8 3.9 5.5 8.3 12.8 13.2c16.3 10.7 41.3 17.7 73.7 26.3l2.9 .8c28.6 7.6 63.6 16.8 89.6 33.8c14.2 9.3 27.6 21.9 35.9 39.5c8.5 17.9 10.3 37.9 6.4 59.2c-6.9 38-33.1 63.4-65.6 76.7c-13.7 5.6-28.6 9.2-44.4 11l0 33.4c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-34.9c-.4-.1-.9-.1-1.3-.2l-.2 0s0 0 0 0c-24.4-3.8-64.5-14.3-91.5-26.3c-16.1-7.2-23.4-26.1-16.2-42.2s26.1-23.4 42.2-16.2c20.9 9.3 55.3 18.5 75.2 21.6c31.9 4.7 58.2 2 76-5.3c16.9-6.9 24.6-16.9 26.8-28.9c1.9-10.6 .4-16.7-1.3-20.4c-1.9-4-5.6-8.4-13-13.3c-16.4-10.7-41.5-17.7-74-26.3l-2.8-.7s0 0 0 0C119.4 279.3 84.4 270 58.4 253c-14.2-9.3-27.5-22-35.8-39.6c-8.4-17.9-10.1-37.9-6.1-59.2C23.7 116 52.3 91.2 84.8 78.3c13.3-5.3 27.9-8.9 43.2-11L128 32c0-17.7 14.3-32 32-32z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.sales\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"marketing\"\n name=\"profession\"\n value=\"marketing\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"marketing\")}\n htmlFor=\"marketing\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n >\n <path d=\"M480 32c0-12.9-7.8-24.6-19.8-29.6s-25.7-2.2-34.9 6.9L381.7 53c-48 48-113.1 75-181 75l-8.7 0-32 0-96 0c-35.3 0-64 28.7-64 64l0 96c0 35.3 28.7 64 64 64l0 128c0 17.7 14.3 32 32 32l64 0c17.7 0 32-14.3 32-32l0-128 8.7 0c67.9 0 133 27 181 75l43.6 43.6c9.2 9.2 22.9 11.9 34.9 6.9s19.8-16.6 19.8-29.6l0-147.6c18.6-8.8 32-32.5 32-60.4s-13.4-51.6-32-60.4L480 32zm-64 76.7L416 240l0 131.3C357.2 317.8 280.5 288 200.7 288l-8.7 0 0-96 8.7 0c79.8 0 156.5-29.8 215.3-83.3z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.marketing\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"customer-care\"\n name=\"profession\"\n value=\"customer-care\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"customer-care\")}\n htmlFor=\"customer-care\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 576 512\"\n >\n <path d=\"M559.7 392.2c17.8-13.1 21.6-38.1 8.5-55.9s-38.1-21.6-55.9-8.5L392.6 416 272 416c-8.8 0-16-7.2-16-16s7.2-16 16-16l16 0 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0-16 0-78.3 0c-29.1 0-57.3 9.9-80 28L68.8 384 32 384c-17.7 0-32 14.3-32 32l0 64c0 17.7 14.3 32 32 32l160 0 160.5 0c29 0 57.3-9.3 80.7-26.5l126.6-93.3zm-367-8.2c.3 0 .6 0 .9 0c0 0 0 0 0 0c-.3 0-.6 0-.9 0z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.customerCare\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"recruiting\"\n name=\"profession\"\n value=\"recruiting\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"recruiting\")}\n htmlFor=\"recruiting\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 448 512\"\n >\n <path d=\"M96 128a128 128 0 1 0 256 0A128 128 0 1 0 96 128zm94.5 200.2l18.6 31L175.8 483.1l-36-146.9c-2-8.1-9.8-13.4-17.9-11.3C51.9 342.4 0 405.8 0 481.3c0 17 13.8 30.7 30.7 30.7l131.7 0c0 0 0 0 .1 0l5.5 0 112 0 5.5 0c0 0 0 0 .1 0l131.7 0c17 0 30.7-13.8 30.7-30.7c0-75.5-51.9-138.9-121.9-156.4c-8.1-2-15.9 3.3-17.9 11.3l-36 146.9L238.9 359.2l18.6-31c6.4-10.7-1.3-24.2-13.7-24.2L224 304l-19.7 0c-12.4 0-20.1 13.6-13.7 24.2z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.recruiting\")}</span>\n </label>\n </li>\n <li className=\"\">\n <input\n type=\"radio\"\n id=\"other\"\n name=\"profession\"\n value=\"other\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setIndustry(\"other\")}\n htmlFor=\"other\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-full tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <svg\n className=\"tw-w-4 tw-h-4 tw-mr-2\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n >\n <path d=\"M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM232 344l0-64-64 0c-13.3 0-24-10.7-24-24s10.7-24 24-24l64 0 0-64c0-13.3 10.7-24 24-24s24 10.7 24 24l0 64 64 0c13.3 0 24 10.7 24 24s-10.7 24-24 24l-64 0 0 64c0 13.3-10.7 24-24 24s-24-10.7-24-24z\" />\n </svg>\n <span className=\"tw-w-full\">{t(\"user.roles.other\")}</span>\n </label>\n </li>\n </ul>\n\n <p className=\"tw-my-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"user.howMany\")}\n </p>\n\n <ul className=\"tw-mb-6 tw-gap-6 tw-inline-flex\">\n <li>\n <input\n type=\"radio\"\n id=\"just-me\"\n name=\"team-size\"\n value=\"just-me\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setTeamSize(\"just-me\")}\n htmlFor=\"just-me\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">{t(\"user.justMe\")}</span>\n </label>\n </li>\n <li>\n <input\n type=\"radio\"\n id=\"2-10\"\n name=\"team-size\"\n value=\"2-10\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setTeamSize(\"2-10\")}\n htmlFor=\"2-10\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">2-10</span>\n </label>\n </li>\n <li>\n <input\n type=\"radio\"\n id=\"11-50\"\n name=\"team-size\"\n value=\"11-50\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setTeamSize(\"11-50\")}\n htmlFor=\"11-50\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">11-50</span>\n </label>\n </li>\n <li>\n <input\n type=\"radio\"\n id=\"50+r\"\n name=\"team-size\"\n value=\"50+\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setTeamSize(\"50+\")}\n htmlFor=\"50+\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">50+</span>\n </label>\n </li>\n </ul>\n\n <button\n type=\"submit\"\n className=\"tw-w-full tw-px-5 tw-py-2.5 sm:tw-py-3.5 tw-text-sm tw-font-medium tw-text-center tw-text-white tw-rounded-lg tw-bg-primary-600 hover:tw-bg-primary-700 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n >\n {t(\"user.nextBtn\")}\n </button>\n </form>\n );\n}\n\nexport default User;\n","import React, { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction Name({ setStage }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [eventName, setEventName] = useState(\"\");\n\n const saveName = async (e) => {\n e.preventDefault();\n const body = {\n eventName: eventName,\n };\n\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.post(\"Onboarding\", \"/onboarding/eventName\", body, true, true)\n .then((response) => {\n console.log(\"[onboarding][event-name] event name saved\");\n })\n .catch((error) => {\n console.error(\n \"[onboarding][event-name] network error while saving event name:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][event-name] authentication error while saving event name:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][event-name] functional error while saving event name:\",\n error\n );\n } finally {\n setStage(\"event-general-availabilities\");\n }\n };\n\n return (\n <form onSubmit={saveName}>\n <h1 className=\"tw-mb-4 tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 sm:tw-mb-6 tw-dark:text-white\">\n {t(\"event.title\")}\n </h1>\n\n <p className=\"tw-mb-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"event.eventName\")}\n </p>\n\n <input\n type=\"text\"\n name=\"full-name\"\n id=\"full-name\"\n className=\"tw-bg-gray-50 !tw-border-2 tw-border-gray-200 tw-text-gray-900 tw-rounded-lg focus:!tw-ring-primary-600 focus:!tw-border-primary-600 tw-w-full tw-p-5 tw-text-gray-500 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:bg-gray-800 tw-dark:border-gray-700 tw-dark:placeholder-gray-400 tw-dark:text-white tw-dark:hover:bg-gray-700\"\n placeholder=\"15 min\"\n value={eventName}\n onChange={(e) => setEventName(e.target.value)}\n required\n />\n <button\n type=\"sumbit\"\n className=\"tw-my-6 tw-w-full tw-px-5 tw-py-2.5 sm:tw-py-3.5 tw-text-sm tw-font-medium tw-text-center tw-text-white tw-rounded-lg tw-bg-primary-600 hover:tw-bg-primary-700 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n >\n {t(\"event.nextBtn\")}\n </button>\n </form>\n );\n}\n\nexport default Name;\n","import React from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\n\nfunction DayCheckbox ({day,availability,toggleDayAvailability,setDayRange}) {\n const {t} = useTranslation(['eventCreator']);\n\n return(\n <Form.Check\n name={day}\n id={day}\n value={day}\n type=\"checkbox\"\n label={t(`availability.days.${day}`)}\n checked={availability.days[day]}\n onChange={() => {\n toggleDayAvailability(day);\n // if availability check is becoming true but there are no ranges\n if (availability.ranges[day].length === 0 && availability.days[day] === true){\n // add new range for that day\n let index = availability.ranges[day].length\n let interval = {start:'09:00', end:'19:00'}\n // interval = utils.addIntervalCheck(availability,day,index,interval)\n setDayRange(day,index,interval)\n }}\n }\n />\n );\n}\n\nexport default DayCheckbox;\n","import React from 'react';\nimport TimeField from 'react-simple-timefield';\nimport {Row,Col} from 'react-bootstrap';\n\nfunction Range({availability,setDayRange,index,wday,disabled,rangeState,timeFormat}){\n\n return(\n <> \n <Row className=\"h-100 py-1\" style={{lineHeight:\"34px\"}}>\n <Col xs={5}>\n <TimeField\n key={`range-start-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['start']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = time\n let end = interval.end\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n\n <span className=\"text-center mx-0 col-1\"> - </span>\n\n <Col xs={5}>\n <TimeField\n key={`range-end-${index}-start-${wday}`}\n style = {{width:'100%',textAlign:'center',border:'1px solid var(--color-border)',borderRadius:5}}\n className=\"dark-field text-center h-100\"\n value={availability.ranges[wday][index]['end']}\n onChange={(event, time) => {\n let interval = availability.ranges[wday][index]\n let start = interval.start\n let end = time\n let fixedInterval = {start:start,end:end}\n // fixedInterval = utils.checkInterval(availability,wday,fixedInterval)\n setDayRange(wday,index,fixedInterval)\n }}\n colon=\":\"\n disabled={disabled}\n />\n </Col>\n </Row>\n </>\n );\n}\n\nexport default Range;\n","import {useTranslation} from 'react-i18next';\nimport DayCheckbox from './DayCheckbox';\nimport Range from './Range';\nimport {Form, Row, Col, Button} from 'react-bootstrap';\n\nfunction WeekView({availability, toggleDayAvailability, setDayRange, deleteDayRange}){\n var days = ['mon','tue','wed','thu','fri','sat','sun']\n const timeFormat = \"24\";\n const {t} = useTranslation(['eventCreator']);\n return(\n <Form.Group controlId=\"ranges\">\n {\n days.map((day,dayIndex) => (\n <Row key={`availabilities-${day}`} className=\"mx-2\">\n <Col xs={12} md={2} className={availability.ranges[day].length <= 1 ? \"mt-1 py-2 my-md-auto\" : \"mt-1 py-2\"}>\n <DayCheckbox day={day} availability={availability} toggleDayAvailability={toggleDayAvailability} setDayRange={setDayRange}/>\n </Col>\n\n <Col className=\"my-auto\">\n {availability.ranges[day].length === 0 && \n <Row>\n <Col className=\"my-2 text-muted\">\n {t(`availability.unavailable`)}\n </Col>\n </Row>\n }\n\n {availability.ranges[day].map((range,rangeIndex) => (\n <Row key={`ranges-${rangeIndex}-${day}`} id={`${range.start}-${range.end}-${day}`}>\n <Col>\n <Range availability={availability} setDayRange={setDayRange} wday={day} index={rangeIndex} rangeState={availability.ranges[day][rangeIndex]} disabled={!availability.days[day]} timeFormat={timeFormat}/>\n </Col>\n <Col xs={2} className=\"ps-0 my-auto\">\n <div className=\"d-grid gap-2\">\n <Button style={{border : \"none\", background : \"transparent\", color : \"var(--colot-text)\"}} onClick={() => {deleteDayRange(day,rangeIndex)}}>\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </div>\n </Col>\n </Row>\n ))}\n </Col>\n <Col xs={2} className={availability.ranges[day].length <= 1 ? \"my-auto\" : \"\"} style={availability.ranges[day].length > 1 ? {marginTop:\"6px\"} : {}}>\n <div className=\"d-grid gap-2\">\n <Button className=\"text-start\" style={{border : \"none\", background : \"transparent\", color : \"var(--color-text)\"}} onClick={() => { \n let interval = {start:\"08:00\",end:\"19:00\"};\n let index = availability.ranges[day].length;\n // interval = utils.addIntervalCheck(availability,day,index,interval);\n setDayRange(day,index,interval);\n }}>\n <i className=\"fas fa-plus\"></i>\n </Button>\n </div>\n </Col>\n {dayIndex < 6 &&\n <Col xs={12}>\n <hr style={{color:\"var(--color-ruler)\", backgroundColor:\"var(--color-ruler)\", height: \"2\", width:\"100%\"}}/>\n </Col>\n }\n </Row>\n ))}\n </Form.Group>\n );\n}\n\nexport default WeekView;\n","import { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport WeekView from \"./WeekView\";\nimport AvailabilityMock from \"../../Mocks/EventTypeCreator/Availability\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction GeneralAvailabilities({ setStage }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [availability, setAvailability] = useState(AvailabilityMock);\n\n const saveGeneralAvailabilities = async () => {\n const body = {\n availability: {\n days: availability?.days,\n ranges: availability?.ranges,\n },\n };\n\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.post(\n \"Onboarding\",\n \"/onboarding/availabilities/dayrange\",\n body,\n true,\n true\n )\n .then((response) => {\n console.log(\n \"[onboarding][general-availabilities] general availabilities saved\"\n );\n })\n .catch((error) => {\n console.error(\n \"[onboarding][general-availabilities] network error while saving general availabilities:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][general-availabilities] authentication error while saving general availabilities:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][general-availabilities] functional error while saving general availabilities:\",\n error\n );\n } finally {\n setStage(\"event-advanced-availabilities\");\n }\n };\n\n const toggleDayAvailability = (_day) => {\n const updatedDays = {\n ...availability.days,\n [_day]: !availability.days[_day],\n };\n const updatedRanges = { ...availability.ranges };\n if (updatedRanges[_day].length === 0 && updatedDays[_day]) {\n let interval = { start: \"09:00\", end: \"19:00\" };\n updatedRanges[_day].push(interval);\n }\n setAvailability({\n ...availability,\n days: updatedDays,\n ranges: updatedRanges,\n });\n };\n\n const setDayRange = (_day, _index, _interval) => {\n const updatedRanges = { ...availability.ranges };\n if (updatedRanges[_day].length === 0 && !availability.days[_day]) {\n updatedRanges[_day] = [_interval];\n setAvailability({\n ...availability,\n days: { ...availability.days, [_day]: true },\n ranges: updatedRanges,\n });\n } else {\n updatedRanges[_day][_index] = _interval;\n setAvailability({ ...availability, ranges: updatedRanges });\n }\n };\n\n const deleteDayRange = (templateId, _day, _index) => {\n const updatedRanges = { ...availability.ranges };\n updatedRanges[_day].splice(_index, 1);\n const updatedDays = { ...availability.days };\n if (updatedRanges[_day].length === 0) {\n updatedDays[_day] = false;\n }\n setAvailability({\n ...availability,\n days: updatedDays,\n ranges: updatedRanges,\n });\n };\n\n return (\n <>\n <h1 className=\"tw-mb-4 tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 sm:tw-mb-6 tw-dark:text-white\">\n {t(\"event.title\")}\n </h1>\n\n <p className=\"tw-mb-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"event.generalAvailability\")}\n </p>\n\n <WeekView\n availability={availability}\n toggleDayAvailability={(day) => toggleDayAvailability(day)}\n setDayRange={(day, index, interval) =>\n setDayRange(day, index, interval)\n }\n deleteDayRange={(day, index) =>\n deleteDayRange(availability, day, index)\n }\n />\n\n <button\n type=\"button\"\n onClick={saveGeneralAvailabilities}\n className=\"tw-my-6 tw-w-full tw-px-5 tw-py-2.5 sm:tw-py-3.5 tw-text-sm tw-font-medium tw-text-center tw-text-white tw-rounded-lg tw-bg-primary-600 hover:tw-bg-primary-700 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n >\n {t(\"event.nextBtn2\")}\n </button>\n </>\n );\n}\n\nexport default GeneralAvailabilities;\n","import {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\n\nfunction Hop({availability,setTimeslotHop}){\n const {t} = useTranslation(['eventCreator']);\n\n return(\n <Form.Group as={Row} controlId=\"event-booking-limit\" className=\"mx-2\">\n <Form.Label column sm={3} className=\"mt-auto\">{t('availability.timeslotHop.title')}</Form.Label>\n <Col sm={10} lg={7}>\n <Row>\n <Row><small style={{color:'var(--color-secondary)'}}>{t('availability.timeslotHop.hint')}</small></Row>\n <Col xs={5}>\n <Form.Select className=\"dark-field text-center\" aria-label=\"Booking Limit Unit\" value={availability?.hop || \"15\"} onChange={(e) => setTimeslotHop(e.target.value)}>\n <option value=\"15\">15</option>\n <option value=\"30\">30</option>\n <option value=\"60\">60</option>\n </Form.Select>\n </Col>\n <Col xs={2} className=\"d-flex justify-content-center my-auto\" style={{color:'var(--color-secondary)'}}>{t('availability.timeslotHop.minutes')}</Col>\n </Row>\n </Col>\n </Form.Group>\n);\n}\n\nexport default Hop;\n","import {useEffect,useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Button from 'react-bootstrap/Button';\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case 'day':\n return '0';\n case 'week':\n return '0';\n case 'month':\n return '0';\n default:\n return '0';\n }\n}\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case 'day':\n return '100';\n case 'week':\n return '200';\n case 'month':\n return '500';\n default:\n return '0';\n }\n}\n\nconst getUnit = () => { return document.getElementById(`booking-limit-unit`)?.value }\n\n\nfunction Notice({availability, setBookingLimitQuantity, setBookingLimitUnit}){\n const {t} = useTranslation(['eventCreator']);\n const [minQuantity,setMinQuantity] = useState('0');\n const [maxQuantity,setMaxQuantity] = useState('0');\n\n useEffect(()=>{\n setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n },[])\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === '' ? minQuantity : inputValue;\n setBookingLimitQuantity(valueToSet);\n setBookingLimitUnit(document.getElementById(\"booking-limit-unit\").value);\n };\n\n return(\n <Form.Group as={Row} controlId=\"event-booking-limit\" className=\"mt-3 mx-2\">\n <Form.Label column sm={3} className=\"mt-auto\">{t('availability.bookingLimit.title')}</Form.Label>\n <Col sm={10} lg={7}>\n <Row>\n <Row><small style={{color:'var(--color-secondary)'}}>{t('availability.bookingLimit.hint')}</small></Row>\n <Col xs={5}>\n <Form.Control\n id=\"booking-limit-quantity\"\n className=\"dark-field text-center\"\n name=\"bookingLimit-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.bookingLimit?.quantity || 0}\n onChange={handleInputChange}\n />\n </Col>\n <Col xs={2} className=\"d-flex justify-content-center my-auto\" style={{color:'var(--color-secondary)'}}>{t('availability.bookingLimit.per')}</Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"booking-limit-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Booking Limit Unit\"\n value={availability?.bookingLimit?.unit || \"day\"}\n onChange={(e) => {\n setBookingLimitUnit(e.target.value);\n setBookingLimitQuantity(document.getElementById(\"booking-limit-quantity\").value)\n setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}>\n <option value=\"day\">{t('availability.bookingLimit.units.day')}</option>\n <option value=\"week\">{t('availability.bookingLimit.units.week')}</option>\n <option value=\"month\">{t('availability.bookingLimit.units.month')}</option>\n </Form.Select>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n );\n}\n\nexport default Notice;\n","import {useEffect,useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Button from 'react-bootstrap/Button';\n\nconst determineMinQuantity = (_unit) => {\n switch (_unit) {\n case 'minutes':\n return '0';\n case 'hours':\n return '1';\n case 'days':\n return '1';\n default:\n return '0';\n }\n}\nconst determineMaxQuantity = (_unit) => {\n switch (_unit) {\n case 'minutes':\n return '59';\n case 'hours':\n return '23';\n case 'days':\n return '30';\n default:\n return '0';\n }\n}\n\nconst getUnit = () => { return document.getElementById(`notice-unit`)?.value }\n\nfunction Notice({availability, setNoticeQuantity, setNoticeUnit}){\n const {t} = useTranslation(['eventCreator']);\n const [minQuantity,setMinQuantity] = useState('0');\n const [maxQuantity,setMaxQuantity] = useState('0');\n\n useEffect(()=>{\n // setMinQuantity(determineMinQuantity(getUnit()));\n setMaxQuantity(determineMaxQuantity(getUnit()));\n },[])\n\n const handleInputChange = (e) => {\n const inputValue = e.target.value;\n const valueToSet = inputValue === '' ? minQuantity : inputValue;\n setNoticeQuantity(valueToSet);\n setNoticeUnit(document.getElementById(\"notice-unit\").value);\n };\n\n const disableNotice = () => {\n setNoticeQuantity('0');\n setNoticeUnit('minutes');\n }; \n\n return(\n <Form.Group as={Row} controlId=\"event-notice\" className=\"mt-3 mx-2\">\n <Form.Label column sm={3} className=\"mt-auto\">{t('availability.notice.title')}</Form.Label>\n <Col sm={10} lg={8}>\n <Row>\n <Row><small style={{color:'var(--color-secondary)'}}>{t('availability.notice.hint')}</small></Row>\n <Col xs={6}>\n <Form.Control\n id=\"notice-quantity\"\n className=\"dark-field text-center\"\n name=\"notice-value\"\n type=\"number\"\n min={minQuantity}\n max={maxQuantity}\n value={availability?.notice?.quantity || minQuantity}\n onChange={handleInputChange}\n />\n </Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Select\n id=\"notice-unit\"\n className=\"dark-field text-center\"\n aria-label=\"Notice Unit\"\n value={availability?.notice?.unit || \"minutes\"}\n onChange={(e) => {\n setNoticeUnit(e.target.value);\n setNoticeQuantity(document.getElementById(\"notice-quantity\").value)\n // setMinQuantity(determineMinQuantity(e.target.value));\n setMaxQuantity(determineMaxQuantity(e.target.value));\n }}>\n <option value=\"minutes\">{t('availability.notice.units.minutes')}</option>\n <option value=\"hours\">{t('availability.notice.units.hours')}</option>\n <option value=\"days\">{t('availability.notice.units.days')}</option>\n </Form.Select>\n <Button\n style={{ border: 'none', background: 'transparent', color: 'var(--color-text)' }}\n onClick={disableNotice}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n);\n}\n\nexport default Notice;\n","import {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\nimport Button from 'react-bootstrap/Button';\n\nfunction LastAvailable({availability, setLastAvailabilityDate, setLastAvailabilityTime}){\n const {t} = useTranslation(['eventCreator']);\n\n const disableLastAvailableDate = () => {\n setLastAvailabilityDate('');\n setLastAvailabilityTime('00:00');\n };\n\n return(\n <Form.Group as={Row} controlId=\"event-last-availability\" className=\"mt-3 mx-2\">\n <Form.Label column sm={3} className=\"mt-auto\">{t('availability.lastAvailability.title')}</Form.Label>\n <Col sm={10} lg={8}>\n <Row>\n <Row><small style={{color:'var(--color-secondary)'}}>{t('availability.lastAvailability.hint')}</small></Row>\n <Col xs={6}>\n <Form.Control className=\"dark-field text-center\" name=\"last-availability-date\" type=\"date\" value={availability?.lastAvailability?.date || \"\"} onChange={(e) => setLastAvailabilityDate(e.target.value)}/>\n </Col>\n <Col xs={5} className=\"d-flex align-items-center\">\n <Form.Control className=\"dark-field text-center\" name=\"last-availability-time\" type=\"time\" value={availability?.lastAvailability?.time || \"\"} onChange={(e) => setLastAvailabilityTime(e.target.value)}/>\n <Button\n style={{ border: 'none', background: 'transparent', color: 'var(--color-text)' }}\n onClick={disableLastAvailableDate}\n >\n <i className=\"far fa-trash-alt my-auto\"></i>\n </Button>\n </Col>\n </Row>\n </Col>\n </Form.Group>\n\n );\n}\n\nexport default LastAvailable;\n","import {useTranslation} from 'react-i18next';\nimport Form from 'react-bootstrap/Form';\nimport Row from 'react-bootstrap/Row';\nimport Col from 'react-bootstrap/Col';\n\nfunction LastAvailable({availability, setApproval}){\n const {t} = useTranslation(['eventCreator']);\n\n return(\n <Form.Group as={Row} controlId=\"event-approval\" className=\"mt-3 mx-2\">\n <Form.Label column sm={3} className=\"mt-auto\">{t('availability.approval.title')}</Form.Label>\n <Col sm={10} lg={8}>\n <Row>\n <Row><small style={{color:'var(--color-secondary)'}}>{t('availability.approval.hint')}</small></Row>\n <Col>\n <Form.Check\n name=\"event-approval-checkbox\"\n type=\"checkbox\"\n label={t('availability.approval.label')}\n checked={availability?.needsApproval || false}\n onChange={(e) => setApproval(e.target.checked)}\n />\n </Col>\n </Row>\n </Col>\n </Form.Group>\n\n );\n}\n\nexport default LastAvailable;\n","import { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport Hop from \"./Hop\";\nimport BookingLimit from \"./BookingLimit\";\nimport Notice from \"./Notice\";\nimport LastAvailable from \"./LastAvailable\";\nimport Approval from \"./Approval\";\nimport AvailabilityMock from \"../../Mocks/EventTypeCreator/Availability\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction AdvancedAvailabilities({ setStage }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [availability, setAvailability] = useState(AvailabilityMock);\n\n const saveAdvancedAvailabilities = async () => {\n const body = {\n availability: {\n hop: availability?.hop,\n bookingLimit: availability?.bookingLimit,\n notice: availability?.notice,\n lastAvailability: availability?.lastAvailability,\n needsApproval: availability?.needsApproval,\n },\n };\n\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.post(\n \"Onboarding\",\n \"/onboarding/availabilities/advanced\",\n body,\n true,\n true\n )\n .then((response) => {\n console.log(\n \"[onboarding][advanced-availabilities] advanced availabilities saved\"\n );\n })\n .catch((error) => {\n console.error(\n \"[onboarding][advanced-availabilities] network error while saving advanced availabilities:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][advanced-availabilities] authentication error while saving advanced availabilities:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][advanced-availabilities] functional error while saving advanced availabilities:\",\n error\n );\n } finally {\n setStage(\"notifications\");\n }\n };\n\n // Update the timeslot hop value in the availability state\n const setTimeslotHop = (_hop) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n hop: _hop, // Directly update the hop value\n }));\n };\n\n // Update the booking limit quantity in the availability state\n const setBookingLimitQuantity = (_quantity) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n bookingLimit: {\n ...prevAvailability.bookingLimit, // Ensure deep cloning of nested objects\n quantity: _quantity, // Update the quantity for booking limit\n },\n }));\n };\n\n // Update the booking limit unit in the availability state\n const setBookingLimitUnit = (_unit) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n bookingLimit: {\n ...prevAvailability.bookingLimit, // Ensure deep cloning of nested objects\n unit: _unit, // Update the unit for booking limit\n },\n }));\n };\n\n // Update the notice quantity in the availability state\n const setNoticeQuantity = (_quantity) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n notice: {\n ...prevAvailability.notice, // Ensure deep cloning of nested objects\n quantity: _quantity, // Update the quantity for notice\n },\n }));\n };\n\n // Update the notice unit in the availability state\n const setNoticeUnit = (_unit) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n notice: {\n ...prevAvailability.notice, // Ensure deep cloning of nested objects\n unit: _unit, // Update the unit for notice\n },\n }));\n };\n\n // Update the last availability date in the availability state\n const setLastAvailabilityDate = (_date) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n lastAvailability: {\n ...prevAvailability.lastAvailability, // Ensure deep cloning of nested objects\n date: _date, // Update the date for last availability\n },\n }));\n };\n\n // Update the last availability time in the availability state\n const setLastAvailabilityTime = (_time) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n lastAvailability: {\n ...prevAvailability.lastAvailability, // Ensure deep cloning of nested objects\n time: _time, // Update the time for last availability\n },\n }));\n };\n\n // Update the approval requirement in the availability state\n const setApproval = (_needsApproval) => {\n setAvailability((prevAvailability) => ({\n ...prevAvailability,\n needsApproval: _needsApproval, // Update the approval requirement\n }));\n };\n\n return (\n <>\n <h1 className=\"tw-mb-4 tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 sm:tw-mb-6 tw-dark:text-white\">\n {t(\"event.title\")}\n </h1>\n\n <p className=\"tw-mb-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"event.advancedAvailability\")}\n </p>\n\n <Hop\n availability={availability}\n setTimeslotHop={(hop) => setTimeslotHop(hop)}\n />\n <BookingLimit\n availability={availability}\n setBookingLimitQuantity={(quantity) =>\n setBookingLimitQuantity(quantity)\n }\n setBookingLimitUnit={(unit) => setBookingLimitUnit(unit)}\n />\n <Notice\n availability={availability}\n setNoticeQuantity={(quantity) => setNoticeQuantity(quantity)}\n setNoticeUnit={(unit) => setNoticeUnit(unit)}\n />\n <LastAvailable\n availability={availability}\n setLastAvailabilityDate={(date) => setLastAvailabilityDate(date)}\n setLastAvailabilityTime={(time) => setLastAvailabilityTime(time)}\n />\n <Approval\n availability={availability}\n setApproval={(needsApproval) => setApproval(needsApproval)}\n />\n\n <button\n type=\"button\"\n onClick={saveAdvancedAvailabilities}\n className=\"tw-my-6 tw-w-full tw-px-5 tw-py-2.5 sm:tw-py-3.5 tw-text-sm tw-font-medium tw-text-center tw-text-white tw-rounded-lg tw-bg-primary-600 hover:tw-bg-primary-700 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n >\n {t(\"event.nextBtn3\")}\n </button>\n </>\n );\n}\n\nexport default AdvancedAvailabilities;\n","import { useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction Notifications({ setStage }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [notifications, setNotifications] = useState(\"\");\n\n const saveNotifications = async () => {\n const body = {\n provider: notifications,\n };\n\n try {\n await auth\n .isAuthenticated()\n .then(() => {\n be.post(\"Onboarding\", \"/onboarding/notifications\", body, true, true)\n .then((response) => {\n console.log(\"[onboarding][notifications] notifications saved\");\n })\n .catch((error) => {\n console.error(\n \"[onboarding][notifications] network error while saving notifications:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][notifications] authentication error while saving notifications:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][notifications] functional error while saving notifications:\",\n error\n );\n } finally {\n setStage(\"plan-fit\");\n }\n };\n\n return (\n <>\n <h1 className=\"tw-mb-4 tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 sm:tw-mb-6 tw-dark:text-white\">\n {t(\"notifications.title\")}\n </h1>\n\n <p className=\"tw-my-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {t(\"notifications.chooseNotification\")}\n </p>\n\n <ul className=\"tw-mb-6 tw-gap-6 tw-w-full tw-inline-flex tw-justify-center\">\n <li>\n <input\n type=\"radio\"\n id=\"email\"\n name=\"notifications\"\n value=\"email\"\n className=\"!tw-hidden tw-peer\"\n required\n />\n <label\n onClick={() => setNotifications(\"email\")}\n htmlFor=\"email\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">Email</span>\n </label>\n </li>\n <li>\n <input\n type=\"radio\"\n id=\"telegram\"\n name=\"notifications\"\n value=\"telegram\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setNotifications(\"telegram\")}\n htmlFor=\"telegram\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">Telegram</span>\n </label>\n </li>\n <li>\n <input\n type=\"radio\"\n id=\"whatsapp\"\n name=\"notifications\"\n value=\"whatsapp\"\n className=\"!tw-hidden tw-peer\"\n />\n <label\n onClick={() => setNotifications(\"whatsapp\")}\n htmlFor=\"whatsapp\"\n className=\"tw-inline-flex tw-items-center tw-justify-center tw-w-auto tw-p-5 tw-text-gray-500 tw-border-2 tw-border-gray-200 tw-rounded-lg tw-cursor-pointer tw-dark:hover:text-gray-300 tw-dark:border-gray-700 tw-dark:peer-checked:text-primary-500 peer-checked:tw-border-primary-600 peer-checked:tw-text-primary-600 tw-bg-gray-50 hover:tw-text-gray-600 hover:tw-bg-gray-100 tw-dark:text-gray-400 tw-dark:bg-gray-800 tw-dark:hover:bg-gray-700\"\n >\n <span className=\"tw-w-full\">Whatsapp</span>\n </label>\n </li>\n </ul>\n\n <button\n type=\"button\"\n onClick={saveNotifications}\n className=\"tw-w-full tw-px-5 tw-py-2.5 sm:tw-py-3.5 tw-text-sm tw-font-medium tw-text-center tw-text-white tw-rounded-lg tw-bg-primary-600 hover:tw-bg-primary-700 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n >\n {t(\"notifications.nextBtn\")}\n </button>\n </>\n );\n}\n\nexport default Notifications;\n","import { useEffect, useState } from \"react\";\nimport { useIframeStore } from \"../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport { initializePaddle } from \"@paddle/paddle-js\";\nimport { createReport } from \"../../Utilities/paddleAbandonedCheckoutReport\";\nimport auth from \"../../Account/Auth\";\nimport be from \"../../BE\";\n\nconst DEBUG =\n window.location.hostname === \"localhost\" ||\n window.location.hostname === \"dev.calendbook.com\";\nconst TEST_TOKEN = \"test_2ee936d492e84b8c70ff282cacf\";\nconst LIVE_TOKEN = \"live_f9e2fd79f6f00aa1b9f8a4f55ec\";\n\nfunction Checkout({ customerId, priceId, discountId }) {\n const setShouldShowNavs = useIframeStore((state) => state.setShouldShowNavs);\n const { i18n, t } = useTranslation([\"landing\", \"common\", \"upgrade\"]);\n const [loading, setLoading] = useState(false);\n const [paddle, setPaddle] = useState();\n\n const getUserLanguage = () => {\n try {\n return i18n.language.substring(0, 2);\n } catch (e) {\n return \"en\";\n }\n };\n\n const sleep = (ms) => {\n /* usage: await sleep(3000); */\n return new Promise((resolve) => setTimeout(resolve, ms));\n };\n\n var createNestedObject = function (base, names) {\n // Usage:\n // createNestedObject( window, [\"shapes\", \"triangle\", \"points\"] );\n // Now window.shapes.triangle.points is an empty object, ready to be used.\n for (var i = 0; i < names.length; i++) {\n base = base[names[i]] = base[names[i]] || {};\n }\n };\n\n const sendAbandonedCartEvent = async (body) => {\n await auth\n .isAuthenticated()\n .then(\n await be\n .post(\"payment-jubilant\", \"/payments/abandoned\", body, true, true)\n .then((response) => {\n console.log(\n \"[upgrade][subscription] sent bandoned cart event: \",\n body\n );\n })\n .catch((error) => {\n console.log(error);\n })\n )\n .catch((error) => {\n console.log(error);\n });\n };\n\n useEffect(() => {\n initializePaddle({\n // environment is 'sandbox' when testing, 'production' when live\n environment: DEBUG ? \"sandbox\" : \"production\",\n checkout: {\n settings: {\n displayMode: \"inline\",\n frameTarget: \"checkout\",\n frameStyle: \"min-width:768px;\",\n frameHeight: \"600\",\n theme: \"light\",\n locale: getUserLanguage(),\n },\n },\n token: DEBUG ? TEST_TOKEN : LIVE_TOKEN,\n eventCallback: async function (data) {\n const currentPage = window.location.href;\n\n // Create the message\n const eventMessage = createReport(data, auth, currentPage, data.name);\n\n switch (data.name) {\n case \"checkout.loaded\":\n console.log(\"Checkout opened\");\n break;\n case \"checkout.customer.created\":\n console.log(\"Customer created\");\n break;\n\n case \"checkout.closed\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.warning\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.error\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n\n case \"checkout.payment.failed\":\n await sendAbandonedCartEvent({\n productId: data?.data?.items?.[0]?.product?.id,\n priceId: data?.data?.items?.[0]?.price_id,\n event: eventMessage,\n });\n break;\n case \"checkout.completed\":\n console.log(\"Checkout completed\");\n await sleep(1000);\n setLoading(true);\n await sleep(4000);\n // gets new updated profileObj\n await auth.refresh();\n // go to dashboard\n window.location.href = \"/\";\n // show navbar and footer\n setShouldShowNavs(true);\n document.getElementById(\"root\").style.paddingBottom = \"500px\";\n document.getElementById(\"root\").style.minHeight = \"1400px\";\n break;\n default:\n }\n },\n }).then((paddleInstance) => {\n if (paddleInstance) {\n setPaddle(paddleInstance);\n }\n });\n }, []);\n\n const openCheckout = (_priceId, _discountId) => {\n let checkoutObj = {\n discountId: _discountId,\n items: [\n {\n priceId: _priceId,\n quantity: 1,\n },\n ],\n };\n if (customerId) {\n createNestedObject(checkoutObj, [\"customer\", \"id\"]);\n checkoutObj[\"customer\"][\"id\"] = customerId;\n } else if (auth.getEmail()) {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = auth.getEmail();\n } else {\n createNestedObject(checkoutObj, [\"customer\", \"email\"]);\n checkoutObj[\"customer\"][\"email\"] = \"your@email.com\";\n }\n paddle?.Checkout.open(checkoutObj);\n };\n\n openCheckout(priceId, discountId);\n\n return (\n <>\n {loading ? (\n <div> Updating your Subscription... </div>\n ) : (\n <div className=\"checkout\"> </div>\n )}\n </>\n );\n}\n\nexport default Checkout;\n","import React, { useState, useEffect } from 'react';\n\nconst CountdownTimer = ({ expirationDate }) => {\n // Initialize state\n const [timeLeft, setTimeLeft] = useState({\n days: 0,\n hours: 0,\n minutes: 0,\n seconds: 0\n });\n\n useEffect(() => {\n const updateTimer = () => {\n const now = new Date().getTime();\n const distance = new Date(expirationDate).getTime() - now;\n\n if (distance < 0) {\n // If the countdown is finished\n clearInterval(timerId);\n setTimeLeft({ days: 0, hours: 0, minutes: 0, seconds: 0 });\n } else {\n // Calculate time remaining\n const days = Math.floor(distance / (1000 * 60 * 60 * 24));\n const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n // Update state\n setTimeLeft({ days, hours, minutes, seconds });\n }\n };\n\n // Update the countdown every second\n const timerId = setInterval(updateTimer, 1000);\n\n // Cleanup interval on component unmount\n return () => clearInterval(timerId);\n }, [expirationDate]);\n\n return (\n <>\n {timeLeft.days}d {timeLeft.hours}h {timeLeft.minutes}m {timeLeft.seconds}s\n </>\n );\n};\n\nexport default CountdownTimer;\n\n","import { useState, useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\nimport CloseOnboarding from \"../CloseOnboarding\";\nimport Checkout from \"./Checkout\";\nimport CountdownTimer from \"./CountdownTimer\";\nimport be from \"../../BE\";\nimport auth from \"../../Account/Auth\";\n\nfunction PlanFit({ plan, setPlan }) {\n const { t } = useTranslation([\"onboarding\"]);\n const history = useHistory();\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n const getPlanFit = async () => {\n try {\n await auth\n .isAuthenticated()\n .then(async () => {\n setLoading(true);\n await be\n .get(\"Onboarding\", \"/onboarding/plan/fit\", false, true, true)\n .then((response) => {\n setPlan(response);\n console.log(\"[onboarding][plan-fit] plan fit retrieved\");\n })\n .catch((error) => {\n console.error(\n \"[onboarding][plan-fit] network error while retrieving plan fit:\",\n error\n );\n });\n })\n .catch((error) => {\n console.error(\n \"[onboarding][plan-fit] authentication error while retrieving plan fit:\",\n error\n );\n history.push({ pathname: \"/login\" });\n });\n } catch (error) {\n console.error(\n \"[onboarding][plan-fit] functional error while retrieving plan fit:\",\n error\n );\n } finally {\n setLoading(false);\n }\n };\n getPlanFit();\n }, [history]);\n\n return (\n <>\n <div className=\"tw-flex\">\n <h1 className=\"tw-w-full tw-text-2xl tw-font-extrabold tw-leading-tight tw-tracking-tight tw-text-gray-900 tw-dark:text-white\">\n {t(\"planFit.title\")}\n </h1>\n <CloseOnboarding stage=\"plan-fit\" />\n </div>\n {loading ? (\n <div className=\"tw-flex tw-my-40 tw-justify-center\" role=\"status\">\n <svg\n aria-hidden=\"true\"\n className=\"tw-inline tw-w-10 tw-h-10 tw-text-gray-200 tw-animate-spin tw-dark:text-gray-600 tw-fill-blue-600\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n <span className=\"tw-sr-only\">{t(\"planFit.loading\")}</span>\n </div>\n ) : (\n <>\n <p className=\"tw-capitalize tw-mb-4 tw-text-lg tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n Calendbook {plan?.plan}\n </p>\n <p className=\"tw-my-4\">\n {t(\"planFit.discount.use\")}{\" \"}\n <b className=\"tw-bg-primary-100 hover:tw-bg-primary-200 tw-text-primary-800 tw-text-sm tw-font-medium tw-px-2.5 tw-py-0.5 tw-rounded dark:tw-bg-gray-700 dark:tw-text-primary-400 tw-border tw-border-primary-400 tw-inline-flex tw-items-center tw-justify-center\">\n {plan?.discountCode}\n </b>{\" \"}\n {t(\"planFit.discount.discountCode\")}{\" \"}\n <b>\n {plan?.discountAmount}\n {t(\"planFit.discount.percentage\")}\n </b>{\" \"}\n {t(\"planFit.discount.yearlySub\")}\n </p>\n <p className=\"tw-my-4\">\n {t(\"planFit.discount.hurryUp\")}{\" \"}\n <b>\n <CountdownTimer expirationDate={plan?.expiration} />\n </b>{\" \"}\n </p>\n {plan?.priceId && (\n <Checkout\n customerId={plan?.customerId}\n priceId={plan?.priceId}\n discountId={plan?.discountCode}\n />\n )}\n </>\n )}\n </>\n );\n}\n\nexport default PlanFit;\n","import React, { useState, useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useIframeStore } from \"../store\";\nimport CloseOnboarding from \"./CloseOnboarding\";\nimport User from \"./User/User\";\nimport Name from \"./Event/Name\";\nimport GeneralAvailabilities from \"./Event/GeneralAvailabilities\";\nimport AdvancedAvailabilities from \"./Event/AdvancedAvailabilities\";\nimport Notifications from \"./Notifications/Notifications\";\nimport PlanFit from \"./PlanFit/PlanFit\";\n\nfunction Onboarding() {\n const { t } = useTranslation([\"landing\", \"onboarding\"]);\n // --- STAGES ---\n // user: asks user info as fullname, industry, teamsize\n // event-name: asks first event name\n // event-general-availabilities: asks for days ranges\n // event-advanced-availabilities: asks for premium availabilities features\n // notifications: asks for notifications preferred provider\n // plan-fit: last step, suggest the user the best plan for his choices\n const [stage, setStage] = useState(\"user\");\n const [plan, setPlan] = useState({});\n const Logo = window.calendbookUI.LogoFull;\n const features = {\n premium: [\n t(\"pricing.cards.premium.1\"),\n t(\"pricing.cards.premium.2\"),\n t(\"pricing.cards.premium.3\"),\n t(\"pricing.cards.premium.4\"),\n t(\"pricing.cards.premium.5\"),\n ],\n professional: [\n t(\"pricing.cards.professional.1\"),\n t(\"pricing.cards.professional.2\"),\n t(\"pricing.cards.professional.3\"),\n t(\"pricing.cards.professional.4\"),\n t(\"pricing.cards.professional.5\"),\n ],\n };\n\n useEffect(() => {\n document.title = \"Calendbook - Onboarding\";\n }, []);\n\n // sets forced white theme\n const root = document.getElementById(\"root\");\n const html = document.getElementById(\"html\");\n root.setAttribute(\"data-theme\", \"light\");\n html.setAttribute(\"data-theme\", \"light\");\n\n // hide navbar and footer\n const setShouldShowNavs = useIframeStore((state) => state.setShouldShowNavs);\n setShouldShowNavs(false);\n document.getElementById(\"root\").style.padding = 0;\n document.getElementById(\"root\").style.minHeight = 0;\n\n return (\n <>\n <section className=\"tw-h-screen tw-bg-white tw-dark:bg-gray-900 lg:tw-py-0\">\n <div className=\"lg:tw-flex\">\n {stage === \"plan-fit\" && (\n <div className=\"tw-hidden tw-w-full tw-max-w-md tw-p-12 lg:tw-h-screen lg:tw-block tw-bg-primary-600\">\n <div className=\"tw-flex tw-items-center tw-mb-8 tw-space-x-4\">\n <Logo fillColor=\"white\" />\n </div>\n <div className=\"tw-block tw-p-8 tw-text-white tw-rounded-lg tw-bg-primary-500\">\n <CloseOnboarding stage={stage} />\n <h2 className=\"tw-mb-4 tw-text-2xl tw-font-semibold\">\n Calendbook <span className=\"tw-capitalize\">{plan?.plan}</span>\n </h2>\n <ul role=\"list\" className=\"tw-space-y-4 tw-text-left\">\n {plan?.plan &&\n features[plan?.plan].map((feature) => (\n <li className=\"tw-flex tw-items-center tw-space-x-3\">\n <svg\n className=\"tw-flex-shrink-0 tw-w-5 tw-h-5 tw-text-green-300\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n ></path>\n </svg>\n <span>{feature}</span>\n </li>\n ))}\n <li className=\"tw-flex tw-items-center tw-space-x-3\">\n <span className=\"tw-ml-8\">\n {t(\"onboarding:plans.more\")}\n </span>\n </li>\n </ul>\n </div>\n </div>\n )}\n\n <div className=\"tw-flex tw-items-center tw-mx-auto md:tw-w-[50rem] tw-px-4 md:tw-px-8 xl:tw-px-0\">\n <div className=\"tw-w-full\">\n {/* Logo */}\n {stage !== \"plan-fit\" && (\n <div className=\"tw-flex tw-items-center tw-justify-center tw-my-8 tw-space-x-4 lg:tw-hidden\">\n <a\n href=\"#\"\n className=\"tw-flex tw-items-center tw-text-2xl tw-font-semibold\"\n >\n <Logo />\n </a>\n </div>\n )}\n\n {/* Breadcrumbs */}\n {stage !== \"plan-fit\" && (\n <ol className=\"tw-flex tw-items-center tw-mb-6 tw-text-sm tw-font-medium tw-text-center tw-text-gray-500 tw-dark:text-gray-400 lg:tw-mb-12 sm:tw-text-base\">\n <li className=\"tw-flex tw-items-center after:tw-content-[''] after:tw-w-12 after:tw-h-1 after:tw-border-b after:tw-border-gray-200 after:tw-border-1 after:tw-hidden sm:after:tw-inline-block after:tw-mx-6 xl:after:tw-mx-10 tw-dark:after:tw-border-gray-700\">\n <div\n className={`\n ${\n stage === \"user\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"event-name\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage ===\n \"event-general-availabilities\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage ===\n \"event-advanced-availabilities\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"notifications\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"plan-fit\" &&\n \"tw-text-primary-500\"\n }\n tw-flex tw-items-center sm:tw-block after:tw-content-['/'] sm:after:tw-hidden after:tw-mx-2 after:tw-font-light after:tw-text-gray-200 tw-dark:after:tw-text-gray-500`}\n >\n <div className=\"tw-mr-2 sm:tw-mb-0 sm:tw-mx-2\">1</div>\n <span className=\"tw-ml-1 tw-hidden sm:tw-inline-flex\">\n {t(\"onboarding:header.info\")}\n </span>\n </div>\n </li>\n <li className=\"tw-flex tw-items-center after:tw-content-[''] after:tw-w-12 after:tw-h-1 after:tw-border-b after:tw-border-gray-200 after:tw-border-1 after:tw-hidden sm:after:tw-inline-block after:tw-mx-6 xl:after:tw-mx-10 tw-dark:after:tw-border-gray-700\">\n <div\n className={`\n ${\n stage === \"event-name\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage ===\n \"event-general-availabilities\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage ===\n \"event-advanced-availabilities\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"notifications\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"plan-fit\" &&\n \"tw-text-primary-500\"\n }\n tw-flex tw-items-center sm:tw-block after:tw-content-['/'] sm:after:tw-hidden after:tw-mx-2 after:tw-font-light after:tw-text-gray-200 tw-dark:after:tw-text-gray-500`}\n >\n <div className=\"tw-mr-2 sm:tw-mb-0 sm:tw-mx-2\">2</div>\n <span className=\"tw-ml-1 tw-hidden sm:tw-inline-flex\">\n {t(\"onboarding:header.event\")}\n </span>\n </div>\n </li>\n <li className=\"tw-flex tw-items-center sm:tw-block\">\n <div\n className={`\n ${\n stage === \"notifications\" &&\n \"tw-text-primary-500\"\n }\n ${\n stage === \"plan-fit\" &&\n \"tw-text-primary-500\"\n }\n tw-flex tw-items-center sm:tw-block after:tw-content-['/'] sm:after:tw-hidden after:tw-mx-2 after:tw-font-light after:tw-text-gray-200 tw-dark:after:tw-text-gray-500`}\n >\n <div className=\"tw-ml-1 tw-mr-2 sm:tw-mb-0 sm:tw-mx-2\">\n 3\n </div>\n {t(\"onboarding:header.notifications\")}\n </div>\n </li>\n\n <CloseOnboarding stage={stage} />\n </ol>\n )}\n\n {stage === \"user\" && <User setStage={setStage} />}\n {stage === \"event-name\" && <Name setStage={setStage} />}\n {stage === \"event-general-availabilities\" && (\n <GeneralAvailabilities setStage={setStage} />\n )}\n {stage === \"event-advanced-availabilities\" && (\n <AdvancedAvailabilities setStage={setStage} />\n )}\n {stage === \"notifications\" && (\n <Notifications setStage={setStage} />\n )}\n {stage === \"plan-fit\" && (\n <PlanFit plan={plan} setPlan={setPlan} />\n )}\n </div>\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default Onboarding;\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport be from '../BE';\nimport auth from '../Account/Auth';\n\nfunction Overview({showPlan, setShowPlan}){\n const history = useHistory();\n const [overview,setOverview] = useState(null);\n const [interval,setInterval] = useState(\"today\")\n const [loading,setLoading] = useState(false);\n\n const getOverview = async () => {\n try{\n setLoading(true);\n await auth.isAuthenticated()\n .then(() => {\n be.get('Leads','/leads/overview',false,true,true)\n .then(response => {\n console.log(\"[leads][overview] got overview\");\n console.log(response);\n setOverview(response);\n setShowPlan(response?.showPlan);\n })\n .catch(error => {\n console.error(\"[leads][overview] network error while getting overview:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[leads][overview] authentication error while getting overview:\", error)\n history.push({pathname:'/login'})\n })\n }catch (error) { \n console.error(\"[leads][overview] functional error while saving user:\",error);\n }finally{\n setLoading(false)\n }\n }\n\n useEffect(() => {\n getOverview();\n },[])\n\n return(\n <div className=\"tw-max-w-[400px] tw-items-center tw-justify-between tw-p-4 tw-my-8 tw-mx-auto tw-space-y-4 tw-bg-gray-100 tw-rounded-lg tw-dark:bg-gray-700 sm:tw-flex sm:tw-space-y-0\">\n <div>\n <div className={`${loading && 'tw-animate-pulse'} tw-text-3xl tw-font-bold tw-text-gray-900 tw-dark:text-white`}>{overview?.total || 0}</div>\n <div className=\"tw-text-sm tw-text-gray-500 tw-dark:text-gray-400\">Total leads</div>\n </div>\n <div>\n <div className={`${loading && 'tw-animate-pulse'} tw-text-3xl tw-font-bold tw-text-gray-900 tw-dark:text-white`}>{overview?.history?.[interval] || 0}</div>\n <div className=\"tw-text-sm tw-text-gray-500 tw-dark:text-gray-400\">\n Leads acquired \n\n {/* Dropdown Button*/}\n <button\n id=\"dropdownIntervalButton\"\n data-dropdown-toggle=\"dropdownInterval\"\n className=\"tw-inline-flex tw-items-center tw-ms-1 tw-font-bold tw-text-gray-500 tw-rounded-full hover:tw-text-primary-600 tw-dark:hover:text-blue-500 md:tw-me-0 focus:tw-ring-4 tw-dark:text-white\"\n type=\"button\"\n >\n {interval === \"today\" && \"today\"}\n {interval === \"yesterday\" && \"yesterday\"}\n {interval === \"lastWeek\" && \"last week\"}\n {interval === \"lastMonth\" && \"last month\"}\n {interval === \"lastSixMonths\" && \"last 6 months\"}\n <svg className=\"tw-w-2.5 tw-h-2.5 tw-ms-1\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 6\">\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 4 4 4-4\" />\n </svg>\n </button>\n\n {/* Dropdown menu */}\n <div\n id=\"dropdownInterval\"\n className=\"tw-z-10 hidden tw-bg-white tw-divide-y tw-divide-gray-100 tw-rounded-lg tw-shadow tw-w-44 tw-dark:bg-gray-700 tw-dark:divide-gray-600\"\n >\n <ul className=\"tw-py-2 tw-text-sm tw-text-gray-700 tw-dark:text-gray-200\" aria-labelledby=\"dropdownIntervalButton\">\n <li>\n <div className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\" onClick={() => setInterval(\"today\")}>today</div>\n </li>\n <li>\n <div className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\" onClick={() => setInterval(\"yesterday\")}>yesterday</div>\n </li>\n <li>\n <div className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\" onClick={() => setInterval(\"lastWeek\")}>last week</div>\n </li>\n <li>\n <div className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\" onClick={() => setInterval(\"lastMonth\")}>last month</div>\n </li>\n <li>\n <div className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\" onClick={() => setInterval(\"lastSixMonths\")}>last 6 months</div>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default Overview;\n","function RatingStars({ contact, rating, onChange, savingRating }) {\n const STARS_NUMBER = 5;\n\n const starLightClass = (_starIndex, _rating) => {\n const baseClass = `tw-cursor-pointer ${savingRating === contact && 'tw-text-gray-500 tw-animate-pulse'}`;\n if (_starIndex <= Number(_rating)) {\n return `${baseClass} tw-text-orange-400`;\n } else {\n return `${baseClass} tw-text-gray-400`;\n }\n };\n\n // Helper function to create a star component\n const renderStar = (_starIndex) => {\n return (\n <div key={`${contact}-star-${_starIndex}`} className=\"hover:tw--translate-y-0.5\">\n <input\n type=\"radio\"\n name={`rating-${contact}`} // Ensure name is unique for each contact\n className=\"!tw-hidden\"\n id={`star-${contact}-${_starIndex}`}\n value={_starIndex}\n disabled={savingRating === contact}\n onChange={() => {\n console.log(`Star ${_starIndex} onChange fired for contact:`, contact);\n onChange(contact, _starIndex);\n }}\n />\n <label\n htmlFor={`star-${contact}-${_starIndex}`}\n className={starLightClass(_starIndex, rating)}\n >\n ★\n </label>\n </div>\n );\n };\n\n return (\n <div key={`${contact}-rating-container`} className=\"tw-flex tw-z-100\">\n {Array.from({ length: STARS_NUMBER }, (_, index) => renderStar(index + 1))}\n </div>\n );\n}\n\nexport default RatingStars;\n\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport RatingStars from './RatingStars';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport i18n from '../../i18n';\n\nfunction Details({contact, contactsCache, showDrawer, setShowDrawer, rating, savingRating, setRating}){\n const history = useHistory();\n const [loading,setLoading] = useState(false);\n const [contactDetails,setContactDetails] = useState({});\n\n const fetchContactDetails = async (_contact) => {\n try {\n setLoading(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.get('Leads',`/leads/${_contact}`,false,true,true)\n .then((response) => {\n setContactDetails(response)\n console.log(`[leads][contact-details] fetched contact details for ${contact}`);\n })\n .catch(error => {\n console.error(\"[leads][contact-details] network error while fetching contact details:\",error);\n setShowDrawer(false);\n })\n })\n .catch((error) => {\n console.error(\"[leads][contact-details] authentication error while fetching contact details:\", error)\n setShowDrawer(false);\n history.push({pathname:'/login'})\n })\n } catch (error) {\n console.error(`[leads][contact-details] functional error while fetching contact details for ${contact}`);\n } finally {\n setLoading(false);\n }\n };\n\n const getUserLanguage = () => {\n return i18n.language.substring(0,2);\n }\n\n const formatDate = (_date) => {\n // Date formatting options\n var dateOptions = { \n weekday: 'long', \n year: 'numeric', \n month: 'long', \n day: 'numeric' \n };\n var timeOptions = {\n hour: 'numeric',\n minute: 'numeric',\n hour12: false // You can set this to false if you want a 24-hour format\n };\n // Getting date object from input\n var dateFormatted = new Date(_date);\n\n // Format date and time separately\n var formattedDate = dateFormatted.toLocaleDateString(getUserLanguage(), dateOptions);\n var formattedTime = dateFormatted.toLocaleTimeString(getUserLanguage(), timeOptions);\n\n // Combine both date and time\n return `${formattedDate} | ${formattedTime}`;\n }\n\n useEffect(() => {\n const init = async() => {\n await fetchContactDetails(contact);\n } \n if(contact && showDrawer){\n init();\n }\n },[contact])\n\n return(\n <>\n <div \n id=\"readUserDrawerAdvanced\" \n className={`tw-drop-shadow-xl tw-overflow-y-auto tw-fixed tw-top-0 tw-right-0 tw-z-40 tw-p-4 tw-w-full tw-max-w-sm tw-h-screen tw-bg-white tw-transition-transform ${showDrawer ? 'tw-transform-none' : 'tw-translate-x-full'}`} \n tabIndex=\"-1\" \n aria-labelledby=\"drawer-label\" \n aria-hidden=\"true\"\n >\n {loading\n ?\n <>\n <div role=\"status\" className=\"tw-max-w-sm tw-animate-pulse tw-my-6\">\n <div className=\"tw-h-2.5 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-w-48 tw-mb-4\"></div>\n <div className=\"tw-h-2 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-max-w-[360px] tw-mb-2.5\"></div>\n <div className=\"tw-h-2 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-mb-2.5\"></div>\n <div className=\"tw-h-2 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-max-w-[330px] tw-mb-2.5\"></div>\n <div className=\"tw-h-2 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-max-w-[300px] tw-mb-2.5\"></div>\n <div className=\"tw-h-2 tw-bg-gray-200 tw-rounded-full tw-dark:bg-gray-700 tw-max-w-[360px]\"></div>\n <span className=\"tw-sr-only\">Loading...</span>\n </div>\n </>\n\n :\n <>\n <button \n type=\"button\" \n data-drawer-dismiss=\"readUserDrawerAdvanced\" \n aria-controls=\"readUserDrawerAdvanced\" \n className=\"tw-text-gray-400 tw-bg-transparent hover:tw-bg-gray-200 hover:tw-text-gray-900 tw-rounded-lg tw-text-sm tw-flex tw-items-center tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\"\n onClick={() => setShowDrawer(false)}\n >\n <svg aria-hidden=\"true\" className=\"tw-w-5 tw-h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\"></path>\n </svg>\n <span className=\"tw-sr-only\">Close menu</span>\n </button>\n <div className=\"tw-flex tw-items-center tw-my-4 sm:tw-mb-5\">\n \n {/* profile pic */}\n {/* <img className=\"tw-w-12 tw-h-12 tw-rounded-full sm:tw-mr-3\" src=\"https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/helene-engels.png\" alt=\"Helene avatar\" /> */}\n <div>\n <h4 id=\"drawer-label\" className=\"tw-mb-1 tw-text-xl tw-font-bold tw-leading-none tw-text-gray-900 tw-dark:text-white\">{contactDetails?.properties?.fullName}</h4>\n <p className=\"tw-text-gray-500 tw-dark:text-gray-400\">{contactDetails?.contact}</p>\n <RatingStars\n key={`${contact}-details-rating-component`}\n contact={contact}\n rating={rating}\n onChange={setRating}\n savingRating={savingRating}\n />\n </div>\n </div>\n \n <dl>\n {contactDetails?.acquisitionDate &&\n <>\n <dt className=\"tw-mb-2 tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">Acquisition Date</dt>\n <dd className=\"tw-mb-4 tw-font-light tw-text-gray-500 sm:tw-mb-5 tw-dark:text-gray-400\">\n {formatDate(contactDetails?.acquisitionDate)}\n </dd>\n </>\n }\n {contactDetails?.properties && contactDetails?.properties?.lang &&\n <div className=\"tw-flex tw-mb-4 tw-gap-2 tw-items-center\">\n <dt className=\"tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">\n <i className=\"fa-solid fa-flag\"></i>\n </dt>\n <dd className=\"tw-uppercase tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {contactDetails?.properties?.lang.substring(0,2)}\n </dd>\n </div>\n }\n {contactDetails?.properties && contactDetails?.properties?.email && contactDetails?.properties?.email !== contactDetails?.contact &&\n <div className=\"tw-flex tw-mb-4 tw-gap-2 tw-items-center\">\n <dt className=\"tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">\n <i className=\"fa-solid fa-envelope\"></i>\n </dt>\n <dd className=\"tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {contactDetails?.properties?.email}\n </dd>\n </div>\n }\n {contactDetails?.properties && contactDetails?.properties?.timezone &&\n <div className=\"tw-flex tw-mb-4 tw-gap-2 tw-items-center\">\n <dt className=\"tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">\n <i className=\"fa-solid fa-earth-africa\"></i>\n </dt>\n <dd className=\"tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n {contactDetails?.properties?.timezone}\n </dd>\n </div>\n }\n {contactDetails?.properties && contactDetails?.properties.username &&\n <div className=\"tw-flex tw-mb-4 tw-gap-2 tw-items-center\">\n <dt className=\"tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">\n <i className=\"fa-solid fa-user\"></i>\n </dt>\n <dd className=\"tw-font-light tw-text-gray-500 tw-dark:text-gray-400\">\n <a className=\"tw-inline-flex\" href={`https://www.calendbook.com/${contactDetails?.properties?.username}`}>\n {contactDetails?.properties?.username}\n <svg className=\"tw-ms-1 tw-w-4 tw-h-4 tw-my-auto\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" viewBox=\"0 0 24 24\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 14v4.833A1.166 1.166 0 0 1 16.833 20H5.167A1.167 1.167 0 0 1 4 18.833V7.167A1.166 1.166 0 0 1 5.167 6h4.618m4.447-2H20v5.768m-7.889 2.121 7.778-7.778\"/>\n </svg>\n </a>\n </dd>\n </div>\n }\n {contactDetails?.timelineEvents && Object.keys(contactDetails?.timelineEvents).length > 0 &&\n <>\n <dt className=\"tw-mb-2 tw-font-semibold tw-leading-none tw-text-gray-900 tw-dark:text-white\">Events</dt>\n <dd className=\"tw-mb-4 tw-font-light tw-text-gray-500 sm:tw-mb-5 tw-dark:text-gray-400 tw-overflow-y-scroll tw-h-[700px]\">\n <ol className=\"tw-relative tw-border-s tw-border-gray-200 tw-dark:border-gray-700\"> \n {Object.keys(contactDetails?.timelineEvents).map((eventKey) => (\n <li key={eventKey} className=\"tw-mb-4 tw-ms-4\">\n <div className=\"tw-absolute tw-w-3 tw-h-3 tw-bg-gray-200 tw-rounded-full tw-mt-1.5 tw--start-1.5 tw-border tw-border-white tw-dark:border-gray-900 tw-dark:bg-gray-700\"></div>\n <time className=\"tw-mb-1 tw-text-sm tw-font-normal tw-leading-none tw-text-gray-400 tw-dark:text-gray-500\">{formatDate(eventKey)}</time>\n <div className=\"tw-capitalize tw-text-sm tw-font-semibold tw-text-gray-900 tw-dark:text-white\">\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'booked' && <i className=\"fa-solid fa-calendar-check tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'rescheduled' && <i className=\"fa-solid fa-arrows-rotate tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'cancelled' && <i className=\"fa-solid fa-calendar-xmark tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'pending_payment' && <i className=\"fa-solid fa-money-bill-wave tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'pending_approval' && <i className=\"fa-solid fa-thumbs-up tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'rejected' && <i className=\"fa-solid fa-circle-xmark tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action === 'google_imported' && <i className=\"fa-solid fa-google tw-me-1\"></i>}\n {contactDetails?.timelineEvents?.[eventKey]?.action.split(\"_\").join(\" \")}\n </div>\n {contactDetails?.timelineEvents?.[eventKey]?.metaBooking?.paidAmount &&\n <p className=\"tw-text-xs tw-font-bold tw-text-gray-500 tw-dark:text-gray-400\">{contactDetails?.timelineEvents?.[eventKey]?.metaBooking?.paidAmount} Paid</p>\n }\n {contactDetails?.timelineEvents?.[eventKey]?.metaBooking?.notes &&\n <p className=\"tw-text-xs tw-font-bold tw-text-gray-500 tw-dark:text-gray-400\">Notes:<br/><span className=\"tw-font-normal\">{contactDetails?.timelineEvents?.[eventKey]?.metaBooking?.notes}</span></p>\n }\n </li>\n ))}\n </ol>\n </dd>\n </>\n }\n </dl>\n </>\n }\n\n </div>\n </>\n );\n}\n\nexport default Details;\n","import { useEffect } from 'react';\nimport { initFlowbite } from 'flowbite';\n\nfunction Filters({\n loading,\n actionFilter,\n handleActionFilterChange,\n showContacts,\n handleShowContactsChange,\n ratingFilter,\n handleRatingFilterChange,\n}) {\n\n const isProd = window.location.hostname === \"www.calendbook.com\";\n\n useEffect(() =>{\n initFlowbite();\n },[])\n\n return(\n <>\n <div className=\"tw-flex tw-justify-start tw-items-start tw-py-2\">\n <div className=\"tw-inline-flex tw-items-center tw-gap-4\">\n <button \n id=\"dropdownDefault\" \n data-dropdown-toggle=\"dropdown\"\n className=\"tw-bg-white hover:tw-bg-gray-100 focus:tw-ring-4 focus:tw-outline-none focus:tw-ring-primary-300 tw-font-medium tw-rounded-lg tw-text-sm tw-px-4 tw-py-2.5 tw-text-center tw-inline-flex tw-items-center tw-dark:bg-primary-600 tw-dark:hover:bg-primary-700 tw-dark:focus:tw-ring-primary-800\"\n type=\"button\"\n >\n Filter\n <svg className=\"tw-w-4 tw-h-4 tw-ml-2\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n </button>\n\n {actionFilter && actionFilter.length > 0 &&\n <div>\n <span className=\"tw-border-gray-200 tw-border tw-capitalize tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-text-sm tw-font-medium tw-text-black tw-bg-white tw-rounded tw-dark:bg-blue-900 tw-dark:text-blue-300\">\n <button \n type=\"button\" \n className=\"tw-inline-flex tw-items-center tw-p-1 tw-me-1 tw-text-sm tw-text-black tw-bg-transparent tw-rounded-sm hover:tw-bg-gray-200 hover:tw-text-gray-900 tw-dark:hover:bg-blue-800 tw-dark:hover:text-blue-300\" \n aria-label=\"Remove\"\n onClick={() => handleActionFilterChange(\"\")}\n >\n <svg className=\"tw-w-2 tw-h-2\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n </button>\n {actionFilter[0].split(\"_\").join(\" \")}\n </span>\n </div>\n }\n\n {ratingFilter && ratingFilter > 0 ? (\n <div>\n <span className=\"tw-border-gray-200 tw-border tw-capitalize tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-text-sm tw-font-medium tw-text-black tw-bg-white tw-rounded tw-dark:bg-blue-900 tw-dark:text-blue-300\">\n <button\n type=\"button\"\n className=\"tw-inline-flex tw-items-center tw-p-1 tw-me-1 tw-text-sm tw-text-black tw-bg-transparent tw-rounded-sm hover:tw-bg-gray-200 hover:tw-text-gray-900 tw-dark:hover:bg-blue-800 tw-dark:hover:text-blue-300\"\n aria-label=\"Remove\"\n onClick={() => handleRatingFilterChange(0)}\n >\n <svg className=\"tw-w-2 tw-h-2\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\">\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6\" />\n </svg>\n </button>\n <span>\n {'Rating: ' + ratingFilter + '★'}\n </span>\n </span>\n </div>\n ) : null}\n\n\n </div>\n\n {/* Imported Contacts Filter */}\n {!isProd &&\n <div className=\"tw-flex tw-items-center tw-self-center tw-mx-4\">\n <input \n name=\"contacts-filter\"\n id=\"contacts-filter\" \n type=\"checkbox\" \n value=\"\" \n checked={showContacts}\n onChange={handleShowContactsChange}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 !tw-rounded-sm tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <label htmlFor=\"admitted\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Show Google Contacts\n </label>\n </div>\n }\n\n {/* Dropdown menu */}\n <div id=\"dropdown\" className=\"tw-divide-y tw-divide-gray-100 tw-z-10 hidden tw-p-3 tw-bg-white tw-rounded-lg tw-shadow tw-w-72 tw-dark:bg-gray-700\">\n <ul className=\"tw-py-2 tw-space-y-2 tw-text-sm\" aria-labelledby=\"dropdownDefault\">\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"all\" \n type=\"radio\" \n value=\"\" \n checked={actionFilter.length === 0}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-white tw-border-2 tw-rounded-full\"></div>\n <label htmlFor=\"admitted\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n All\n </label>\n </div>\n {/* \n filter count\n <div className=\"tw-text-gray-400\">123</div>\n */}\n </li>\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"booked\" \n type=\"radio\" \n value=\"booked\" \n checked={actionFilter.includes('booked')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-green-400 tw-border-2 tw-border-green-400 tw-rounded-full\"></div>\n <label htmlFor=\"admitted\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Booked\n </label>\n </div>\n {/* \n filter count\n <div className=\"tw-text-gray-400\">123</div>\n */}\n </li>\n\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"rescheduled\" \n type=\"radio\" \n value=\"rescheduled\" \n checked={actionFilter.includes('rescheduled')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-border-2 tw-rounded-full tw-border-orange-500 tw-bg-orange-500\"></div>\n <label htmlFor=\"temporarily-admitted\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Rescheduled\n </label>\n </div>\n {/*\n filetr count\n <div className=\"tw-text-gray-400\">22</div>\n */}\n </li>\n\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"cancelled\" \n type=\"radio\" \n value=\"cancelled\" \n checked={actionFilter.includes('cancelled')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-red-500 tw-border-2 tw-border-red-500 tw-rounded-full\"></div>\n <label htmlFor=\"awaiting-verification\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Cancelled\n </label>\n </div>\n {/*\n filter count\n <div className=\"tw-text-gray-400\">12</div>\n */}\n </li>\n\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"pending_payment\" \n type=\"radio\" \n value=\"pending_payment\" \n checked={actionFilter.includes('pending_payment')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-orange-500 tw-border-2 tw-border-orange-500 tw-rounded-full\"></div>\n <label htmlFor=\"requires-recheck\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Pending Payment\n </label>\n </div>\n {/*\n filter count\n <div className=\"tw-text-gray-400\">56</div>\n */}\n </li>\n\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"pending_approval\" \n type=\"radio\" \n value=\"pending_approval\" \n checked={actionFilter.includes('pending_approval')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-orange-500 tw-border-2 tw-border-orange-500 tw-rounded-full\"></div>\n <label htmlFor=\"rejected\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Pending Approval\n </label>\n </div>\n {/*\n filter count\n <div className=\"tw-text-gray-400\">6</div>\n */}\n </li>\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"rejected\" \n type=\"radio\" \n value=\"rejected\" \n checked={actionFilter.includes('rejected')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-red-500 tw-border-2 tw-border-red-500 tw-rounded-full\"></div>\n <label htmlFor=\"rejected\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Rejected\n </label>\n </div>\n {/*\n filter count\n <div className=\"tw-text-gray-400\">6</div>\n */}\n </li>\n <li className=\"tw-flex tw-items-center tw-justify-between\">\n <div className=\"tw-flex tw-items-center\">\n <input \n name=\"action-filter\"\n id=\"google_imported\" \n type=\"radio\" \n value=\"google_imported\" \n checked={actionFilter.includes('google_imported')}\n onChange={(e) => handleActionFilterChange(e?.target?.value)}\n disabled={loading}\n className=\"disabled:tw-bg-gray-500 disabled:tw-animate-pulse tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded-full tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-700 focus:tw-ring-2 tw-dark:bg-gray-600 tw-dark:border-gray-500\" \n />\n <div className=\"tw-w-3 tw-h-3 tw-ml-2 tw-bg-blue-500 tw-border-2 tw-border-blue-500 tw-rounded-full\"></div>\n <label htmlFor=\"rejected\" className=\"tw-ml-1.5 tw-flex tw-items-center tw-text-sm tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">\n Google Imported\n </label>\n </div>\n {/*\n filter count\n <div className=\"tw-text-gray-400\">6</div>\n */}\n </li>\n </ul>\n\n <div className=\"tw-py-2\">\n <div className=\"tw-mb-2 tw-font-medium tw-text-gray-900 tw-dark:text-gray-100\">Filter by Rating</div>\n <div className=\"tw-flex tw-items-center\">\n {[1, 2, 3, 4, 5].map((star) => (\n <button\n key={star}\n type=\"button\"\n onClick={() => handleRatingFilterChange(star)}\n disabled={loading}\n className={`tw-text-xl tw-mr-1 ${\n ratingFilter >= star ? 'tw-text-yellow-500' : 'tw-text-gray-400'\n } hover:tw-text-yellow-500 focus:tw-outline-none tw-transition-colors tw-duration-200`}\n >\n ★\n </button>\n ))}\n </div>\n </div>\n </div>\n\n </div>\n\n </>\n );\n\n}\n\nexport default Filters;\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useGoogleLogin } from '@react-oauth/google';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\n\nfunction GoogleContacts({refresh}) {\n const history = useHistory();\n const [loading,setLoading] = useState(false);\n const [imported,setImported] = useState(null);\n const Button = window.calendbookUI.Button;\n\n const backendSync = async (code) => {\n try {\n setLoading(true);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('Leads',`/contacts`,{code},true,true)\n .then((response) => {\n console.log(`[leads][google-contacts] google contacts synced`);\n setImported(true);\n })\n .catch(error => {\n console.error(\"[leads][google-contacts] network error while syncing google contacts:\",error);\n setImported(false);\n })\n })\n .catch((error) => {\n console.error(\"[leads][google-contacts] authentication error while syncing google contacts:\", error)\n history.push({pathname:'/login'})\n })\n } catch (error) {\n console.error(`[leads][contact-details] functional error while syncing google contacts`);\n } finally {\n setLoading(false);\n }\n };\n\n const login = useGoogleLogin({\n onSuccess: async credentialResponse => {\n console.log(\"[leads][google-import] success response from google: \", credentialResponse);\n await backendSync(credentialResponse?.code);\n await refresh(0);\n },\n onError: error => {\n console.error(\"[leads][google-import] error response from google: \", error); \n setImported(false);\n },\n flow: 'auth-code',\n scope: 'https://www.googleapis.com/auth/contacts.readonly',\n });\n\n return (\n <div className=\"tw-border tw-p-4 tw-rounded-lg tw-inline-flex tw-gap-6 tw-items-center\">\n <div className=\"tw-justify-center\">\n <img src=\"/app-assets/png/google-logo.png\" alt=\"Google\" width=\"32\" height=\"32\"/>\n </div>\n <div>\n <div className=\"tw-font-bold\">Sync with Google</div>\n <div className=\"tw-text-xs\">Connect your account to easily manage your contacts</div>\n {imported === true &&\n <div className=\"tw-text-xs tw-text-green-500\">Syncronization started! you will receive an email once complete</div>\n }\n {imported === false &&\n <div className=\"tw-text-xs tw-text-red-500\">Syncronization Error. Please retry.</div>\n }\n </div>\n <div>\n <Button\n onClick={() => login()}\n size=\"xs\"\n buttonText={loading ? \"Syncing...\" : \"Enable Sync\"}\n radius=\"rounded\"\n disabled={loading}\n /> \n </div>\n </div>\n );\n}\n\nexport default GoogleContacts;\n\n\n\n","import { useRef, useEffect, useState } from 'react';\n\nconst NoteInput = ({ contactId, initialNote, saveNote }) => {\n const [note, setNote] = useState(initialNote || '');\n const [isLoading, setIsLoading] = useState(false);\n const timerRef = useRef(null);\n\n const handleNoteChange = (e) => {\n const value = e.target.value;\n setNote(value);\n\n // Clear any existing timer\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n // Set a new timer\n timerRef.current = setTimeout(() => {\n // Save the note\n setIsLoading(true);\n saveNote(contactId, value)\n .then(() => {\n setIsLoading(false);\n })\n .catch((error) => {\n console.error('Error saving note:', error);\n setIsLoading(false);\n });\n }, 2000);\n };\n\n useEffect(() => {\n // Cleanup function\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n return (\n <div className=\"tw-flex tw-items-center\">\n <input\n type=\"text\"\n value={note}\n onChange={handleNoteChange}\n className=\"tw-border !tw-border-gray-300 tw-text-xs tw-px-2 tw-py-1 tw-rounded tw-w-full\"\n />\n {isLoading && (\n // Spinner\n <svg\n className=\"tw-ml-2 tw-w-4 tw-h-4 tw-animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"tw-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n ></circle>\n <path\n className=\"tw-opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n ></path>\n </svg>\n )}\n </div>\n );\n};\n\nexport default NoteInput;\n","import { useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { GoogleOAuthProvider } from '@react-oauth/google';\nimport Details from './Details';\nimport Filters from './Filters';\nimport GoogleContacts from './GoogleContacts';\nimport RatingStars from './RatingStars';\nimport NoteInput from './NoteInput';\nimport be from '../../BE';\nimport auth from '../../Account/Auth';\nimport i18n from '../../i18n';\n\nfunction Contacts({showPlan, setShowPlan}) {\n const history = useHistory();\n const PricingCard = window.calendbookUI.PricingCard;\n const [loading, setLoading] = useState(false);\n const [savingRating, setSavingRating] = useState(null);\n const [showDrawer, setShowDrawer] = useState(false);\n const [selectedContact, setSelectedContact] = useState(null);\n const [copiedContact, setCopiedContact] = useState(false);\n const [contactsCache, setContactsCache] = useState([]); // All contacts fetched and cached\n const [totalContacts, setTotalContacts] = useState(0);\n const [pageLimit, setPageLimit] = useState(10);\n const [actionFilter, setActionFilter] = useState([]);\n const [ratingFilter, setRatingFilter] = useState(0); // Added ratingFilter state\n const [showContacts, setShowContacts] = useState(true);\n const [currentPage, setCurrentPage] = useState(0); // 0-based index\n const [pageIndices, setPageIndices] = useState(['']); // Stores 'page' indices for each page\n const [hasMore, setHasMore] = useState(true); // Indicates if there are more contacts to fetch\n const isProd = window.location.hostname === \"www.calendbook.com\";\n const role = auth.getProperty({ // get user role/plan\n storageKey: 'userSession',\n path: ['profileObj','planStatus','status'],\n fallback: 'unknown',\n });\n\n /**\n * Fetch contacts for a given page\n * @param {number} page - Page number to fetch (0-based index)\n */\n const fetchContactsForPage = (page) => {\n const pageIndex = pageIndices[page]; // Get the 'page' parameter for this page\n let body = { limit: pageLimit };\n if (pageIndex) { body['page'] = pageIndex; }\n if (actionFilter.length) { body['action'] = actionFilter; }\n if (showContacts) {body['showContacts'] = true; }\n if (ratingFilter > 0) { body['rating'] = ratingFilter; }\n\n setLoading(true);\n\n return auth.isAuthenticated()\n .then(() => {\n return be.get('Leads', '/leads', body, true, true);\n })\n .then((response) => {\n console.log(`[leads][contacts] got contacts for page ${page + 1}`);\n const { items, total, page: nextPageIndex } = response;\n\n setTotalContacts(total);\n\n setContactsCache(prevContacts => {\n const contactsMap = new Map(prevContacts.map(contact => [contact.contact, contact]));\n items.forEach(item => {\n contactsMap.set(item.contact, item);\n });\n return Array.from(contactsMap.values());\n });\n\n setPageIndices(prevPageIndices => {\n const newPageIndices = [...prevPageIndices];\n newPageIndices[page + 1] = nextPageIndex;\n return newPageIndices;\n });\n\n if (items.length < pageLimit || contactsCache.length + items.length >= total) {\n setHasMore(false);\n }\n\n return true; // Indicate success\n })\n .catch((error) => {\n console.error(\"[leads][contacts] error while fetching contacts:\", error);\n if (error.response && error.response.status === 401) {\n history.push({ pathname: '/login' });\n }\n return false; // Indicate failure\n })\n .finally(() => {\n setLoading(false);\n });\n };\n\n const saveContactRating = async (_contact,_rating) => {\n try {\n setSavingRating(_contact);\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('Leads',`/leads/${_contact}/rating`,{rating:_rating},true,true)\n .then((response) => {\n // update contact rating\n setContactsCache((prevContacts) => {\n return prevContacts.map((contact) => {\n if (contact?.contact === _contact) {\n // Update the rating for the matched contact\n return {\n ...contact,\n rating: _rating,\n };\n }\n return contact;\n });\n });\n console.log(`[leads][contact-rating] updated rating for ${_contact}`);\n })\n .catch(error => {\n console.error(\"[leads][contact-rating] network error while saving contact rating:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[leads][contact-rating] authentication error while savingg contact rating:\", error)\n history.push({pathname:'/login'})\n })\n } catch (error) {\n console.error(`[leads][contact-rating] functional error while saving rating for ${_contact}`);\n } finally {\n setSavingRating(null);\n }\n };\n\n const saveContactNote = async (contactId, noteValue) => {\n try {\n await auth.isAuthenticated()\n .then(async () => {\n await be.post('Leads', `/leads/${contactId}/notes/short`, { shortNote: noteValue }, true, true)\n .then((response) => {\n setContactsCache((prevContacts) => {\n return prevContacts.map((contact) => {\n if (contact.contact === contactId) {\n return {\n ...contact,\n shortNote: noteValue,\n };\n }\n return contact;\n });\n });\n console.log(`[leads][contact-note] updated note for ${contactId}`);\n })\n .catch((error) => {\n console.error(\"[leads][contact-note] network error while updating contact note:\",error);\n })\n })\n .catch((error) => {\n console.error(\"[leads][contact-note] authentication error while updating contact note:\",error);\n })\n } catch (error) {\n console.error(`[leads][contact-note] functional error while saving note for ${contactId}:`, error);\n }\n };\n\n\n /**\n * Function to search for the rating given a contact.\n * @param {Array} contacts - The array of contact objects.\n * @param {string} contact - The contact identifier (e.g., phone number or email).\n * @returns {number} - The rating of the specified contact or 0 if not found.\n */\n function getRatingByContact(contacts, contact) {\n if (!Array.isArray(contacts) || typeof contact !== 'string') {\n throw new Error('Invalid input: contacts should be an array and contact should be a string.');\n }\n\n // Normalize contact for consistent comparisons\n const normalizedContact = contact.trim().toLowerCase();\n\n // Find the contact and return the rating\n const foundContact = contacts.find(\n (c) => c.contact.trim().toLowerCase() === normalizedContact\n );\n\n // Return the rating if the contact is found, otherwise 0\n return foundContact ? foundContact.rating : 0;\n }\n\n // Handle 'NEXT' button click\n const handleNext = () => {\n const nextPage = currentPage + 1;\n const startIndex = nextPage * pageLimit;\n\n if (startIndex < contactsCache.length) {\n setCurrentPage(nextPage);\n } else if (hasMore) {\n fetchContactsForPage(nextPage)\n .then((success) => {\n if (success) {\n setCurrentPage(nextPage);\n }\n })\n .catch((error) => {\n console.error(\"Error fetching next page:\", error);\n });\n } else {\n if (startIndex < contactsCache.length) {\n setCurrentPage(nextPage);\n } else {\n console.log(\"[leads][contacts] No more contacts to display\");\n }\n }\n };\n\n // Handle 'PREV' button click\n const handlePrev = () => {\n if (currentPage > 0) {\n setCurrentPage(currentPage - 1);\n }\n };\n\n // Handle changing items per page\n const handleItemsPerPageChange = (e) => {\n const newPageLimit = parseInt(e.target.value, 10);\n setPageLimit(newPageLimit);\n // Reset pagination states\n setCurrentPage(0);\n setPageIndices(['']);\n setContactsCache([]);\n setHasMore(true);\n };\n\n // Handle changing filters\n const handleActionFilterChange = (_filter) => {\n if (actionFilter.includes(_filter) || _filter === \"\") {\n // Remove the filter if it's already present\n // Or filter is an empty string id\n setActionFilter([]);\n } else {\n // Replace the current filter with the new one\n setActionFilter([_filter]);\n }\n // Clear rating filter since only one filter can be active\n setRatingFilter(0);\n // Reset pagination states\n setPageLimit(pageLimit);\n setCurrentPage(0);\n setPageIndices(['']);\n setContactsCache([]);\n setHasMore(true);\n };\n\n const handleRatingFilterChange = (_rating) => {\n if (_rating === 0 || ratingFilter === _rating) {\n // Clear the rating filter\n setRatingFilter(0);\n } else {\n // Set the new rating filter\n setRatingFilter(_rating);\n }\n // Clear action filter since only one filter can be active\n setActionFilter([]);\n // Reset pagination states\n setCurrentPage(0);\n setPageIndices(['']);\n setContactsCache([]);\n setHasMore(true);\n };\n\n // Handle changing contacts show\n const handleShowContactsChange = () => {\n if (showContacts) {\n setShowContacts(false);\n } else {\n setShowContacts(true);\n }\n\n // Reset pagination states\n setPageLimit(pageLimit);\n setCurrentPage(0);\n setPageIndices(['']);\n setContactsCache([]);\n setHasMore(true);\n };\n\n // Get color and string for every action enumeration\n const parseAction = (_action) => {\n if(_action === 'booked'){ return {color: 'green', displayString: 'Booked'} }\n if(_action === 'rescheduled'){ return {color: 'orange', displayString: 'Rescheduled'} }\n if(_action === 'cancelled'){ return {color: 'red', displayString: 'Cancelled'} }\n if(_action === 'pending_payment'){ return {color: 'orange', displayString: 'Pending Payment'} }\n if(_action === 'pending_approval'){ return {color: 'orange', displayString: 'Pending Approval'} }\n if(_action === 'rejected'){ return {color: 'red', displayString: 'Rejected'} }\n if(_action === 'google_imported'){ return {color: 'blue', displayString: 'Google Imported'} }\n\n return {color: 'white', displayString: '-'}\n }\n\n const copyContact = (_contact) => {\n navigator.clipboard.writeText(_contact);\n setCopiedContact(_contact);\n setTimeout(() => setCopiedContact(false),3000);\n }\n\n const setRating = (_ratingContact, _newRating) => {\n saveContactRating(_ratingContact,_newRating);\n }\n\n const getUserLanguage = () => {\n return i18n.language.substring(0,2);\n }\n\n const formatDate = (_date) => {\n // Date formatting options\n var options = { year: 'numeric', month: 'long', day: 'numeric' };\n // Getting date object from db\n var dateFormatted = new Date(_date);\n // Format: weekday, monthname daynumber, year\n dateFormatted = dateFormatted.toLocaleDateString(getUserLanguage(), options);\n // To uppercase string\n dateFormatted = dateFormatted.toString();\n return dateFormatted;\n }\n\n // Fetch contacts when component mounts or when pageLimit changes\n useEffect(() => {\n const init = async () => {\n await fetchContactsForPage(0);\n setCurrentPage(0);\n };\n init();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pageLimit,actionFilter,ratingFilter,showContacts]);\n\n // Get contacts for the current page from cache\n const startIndex = currentPage * pageLimit;\n const endIndex = startIndex + pageLimit;\n const currentContacts = contactsCache.slice(startIndex, endIndex);\n\n // Skeleton Array\n const skeletonArray = Array(pageLimit).fill(null);\n\n return (\n <>\n {showDrawer &&\n <Details\n showDrawer={showDrawer}\n setShowDrawer={setShowDrawer}\n contact={selectedContact}\n contactsCache={contactsCache}\n rating={getRatingByContact(contactsCache, selectedContact)}\n savingRating={savingRating}\n setRating={setRating}\n />\n }\n <section className=\"tw-py-3 sm:tw-py-5\">\n {/* Ghost span, used only to build the needed color classes in the style.css */}\n <span className=\"tw-bg-orange-500 tw-bg-red-500 tw-bg-green-500 tw-bg-white-500 tw-bg-blue-500\"></span>\n <div className=\"tw-px-4 tw-mx-auto tw-max-w-screen-2xl lg:tw-px-12\">\n {!isProd &&\n <GoogleOAuthProvider clientId='941550493202-dtuj7ol0cagfjnoqvvlt8hh4hh8dskam.apps.googleusercontent.com'>\n <GoogleContacts refresh={fetchContactsForPage}/>\n </GoogleOAuthProvider>\n }\n\n <Filters\n loading={loading}\n actionFilter={actionFilter}\n handleActionFilterChange={handleActionFilterChange}\n ratingFilter={ratingFilter} // Pass ratingFilter to Filters component\n handleRatingFilterChange={handleRatingFilterChange} // Pass handleRatingFilterChange\n showContacts={showContacts}\n handleShowContactsChange={handleShowContactsChange}\n />\n\n <div className=\"tw-relative tw-overflow-hidden tw-bg-white tw-shadow-md tw-dark:bg-gray-800 sm:tw-rounded-lg\">\n <div className=\"tw-overflow-x-auto\">\n <table className=\"tw-w-full tw-text-sm tw-text-left tw-text-gray-500 tw-dark:text-gray-400\">\n\n <thead className=\"tw-text-xs tw-text-gray-700 tw-uppercase tw-bg-gray-50 tw-dark:bg-gray-700 tw-dark:text-gray-400\">\n <tr>\n {/* heading checkbox - later use */}\n {/*\n <th scope=\"col\" className=\"tw-p-4\">\n <div className=\"tw-flex tw-items-center\">\n <input id=\"checkbox-all\" type=\"checkbox\" className=\"tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-800 focus:tw-ring-2 tw-dark:bg-gray-700 tw-dark:border-gray-600\" />\n <label htmlFor=\"checkbox-all\" className=\"tw-sr-only\">checkbox</label>\n </div>\n </th>\n */}\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">Name</th>\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">Contact</th>\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">Rating</th>\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">Notes</th>\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">Status</th>\n <th scope=\"col\" className=\"tw-px-4 tw-py-3 tw-whitespace-nowrap\">Date Added</th>\n {currentContacts[0]?.retentionDayLeft &&\n <th\n scope=\"col\"\n className={`${role !== 'professional' && 'tw-underline tw-cursor-pointer'} tw-px-4 tw-py-3 tw-whitespace-nowrap`}\n onClick={() => {\n if (!showPlan) return;\n const plansToAdd =\n role === 'free'\n ? ['premium', 'professional']\n : ['premium', 'LTD'].includes(role)\n ? ['professional']\n : [];\n const newPlans = plansToAdd.filter((plan) => !showPlan.includes(plan));\n if (newPlans.length > 0) { setShowPlan((prevPlan) => [...prevPlan, ...newPlans]) }\n }}\n >\n Days Left\n </th>\n }\n {/* quick actions - later use */}\n {/*\n <th scope=\"col\" className=\"tw-px-4 tw-py-3\">\n <span className=\"tw-sr-only\">Actions</span>\n </th>\n */}\n </tr>\n </thead>\n\n <tbody>\n {/* Skeleton render logic */}\n {loading && skeletonArray.map((_,index) => (\n <tr key={`skeleton-row-${index}`} className=\"tw-animate-pulse tw-border-b tw-dark:border-gray-600 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-700\">\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-28 tw-h-3\"></div></td>\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-28 tw-h-3\"></div></td>\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-24 tw-h-3\"></div></td>\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-24 tw-h-3\"></div></td>\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-inline-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-3 tw-h-3 tw-me-2 tw-rounded-full\"></div><div className=\"tw-inline-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-28 tw-h-3\"></div></td>\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-28 tw-h-3\"></div></td>\n {currentContacts[0]?.retentionDayLeft &&\n <td className=\"tw-px-4 tw-py-2\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-20 tw-h-3\"></div></td>\n }\n {/* quick actions - later use */}\n {/*\n <td className=\"tw-px-4 tw-py-3\"><div className=\"tw-flex tw-items-center tw-bg-slate-700 tw-animate-pulse tw-w-8 tw-h-3\"></div></td>\n */}\n </tr>\n ))}\n\n {!loading && currentContacts.length === 0 &&\n <tr>\n <td colSpan={currentContacts[0]?.retentionDayLeft ? \"8\" : \"7\"} className=\"tw-text-center tw-px-4 tw-py-16\">\n <div className=\"tw-text-4xl tw-font-black\">\n Get booked to collect new leads!\n </div>\n <div>\n Your leads will appear here once you will get booked\n </div>\n </td>\n </tr>\n }\n\n {!loading && Array.isArray(showPlan) && showPlan.length > 0 &&\n <tr>\n <td colSpan={currentContacts[0]?.retentionDayLeft ? \"8\" : \"7\"} className=\"tw-text-center tw-px-4 tw-py-16\">\n <div className=\"tw-flex tw-justify-end\">\n <div className=\"tw-p-4 tw-cursor-pointer\" onClick={() => setShowPlan([])}>\n <svg aria-hidden=\"true\" className=\"tw-w-5 tw-h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fillRule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clipRule=\"evenodd\"></path>\n </svg>\n </div>\n </div>\n <div className=\"tw-flex tw-gap-8 tw-mx-auto tw-justify-center\">\n {showPlan.includes(\"premium\") &&\n <PricingCard\n variant=\"secondary\"\n plan=\"Premium\"\n description=\"For Premium users\"\n currency={i18n.language.substring(0,2) === 'en' ? '$' : '€' }\n price={'2'}\n cadency=\"month\"\n features={[\n 'All premium features',\n 'Up to 1000 leads',\n 'Retention Period: 365 days',\n 'Table view',\n ]}\n />\n }\n {showPlan.includes(\"professional\") &&\n <PricingCard\n variant=\"primary\"\n plan=\"Professional\"\n description=\"For Advanced users\"\n currency={i18n.language.substring(0,2) === 'en' ? '$' : '€' }\n price={'5'}\n cadency=\"month\"\n features={[\n 'All professional features',\n 'Unlimited leads (launch offer)',\n 'Retention Period: unlimited (launch offer)',\n 'CSV Export',\n ]}\n />\n }\n </div>\n </td>\n </tr>\n }\n\n {!loading && currentContacts && currentContacts.map((contact) => (\n <tr key={contact?.contact} className=\"tw-border-b tw-dark:border-gray-600 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-700\">\n {/* body checkbox - later use */}\n {/*\n <td className=\"tw-w-4 tw-px-4 tw-py-3\">\n <div className=\"tw-flex tw-items-center\">\n <input id=\"checkbox-table-search-1\" type=\"checkbox\" onClick={(e) => e.stopPropagation()} className=\"tw-w-4 tw-h-4 tw-bg-gray-100 tw-border-gray-300 tw-rounded tw-text-primary-600 focus:tw-ring-primary-500 tw-dark:focus:ring-primary-600 tw-dark:ring-offset-gray-800 focus:tw-ring-2 tw-dark:bg-gray-700 tw-dark:border-gray-600\" />\n <label htmlFor=\"checkbox-table-search-1\" className=\"tw-sr-only\">checkbox</label>\n </div>\n </td>\n */}\n <th scope=\"row\" className=\"tw-px-4 tw-py-2 tw-font-medium tw-text-gray-900 tw-whitespace-nowrap tw-dark:text-white hover:tw-text-primary-500 tw-cursor-pointer\" onClick={() => {setSelectedContact(contact?.contact); setShowDrawer(true);}}>\n <div className=\"tw-flex tw-items-center\">\n {/* user image - later use */}\n {/*\n <img src=\"https://flowbite.s3.amazonaws.com/blocks/marketing-ui/avatars/avatar-10.png\" alt=\"iMac Front Image\" className=\"tw-w-auto tw-h-8 tw-mr-3 tw-rounded-full\" />\n */}\n {contact?.name || '-'}\n </div>\n </th>\n\n <td className=\"tw-px-4 tw-py-2\">\n <div onClick={() => copyContact(contact?.contact)} className=\"hover:tw-cursor-pointer tw-inline-flex tw-items-center tw-bg-primary-100 tw-text-primary-800 tw-text-xs tw-font-medium tw-px-2 tw-py-0.5 tw-rounded tw-dark:bg-primary-900 tw-dark:text-primary-300\">\n {copiedContact === contact?.contact\n ?\n <svg class=\"tw-w-3.5 tw-h-3.5 tw-mr-1\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12Zm13.707-1.293a1 1 0 0 0-1.414-1.414L11 12.586l-1.793-1.793a1 1 0 0 0-1.414 1.414l2.5 2.5a1 1 0 0 0 1.414 0l4-4Z\" clip-rule=\"evenodd\"/>\n </svg>\n :\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"tw-h-3.5 tw-w-3.5 tw-mr-1\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M9 2a1 1 0 000 2h2a1 1 0 100-2H9z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M4 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v11a2 2 0 01-2 2H6a2 2 0 01-2-2V5zm3 4a1 1 0 000 2h.01a1 1 0 100-2H7zm3 0a1 1 0 000 2h3a1 1 0 100-2h-3zm-3 4a1 1 0 100 2h.01a1 1 0 100-2H7zm3 0a1 1 0 100 2h3a1 1 0 100-2h-3z\" />\n </svg>\n }\n\n {contact?.contact}\n </div>\n </td>\n\n <td className=\"tw-px-4 tw-py-2\">\n <div className=\"tw-flex tw-items-center\">\n <RatingStars key={`${contact?.contact}-rating-component`} contact={contact?.contact} rating={contact?.rating} onChange={setRating} savingRating={savingRating}/>\n </div>\n </td>\n\n <td className=\"tw-px-4 tw-py-2\">\n <NoteInput\n contactId={contact?.contact}\n initialNote={contact?.shortNote}\n saveNote={saveContactNote}\n />\n </td>\n\n <td className=\"tw-px-4 tw-py-2 hover:tw-cursor-pointer tw-font-medium tw-text-gray-900 tw-whitespace-nowrap tw-dark:text-white\" onClick={() => {setSelectedContact(contact?.contact); setShowDrawer(true);}}>\n <div className=\"tw-flex tw-items-center\">\n {/* dot color - check colors for actions */}\n <div className={`tw-w-3 tw-h-3 tw-mr-2 tw-bg-${parseAction(contact?.action)?.color}-500 tw-border tw-rounded-full`}></div>\n {parseAction(contact?.action)?.displayString}\n </div>\n </td>\n <td className=\"tw-px-4 tw-py-2 hover:tw-cursor-pointer\" onClick={() => {setSelectedContact(contact?.contact); setShowDrawer(true);}}>{formatDate(contact?.acquisitionDate)}</td>\n {contact?.retentionDayLeft &&\n <td className=\"tw-px-4 tw-py-2\">{contact?.retentionDayLeft}</td>\n }\n {/* quick actions - later use */}\n {/*\n <td className=\"tw-px-4 tw-py-2 tw-font-medium tw-text-gray-900 tw-whitespace-nowrap tw-dark:text-white\">\n <button id=\"dropdown-button-0\" type=\"button\" data-dropdown-toggle=\"dropdown-0\" className=\"tw-inline-flex tw-items-center tw-p-1 tw-text-sm tw-font-medium tw-text-center tw-text-gray-500 tw-rounded-lg hover:tw-text-gray-800 hover:tw-bg-gray-200 tw-dark:hover:bg-gray-700 focus:tw-outline-none tw-dark:text-gray-400 tw-dark:hover:text-gray-100\">\n <svg className=\"tw-w-5 tw-h-5\" aria-hidden=\"true\" fill=\"currentColor\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 10a2 2 0 11-4 0 2 2 0 014 0zM12 10a2 2 0 11-4 0 2 2 0 014 0zM16 12a2 2 0 100-4 2 2 0 000 4z\" />\n </svg>\n </button>\n <div id=\"dropdown-0\" className=\"tw-z-10 tw-hidden tw-bg-white tw-divide-y tw-divide-gray-100 tw-rounded tw-shadow tw-w-44 tw-dark:bg-gray-700 tw-dark:divide-gray-600\">\n <ul className=\"tw-py-1 tw-text-sm tw-text-gray-700 tw-dark:text-gray-200\" aria-labelledby=\"dropdown-button-0\">\n <li>\n <a href=\"#\" className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\">Show</a>\n </li>\n <li>\n <a href=\"#\" className=\"tw-block tw-px-4 tw-py-2 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:hover:text-white\">Edit</a>\n </li>\n </ul>\n <div className=\"tw-py-1\">\n <a href=\"#\" className=\"tw-block tw-px-4 tw-py-2 tw-text-sm tw-text-gray-700 hover:tw-bg-gray-100 tw-dark:hover:bg-gray-600 tw-dark:text-gray-200 tw-dark:hover:text-white\">Delete</a>\n </div>\n </div>\n </td>\n */}\n </tr>\n ))}\n\n </tbody>\n </table>\n </div>\n\n <nav className=\"tw-flex tw-flex-col tw-items-start tw-justify-between tw-p-4 tw-space-y-3 md:tw-flex-row md:tw-items-center md:tw-space-y-0\" aria-label=\"Table navigation\">\n <div className=\"tw-flex tw-items-center tw-space-x-3\">\n <label htmlFor=\"rows\" className=\"tw-text-xs tw-font-normal tw-text-gray-500 tw-dark:text-gray-400\">Rows per page</label>\n <select id=\"rows\" value={pageLimit} onChange={handleItemsPerPageChange} className=\"tw-bg-gray-50 tw-border tw-border-gray-300 tw-text-gray-900 tw-text-sm tw-rounded-lg focus:tw-ring-primary-500 focus:tw-border-primary-500 tw-block tw-py-1.5 tw-pl-3.5 tw-pr-6 tw-dark:bg-gray-700 tw-dark:border-gray-600 tw-dark:placeholder-gray-400 tw-dark:text-white tw-dark:focus:tw-ring-primary-500 tw-dark:focus:tw-border-primary-500\">\n <option value={10}>10</option>\n <option value={25}>25</option>\n <option value={50}>50</option>\n <option value={100}>100</option>\n </select>\n <div className=\"tw-text-xs tw-font-normal tw-text-gray-500 tw-dark:text-gray-400\">\n <span className=\"tw-font-semibold tw-text-gray-900 tw-dark:text-white\">{startIndex + 1} - {startIndex + currentContacts.length}</span>\n  \n of\n  \n <span className=\"tw-font-semibold tw-text-gray-900 tw-dark:text-white\">{totalContacts}</span>\n </div>\n </div>\n <ul className=\"tw-inline-flex tw-items-stretch tw--space-x-px\">\n <li>\n <button\n className=\"tw-flex tw-text-sm tw-w-20 tw-items-center tw-justify-center tw-h-full tw-py-1.5 tw-px-3 tw-ml-0 tw-text-gray-500 tw-bg-white tw-rounded-l-lg tw-border tw-border-gray-300 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-dark:bg-gray-800 tw-dark:border-gray-700 tw-dark:text-gray-400 tw-dark:hover:bg-gray-700 tw-dark:hover:text-white\"\n onClick={handlePrev}\n disabled={currentPage === 0}\n >\n Previous\n </button>\n </li>\n <li>\n <button\n className=\"tw-flex tw-text-sm tw-w-20 tw-items-center tw-justify-center tw-h-full tw-py-1.5 tw-px-3 tw-leading-tight tw-text-gray-500 tw-bg-white tw-rounded-r-lg tw-border tw-border-gray-300 hover:tw-bg-gray-100 hover:tw-text-gray-700 tw-dark:bg-gray-800 tw-dark:border-gray-700 tw-dark:text-gray-400 tw-dark:hover:bg-gray-700 tw-dark:hover:text-white\"\n onClick={handleNext}\n disabled={\n !hasMore && (currentPage + 1) * pageLimit >= contactsCache.length\n }\n >\n Next\n </button>\n </li>\n </ul>\n </nav>\n </div>\n </div>\n </section>\n </>\n );\n}\n\nexport default Contacts;\n","import React, { useState, useEffect } from \"react\";\nimport Overview from \"./Overview\";\nimport Contacts from \"./Contacts/Contacts\";\n\nfunction Leads() {\n const [showPlan, setShowPlan] = useState([]);\n\n useEffect(() => {\n document.title = \"Calendbook - Leads\";\n }, []);\n\n return (\n <>\n <Overview showPlan={showPlan} setShowPlan={setShowPlan} />\n <Contacts showPlan={showPlan} setShowPlan={setShowPlan} />\n </>\n );\n}\nexport default Leads;\n","import React, { useEffect, Fragment } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nfunction ScrollToTop({ history, children }) {\n useEffect(() => {\n const unlisten = history.listen(() => {\n window.scrollTo(0, 0);\n });\n return () => {\n unlisten();\n }\n }, [history]);\n\n return <Fragment>{children}</Fragment>;\n}\n\nexport default withRouter(ScrollToTop);\n","import React, { useEffect, useState } from \"react\";\nimport { UserProvider } from \"./UserContext\";\nimport { ThemeProvider } from \"./ThemeContext\";\nimport { useMediaQuery } from \"react-responsive\";\nimport {\n BrowserRouter as Router,\n Switch,\n Route,\n useLocation,\n} from \"react-router-dom\";\nimport ReactGA from \"react-ga4\";\nimport Logout from \"./Logout\";\nimport Privacy from \"./Privacy/Privacy\";\nimport Refund from \"./Refund/Refund\";\nimport Terms from \"./Terms/Terms\";\nimport StripeTerms from \"./Integrations/Stripe/Terms/StripeTerms\";\nimport Navbar_ from \"./Navbar/Navbar_\";\nimport Sidebar from \"./Sidebar/Sidebar\";\nimport _Footer from \"./Footer/_Footer\";\nimport _Home from \"./Home/_Home\";\nimport EventTypeCreator from \"./EventTypeCreator/_EventTypeCreator\";\nimport Booking from \"./BookingPage/Booking\";\nimport BookingConfirmation from \"./BookingConfirmation/BookingConfirmation\";\nimport _Settings from \"./Settings/_Settings\";\nimport _Landing from \"./Landing/_Landing\";\nimport _PublicEvents from \"./PublicEvents/_PublicEvents\";\nimport Integrations from \"./Integrations/_Integrations\";\nimport WixIntegrationLanding from \"./Integrations/Public/Wix/Wix\";\nimport Embed from \"./Embed/_Embed\";\nimport Team from \"./Team/_Team\";\nimport TeamInvitePage from \"./Team/InvitePage/InvitePage\";\nimport Agency from \"./Agency/Agency\";\nimport InvitePage from \"./Agency/InvitePage/InvitePage\";\nimport Upgrade from \"./Upgrade/Upgrade\";\nimport CalendarConnections from \"./CalendarConnections/_CalendarConnections\";\nimport Onboarding from \"./Onboarding/Onboarding\";\nimport Leads from \"./Leads/Leads\";\nimport ScrollToTop from \"./Utilities/ScrollToTop\";\nimport { useIframeStore } from \"./store\";\nimport { isIframe } from \"./Utilities/iframeUtils\";\nimport { setRootAsIframe } from \"./Utilities/iframeUtils\";\nimport { getIframeReferrer } from \"./Utilities/iframeUtils\";\nimport { Toaster } from \"react-hot-toast\";\nimport { initFlowbite } from \"flowbite\";\nimport auth from \"./Account/Auth\";\n\nfunction Analytics() {\n const location = useLocation();\n\n useEffect(() => {\n // Retrieve user properties\n const userId = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"username\"],\n fallback: null,\n });\n\n const userEmail = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"email\"],\n fallback: null,\n });\n\n const userPlanStatus = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"planStatus\", \"status\"],\n fallback: \"free\",\n });\n\n // Set user ID and properties if user is logged in\n if (userId) {\n // Set user ID\n ReactGA.set({ user_id: userId });\n\n // Set additional user properties\n ReactGA.gtag(\"set\", \"user_properties\", {\n email: userEmail,\n plan_status: userPlanStatus,\n });\n } else {\n // Clear user ID and properties if not logged in\n ReactGA.set({ user_id: null });\n // Optionally clear other user properties\n ReactGA.gtag(\"set\", \"user_properties\", {});\n }\n\n // Send pageview\n ReactGA.send({\n hitType: \"pageview\",\n page: location.pathname + location.search,\n title: document.title,\n });\n }, [location]);\n\n return null;\n}\n\nfunction App() {\n const isIframePage = isIframe();\n const isMobile = useMediaQuery({ query: \"(max-width: 767px)\" });\n const isOnboarding = window.location.pathname === \"/onboarding\";\n const shouldShowNavs = useIframeStore((state) => state.shouldShowNavs);\n const setShouldShowNavs = useIframeStore((state) => state.setShouldShowNavs);\n const [isSidebarExpanded, setIsSidebarExpanded] = useState(false);\n\n const username = auth.getProperty({\n storageKey: \"userSession\",\n path: [\"profileObj\", \"username\"],\n fallback: \"\",\n });\n\n useEffect(() => {\n // needed to load flowbite.js behaviours\n initFlowbite();\n\n // logic to show/hide navbar and footer\n if (isIframePage) {\n if (getIframeReferrer() !== \"wix-dashboard\") {\n setRootAsIframe();\n setShouldShowNavs(false);\n } else if (getIframeReferrer() === \"wix-dashboard\") {\n setShouldShowNavs(true);\n }\n } else if (isOnboarding) {\n setShouldShowNavs(false);\n } else {\n setShouldShowNavs(true);\n }\n }, [shouldShowNavs]);\n\n return (\n <>\n <UserProvider>\n <Router>\n <ScrollToTop>\n <ThemeProvider>\n {/* Main Flex Container */}\n <div className=\"tw-flex tw-flex-col tw-min-h-screen\">\n {/* Optional Navbar */}\n {shouldShowNavs && <Navbar_ />}\n {/* Content Area */}\n <div className=\"tw-flex tw-flex-1 tw-m-0\">\n {shouldShowNavs && (\n <Sidebar\n isSidebarExpanded={isSidebarExpanded}\n setIsSidebarExpanded={setIsSidebarExpanded}\n />\n )}\n <main\n className={`tw-flex-1 tw-transition-all tw-duration-300 ${\n !username ||\n window.location.pathname === \"/onboarding\" ||\n isMobile\n ? \"tw-ml-0\"\n : isSidebarExpanded\n ? \"tw-ml-64\"\n : \"tw-ml-16\"\n }`}\n >\n <Analytics />\n <Switch>\n <Route exact path=\"/\" component={_Home}></Route>\n <Route path=\"/login\" component={_Landing}></Route>\n <Route path=\"/logout\" component={Logout}></Route>\n <Route path=\"/onboarding\" component={Onboarding}></Route>\n <Route path=\"/upgrade\" component={Upgrade}></Route>\n <Route path=\"/settings\" component={_Settings}></Route>\n <Route path=\"/privacy\" component={Privacy}></Route>\n <Route path=\"/refund\" component={Refund}></Route>\n <Route path=\"/terms\" component={Terms}></Route>\n <Route\n path=\"/stripe-terms\"\n component={StripeTerms}\n ></Route>\n <Route\n path=\"/eventcreator\"\n component={EventTypeCreator}\n ></Route>\n <Route\n path=\"/eventeditor\"\n render={(props) => <EventTypeCreator {...props} />}\n ></Route>\n <Route\n exact\n path=\"/integrations/wix\"\n component={WixIntegrationLanding}\n ></Route>\n <Route\n path=\"/integrations\"\n component={Integrations}\n ></Route>\n <Route path=\"/embed\" component={Embed}></Route>\n <Route path=\"/leads\" component={Leads}></Route>\n <Route\n path=\"/calendarconnections\"\n component={CalendarConnections}\n ></Route>\n <Route exact path=\"/team\" component={Team}></Route>\n <Route\n exact\n path=\"/team/invitee\"\n component={TeamInvitePage}\n ></Route>\n <Route exact path=\"/agency\" component={Agency}></Route>\n <Route\n exact\n path=\"/agency/invitee\"\n component={InvitePage}\n ></Route>\n <Route\n exact\n path=\"/404\"\n component={() => \"404 NOT FOUND\"}\n />\n <Route exact path=\"/:user\" component={_PublicEvents} />\n <Route\n exact\n path=\"/:user/:event\"\n render={(props) => <Booking {...props} mode=\"book\" />}\n />\n <Route\n exact\n path=\"/operations/reschedule/:bookingid\"\n render={(props) => (\n <Booking {...props} mode=\"reschedule\" />\n )}\n />\n <Route\n exact\n path=\"/operations/delete/:bookingid\"\n render={(props) => <Booking {...props} mode=\"delete\" />}\n />\n <Route\n exact\n path=\"/operations/confirm/:bookingid\"\n render={(props) => <BookingConfirmation {...props} />}\n />\n <Route path=\"*\" component={() => \"404 NOT FOUND\"} />\n </Switch>\n </main>\n </div>\n\n {/* Footer */}\n {shouldShowNavs && <_Footer />}\n </div>\n </ThemeProvider>\n </ScrollToTop>\n </Router>\n </UserProvider>\n <Toaster />\n </>\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React, {Suspense} from 'react';\nimport ReactDOM from 'react-dom';\nimport * as Sentry from \"@sentry/react\";\nimport './i18n';\nimport './style.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { PostHogProvider} from 'posthog-js/react'\nimport auth from './Account/Auth';\nimport ReactGA from \"react-ga4\";\n\nconst postHogOptions = {\n api_host: process.env.REACT_APP_PUBLIC_POSTHOG_HOST,\n}\n\nReactGA.initialize(\"G-B6ZFCZBHLQ\");\n\nSentry.init({\n dsn: \"https://6374cff768cf406ab6d64d17f2ada9b1@o520706.ingest.sentry.io/5631429\",\n release: process.env.REACT_APP_RELEASE_VERSION,\n tracesSampleRate: 1.0,\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n integrations: [\n new Sentry.BrowserTracing(),\n new Sentry.Replay({\n maskAllText: false,\n blockAllMedia: false,\n }),\n ],\n});\n\nSentry.configureScope(function(scope) {\n if(auth.sessionExist()){\n const userInfo = {\n email: auth.getEmail(),\n username: auth.getUsername(),\n plan: auth.getRole(),\n timezone: auth.getTimezone()\n }\n\n scope.setUser(userInfo);\n }\n});\n\nReactDOM.render(\n <React.StrictMode>\n <Suspense fallback=\"Loading...\">\n <PostHogProvider \n apiKey={process.env.REACT_APP_PUBLIC_POSTHOG_KEY}\n options={postHogOptions}\n >\n <App/>\n </PostHogProvider>\n </Suspense>\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}