{"version":3,"sources":["webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/styles.module.scss","webpack:///./app/javascript/src/utils/ErrorBoundary.js","webpack:///./app/javascript/src/v4/App/components/Warning/styles.module.scss","webpack:///./app/javascript/src/utils/Alert/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/styles.module.scss","webpack:///./app/javascript/src/v4/App/components/Auth/Navbar/styles.module.scss","webpack:///./app/javascript/src/v4/App/api/facebook.js","webpack:///./app/javascript/src/v4/App/components/Profile/Navbar/styles.module.scss","webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/FacebookLogin.js","webpack:///./app/javascript/src/v4/App/components/StaticContent/CustomContent.js","webpack:///./app/javascript/src/v4/App/components/StaticContent/FinePrint.js","webpack:///./app/javascript/src/v4/App/components/StaticContent/Static.js","webpack:///./app/javascript/src/v4/App/components/StaticContent/index.js","webpack:///./app/javascript/src/v4/App/components/Container/index.js","webpack:///./app/javascript/src/v4/App/Overlay.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/Ineligible.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/ZipCode.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/utils.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/States.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/Store.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/Age.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/EligibilitySurvey.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/DynamicValidator.js","webpack:///./app/javascript/src/v4/App/components/Eligibility/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/LoginQuestion.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/TermsCheckbox.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/EmailLookup.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/EnterEmail/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/ForgotPassword/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/ActivateAccount/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/ResetPassword/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/SignIn/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/SignUp/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Login/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Navbar/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/components/ConfirmPhoneButton/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/components/ReconfirmPhoneButton/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/sharedProps.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/Confirm.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/NameCorrect.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/EmailCorrect.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/Reconfirm.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/Verify.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/ChooseNotification.js","webpack:///./app/javascript/src/v4/App/components/Auth/Phone/index.js","webpack:///./app/javascript/src/v4/App/components/Auth/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/Navbar/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/Orders/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/ViewOrdersButton.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/LogoutButton.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/DeleteMyAccountLink.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/SetPhoneNumber.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/WhenAuthenticated.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/WhenNotAuthenticated.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePage/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/ProfilePreferences/index.js","webpack:///./app/javascript/src/v4/App/components/Profile/Verify.js","webpack:///./app/javascript/src/v4/App/components/Profile/index.js","webpack:///./app/javascript/src/v4/App/routes.js","webpack:///./app/javascript/src/v4/App/AppContainer.js","webpack:///./app/javascript/src/v4/App/components/Warning/index.js","webpack:///./app/javascript/src/v4/App/experiments/index.js","webpack:///./app/javascript/src/v4/App/index.js","webpack:///./app/javascript/packs/v4.js"],"names":["module","exports","ErrorMessage","styled","h4","FeedbackLink","a","ErrorBoundary","props","state","eventId","error","hasError","cookieError","message","includes","errorInfo","Sentry","scope","setExtras","setState","this","errorMessage","className","href","onClick","title","children","Component","Alert","context","useContext","setAlert","getAlert","open","type","expire","isSuccess","expiration","onAnimationEnd","endingState","success","role","FacebookApi","Promise","resolve","window","FB","addEventListener","JSON","parse","document","getElementById","dataset","fbOptions","whenFbReady","then","getLoginStatus","response","scopes","basic","reject","login","authResponse","permission","api","thePermission","data","find","p","status","checkPermissions","next","link","ref","quote","ui","method","display","QUERY","gql","FacebookLogin","parentDisabled","disabled","dealHashid","useParams","dealId","useQuery","variables","loading","history","useHistory","useState","setDisabled","connected","setConnected","UIContext","quikly","facebookLoginButtonText","segmentId","onSuccess","BaseApi","get","json","active","location","redirect_path","push","useEffect","inFbAuthCallback","device","isUIWebView","search","match","FBWrapper","block","facebook","iconName","e","preventDefault","redirectUri","encodeURIComponent","host","process","env","FACEBOOK_APP_ID","CUSTOM_CONTENT_QUERY","CustomContent","contentKey","Query","query","hashid","content","Navbar","id","dangerouslySetInnerHTML","__html","propTypes","string","isRequired","FINE_PRINT_QUERY","FinePrintComponent","finePrint","CONTENT_QUERY","StaticComponent","page","staticContent","Footer","LegalLinks","defaultProps","StaticContent","FinePrint","Static","Container","useLocation","modalOpen","onPostSignUp","pathname","classes","classNames","inlineStyles","useSpring","opacity","position","top","style","as","animated","div","Overlay","overlayOn","overlayClasses","zIndex","GET_STUFF","SAVE_EMAIL","ReactRouterPropTypes","Ineligible","submitting","onError","networkError","extra","component","afterIneligible","soldOutUrl","params","afterEmailCaptured","setTimeout","emailCaptureForm","buttonText","merchantName","brand","name","Mutation","mutation","onCompleted","saveEmail","onSubmit","email","emailInput","value","placeholder","autoComplete","inputRef","el","required","FooterButton","clear","standardContent","linkTarget","target","textDecoration","captureIneligible","contextType","VERIFY_ZIP","ZipCode","input","graphQLErrors","toString","verifyZip","eligibilityTitle","eligibilitySubtitle","zipCode","pattern","goBack","withRouter","US_STATES","getSelectValue","tuple","getSelectDisplay","VERIFY_STATE","States","handleUSStateChange","selectedStateId","verifyState","closing","onChange","collection","getValue","getDisplay","collectionName","PureComponent","VERIFY_STORE","COPY_QUERY","STORE_QUERY","InputWrapper","setZipCode","selectedStoreId","setSelectedStoreId","stores","setStores","submittingStore","setSubmittingStore","useLazyQuery","edges","length","map","node","sort","b","distance","onStoresFetched","storeLocations","storeQuery","verifyStore","useMutation","subtitle","width","showAllStores","selectionRequired","storeId","VERIFY_AGE","day","setDay","year","setYear","month","setMonth","disableButton","dob","checkEligibility","mutationResult","fetchingCustomContent","errorFetchingCustomContent","captureException","marginBottom","SUBMIT_ELIGIBILITY_SURVEY","ELIGIBILITY_SURVEY_QUERY","EligibilitySurvey","submitEligibilitySurvey","errors","viewer","Survey","submitSurvey","DynamicValidator","eligibilityGate","Eligibility","path","LoginQuestion","updateParent","setValue","setError","loginQuestionType","loginQuestionLegal","loginCheckbox","checked","BaseAPI","post","login_question","ok","styles","fontSize","lineHeight","key","checkbox","legalText","TermsCheckbox","EmailLookup","clearAlert","setEmail","linkToSetPassword","setLinkToSetPassword","gateValid","setGateValid","suggestion","useMailCheck","termsOnLogin","questionOnLogin","test","useAuth","signIn","isDemo","loginButtonText","disableFbLogin","onSignIn","viewerSignIn","returnTo","disablePasswords","forEach","onSignInError","trim","to","focus","tabIndex","full","EnterEmail","loginTitle","loginSubtitle","hr","LoginLegal","MUTATION","ForgotPassword","incomingEmail","submit","ActivateAccount","sendActivationEmail","msg","ResetPassword","password","setPassword","passwordConfirmation","setPasswordConfirmation","token","queryString","reset_password_token","resetPasswordToken","resetPassword","minLength","SignIn","rememberMe","setRememberMe","readOnly","defaultChecked","SignUp","inReviewer","useReviewer","useReducer","stateChange","firstName","lastName","user","setUser","viewerSignUp","signUpTitle","signUpSubtitle","signUpButtonText","handleOnChange","actionLabel","Login","exact","back","logoLeft","logoMiddle","CONFIRM_PHONE","ConfirmPhoneButton","confirmPhone","confirmed","smsLogId","isEmbedded","onPhoneAlreadyTaken","selectedMethod","closeModal","confirmPlea","plea","fromEmbedded","handleTracking","componentForTracking","M","track","properties","gaAction","phone","submitButtonText","phoneNumber","form","bool","func","RECONFIRM_PHONE","ReconfirmPhoneButton","reverify","reconfirmPhone","notifySms","shape","routerPropTypes","CONFIRM_COPY_QUERY","Confirm","onEmailChange","onInputChange","event","numbersOnly","replace","handleSelector","onSelection","onQueryCompleted","parsed","notification_choice","inputError","options","text","isBeforePlea","keyForConfirmTitle","keyForConfirmSubtitle","keyForConfirmQuestion","confirmTitle","confirmSubtitle","confirmQuestion","confirmEmail","confirmTextMessage","rewardLabel","EditableField","objectId","btoa","attribute","toCamel","label","phoneNumberInput","maxLength","Object","values","selected","existingUserWithEmailNotifications","phoneOptional","sharedProps","NameCorrect","updateUser","signupTitle","signupSubtitle","EmailCorrect","newEmail","setNewEmail","redirectToPostSignUp","setRedirectToPostSignUp","promptForEmailPostSignUp","emailCorrectTitle","emailCorrectSubtitle","skipEmail","CHECK_IF_ALREADY_OPTED_IN","RECONFIRM_AND_SUBSCRIBE","RECONFIRM","Reconfirm","setSubscribed","subscribed","list","handleInputChange","offerListOptIn","collectItsBackSmsReconfirm","subscribeToSmsList","slice","split","keyVal","pair","formattedPhoneNumber","formatPhoneNumber","contactMethod","source","checkBoxLabel","titleText","subtitleText","confirmAndSave","letterSpacing","listSource","listContactSource","subscribe","updatingNumber","WANT_IN_QUERY","VERIFY_AND_SUBSCRIBE","VERIFY","GET_SMS_STATUS","VERIFY_WITHOUT_PHONE","Verify","num","inputCode","skipNotificationPreference","incompletePlea","hasPostSignUpContent","ACTION_DATA","pollForSmsStatus","client","qid","checkForSmsCompleted","smsLog","deliveryFailed","domain","deal","collect_its_back_sms_verify","override","enabled","collect_its_back_sms","phoneColor","color","wantIn","pendingPhone","merchantId","checkOptInLoading","checkOptInError","RouterButton","verifyWithoutPhone","code","verifyAndSubscribe","totalDigits","formatPhone","pipe","withSubmitHandlers","connection","CHOOSE_NOTIFICATION_QUERY","SKIP_PHONE_MUTATION","SKIP_PHONE_AND_UPDATE_USER_MUTATION","ChooseNotificationScreen","removeEverythingAfterAVariable","handleRedirect","canReceiveEmail","userHasValidEmail","disabledButtonLogic","skipPhone","Phone","ChooseNotification","UpdatePreference","render","Auth","console","log","backgroundImage","backgroundImages","navbar","mobileUrl","backButton","GET_ORDERS","Orders","orders","brandSlug","order","atob","receiptToken","src","image","url","alt","itemFullDescription","ViewOrdersButton","LogoutButton","signOut","DeleteMyAccountLink","deleteAccount","confirm","SetPhoneNumber","WhenAuthenticated","toAdd","res","useEmailOnly","noLiveRelease","showPhone","phoneForDisplay","links","deleteLink","WhenNotAuthenticated","sendAuthEmail","fullName","phoneNumberForDisplay","Profile","authenticated","ProfilePreferences","setPhone","needToVerifyNumber","reduce","acc","trueValue","setCode","formattedPhone","ProfilePage","DashboardRoutes","React","lazy","AppRoutes","Landing","CampaignClosed","PostSignUp","fallback","AppContainer","fullscreenContainer","overrideEnabled","fontUrl","cssId","head","getElementsByTagName","item","createElement","rel","media","appendChild","backgroundImg","fullScreen","Modal","AlertNotification","WarningComponent","setHeight","useWarning","settings","borderDims","useRef","area","clientHeight","textDims","textAreaRatio","transformScale","x","y","windowWidth","windowWidthIntervalId","timeoutId","warningRef","borderRef","textRef","showWarning","slug","warningText","warningSubtext","warningTop","getElementDims","elem","getComputedStyle","rect","getBoundingClientRect","offsetWidth","clientWidth","computedWidth","Math","floor","computedHeight","height","parseFloat","getPropertyValue","recalculate","current","changeTextSize","delta","borderWidth","changeTextScale","axis","navigator","userAgent","indexOf","transform","checkTextFit","updateHeights","offsetHeight","setAttribute","setPadding","onResize","clearTimeout","useLayoutEffect","pageBody","body","setInterval","removeEventListener","clearInterval","warning","warningContainer","subtextTop","warningWrapper","h1","subtextBottom","trigger","Warning","element","setElement","ReactDOM","createPortal","experimentDebugger","enable","emitter","addPlayListener","experimentName","variantName","gaLabel","addWinListener","store","setDomainState","actions","rest","reviewerOnlyRoutes","ReviewerRedirect","ReviewerRedirectV2","authToken","undefined","CookiesProvider","UIProvider","mountComponent","App"],"mappings":"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","file":"js/v4-e02b8d75ddda52200c59.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"EnterEmail\":\"q_1IIZE\",\"hr\":\"q_2Oub8\",\"checkbox\":\"q_1zXX0\",\"legalText\":\"q_3CRGr\",\"LoginQuestion\":\"q_3ozHG\",\"TermsCheckbox\":\"q_2m_ns\"};","import React, { Component } from 'react';\nimport { Container } from 'shared/components/campaign';\nimport * as Sentry from '@sentry/browser';\nimport styled from 'styled-components';\n\nconst ErrorMessage = styled.h4`\n line-height: 1.5;\n`;\n\nconst FeedbackLink = styled.a`\n color: #70758f;\n`;\n\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.state = { eventId: null };\n }\n\n static getDerivedStateFromError(error) {\n const cookieError = error.message.includes('Unable to set cookie');\n return { hasError: true, cookieError };\n }\n\n componentDidCatch(error, errorInfo) {\n Sentry.withScope(scope => {\n scope.setExtras(errorInfo);\n const eventId = Sentry.captureException(error);\n this.setState({ eventId });\n });\n }\n\n render() {\n const { hasError, cookieError, eventId } = this.state;\n\n if (hasError) {\n const errorMessage = cookieError\n ? 'This site requires cookies in order to work properly. Please check your browser settings and try again. '\n : 'Oh no! We ran into an problem loading this screen. Our team has been notified. Please try reloading the page. ';\n return (\n \n \n {errorMessage}\n {\n Sentry.showReportDialog({\n eventId: eventId,\n title: 'Tell us more about what happened.',\n });\n return false;\n }}\n >\n Report feedback.\n \n \n \n );\n }\n\n // when there's not an error, render children untouched\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"warning\":\"q_a9yRs\",\"warningContainer\":\"q_33ZG6\",\"warningWrapper\":\"q_2whi8\",\"h1\":\"q_KjlLu\",\"subtextTop\":\"q_3VM_A\",\"subtextBottom\":\"q_Df4Vw\",\"trigger\":\"q_3-9WB\"};","import React, { useContext } from 'react';\nimport { Alert as UIKitAlert } from 'shared/components/campaign';\n\nconst Alert = ({ context }) => {\n const { setAlert, getAlert } = useContext(context);\n\n const { open, message, type, expire } = getAlert();\n const isSuccess = type === 'success';\n const expiration = isSuccess || expire ? 5000 : 0;\n const onAnimationEnd = endingState =>\n !endingState.open && setAlert({ open: false });\n const props = {\n open,\n type,\n expiration,\n onAnimationEnd,\n error: !isSuccess,\n success: isSuccess,\n role: 'alert',\n };\n\n return (\n \n {message}\n \n );\n};\n\nexport default Alert;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"links\":\"q_3lRHt\",\"deleteLink\":\"q_9f3Zo\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"logoLeft\":\"q_ANrzq\",\"logoMiddle\":\"q_38OI4\",\"back\":\"q_2c3KB\"};","class FacebookApi {\n static whenFbReady() {\n return new Promise(resolve => {\n if (window.FB) {\n resolve();\n } else {\n window.addEventListener('fbAsyncInit', resolve, false);\n }\n });\n }\n\n // kinda funny to return in a promise,\n // but makes it easier to replace with api in future.\n static getOptions() {\n return new Promise(resolve => {\n const options = JSON.parse(\n document.getElementById('fb-root').dataset.fbOptions,\n );\n resolve(options);\n });\n }\n\n static getLoginStatus() {\n return new Promise(resolve => {\n FacebookApi.whenFbReady().then(() => {\n if (process.env.RAILS_ENV === 'test') {\n resolve(false);\n } else {\n FB.getLoginStatus(response => {\n resolve(response);\n }, true);\n }\n });\n });\n }\n\n static login(scope = 'basic') {\n const scopes = {\n basic: 'email',\n };\n\n return new Promise((resolve, reject) => {\n FacebookApi.whenFbReady().then(() => {\n FB.login(\n response => {\n if (response.authResponse) {\n resolve(response);\n } else {\n reject(response);\n }\n },\n { scope: scopes[scope] },\n );\n });\n });\n }\n\n static checkPermissions(permission) {\n return new Promise((resolve, reject) => {\n FacebookApi.whenFbReady().then(() => {\n FB.api('/me/permissions', response => {\n const thePermission =\n response.data &&\n response.data.find(p => p.permission === permission);\n if (thePermission && thePermission.status === 'granted') {\n resolve();\n } else {\n reject();\n }\n });\n });\n });\n }\n\n // IMPORTANT: this must not not be called from an asynchrous callback, otherwise FB login popup may be silently blocked\n static getPublishPermissions() {\n return new Promise((resolve, reject) => {\n FacebookApi.login('publish').then(() => {\n FacebookApi.checkPermissions('publish_actions').then(resolve, reject);\n }, reject);\n });\n }\n\n static loadFriends(next = '/me/taggable_friends?limit=500') {\n return new Promise(resolve => {\n FacebookApi.whenFbReady().then(() => {\n FB.api(next, response => {\n resolve(response);\n });\n });\n });\n }\n\n static wallPost({ link, message, ref }) {\n return new Promise((resolve, reject) => {\n FacebookApi.whenFbReady().then(() => {\n FB.api(`/me/feed`, 'post', { link, message, ref }, response => {\n if (response.error) {\n reject(response);\n } else {\n resolve(response);\n }\n });\n });\n });\n }\n\n static openWallPostModal({ href, quote }) {\n return new Promise(resolve => {\n FacebookApi.whenFbReady().then(() => {\n FB.ui(\n {\n method: 'share',\n href,\n quote,\n display: 'popup', // avoid shrinking iframe fb bug\n },\n resolve,\n );\n });\n });\n }\n\n static openSendModal({ link }) {\n return new Promise(resolve => {\n FacebookApi.whenFbReady().then(() => {\n FB.ui(\n {\n method: 'send',\n link,\n display: 'popup',\n },\n resolve,\n );\n });\n });\n }\n}\n\nexport default FacebookApi;\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"navbar\":\"q_14d4n\"};","import React, { useEffect, useContext, useState } from 'react';\nimport { Button } from 'shared/components/campaign';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client';\nimport { useHistory, useParams } from 'react-router-dom';\nimport device from 'utils/device';\nimport FBWrapper from 'v4/App/api/facebook';\nimport BaseApi from 'utils/api/BaseApi';\nimport { UIContext } from 'v4/App/providers/UIProvider';\n\nconst QUERY = gql`\n query facebookLogin($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n facebookLoginButtonText: customContentFor(key: \"login_fb_button\")\n segmentId\n }\n }\n`;\n\nexport default function FacebookLogin({ disabled: parentDisabled }) {\n const { dealId: dealHashid } = useParams();\n const { data, loading } = useQuery(QUERY, {\n variables: { dealHashid },\n });\n const history = useHistory();\n const [disabled, setDisabled] = useState(false);\n const [connected, setConnected] = useState(false);\n const { setAlert } = useContext(UIContext);\n\n const {\n quikly: { facebookLoginButtonText, segmentId },\n } = data || {\n quikly: {\n facebookLoginButtonText: 'Log In With Facebook',\n segmentId: null,\n },\n };\n\n const onSuccess = () => {\n BaseApi.get(\n `/users/auth/facebook/callback?source=${dealHashid}&segment_id=${segmentId}`,\n )\n .then(\n ({ json }) => {\n if (json.active) {\n window.location.href = json.redirect_path;\n } else {\n history.push(`/q/${dealHashid}/users/sign_up`);\n }\n },\n ({ json }) => {\n setDisabled(false);\n setConnected(false);\n setAlert({\n type: 'error',\n message: json.error,\n });\n },\n )\n .catch(() => {\n setAlert({\n type: 'error',\n message: 'Could not log in with facebook, sorry!',\n });\n });\n };\n\n const handleClick = e => {\n e.preventDefault();\n setDisabled(true);\n\n // TODO: BEFORE MERGE\n // if(answered_login_question = false) { return }\n\n if (device.isUIWebView()) {\n const redirectUri = encodeURIComponent(\n `https://${document.location.host}/users/login`,\n );\n window.location = `https://m.facebook.com/dialog/oauth?client_id=${process.env.FACEBOOK_APP_ID}&redirect_uri=${redirectUri}&scope=email&state=${dealHashid}`;\n return;\n }\n\n if (connected) {\n onSuccess();\n } else {\n FBWrapper.login()\n .then(onSuccess, () => {\n setDisabled(false);\n })\n .catch(() => {\n setDisabled(false);\n });\n }\n };\n\n useEffect(() => {\n const inFbAuthCallback =\n device.isUIWebView() &&\n window.location.search &&\n window.location.search.match('code');\n\n if (inFbAuthCallback) {\n setDisabled(true);\n }\n\n FBWrapper.getLoginStatus().then(response => {\n if (response.status === 'connected' && inFbAuthCallback) {\n onSuccess(response);\n return;\n }\n\n setConnected(response.status === 'connected');\n setDisabled(false);\n });\n }, []);\n\n return (\n \n {facebookLoginButtonText}\n \n );\n}\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { gql } from '@apollo/client';\nimport { Query } from '@apollo/client/react/components';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport Navbar from './Navbar';\n\nconst CUSTOM_CONTENT_QUERY = gql`\n query customContent($hashid: String!, $contentKey: String!) {\n quikly(hashid: $hashid) {\n id\n content: customContentFor(key: $contentKey)\n }\n }\n`;\n\nconst CustomContent = ({ dealId, contentKey }) => (\n \n {({ loading, error, data }) => {\n if (loading) return ;\n if (error) return

Sorry, this content could not be loaded.

;\n const {\n quikly: { content },\n } = data;\n return (\n <>\n \n \n
\n
\n \n );\n }}\n \n);\n\nCustomContent.propTypes = {\n dealId: string.isRequired,\n contentKey: string.isRequired,\n};\n\nexport default CustomContent;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport Navbar from './Navbar';\n\n// TODO the fine_print column on deal should be converted to a campaign customization\n// and then we can use the same CustomContent component.\nconst FINE_PRINT_QUERY = gql`\n query finePrint($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n finePrint\n }\n }\n`;\n\nconst FinePrintComponent = ({ dealId }) => (\n \n {({ loading, error, data }) => {\n if (loading) return ;\n if (error) return

Sorry, this content could not be loaded.

;\n const {\n quikly: { finePrint: content },\n } = data;\n return (\n <>\n \n \n
\n
\n \n );\n }}\n
\n);\n\nFinePrintComponent.propTypes = {\n dealId: string.isRequired,\n};\n\nexport default FinePrintComponent;\n","import React from 'react';\nimport { string } from 'prop-types';\nimport { Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport Footer from 'v4/App/components/Footer';\nimport LegalLinks from 'v4/App/components/LegalLinks';\n\nconst CONTENT_QUERY = gql`\n query staticContent($page: String!, $hashid: String) {\n staticContent(page: $page, hashid: $hashid) {\n content\n }\n }\n`;\n\nconst StaticComponent = ({ dealId, page }) => (\n \n {({ loading, error, data }) => {\n if (loading) return ;\n if (error) return

Sorry, this content could not be loaded.

;\n const {\n staticContent: { content },\n } = data;\n return (\n <>\n
\n
\n
\n
\n \n
\n \n );\n }}\n \n);\n\nStaticComponent.propTypes = {\n dealId: string,\n page: string.isRequired,\n};\n\nStaticComponent.defaultProps = {\n dealId: null,\n};\n\nexport default StaticComponent;\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport CustomContent from './CustomContent';\nimport FinePrintComponent from './FinePrint';\nimport StaticComponent from './Static';\nimport './styles.scss';\n\nconst StaticContent = () => {\n const { dealId, page } = useParams();\n\n if (page === 'terms' && dealId) {\n return ;\n }\n\n if (page === 'faqs' && dealId) {\n return ;\n }\n\n return ;\n};\n\nexport default StaticContent;\n","import classNames from 'classnames/bind';\nimport React, { useContext } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Container as UIContainer } from 'shared/components/campaign/Container';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { useSpring, animated } from 'react-spring/web.cjs';\n\nexport default function Container({ children }) {\n const location = useLocation();\n const {\n state: { modalOpen },\n } = useContext(UIContext);\n\n // TODO: why the special case for post_sign_up?\n const onPostSignUp = location.pathname.includes('post_sign_up');\n const classes = classNames({\n 'container--postSignUp': onPostSignUp,\n });\n\n const inlineStyles = useSpring({\n opacity: !modalOpen ? 1 : 0,\n position: !modalOpen ? 'relative' : 'absolute',\n top: 0,\n });\n\n return (\n \n {children}\n \n );\n}\n","import React, { useContext } from 'react';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport classNames from 'classnames/bind';\n\nconst Overlay = () => {\n const {\n state: { overlayOn, modalOpen },\n } = useContext(UIContext);\n\n const overlayClasses = classNames({\n Overlay: true,\n 'Overlay--on': overlayOn,\n 'Overlay--loading': overlayOn,\n 'Overlay--modalOpen': modalOpen, // styled with brand css\n });\n\n return (\n
\n \n
\n );\n};\n\nexport default Overlay;\n","import React, { Component } from 'react';\nimport { Query, Mutation } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport * as Sentry from '@sentry/browser';\nimport ReactRouterPropTypes from 'react-router-prop-types';\nimport { Button, Input } from 'shared/components/campaign';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport FooterButton from '../FooterButton';\n\nconst GET_STUFF = gql`\n query GetStuffForIneligible($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n title: customContentFor(key: \"ineligible_title\")\n message: customContentFor(key: \"ineligible_message\")\n buttonText: customContentFor(key: \"ineligible_button\")\n brand {\n id\n name\n }\n soldOutUrl\n captureIneligible\n }\n }\n`;\n\nconst SAVE_EMAIL = gql`\n mutation CaptureIneligibleEmail($dealHashid: String!, $email: String!) {\n addToIneligibleList(input: { dealHashid: $dealHashid, email: $email }) {\n clientMutationId\n }\n }\n`;\n\nconst propTypes = {\n match: ReactRouterPropTypes.match.isRequired,\n};\n\nexport class Ineligible extends Component {\n state = {\n submitting: false,\n };\n\n onError = ({ networkError, message }) => {\n if (networkError) {\n Sentry.captureException(message, {\n extra: { component: 'Ineligible' },\n });\n }\n this.setState({ submitting: false });\n this.context.setAlert({ message });\n };\n\n afterIneligible = ({ soldOutUrl }) => {\n const {\n props: {\n match: {\n params: { dealId },\n },\n },\n } = this;\n window.location = soldOutUrl || `/q/${dealId}`;\n };\n\n afterEmailCaptured = data => {\n this.context.setAlert({\n type: 'success',\n message: `Great! You will be notified for future campaigns. Redirecting...`,\n });\n setTimeout(() => this.afterIneligible(data), 3000);\n };\n\n emailCaptureForm = ({\n quikly: {\n message,\n buttonText,\n soldOutUrl,\n brand: { name: merchantName },\n },\n }) => {\n const {\n state: { submitting },\n props: {\n match: {\n params: { dealId: dealHashid },\n },\n },\n } = this;\n return (\n {\n this.afterEmailCaptured({ soldOutUrl });\n }}\n onError={this.onError}\n >\n {saveEmail => (\n {\n e.preventDefault();\n saveEmail({\n variables: { email: this.emailInput.value, dealHashid },\n });\n }}\n >\n

\n {message ? (\n
\n ) : (\n `Sign up to get notified about future ${merchantName} campaigns.`\n )}\n

\n {\n this.emailInput = el;\n }}\n required\n />\n \n \n
\n {\n this.afterIneligible({ soldOutUrl });\n }}\n >\n No Thanks\n \n
\n \n )}\n \n );\n };\n\n standardContent = ({ quikly: { message, buttonText, soldOutUrl } }) => {\n const linkTarget =\n soldOutUrl && soldOutUrl.includes('www.quikly') ? '_self' : '_blank';\n return (\n <>\n

\n {soldOutUrl && (\n \n \n \n \n
\n
\n )}\n \n );\n };\n\n render() {\n const {\n props: {\n match: {\n params: { dealId: hashid },\n },\n },\n } = this;\n\n return (\n \n {({ loading, error, data }) => {\n if (loading) {\n return Loading...;\n }\n if (error) {\n Sentry.captureException(error, {\n extra: { component: 'Ineligible' },\n });\n return {error};\n }\n const {\n quikly: { captureIneligible, title },\n } = data;\n\n const TheContent = () => {\n if (captureIneligible) {\n return this.emailCaptureForm(data);\n }\n return this.standardContent(data);\n };\n\n return (\n
\n

{title}

\n \n
\n );\n }}\n
\n );\n }\n}\nIneligible.propTypes = propTypes;\nIneligible.contextType = UIContext;\n\nexport default Ineligible;\n","import React, { useContext } from 'react';\nimport { Mutation, Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport * as Sentry from '@sentry/browser';\nimport ReactRouterPropTypes from 'react-router-prop-types';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router';\nimport { Button, Input, LoadingAnimation } from 'shared/components/campaign';\nimport { connection, pipe } from 'v4/App/utils';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport FooterButton from '../FooterButton';\n\nexport const VERIFY_ZIP = gql`\n mutation CheckEligibility($dealHashid: String!, $zipCode: String!) {\n checkEligibility(input: { dealHashid: $dealHashid, zipCode: $zipCode }) {\n clientMutationId\n }\n }\n`;\n\nconst QUERY = gql`\n query eligibilityText($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n eligibilityTitle: customContentFor(key: \"eligibility_title\")\n eligibilitySubtitle: customContentFor(key: \"eligibility_subtitle\")\n }\n }\n`;\n\nconst propTypes = {\n match: ReactRouterPropTypes.match.isRequired,\n history: ReactRouterPropTypes.history.isRequired,\n};\n\nexport const ZipCode = ({\n history,\n match: {\n params: { dealId },\n },\n}) => {\n const { setAlert } = useContext(UIContext);\n let input;\n\n const onCompleted = () => {\n // HACK: currently we need to do a pull page reload because of\n // all the props being loaded on the initial load\n window.location = `/q/${dealId}/dashboard`;\n };\n const onError = ({ graphQLErrors, networkError }) => {\n if (graphQLErrors) {\n history.push(`/q/${dealId}/want_in/ineligible`);\n } else if (networkError) {\n setAlert({ message: networkError.toString() });\n Sentry.captureException(networkError.toString(), {\n extra: { component: 'ZipCode' },\n });\n }\n };\n\n return (\n \n {verifyZip => (\n \n {({ loading, error, data }) => {\n if (loading) {\n return ;\n }\n\n if (error) {\n Sentry.captureException(error, {\n extra: { component: 'Eligibility States Screen' },\n });\n return {error};\n }\n\n const {\n quikly: { eligibilityTitle, eligibilitySubtitle },\n } = data;\n return (\n <>\n

{eligibilityTitle}

\n

\n {eligibilitySubtitle ||\n 'Please confirm your eligibility by providing your zip code below.'}\n

\n {\n e.preventDefault();\n verifyZip({\n variables: { dealHashid: dealId, zipCode: input.value },\n });\n }}\n >\n {\n input = ref;\n }}\n required\n />\n\n \n \n \n \n \n );\n }}\n
\n )}\n
\n );\n};\n\nZipCode.propTypes = propTypes;\nexport default withRouter(ZipCode);\n","export const US_STATES = [\n ['Alabama', 'AL'],\n ['Alaska', 'AK'],\n ['Arizona', 'AZ'],\n ['Arkansas', 'AR'],\n ['California', 'CA'],\n ['Colorado', 'CO'],\n ['Connecticut', 'CT'],\n ['Delaware', 'DE'],\n ['District of Columbia', 'DC'],\n ['Florida', 'FL'],\n ['Georgia', 'GA'],\n ['Hawaii', 'HI'],\n ['Idaho', 'ID'],\n ['Illinois', 'IL'],\n ['Indiana', 'IN'],\n ['Iowa', 'IA'],\n ['Kansas', 'KS'],\n ['Kentucky', 'KY'],\n ['Louisiana', 'LA'],\n ['Maine', 'ME'],\n ['Maryland', 'MD'],\n ['Massachusetts', 'MA'],\n ['Michigan', 'MI'],\n ['Minnesota', 'MN'],\n ['Mississippi', 'MS'],\n ['Missouri', 'MO'],\n ['Montana', 'MT'],\n ['Nebraska', 'NE'],\n ['Nevada', 'NV'],\n ['New Hampshire', 'NH'],\n ['New Jersey', 'NJ'],\n ['New Mexico', 'NM'],\n ['New York', 'NY'],\n ['North Carolina', 'NC'],\n ['North Dakota', 'ND'],\n ['Ohio', 'OH'],\n ['Oklahoma', 'OK'],\n ['Oregon', 'OR'],\n ['Pennsylvania', 'PA'],\n ['Puerto Rico', 'PR'],\n ['Rhode Island', 'RI'],\n ['South Carolina', 'SC'],\n ['South Dakota', 'SD'],\n ['Tennessee', 'TN'],\n ['Texas', 'TX'],\n ['Utah', 'UT'],\n ['Vermont', 'VT'],\n ['Virginia', 'VA'],\n ['Washington', 'WA'],\n ['West Virginia', 'WV'],\n ['Wisconsin', 'WI'],\n ['Wyoming', 'WY'],\n];\n\nexport const getSelectValue = tuple => tuple[1];\nexport const getSelectDisplay = tuple => tuple[0];\n","import React, { PureComponent } from 'react';\nimport { Mutation, Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport * as Sentry from '@sentry/browser';\nimport ReactRouterPropTypes from 'react-router-prop-types';\nimport { withRouter } from 'react-router';\nimport { Button, LoadingAnimation, Select } from 'shared/components/campaign';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { getSelectValue, getSelectDisplay, US_STATES } from './utils';\nimport FooterButton from '../FooterButton';\n\nexport const VERIFY_STATE = gql`\n mutation CheckEligibility($dealHashid: String!, $state: String!) {\n checkEligibility(input: { dealHashid: $dealHashid, state: $state }) {\n clientMutationId\n }\n }\n`;\n\nconst QUERY = gql`\n query eligibilityStates($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n eligibilityTitle: customContentFor(key: \"eligibility_title\")\n eligibilitySubtitle: customContentFor(key: \"eligibility_subtitle\")\n }\n }\n`;\n\nclass States extends PureComponent {\n static contextType = UIContext;\n\n constructor(props) {\n super(props);\n this.state = {\n selectedStateId: null,\n };\n }\n\n handleUSStateChange = ({ target: { value } }) => {\n this.setState({\n selectedStateId: value,\n });\n };\n\n render() {\n const {\n history,\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const { setAlert } = this.context;\n\n const onCompleted = () => {\n // HACK: currently we need to do a pull page reload because of\n // all the props being loaded on the initial load\n window.location = `/q/${dealId}/dashboard`;\n };\n const onError = ({ graphQLErrors, networkError }) => {\n if (graphQLErrors) {\n history.push(`/q/${dealId}/want_in/ineligible`);\n } else if (networkError) {\n setAlert({ message: networkError.toString() });\n Sentry.captureException(networkError.toString(), {\n extra: { component: 'States' },\n });\n }\n };\n\n return (\n \n {verifyState => (\n \n {({ loading, error, data }) => {\n if (loading) {\n return ;\n }\n\n if (error) {\n Sentry.captureException(error, {\n extra: { component: 'Eligibility States Screen' },\n });\n return {error};\n }\n\n const {\n quikly: { eligibilityTitle, eligibilitySubtitle },\n } = data;\n\n return (\n <>\n

{eligibilityTitle}

\n

\n {eligibilitySubtitle ||\n 'Please confirm your eligibility by indicating your state of residence below.'}\n

\n {\n e.preventDefault();\n if (\n this.state.selectedStateId === null ||\n this.state.selectedStateId === ''\n ) {\n setAlert({\n message: 'Please select a state.',\n expire: false,\n });\n return;\n }\n\n setAlert({ open: false, closing: true });\n\n verifyState({\n variables: {\n dealHashid: dealId,\n state: this.state.selectedStateId,\n },\n });\n }}\n >\n \n \n \n \n \n \n );\n }}\n
\n )}\n \n );\n }\n}\n\nStates.propTypes = {\n match: ReactRouterPropTypes.match.isRequired,\n history: ReactRouterPropTypes.history.isRequired,\n};\n\nexport default withRouter(States);\n","import React, { useState, useContext } from 'react';\nimport { useParams, withRouter } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { gql, useQuery, useMutation, useLazyQuery } from '@apollo/client';\n\nimport {\n LoadingAnimation,\n Input,\n Button,\n StoreCard,\n} from 'shared/components/campaign';\nimport { FooterButton } from '../';\n\nconst VERIFY_STORE = gql`\n mutation CheckEligibility($dealHashid: String!, $storeId: Int!) {\n checkEligibility(input: { dealHashid: $dealHashid, storeId: $storeId }) {\n clientMutationId\n }\n }\n`;\n\nconst COPY_QUERY = gql`\n query skipNotificationPreferenceQuery($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n title: customContentFor(key: \"eligibility_title\")\n subtitle: customContentFor(key: \"eligibility_subtitle\")\n }\n }\n`;\n\nconst STORE_QUERY = gql`\n query eligibleStoreLocationQuery($hashid: String!, $zipCode: String!) {\n quikly(hashid: $hashid) {\n id\n storeLocations(zipCode: $zipCode, eligibleOnly: true) {\n edges {\n node {\n id: qid\n storeNo\n name\n address\n city\n state\n zip\n phone\n latitude\n longitude\n distance\n }\n }\n }\n }\n }\n`;\n\nconst InputWrapper = styled.div`\n margin: 2rem 0;\n`;\n\nconst Store = props => {\n const [zipCode, setZipCode] = useState('');\n const [selectedStoreId, setSelectedStoreId] = useState(null);\n const [stores, setStores] = useState([]);\n const [submittingStore, setSubmittingStore] = useState(false);\n const { dealId: dealHashid } = useParams();\n\n const onStoresFetched = edges => {\n if (edges.length === 0) {\n props.history.push(`/q/${props.match.params.dealId}/want_in/ineligible`);\n return;\n }\n\n const stores = edges.map(({ node }) => node);\n setStores(stores.sort((a, b) => a.distance - b.distance));\n };\n\n const { data, loading, error } = useQuery(COPY_QUERY, {\n variables: { hashid: dealHashid },\n });\n const [storeQuery] = useLazyQuery(STORE_QUERY, {\n onCompleted: data => onStoresFetched(data.quikly.storeLocations.edges),\n });\n const [verifyStore] = useMutation(VERIFY_STORE, {\n onCompleted: () => (window.location = `/q/${dealHashid}/dashboard`),\n onError: () => setSubmittingStore(false),\n });\n\n if (loading) return ;\n\n const {\n quikly: { title, subtitle },\n } = data;\n\n return (\n <>\n

{title}

\n

{subtitle || 'Please select your nearest store.'}

\n\n {stores.length === 0 ? (\n <>\n \n setZipCode(e.target.value)}\n type=\"number\"\n name=\"zip_code\"\n />\n \n \n {\n storeQuery({\n variables: {\n hashid: dealHashid,\n zipCode: zipCode,\n },\n });\n }}\n disabled={zipCode.length !== 5}\n >\n Find stores near me\n \n \n \n ) : (\n \n \n \n {\n setSubmittingStore(true);\n return verifyStore({\n variables: {\n dealHashid,\n storeId: selectedStoreId,\n },\n });\n }}\n disabled={!selectedStoreId || submittingStore}\n >\n Continue\n \n \n \n )}\n \n );\n};\n\nexport default withRouter(Store);\n","import { gql } from '@apollo/client';\nimport React, { useState, Fragment } from 'react';\nimport { useMutation, useQuery } from '@apollo/client';\nimport { withRouter } from 'react-router-dom';\n\nimport { FooterButton } from '../';\nimport {\n LoadingAnimation,\n BirthdayPicker,\n Button,\n} from 'shared/components/campaign';\n\nconst VERIFY_AGE = gql`\n mutation CheckEligibility($dealHashid: String!, $dob: DateTime!) {\n checkEligibility(input: { dealHashid: $dealHashid, dob: $dob }) {\n clientMutationId\n }\n }\n`;\n\nconst CUSTOM_CONTENT_QUERY = gql`\n query CustomContentQuery($hashid: String!) {\n quikly(hashid: $hashid) {\n id\n eligibilityTitle: customContentFor(key: \"eligibility_title\")\n eligibilitySubtitle: customContentFor(key: \"eligibility_subtitle\")\n }\n }\n`;\n\nconst Age = ({\n history,\n match: {\n params: { dealId: dealHashid },\n },\n}) => {\n const [day, setDay] = useState('');\n const [year, setYear] = useState('');\n const [month, setMonth] = useState('');\n\n const onCompleted = () => {\n window.location = `/q/${dealHashid}/dashboard`;\n };\n\n const onError = error => {\n if (error.graphQLErrors) {\n history.push(`/q/${dealHashid}/want_in/ineligible`);\n return null;\n }\n\n Sentry.captureException(error.networkError.toString(), {\n extra: { component: 'Age' },\n });\n return Whoops! Something went wrong.;\n };\n\n const disableButton = !day || !month || year.length < 4;\n\n const [\n checkEligibility,\n { data: mutationResult, loading, error },\n ] = useMutation(VERIFY_AGE, {\n variables: {\n dob: `${year}-${month}-${day}`,\n dealHashid,\n },\n onCompleted,\n });\n\n const {\n data,\n loading: fetchingCustomContent,\n error: errorFetchingCustomContent,\n } = useQuery(CUSTOM_CONTENT_QUERY, { variables: { hashid: dealHashid } });\n\n if (fetchingCustomContent) return ;\n if (errorFetchingCustomContent) return

Whoops! Something went wrong.

;\n\n const {\n quikly: { eligibilityTitle, eligibilitySubtitle },\n } = data;\n\n if (loading || mutationResult) return ;\n if (error) return onError(error);\n\n return (\n <>\n

{eligibilityTitle}

\n

\n {eligibilitySubtitle ||\n 'Please confirm your eligibility by entering your date of birth.'}\n

\n {\n switch (e.target.name) {\n case 'month':\n setMonth(e.target.value);\n break;\n case 'day':\n setDay(e.target.value);\n break;\n case 'year':\n setYear(e.target.value);\n break;\n default:\n break;\n }\n }}\n />\n \n \n Continue\n \n \n \n );\n};\n\nexport default withRouter(Age);\n","import React, { useContext } from 'react';\nimport { gql, useQuery, useMutation } from '@apollo/client';\nimport { useParams } from 'react-router-dom';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport { UIContext } from '../../providers/UIProvider';\nimport Survey from '../Survey';\n\nconst SUBMIT_ELIGIBILITY_SURVEY = gql`\n mutation SubmitEligibilitySurvey(\n $dealHashid: String!\n $surveyResponse: SurveyResponseAttributes!\n ) {\n submitEligibilitySurvey(\n input: { dealHashid: $dealHashid, surveyResponse: $surveyResponse }\n ) {\n surveyResponseId\n errors {\n key\n message\n }\n }\n }\n`;\n\nconst ELIGIBILITY_SURVEY_QUERY = gql`\n query EligibilitySurveyQuery($dealHashid: String!) {\n viewer {\n id\n authenticated\n phone\n }\n quikly(hashid: $dealHashid) {\n id\n title: customContentFor(key: \"eligibility_title\")\n text: customContentFor(key: \"eligibility_subtitle\")\n survey: eligibilitySurvey {\n id\n name\n merchantId\n surveyId: qid\n active\n script\n surveyQuestions {\n qid\n answerOptions\n options\n position\n questionKey\n questionText\n questionType\n timeValue\n properties {\n defaultValue\n placeholder\n }\n validationRules {\n answerPresence\n visibleIfAnswered\n visibleIfAnsweredWithValue\n enforcePhoneValidation\n answerMinimumLength\n answerMaximumLength\n }\n }\n }\n }\n }\n`;\n\nconst EligibilitySurvey = () => {\n const { dealId: dealHashid } = useParams();\n const { setAlert } = useContext(UIContext);\n const { loading, error, data } = useQuery(ELIGIBILITY_SURVEY_QUERY, {\n variables: { dealHashid },\n });\n const [submitEligibilitySurvey] = useMutation(SUBMIT_ELIGIBILITY_SURVEY, {\n onCompleted: ({ submitEligibilitySurvey: { errors } }) => {\n if (errors.length === 0) {\n window.location = `/q/${dealHashid}/dashboard`;\n }\n },\n onError: () => {\n setAlert({\n message: 'There was an error submitting the survey. Please try again.',\n });\n setTimeout(() => {\n setAlert({ open: false });\n }, 4000);\n },\n });\n\n if (loading) return ;\n if (error) {\n setAlert({\n message: 'There was an error fetching the survey.',\n });\n return null;\n }\n\n const { quikly, viewer } = data;\n\n return (\n \n );\n};\n\nexport default EligibilitySurvey;\n","import React from 'react';\nimport { Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport * as Sentry from '@sentry/browser';\nimport { LoadingAnimation } from 'shared/components/campaign';\nimport ZipCode from './ZipCode';\nimport States from './States';\nimport Store from './Store';\nimport Age from './Age';\nimport EligibilitySurvey from './EligibilitySurvey';\n\nconst QUERY = gql`\n query getEligibilityGate($dealId: String!) {\n quikly(hashid: $dealId) {\n id\n eligibilityGate\n }\n }\n`;\nconst DynamicValidator = ({\n match: {\n params: { dealId },\n },\n}) => {\n return (\n \n {({ loading, error, data }) => {\n if (loading) return ;\n\n if (error) {\n Sentry.captureException(error);\n return 'Oops! Looks like something went wrong on our end.';\n }\n\n const {\n quikly: { eligibilityGate },\n } = data;\n\n switch (eligibilityGate) {\n case 'eligible_zip_codes':\n return ;\n case 'eligible_states':\n return ;\n case 'eligible_stores':\n return ;\n case 'minimum_age':\n return ;\n case 'eligibility_survey':\n return ;\n default:\n return 'Oops! Looks like something went wrong on our end.';\n }\n }}\n \n );\n};\n\nexport default DynamicValidator;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Ineligible from './Ineligible';\nimport DynamicValidator from './DynamicValidator';\n\nconst Eligibility = () => (\n \n \n \n \n);\nexport default Eligibility;\n","import React, { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { gql, useQuery } from '@apollo/client';\nimport { Checkbox, Select } from 'shared/components/campaign';\nimport BaseAPI from 'utils/api/BaseApi';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query loginQuestion($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n loginQuestionType\n loginQuestionLegal: customContentFor(key: \"login_question_legal\")\n loginCheckbox: customContentFor(key: \"login_checkbox\")\n }\n }\n`;\n\nexport default function LoginQuestion({ onChange: updateParent }) {\n const [value, setValue] = useState(false);\n const [error, setError] = useState(false);\n const { dealId: dealHashid } = useParams();\n const { data } = useQuery(QUERY, { variables: { dealHashid } });\n\n const {\n quikly: { loginQuestionType, loginQuestionLegal, loginCheckbox },\n } = data || { quikly: { loginQuestionType: null } };\n\n const onChange = e => {\n const { target } = e;\n\n if (value !== '' && target.value === '') {\n setError(true);\n } else if (error === true) {\n setError(false);\n }\n\n setValue(target.type === 'checkbox' ? target.checked : target.value);\n };\n\n useEffect(() => {\n BaseAPI.post('/session/want_in_params', { login_question: value }).then(\n ({ response }) => {\n if (response.ok) {\n updateParent(value);\n }\n },\n );\n }, [value]);\n\n const TheQuestion = () => {\n if (!loginQuestionType) {\n return null;\n }\n\n if (loginQuestionType === 'select') {\n return (\n <>\n \n {loginCheckbox}\n

\n\n \n \n );\n }\n\n return (\n \n \n \n );\n };\n\n return (\n
\n \n \n
\n );\n}\n","import React from 'react';\nimport { Checkbox } from 'shared/components/campaign';\nimport styles from './styles.module.scss';\n\nexport default function TermsCheckbox({ onChange }) {\n return (\n
\n onChange(e.target.checked)}>\n I have read, understand and agree to the terms of service and privacy\n policy.\n \n
\n );\n}\n","import React, { useState, useContext } from 'react';\nimport { useParams, useHistory, Link } from 'react-router-dom';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client';\nimport { useAuth } from 'shared/useAuth';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { Button, Input } from 'shared/components/campaign';\nimport LoginQuestion from './LoginQuestion';\nimport TermsCheckbox from './TermsCheckbox';\nimport { useMailCheck } from './MailCheck';\nimport FacebookLogin from './FacebookLogin';\n\nconst QUERY = gql`\n query emailLookup($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n isDemo\n termsOnLogin\n loginQuestionType\n questionOnLogin\n disablePasswords\n disableFbLogin\n loginButtonText: customContentFor(key: \"login_button\")\n }\n viewer {\n id\n email\n }\n }\n`;\n\nexport default function EmailLookup() {\n const { dealId: dealHashid } = useParams();\n const history = useHistory();\n const { setAlert, clearAlert } = useContext(UIContext);\n const [email, setEmail] = useState('');\n const [linkToSetPassword, setLinkToSetPassword] = useState(false);\n const [gateValid, setGateValid] = useState(false);\n const { suggestion } = useMailCheck({ email });\n const onCompleted = ({\n viewer,\n quikly: { termsOnLogin, questionOnLogin, loginQuestionType },\n }) => {\n if (viewer.email) {\n setEmail(viewer.email);\n }\n const isOptional = /-optional$/.test(loginQuestionType);\n if (isOptional || (!termsOnLogin && !questionOnLogin)) {\n setGateValid(true);\n }\n };\n\n const { data, loading } = useQuery(QUERY, {\n variables: { dealHashid },\n onCompleted,\n });\n const { signIn, loading: submitting } = useAuth({ email });\n\n const {\n quikly: {\n isDemo,\n loginButtonText,\n termsOnLogin,\n questionOnLogin,\n disableFbLogin,\n },\n } = data || {\n quikly: {\n isDemo: false,\n termsOnLogin: false,\n questionOnLogin: false,\n loginButtonText: null,\n disableFbLogin: true,\n },\n };\n\n const onSignInError = errors => {\n errors.forEach(({ key, message }) => {\n if (key === 'INELIGIBLE_EMAIL_USER') {\n window.location = `/q/${dealHashid}/want_in/ineligible`;\n } else if (key === 'INACTIVE_ACCOUNT') {\n history.push(`/q/${dealHashid}/users/sign_up`, { email });\n } else if (key === 'USER_WITHOUT_CREDENTIALS' || key === 'NEW_USER') {\n history.push(`/q/${dealHashid}/users/sign_up`, { email });\n } else if (key === 'FACEBOOK_USER_ONLY') {\n setLinkToSetPassword(true);\n } else {\n setAlert({ message });\n }\n });\n };\n\n const onSignIn = ({\n data: {\n viewerSignIn: { errors, returnTo },\n },\n }) => {\n const {\n quikly: { disablePasswords },\n } = data;\n\n if (errors.length > 0) {\n onSignInError(errors);\n } else if (disablePasswords) {\n window.location = returnTo || `/q/${dealHashid}/dashboard`;\n } else {\n history.push(`/q/${dealHashid}/users/sign_in`, { email });\n }\n };\n\n const onSubmit = e => {\n e.preventDefault();\n if (email.trim() === '') {\n setAlert({ message: 'Email cannot be blank.' });\n return;\n }\n\n clearAlert();\n signIn({ email, dealHashid, onCompleted: onSignIn });\n };\n\n return (\n <>\n {!disableFbLogin && (\n <>\n \n
OR
\n \n )}\n
\n {linkToSetPassword && (\n <>\n

\n You logged in with facebook last time. Please click the facebook\n button to continue.\n

\n \n (Rather not use Facebook this time? Click here.)\n \n \n )}\n\n {\n setEmail(e.target.value);\n }}\n value={email}\n autoComplete=\"email\"\n disabled={loading}\n focus=\"true\"\n />\n {suggestion && (\n \n Did you mean \n {\n e.preventDefault();\n setEmail(suggestion.full);\n }}\n >\n {suggestion.full}\n \n ?\n \n )}\n\n {termsOnLogin && }\n {questionOnLogin && }\n\n \n \n {isDemo ? 'Continue' : loginButtonText}\n \n \n \n \n );\n}\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { gql, useQuery } from '@apollo/client';\n\nimport EmailLookup from './EmailLookup';\nimport LoginLegal from '../LoginLegal';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query enterEmail($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n loginTitle: customContentFor(key: \"login_title\")\n loginSubtitle: customContentFor(key: \"login_subtitle\")\n }\n }\n`;\n\nexport default function EnterEmail() {\n const { dealId: dealHashid } = useParams();\n const { data } = useQuery(QUERY, { variables: { dealHashid } });\n\n const {\n quikly: { loginTitle, loginSubtitle },\n } = data || {\n quikly: { loginTitle: '', loginSubtitle: '', disableFbLogin: true },\n };\n\n return (\n
\n

{loginTitle}

\n \n\n \n
\n \n
\n );\n}\n","import { useMutation } from '@apollo/client';\nimport { gql } from '@apollo/client';\nimport React, { useContext, useState } from 'react';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { Button, Input } from 'shared/components/campaign';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { UIContext } from 'v4/App/providers/UIProvider';\n\nconst MUTATION = gql`\n mutation forgotPassword($dealHashid: String!, $email: String!) {\n forgotPasswordEmail(input: { dealHashid: $dealHashid, email: $email }) {\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function ForgotPassword({\n location: {\n state: { email: incomingEmail },\n },\n}) {\n const [email, setEmail] = useState(incomingEmail);\n const { setAlert } = useContext(UIContext);\n const { dealId: dealHashid } = useParams();\n const history = useHistory();\n const onCompleted = () => {\n setAlert({\n type: 'success',\n message: 'Check your email to set a new password.',\n });\n history.push(`/q/${dealHashid}/users/sign_in`, { email });\n };\n const [submit] = useMutation(MUTATION, {\n variables: { email, dealHashid },\n onCompleted,\n });\n\n return (\n {\n e.preventDefault();\n submit();\n }}\n >\n

Forgot your password?

\n

\n Enter your email and click "Reset Password". We'll send\n an email with instructions on how to change your password. If you\n don't receive this email shortly, please check your junk or spam\n folder.\n

\n\n
\n setEmail(e.target.value)}\n autoComplete=\"email\"\n />\n
\n\n \n \n \n \n );\n}\n","import React, { useContext } from 'react';\nimport { Button } from 'shared/components/campaign';\nimport { gql } from '@apollo/client';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { useMutation } from '@apollo/client';\nimport { UIContext } from 'v4/App/providers/UIProvider';\n\nconst MUTATION = gql`\n mutation sendActivationEmail($dealHashid: String!, $email: String!) {\n sendActivationEmail(input: { dealHashid: $dealHashid, email: $email }) {\n clientMutationId\n }\n }\n`;\n\nexport default function ActivateAccount({\n location: {\n state: { email },\n },\n}) {\n const { dealId: dealHashid } = useParams();\n const history = useHistory();\n const { setAlert } = useContext(UIContext);\n\n const onCompleted = () => {\n const message = 'We just emailed your account activation instructions.';\n setAlert({ type: 'success', message });\n history.push(`/q/${dealHashid}/users/login`);\n };\n\n const onError = ({ graphQLErrors, networkError }) => {\n const msg = graphQLErrors[0] ? graphQLErrors[0].message : networkError;\n setAlert({\n type: 'error',\n message: `We were unable to reactivate your account. Please try again. (${msg})`,\n });\n };\n const [sendActivationEmail] = useMutation(MUTATION, {\n variables: {\n dealHashid,\n email,\n },\n onError,\n onCompleted,\n });\n\n const handleSubmit = e => {\n e.preventDefault();\n sendActivationEmail();\n };\n\n return (\n <>\n

\n Your account is not currently active.\n

\n

Do you want to reactivate it?

\n
\n
\n \n
\n
\n \n );\n}\n","import { useMutation } from '@apollo/client';\nimport { gql } from '@apollo/client';\nimport React, { useContext, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { Button, Input } from 'shared/components/campaign';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport queryString from 'query-string';\n\nconst MUTATION = gql`\n mutation resetPassword($password: String!, $resetPasswordToken: String!) {\n resetPassword(input: { password: $password, token: $resetPasswordToken }) {\n returnTo\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function ResetPassword() {\n const [password, setPassword] = useState('');\n const [passwordConfirmation, setPasswordConfirmation] = useState('');\n const { setAlert } = useContext(UIContext);\n const { dealId: dealHashid } = useParams();\n const onCompleted = ({ resetPassword: { errors, returnTo } }) => {\n if (errors.length > 0) {\n errors.forEach(error => setAlert(error));\n return;\n }\n\n setAlert({ type: 'success', message: 'Password updated.' });\n window.location = returnTo || `/q/${dealHashid}/dashboard`;\n };\n const token = queryString.parse(window.location.search).reset_password_token;\n const [submit] = useMutation(MUTATION, {\n variables: {\n password,\n resetPasswordToken: token,\n },\n onCompleted,\n onError: setAlert,\n });\n const handleSubmit = e => {\n e.preventDefault();\n\n if (password !== passwordConfirmation) {\n setAlert({ message: 'Password and password confirmation do not match.' });\n return;\n }\n submit();\n };\n\n return (\n <>\n

Reset Password

\n

\n Create a new password by entering it below, then tap Update Password.\n

\n
\n setPassword(e.target.value)}\n required\n minLength=\"3\"\n autoComplete=\"new-password\"\n />\n\n setPasswordConfirmation(e.target.value)}\n required\n minLength=\"3\"\n autoComplete=\"new-password\"\n />\n\n \n \n \n \n \n );\n}\n","import React, { useContext, useState } from 'react';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { Input, Checkbox, Button } from 'shared/components/campaign';\nimport { Link, useParams, useHistory } from 'react-router-dom';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { useAuth } from 'shared/useAuth';\n\nexport default function SignIn({\n location: {\n state: { email },\n },\n}) {\n const [password, setPassword] = useState('');\n const [rememberMe, setRememberMe] = useState(false);\n const { setAlert, clearAlert } = useContext(UIContext);\n const { dealId: dealHashid } = useParams();\n const { signIn } = useAuth();\n const history = useHistory();\n\n const onSignInError = errors => {\n errors.forEach(({ key, message }) => {\n if (key === 'INVALID_PASSWORD') {\n setAlert({ message });\n } else if (key === 'INACTIVE_ACCOUNT') {\n history.push(`/q/${dealHashid}/users/sign_up`, { email });\n }\n });\n };\n\n const onCompleted = ({\n data: {\n viewerSignIn: { errors, returnTo },\n },\n }) => {\n if (errors.length > 0) {\n onSignInError(errors);\n return;\n }\n\n window.location = returnTo || `/q/${dealHashid}/dashboard`;\n };\n\n const handleSubmit = e => {\n e.preventDefault();\n signIn({ email, password, dealHashid, onCompleted });\n };\n\n return (\n
\n

Welcome Back!

\n

Enter your password to continue.

\n
\n \n setPassword(e.target.value)}\n // errorMessage={errorMessage}\n autoComplete=\"current-password\"\n />\n\n
\n
\n setRememberMe(e.target.checked)}\n >\n remember me\n \n
\n
\n \n Forgot password?\n \n
\n
\n\n \n \n \n \n
\n );\n}\n","import { useMutation, useQuery } from '@apollo/client';\nimport { gql } from '@apollo/client';\nimport React, { useContext, useReducer } from 'react';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { Button, Input } from 'shared/components/campaign';\nimport useReviewer from 'v4/useReviewer';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport LoginLegal from '../LoginLegal';\n\nconst QUERY = gql`\n query signUpQuery($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n disablePasswords\n signUpButtonText: customContentFor(key: \"signup_button\")\n signUpSubtitle: customContentFor(key: \"signup_subtitle\")\n signUpTitle: customContentFor(key: \"signup_title\")\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation signUpMutation(\n $dealHashid: String!\n $email: String!\n $firstName: String\n $lastName: String\n $password: String!\n ) {\n viewerSignUp(\n input: {\n dealHashid: $dealHashid\n email: $email\n firstName: $firstName\n lastName: $lastName\n password: $password\n }\n ) {\n returnTo\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function SignUp() {\n const location = useLocation();\n const history = useHistory();\n const { dealId: dealHashid } = useParams();\n const { inReviewer } = useReviewer();\n const [user, setUser] = useReducer(\n (state, stateChange) => ({ ...state, ...stateChange }),\n { firstName: '', lastName: '', password: '' },\n );\n const { setAlert } = useContext(UIContext);\n const { data, loading } = useQuery(QUERY, { variables: { dealHashid } });\n\n let email;\n if (location.state && location.state.email) {\n email = location.state.email;\n } else if (inReviewer) {\n email = 'name@example.com';\n } else {\n history.push(`/q/${dealHashid}/users/login`);\n }\n\n const onCompleted = ({ viewerSignUp: { errors, returnTo } }) => {\n if (errors.length > 0) {\n errors.forEach(error => setAlert(error));\n return;\n }\n\n window.location = returnTo || `/q/${dealHashid}/dashboard`; // maybe get this from mutation so we know where to go next.\n };\n\n const [submit, { loading: submitting }] = useMutation(MUTATION, {\n variables: { dealHashid, email, ...user },\n onCompleted,\n onError: setAlert,\n });\n\n const {\n quikly: { signUpTitle, signUpSubtitle, disablePasswords, signUpButtonText },\n } = data || { quikly: { disablePasswords: true } };\n\n const handleSubmit = e => {\n e.preventDefault();\n submit();\n };\n\n const handleOnChange = e => setUser({ [e.target.name]: e.target.value });\n\n return (\n
\n \n \n\n \n \n \n {!disablePasswords && (\n \n )}\n \n \n \n {signUpButtonText}\n \n \n \n );\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport EnterEmail from './EnterEmail';\nimport ForgotPassword from './ForgotPassword';\nimport ActivateAccount from './ActivateAccount';\nimport ResetPassword from './ResetPassword';\nimport SignIn from './SignIn';\nimport SignUp from './SignUp';\n\nexport default function Login() {\n return (\n \n \n \n \n \n \n \n \n );\n}\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { Navbar as UINavbar } from 'shared/components/campaign';\nimport Navbar, { BackButton, BrandLogo } from 'v4/App/components/Navbar';\nimport styles from './styles.module.scss';\n\nconst AuthNavbar = ({\n history,\n match: {\n params: { dealId: dealHashid },\n },\n}) => {\n const goBack = () => {\n if (/login\\/?$/.test(history.location.pathname)) {\n window.location.href = `/q/${dealHashid}`;\n } else {\n history.goBack();\n }\n };\n return (\n \n \n
\n \n \n
\n
\n \n
\n
\n \n \n );\n};\n\nexport default withRouter(AuthNavbar);\n","import React, { PureComponent } from 'react';\nimport { withRouter } from 'react-router';\nimport { Mutation } from '@apollo/client/react/components';\nimport queryString from 'query-string';\nimport { bool, func, string } from 'prop-types';\nimport { gql } from '@apollo/client';\nimport { Button } from 'shared/components/campaign';\nimport M from 'utils/Metrics';\nimport FooterButton from '../../../../FooterButton';\n\nconst CONFIRM_PHONE = gql`\n mutation confirmPhone($dealHashid: String!, $phoneNumber: String!) {\n confirmPhone(\n input: { dealHashid: $dealHashid, phoneNumber: $phoneNumber }\n ) {\n confirmed\n smsLogId\n errors {\n key\n message\n }\n }\n }\n`;\n\nclass ConfirmPhoneButton extends PureComponent {\n onCompleted = ({ confirmPhone: { confirmed, errors, smsLogId } }) => {\n const {\n history,\n isEmbedded,\n location,\n onError,\n onPhoneAlreadyTaken,\n selectedMethod,\n closeModal,\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const alreadyTaken = errors.find(e => e.key === 'IN_USE');\n\n // Optional special error handling for IN_USE error, defaults to onError\n // if onPhoneAlreadyTaken is null\n if (alreadyTaken && onPhoneAlreadyTaken) {\n onPhoneAlreadyTaken({ errors });\n return;\n }\n\n if (errors.length > 0) {\n onError({ graphQLErrors: errors });\n return;\n }\n\n if (confirmed) {\n if (isEmbedded) {\n // do not redirect when closing the modal, use the history.push below instead\n closeModal(() => {});\n }\n\n history.push(\n `/q/${dealId}/users/phone/verify?notify_sms=${selectedMethod ===\n 'text message'}`,\n {\n confirmPlea: queryString.parse(location.search).plea,\n fromEmbedded: isEmbedded,\n smsLogId,\n },\n );\n }\n };\n\n handleTracking = () => {\n const { componentForTracking: component } = this.props;\n\n M.track('clicks', {\n properties: {\n target: `${component}`,\n },\n gaAction: `phone-confirm-button-${component}`,\n });\n };\n\n render() {\n const {\n match: {\n params: { dealId },\n },\n disabled,\n onError,\n phone,\n submitButtonText,\n } = this.props;\n\n return (\n \n {confirmPhone => (\n \n {\n e.preventDefault();\n this.handleTracking();\n confirmPhone({\n variables: {\n dealHashid: dealId,\n phoneNumber: phone,\n },\n });\n }}\n block\n form=\"ConfirmForm\"\n id=\"confirm-button\"\n >\n {submitButtonText}\n \n \n )}\n \n );\n }\n}\n\nConfirmPhoneButton.propTypes = {\n isEmbedded: bool,\n phone: string.isRequired,\n onPhoneAlreadyTaken: func,\n};\n\nConfirmPhoneButton.defaultProps = {\n onPhoneAlreadyTaken: null,\n isEmbedded: false,\n};\n\nexport default withRouter(ConfirmPhoneButton);\n","import React, { PureComponent } from 'react';\nimport { withRouter } from 'react-router';\nimport { Mutation } from '@apollo/client/react/components';\nimport { func, shape, string } from 'prop-types';\nimport { gql } from '@apollo/client';\nimport { Button } from 'shared/components/campaign';\nimport M from 'utils/Metrics';\nimport FooterButton from '../../../../FooterButton';\n\nconst RECONFIRM_PHONE = gql`\n mutation reconfirmPhone($dealHashid: String!, $notifySms: Boolean) {\n reconfirmPhone(input: { dealHashid: $dealHashid, notifySms: $notifySms }) {\n reverify\n errors {\n key\n message\n }\n }\n }\n`;\n\nclass ReconfirmPhoneButton extends PureComponent {\n onCompleted = ({ reconfirmPhone: { reverify } }) => {\n const {\n history,\n match: {\n params: { dealId },\n },\n selectedMethod,\n isEmbedded,\n } = this.props;\n\n if (reverify) {\n history.push(\n `/q/${dealId}/users/phone/reverify?notify_sms=${selectedMethod ===\n 'text message'}`,\n { fromEmbedded: isEmbedded },\n );\n } else {\n window.location = `/q/${dealId}/dashboard`;\n }\n };\n\n handleTracking = () => {\n const { componentForTracking: component } = this.props;\n\n M.track('clicks', {\n properties: {\n target: `${component}`,\n },\n gaAction: `phone-reconfirm-button-${component}`,\n });\n };\n\n render() {\n const {\n onError,\n phone,\n match: {\n params: { dealId },\n },\n } = this.props;\n\n return (\n \n {reconfirmPhone => (\n \n {\n e.preventDefault();\n this.handleTracking();\n reconfirmPhone({\n variables: {\n dealHashid: dealId,\n notifySms: true,\n },\n });\n }}\n block\n disabled={!phone}\n form=\"ConfirmForm\"\n >\n Yes, Confirm Phone Number\n \n \n )}\n \n );\n }\n}\n\nReconfirmPhoneButton.propTypes = {\n history: shape({ push: func }).isRequired,\n phone: string.isRequired,\n};\n\nexport default withRouter(ReconfirmPhoneButton);\n","import { routerPropTypes } from '../../../serverProps';\n\nconst propTypes = {\n ...routerPropTypes,\n};\n\nexport default propTypes;\n","// CONFIRM is the first step in the process where you enter your phone number\n\nimport * as Sentry from '@sentry/browser';\nimport { gql } from '@apollo/client';\nimport queryString from 'query-string';\nimport React, { Component } from 'react';\nimport { Query } from '@apollo/client/react/components';\nimport { withRouter } from 'react-router-dom';\nimport {\n Input,\n LoadingAnimation,\n SelectorButton,\n} from 'shared/components/campaign';\nimport toCamel from 'utils/toCamel';\nimport EditableField from 'v4/App/components/EditableField';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { ConfirmPhoneButton } from './components';\nimport FinePrint from './FinePrint';\nimport sharedProps from './sharedProps';\nimport './styles.scss';\n\nconst CONFIRM_COPY_QUERY = gql`\n query confirmCopyQuery(\n $dealHashid: String!\n $keyForConfirmTitle: String!\n $keyForConfirmQuestion: String!\n $keyForConfirmSubtitle: String!\n ) {\n viewer {\n id\n email\n }\n quikly(hashid: $dealHashid) {\n id\n confirmTitle: customContentFor(key: $keyForConfirmTitle)\n confirmSubtitle: customContentFor(key: $keyForConfirmSubtitle)\n confirmQuestion: customContentFor(key: $keyForConfirmQuestion)\n confirmTextMessage: customContentFor(key: \"phone_confirm_text_message\")\n confirmEmail: customContentFor(key: \"phone_confirm_email\")\n confirmTitleInModal: customContentFor(key: \"in_modal_confirm_title\")\n confirmSubtitleInModal: customContentFor(key: \"in_modal_confirm_subtitle\")\n confirmTitlePlea: customContentFor(key: \"before_plea_confirm_title\")\n confirmSubtitlePlea: customContentFor(key: \"before_plea_confirm_subtitle\")\n rewardLabel\n }\n }\n`;\n\nexport class Confirm extends Component {\n static contextType = UIContext;\n\n constructor(props) {\n super(props);\n\n const parsed = queryString.parse(window.location.search);\n const selectedMethod = parsed.notification_choice\n ? parsed.notification_choice.replace('-', ' ')\n : null;\n\n this.state = {\n email: '',\n inputError: '',\n selectedMethod,\n phone: '',\n };\n this.options = { text: 'text message', email: 'email' };\n }\n\n onEmailChange = e => {\n this.setState({\n email: e.target.value,\n });\n };\n\n onInputChange = event => {\n const numbersOnly = event.target.value.replace(/[^0-9.]/g, '');\n this.setState({\n phone: numbersOnly,\n });\n };\n\n handleSelector = e => {\n const { setAlert } = this.context;\n const { email } = this.state;\n\n this.setState({ selectedMethod: e.target.value });\n\n if (email.includes('yahoo.com') && e.target.value === 'email') {\n setAlert({\n type: 'warning',\n message: `Warning: Some users have reported delays receiving emails to Yahoo.com email addresses. We recommend you change your notification method to a text message or update your email.`,\n });\n }\n if (e.target.value === 'text message') {\n setAlert({ open: false });\n }\n };\n\n onError = ({ graphQLErrors }) => {\n const { setAlert } = this.context;\n\n setAlert({\n type: 'error',\n message: graphQLErrors[0].message,\n });\n };\n\n onPhoneAlreadyTaken = ({ errors }) => {\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n const { setAlert } = this.context;\n\n const logoutButton = (\n <>\n {errors[0].message}{' '}\n \n Click here to sign up with a different email address.\n \n \n );\n\n setAlert({\n type: 'error',\n message: logoutButton,\n });\n };\n\n onSelection = e => {\n this.setState({ selectedMethod: e.target.value });\n this.handleSelector(e);\n };\n\n onQueryCompleted = data => {\n const {\n viewer: { email },\n } = data;\n\n this.setState({\n email,\n });\n };\n\n render() {\n const { selectedMethod, phone, email } = this.state;\n\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const submitButtonText = 'Verify My Number';\n\n const isBeforePlea = queryString.parse(location.search).plea;\n\n const keyForConfirmTitle = () => {\n if (isBeforePlea) {\n return 'before_plea_confirm_title';\n }\n return 'phone_confirm_title';\n };\n\n const keyForConfirmSubtitle = isBeforePlea\n ? 'before_plea_confirm_subtitle'\n : 'phone_confirm_subtitle';\n\n return (\n \n {({ data, loading, error }) => {\n if (loading) {\n return ;\n }\n\n if (error) {\n Sentry.captureException(error, {\n extra: { component: 'Confirm' },\n });\n return (\n \n Sorry, we ran into a problem and have been notified. Please go\n back and try again.\n \n );\n }\n\n const {\n quikly: {\n confirmTitle,\n confirmSubtitle,\n confirmQuestion,\n confirmEmail,\n confirmTextMessage,\n rewardLabel,\n },\n } = data;\n\n return (\n <>\n
\n \n \n\n
\n {\n this.phoneNumberInput = node;\n }}\n maxLength=\"10\"\n minLength=\"10\"\n required\n errorMessage={this.state.inputError}\n autoComplete=\"tel\"\n />\n \n
\n
\n

\n {confirmQuestion}\n

\n this.onSelection(e)}\n options={Object.values(this.options)}\n name=\"notify\"\n selected={this.state.selectedMethod}\n />\n
\n\n {selectedMethod === this.options.email && !email && (\n
\n

\n We'll email you the live release announcement to the\n email below:\n

\n this.onEmailChange(e)}\n readOnly={email}\n disabled={email}\n autoComplete=\"email\"\n required\n />\n
\n )}\n
\n
\n \n
\n \n
\n \n );\n }}\n \n );\n }\n}\n\nConfirm.propTypes = { ...sharedProps };\n\nexport default withRouter(Confirm);\n","import React, { Component } from 'react';\nimport { Button, Input } from 'shared/components/campaign';\nimport { Query, Mutation } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport { withRouter } from 'react-router-dom';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport FooterButton from '../../FooterButton';\n\nconst QUERY = gql`\n query nameCorrect($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n signupTitle: customContentFor(key: \"signup_title\")\n signupSubtitle: customContentFor(key: \"signup_subtitle\")\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation nameCorrectMutation($user: UserAttributes!) {\n updateUser(input: { user: $user }) {\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport class NameCorrect extends Component {\n static contextType = UIContext;\n\n state = { firstName: null, lastName: null };\n\n onChange = event => {\n this.setState({\n [event.target.name]: event.target.value,\n });\n };\n\n onCompleted = ({ updateUser: { errors } }) => {\n const { setAlert } = this.context;\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n\n if (errors.length > 0) {\n errors.forEach(error => setAlert(error));\n return;\n }\n\n window.location.href = `/q/${dealId}/dashboard`; // HACK: full page reload\n };\n\n render() {\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n const { setAlert } = this.context;\n\n return (\n \n {({ data, loading }) => {\n if (loading) {\n return null;\n }\n\n const {\n quikly: { signupTitle, signupSubtitle },\n } = data;\n return (\n <>\n

{signupTitle}

\n

{signupSubtitle}

\n\n \n {updateUser => (\n {\n e.preventDefault();\n updateUser();\n }}\n >\n \n \n\n \n \n \n \n )}\n \n \n );\n }}\n
\n );\n }\n}\n\nexport default withRouter(NameCorrect);\n","import { useMutation, useQuery } from '@apollo/client';\nimport { gql } from '@apollo/client';\nimport React, { useContext, useState } from 'react';\nimport { useHistory, useParams } from 'react-router-dom';\nimport { Button, Input, LoadingAnimation } from 'shared/components/campaign';\nimport EditableField from 'v4/App/components/EditableField';\nimport FooterButton from 'v4/App/components/FooterButton';\nimport { UIContext } from 'v4/App/providers/UIProvider';\n\nconst QUERY = gql`\n query emailCorrect($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n emailCorrectTitle: customContentFor(key: \"email_correct_title\")\n emailCorrectSubtitle: customContentFor(key: \"email_correct_subtitle\")\n promptForEmailPostSignUp\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation updateUser($user: UserAttributes!) {\n updateUser(input: { user: $user }) {\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function EmailCorrect() {\n const [newEmail, setNewEmail] = useState('');\n const [redirectToPostSignUp, setRedirectToPostSignUp] = useState();\n const { setAlert } = useContext(UIContext);\n const { dealId: dealHashid } = useParams();\n const history = useHistory();\n const onCompleted = ({ updateUser: { errors } }) => {\n if (errors.length > 0) {\n errors.forEach(error => setAlert(error));\n return;\n }\n\n if (redirectToPostSignUp) {\n return history.push(`/q/${dealHashid}/post_sign_up`);\n }\n\n window.location = `/q/${dealHashid}/dashboard`;\n };\n const [submit] = useMutation(MUTATION, {\n variables: { user: { email: newEmail } },\n onError: setAlert,\n onCompleted,\n });\n\n const { data, loading } = useQuery(QUERY, {\n variables: { dealHashid },\n onError: setAlert,\n onCompleted: ({ quikly: { promptForEmailPostSignUp } }) => {\n setRedirectToPostSignUp(promptForEmailPostSignUp);\n },\n });\n\n if (loading) {\n return ;\n }\n\n const handleNoThanks = e => {\n e.preventDefault();\n return history.push(`/q/${dealHashid}/post_sign_up`, {\n skipEmail: true,\n });\n };\n\n const {\n quikly: {\n emailCorrectTitle,\n emailCorrectSubtitle,\n promptForEmailPostSignUp,\n },\n } = data;\n const onSubmit = e => {\n e.preventDefault();\n submit();\n };\n\n return (\n <>\n \n \n\n
\n setNewEmail(e.target.value)}\n autoComplete=\"email\"\n />\n\n \n \n {promptForEmailPostSignUp && (\n \n No thanks.\n \n )}\n \n \n \n );\n}\n","import { gql } from '@apollo/client';\nimport queryString from 'query-string';\nimport React, { Component } from 'react';\nimport { Mutation, Query } from '@apollo/client/react/components';\nimport { Link, withRouter } from 'react-router-dom';\nimport { Button, Checkbox, Input } from 'shared/components/campaign';\nimport EditableField from 'v4/App/components/EditableField';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { formatPhoneNumber } from 'v4/App/utils';\nimport FooterButton from '../../FooterButton';\nimport './styles.scss';\n\nconst CHECK_IF_ALREADY_OPTED_IN = gql`\n query checkIfSubscribedToList(\n $contactMethod: String!\n $source: String!\n $dealHashid: String!\n ) {\n list(\n contactMethod: $contactMethod\n dealHashid: $dealHashid\n source: $source\n ) {\n id\n subscribed\n }\n quikly(hashid: $dealHashid) {\n id\n collectItsBackSmsReconfirm\n finePrint: customContentFor(key: \"phone_reconfirm_text_message\")\n checkBoxLabel: customContentFor(\n key: \"opt_in_to_sms_list_checkbox_reconfirm\"\n )\n titleText: customContentFor(key: \"phone_reconfirm_title\")\n subtitleText: customContentFor(key: \"phone_reconfirm_subtitle\")\n }\n viewer {\n id\n phoneNumber: phone\n }\n }\n`;\n\nconst RECONFIRM_AND_SUBSCRIBE = gql`\n mutation reconfirmAndSubscribe(\n $contactMethod: String!\n $listSource: String!\n $listContactSource: String!\n $subscribe: Boolean!\n $dealHashid: String!\n $phoneNumber: String\n ) {\n listSubscription(\n input: {\n contactMethod: $contactMethod\n dealHashid: $dealHashid\n listSource: $listSource\n listContactSource: $listContactSource\n subscribe: $subscribe\n }\n ) {\n subscribed\n }\n reconfirmPhone(\n input: { dealHashid: $dealHashid, phoneNumber: $phoneNumber }\n ) {\n reverify\n errors {\n key\n message\n }\n }\n }\n`;\n\nconst RECONFIRM = gql`\n mutation reconfirmPhone($dealHashid: String!, $phoneNumber: String) {\n reconfirmPhone(\n input: { dealHashid: $dealHashid, phoneNumber: $phoneNumber }\n ) {\n reverify\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport class Reconfirm extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n submitting: false,\n phoneNumber: '',\n subscribeToSmsList: false,\n };\n\n this.options = { text: 'text message', email: 'email' };\n\n this.reverify = !!props.location.search\n .slice(1)\n .split('&')\n .find(keyVal => {\n const pair = keyVal.split('=');\n return pair[0] === 'reverify' && pair[1] === 'true';\n });\n }\n\n onCompleted = ({ reconfirmPhone: { reverify, errors } }) => {\n const {\n history: { push },\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const { setAlert } = this.context;\n\n if (errors.length > 0) {\n setAlert({\n type: 'error',\n message: errors[0].message,\n });\n return;\n }\n\n if (reverify) {\n push(`/q/${dealId}/users/phone/reverify`, {\n confirmPlea: queryString.parse(location.search).plea,\n });\n } else {\n // HACK: currently we need to do a pull page reload because of\n // all the props being loaded on the initial load\n window.location = `/q/${dealId}/dashboard`;\n }\n };\n\n onError = ({ graphQLErrors }) => {\n const { setAlert } = this.context;\n\n setAlert({\n type: 'error',\n message: graphQLErrors[0].message,\n });\n };\n\n setSubscribed = ({ viewer: { phoneNumber }, list: { subscribed } }) => {\n this.subscribed = subscribed;\n this.setState({ phoneNumber });\n };\n\n handleInputChange = ({ target: { value } }) => {\n const phoneNumber = value.replace(/[^0-9.]/g, '');\n this.setState({ phoneNumber });\n };\n\n offerListOptIn = collectItsBackSmsReconfirm => {\n return collectItsBackSmsReconfirm && !this.subscribed && !this.reverify;\n };\n\n render() {\n const { submitting, phoneNumber } = this.state;\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const formattedPhoneNumber = formatPhoneNumber(phoneNumber);\n\n return (\n \n {({ loading, error, data }) => {\n if (loading || error) {\n return null;\n }\n\n const {\n quikly: {\n collectItsBackSmsReconfirm,\n finePrint,\n checkBoxLabel,\n titleText,\n subtitleText,\n },\n } = data;\n\n return (\n \n {confirmAndSave => (\n <>\n

{titleText}

\n \n\n {this.reverify ? (\n \n ) : (\n \n {formattedPhoneNumber}\n \n )}\n\n
\n {finePrint ? (\n \n ) : (\n \n You are all set to receive up to three (3) messages total\n to your phone number {formattedPhoneNumber} from Quikly's\n automated system. Clicking "Confirm" is your\n electronic signature. Consent to receive text messages is\n not required to make a purchase.\n \n )}\n\n {this.offerListOptIn(collectItsBackSmsReconfirm) && (\n
\n {/* TODO: Bring the checkbox into the monolith, fix that it doesn't accept className */}\n {\n this.setState({\n subscribeToSmsList: e.target.checked,\n });\n }}\n >\n \n \n
\n )}\n\n \n {\n confirmAndSave({\n variables: {\n contactMethod: 'phone',\n listSource: 'master',\n listContactSource: 'reconfirm',\n subscribe: this.state.subscribeToSmsList,\n dealHashid: dealId,\n phoneNumber,\n },\n });\n }}\n tabIndex=\"0\"\n block\n >\n Confirm\n \n \n Want to use a different number?\n \n \n \n )}\n \n );\n }}\n \n );\n }\n}\n\nReconfirm.contextType = UIContext;\n\nexport default withRouter(Reconfirm);\n","// VERIFY is the second step in the process where you enter your 4 digit code\n\nimport {\n Button,\n Checkbox,\n InputActivationCode,\n LoadingAnimation,\n} from 'shared/components/campaign';\nimport React, { Component, Fragment } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Mutation, Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport { connection, pipe, withSubmitHandlers } from 'v4/App/utils';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport EditableField from 'v4/App/components/EditableField';\nimport FooterButton from '../../FooterButton';\nimport RouterButton from '../../RouterButton';\nimport sharedProps from './sharedProps';\nimport ACTION_DATA from '../../actionData';\n\nconst CHECK_IF_ALREADY_OPTED_IN = gql`\n query checkIfSubscribedToList(\n $contactMethod: String!\n $merchantId: Int!\n $source: String!\n $dealHashid: String!\n ) {\n list(\n contactMethod: $contactMethod\n merchantId: $merchantId\n source: $source\n ) {\n subscribed\n }\n quikly(hashid: $dealHashid) {\n id\n finePrint: customContentFor(key: \"phone_verify_text_message_fine_print\")\n checkBoxLabel: customContentFor(key: \"opt_in_to_sms_list_checkbox_verify\")\n skipNotificationPreference\n hasPostSignUpContent\n }\n }\n`;\n\nconst WANT_IN_QUERY = gql`\n query wantIn($hashid: String!) {\n viewer {\n id\n pendingPhone\n }\n quikly(hashid: $hashid) {\n id\n wantIn {\n id\n incompletePlea\n }\n brand {\n id\n qid\n name\n }\n }\n }\n`;\n\nconst VERIFY_AND_SUBSCRIBE = gql`\n mutation verifyAndSubscribe(\n $contactMethod: String!\n $merchantId: Int!\n $listSource: String!\n $listContactSource: String!\n $notifySms: Boolean!\n $subscribe: Boolean!\n $code: String!\n $dealHashid: String!\n ) {\n verifyPhone(\n input: {\n dealHashid: $dealHashid\n code: $code\n notifySms: $notifySms\n listSubscribe: {\n contactMethod: $contactMethod\n merchantId: $merchantId\n listSource: $listSource\n listContactSource: $listContactSource\n subscribe: $subscribe\n }\n }\n ) {\n clientMutationId\n }\n }\n`;\n\nconst VERIFY = gql`\n mutation verifyPhone(\n $dealHashid: String!\n $code: String!\n $notifySms: Boolean!\n ) {\n verifyPhone(\n input: { dealHashid: $dealHashid, code: $code, notifySms: $notifySms }\n ) {\n clientMutationId\n }\n }\n`;\n\nconst GET_SMS_STATUS = gql`\n query getSmsLog($qid: Int!) {\n smsLog(qid: $qid) {\n status\n }\n }\n`;\n\nconst VERIFY_WITHOUT_PHONE = gql`\n mutation verifyWithoutPhone($dealHashid: String!, $smsLogId: Int!) {\n verifyWithoutPhone(\n input: { dealHashid: $dealHashid, smsLogId: $smsLogId }\n ) {\n status\n errors {\n key\n message\n }\n }\n }\n`;\n\nconst propTypes = {\n ...sharedProps,\n};\n\nconst removeEverythingAfterAVariable = path =>\n path.replace(/(?=(.)*):(.)*/, '');\n\nfunction formatPhone(phone) {\n if (!phone) {\n return '';\n }\n\n if (phone.match(/\\*/)) {\n return phone;\n }\n\n const p = phone.match(/(\\d{3})(\\d{3})(\\d{4})/);\n return p ? `${p[1]}-${p[2]}-${p[3]}` : '';\n}\n\nexport class Verify extends Component {\n static contextType = UIContext;\n\n constructor(props) {\n super(props);\n\n if (props.domain.override) {\n if (props.domain.override.enabled) {\n this.state = {\n submitting: false,\n inputCode: '',\n override: true,\n subscribeToSmsList: false,\n };\n } else {\n this.state = {\n submitting: false,\n inputCode: '',\n override: false,\n subscribeToSmsList: false,\n };\n }\n } else {\n this.state = {\n submitting: false,\n inputCode: '',\n override: false,\n subscribeToSmsList: false,\n };\n }\n }\n\n componentWillMount() {\n this.pollForSmsStatus();\n }\n\n onChange = num => {\n this.setState({ inputCode: num });\n };\n\n onCompleted = (\n skipNotificationPreference,\n incompletePlea,\n hasPostSignUpContent,\n ) => {\n const {\n match: {\n params: { dealId },\n },\n location: {\n state: { confirmPlea, fromEmbedded },\n },\n history,\n } = this.props;\n // HACK: currently we need to do a pull page reload because of\n // all the props being loaded on the initial load\n\n if (skipNotificationPreference) {\n // Immediately after completing an ETA\n if (fromEmbedded) {\n window.location = `/q/${dealId}/dashboard`;\n return;\n }\n\n // From \"I'm Done Earning Time\"\n if (incompletePlea && confirmPlea) {\n // There is a plea activity:\n return history.push(\n `/q/${dealId}/${removeEverythingAfterAVariable(\n ACTION_DATA[incompletePlea].path,\n )}#plea`,\n );\n }\n if (hasPostSignUpContent) {\n // No plea, but post sign up content\n return history.push(`/q/${dealId}/post_sign_up`);\n }\n // default to landing page\n window.location = `/q/${dealId}`;\n return;\n }\n\n window.location = `/q/${dealId}/dashboard`;\n };\n\n onError = ({ graphQLErrors, networkError }) => {\n const { setAlert } = this.context;\n const msg = graphQLErrors[0] ? graphQLErrors[0].message : networkError;\n setAlert({\n type: 'error',\n message: `We ran into a problem. Please try again. (${msg})`,\n });\n };\n\n setSubscribed = ({ list: { subscribed } }) => {\n this.subscribed = subscribed;\n };\n\n pollForSmsStatus = () => {\n const {\n location: { state },\n client,\n } = this.props;\n\n if (state && state.smsLogId) {\n client\n .query({\n query: GET_SMS_STATUS,\n variables: { qid: state.smsLogId },\n })\n .then(this.checkForSmsCompleted)\n .catch(() => {\n this.context.setAlert({\n message: 'Sorry, your text failed to send. Please try again.',\n });\n });\n }\n };\n\n checkForSmsCompleted = ({ data: { smsLog } }) => {\n const {\n history,\n match: {\n params: { dealId: dealHashid },\n },\n } = this.props;\n\n const { setAlert } = this.context;\n if (smsLog.status === 'failed') {\n setAlert({\n message:\n 'Sorry, your text failed to send. Please make sure to use a mobile number and try again.',\n });\n history.push(`/q/${dealHashid}/users/phone/confirm`);\n } else if (smsLog.status === 'delivery_failed') {\n setAlert({\n message: 'Sorry, your text was unable to be delivered.',\n });\n this.setState({ deliveryFailed: true });\n } else if (smsLog.status === 'pending') {\n setTimeout(this.pollForSmsStatus, 2000);\n }\n };\n\n offerListOptIn = () => {\n const {\n domain: {\n deal: { collect_its_back_sms_verify: collectIsBackSms },\n },\n } = this.props;\n return collectIsBackSms && !this.subscribed;\n };\n\n render() {\n const {\n location,\n domain: {\n dealId,\n deal: { collect_its_back_sms: collectIsBackSms },\n },\n match: {\n params: { dealId: dealHashid },\n },\n } = this.props;\n\n const { smsLogId } = location.state || {};\n const { submitting, deliveryFailed, subscribeToSmsList } = this.state;\n const { clearAlert, setAlert } = this.context;\n\n const styles = {\n textDecoration: 'none',\n };\n const phoneColor = {\n color: '#29363c',\n };\n\n return (\n \n {({ data, loading }) => {\n if (loading) return ;\n let incompletePlea = false;\n const {\n quikly: { wantIn, brand },\n viewer: { pendingPhone },\n } = data;\n if (wantIn) {\n const {\n quikly: {\n wantIn: { incompletePlea: plea },\n },\n } = data;\n incompletePlea = plea;\n }\n\n return (\n \n {({\n loading: checkOptInLoading,\n error: checkOptInError,\n data,\n }) => {\n if (checkOptInLoading || checkOptInError) {\n return null;\n }\n\n const {\n quikly: {\n finePrint,\n checkBoxLabel,\n skipNotificationPreference,\n hasPostSignUpContent,\n },\n } = data;\n\n if (deliveryFailed) {\n return (\n
\n

\n Sorry your message was not delivered. Your carrier may\n not be supported.\n

\n \n Try Again\n \n {\n if (status === 'success') {\n return this.onCompleted(\n skipNotificationPreference,\n incompletePlea,\n hasPostSignUpContent,\n );\n }\n return setAlert({\n message:\n 'Sorry, you are unable to skip phone verification. Please try again with a different phone number.',\n });\n }}\n onError={this.onError}\n >\n {verifyWithoutPhone => (\n \n )}\n \n
\n

\n You can find a full list of carriers{' '}\n \n here\n \n .\n

\n
\n );\n }\n\n return (\n {\n this.onCompleted(\n skipNotificationPreference,\n incompletePlea,\n hasPostSignUpContent,\n );\n }}\n onError={this.onError}\n >\n {verifyAndSubscribe => (\n <>\n

Verify Your Phone Number

\n

\n Check your text messages and enter the code we sent\n below:\n

\n \n\n

\n We sent a text message to{' '}\n \n {formatPhone(pendingPhone)}\n \n .\n
\n Click{' '}\n this.props.history.goBack()}\n >\n here\n {' '}\n if you have not received it.\n

\n\n {this.offerListOptIn() && (\n {\n this.setState({\n subscribeToSmsList: e.target.checked,\n });\n }}\n >\n \n \n )}\n\n \n\n \n \n Verify\n \n \n \n )}\n \n );\n }}\n
\n );\n }}\n \n );\n }\n}\n\nVerify.propTypes = propTypes;\n\nexport default pipe(\n withSubmitHandlers,\n connection(),\n)(Verify);\n","import * as Sentry from '@sentry/browser';\nimport { gql } from '@apollo/client';\nimport queryString from 'query-string';\nimport React, { PureComponent } from 'react';\nimport { Mutation, Query } from '@apollo/client/react/components';\nimport { withRouter } from 'react-router-dom';\nimport {\n Button,\n Input,\n LoadingAnimation,\n SelectorButton,\n} from 'shared/components/campaign';\nimport M from 'utils/Metrics';\nimport EditableField from 'v4/App/components/EditableField';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport FooterButton from '../../FooterButton';\nimport { ConfirmPhoneButton } from './components';\nimport FinePrint from './FinePrint';\nimport './styles.scss';\n\nconst CHOOSE_NOTIFICATION_QUERY = gql`\n query chooseNotificationQuery($hashid: String!) {\n viewer {\n id\n email\n canReceiveEmail\n }\n quikly(hashid: $hashid) {\n id\n confirmEmail: customContentFor(key: \"phone_confirm_email\")\n confirmTextMessage: customContentFor(key: \"phone_confirm_text_message\")\n confirmTitle: customContentFor(key: \"phone_optional_confirm_title\")\n confirmSubtitle: customContentFor(key: \"phone_optional_confirm_subtitle\")\n confirmQuestion: customContentFor(key: \"phone_optional_confirm_question\")\n rewardLabel\n }\n }\n`;\n\nconst SKIP_PHONE_MUTATION = gql`\n mutation skipPhone($dealHashid: String!) {\n skipPhone(input: { dealHashid: $dealHashid }) {\n status\n }\n }\n`;\n\nconst SKIP_PHONE_AND_UPDATE_USER_MUTATION = gql`\n mutation skipPhoneAndUpdateUser($dealHashid: String!, $email: String!) {\n skipPhone(input: { dealHashid: $dealHashid, email: $email }) {\n status\n }\n }\n`;\n\nexport class ChooseNotificationScreen extends PureComponent {\n static contextType = UIContext;\n\n constructor(props) {\n super(props);\n\n const parsed = queryString.parse(window.location.search);\n const selectedMethod = parsed.notification_choice\n ? parsed.notification_choice.replace('-', ' ')\n : '';\n\n this.state = {\n email: '',\n inputError: '',\n phoneNumber: '',\n selectedMethod,\n };\n\n this.options = { text: 'text message', email: 'email' };\n }\n\n onEmailChange = e => {\n this.setState({\n email: e.target.value,\n });\n };\n\n onError = ({ graphQLErrors }) => {\n const { setAlert } = this.context;\n\n setAlert({\n type: 'error',\n message: graphQLErrors[0].message,\n });\n };\n\n onPhoneAlreadyTaken = ({ errors }) => {\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const { setAlert } = this.context;\n\n const logoutButton = (\n <>\n {errors[0].message}{' '}\n \n Click here to sign up with a different email address.\n \n \n );\n\n setAlert({\n type: 'error',\n message: logoutButton,\n });\n };\n\n onInputChange = e => {\n const numbersOnly = e.target.value.replace(/[^0-9.]/g, '');\n\n this.setState({\n phoneNumber: numbersOnly,\n });\n };\n\n removeEverythingAfterAVariable = path => path.replace(/(?=(.)*):(.)*/, '');\n\n handleRedirect = status => {\n const {\n history: { push },\n match: {\n params: { dealId },\n },\n } = this.props;\n\n if (status === 'success') {\n if (queryString.parse(location.search).plea) {\n push(`/q/${dealId}/post_sign_up`);\n } else {\n window.location = `/q/${dealId}/dashboard`;\n }\n }\n };\n\n handleSelector = () => {\n const { email } = this.state;\n\n const { setAlert } = this.context;\n const { selectedMethod } = this.state;\n\n if (email.includes('yahoo.com') && selectedMethod === this.options.email) {\n setAlert({\n type: 'warning',\n message: `Warning: Some users have reported delays receiving emails to Yahoo.com email addresses. We recommend you change your notification method to a text message or update your email.`,\n });\n }\n if (selectedMethod === this.options.text) {\n setAlert({ open: false });\n }\n };\n\n handleTracking = () => {\n M.track('clicks', {\n properties: {\n target: 'choose-notification-screen',\n },\n gaAction: 'phone-confirm-button-choose-notification-screen',\n });\n };\n\n onSelection = e => {\n this.setState({ selectedMethod: e.target.value });\n this.handleSelector(e);\n };\n\n onQueryCompleted = data => {\n const {\n viewer: { canReceiveEmail, email },\n } = data;\n\n this.setState({\n phoneNumber: '',\n email: canReceiveEmail ? email : '',\n userHasValidEmail: canReceiveEmail,\n });\n };\n\n render() {\n const { email, userHasValidEmail } = this.state;\n const {\n match: {\n params: { dealId },\n },\n } = this.props;\n\n const { inputError, phoneNumber, selectedMethod, submitting } = this.state;\n const { setAlert } = this.context;\n\n const disabledButtonLogic =\n submitting ||\n !selectedMethod ||\n (selectedMethod === this.options.text && !phoneNumber);\n\n let submitButtonText = '';\n\n if (selectedMethod === this.options.email) {\n submitButtonText = 'Notify By Email';\n } else {\n submitButtonText = 'Notify By Text Message';\n }\n\n return (\n \n {({ data, loading, error }) => {\n if (loading) {\n return ;\n }\n\n if (error) {\n Sentry.captureException(error, {\n extra: { component: 'Confirm' },\n });\n return {error};\n }\n\n const {\n confirmEmail,\n confirmTextMessage,\n confirmQuestion,\n confirmSubtitle,\n confirmTitle,\n rewardLabel,\n } = data.quikly;\n\n return (\n {\n this.handleRedirect(status);\n }}\n >\n {(skipPhone, { error: skipPhoneError }) => {\n if (skipPhoneError) {\n setAlert({\n type: 'error',\n message:\n 'There was an error saving your notification preference',\n });\n }\n return (\n <>\n
\n \n \n \n
\n\n this.onSelection(e)}\n options={Object.values(this.options)}\n name=\"notify\"\n selected={selectedMethod}\n />\n {selectedMethod === this.options.email && (\n
\n \n We’ll email you the live release announcement to the\n email below:\n \n \n
\n )}\n {selectedMethod === this.options.text && (\n
\n \n We’ll text you a secret code to confirm.\n \n
\n {\n this.phoneNumberInput = node;\n }}\n maxLength=\"10\"\n minLength=\"10\"\n required\n errorMessage={inputError}\n autoComplete=\"tel\"\n />\n \n
\n )}\n {selectedMethod === this.options.email && (\n \n {\n e.preventDefault();\n this.handleTracking();\n skipPhone({\n variables: {\n dealHashid: dealId,\n email,\n },\n });\n }}\n block\n form=\"ConfirmForm\"\n >\n {submitButtonText}\n \n \n )}\n {selectedMethod === this.options.text && (\n \n )}\n
\n \n
\n \n );\n }}\n \n );\n }}\n \n );\n }\n}\n\nexport default withRouter(ChooseNotificationScreen);\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Confirm from './Confirm';\nimport NameCorrect from './NameCorrect';\nimport EmailCorrect from './EmailCorrect';\nimport Reconfirm from './Reconfirm';\nimport Verify from './Verify';\nimport ChooseNotification from './ChooseNotification';\nimport UpdatePreference from './UpdatePreference';\n\nconst Phone = () => (\n \n \n \n \n \n \n \n \n }\n />\n \n);\n\nexport default Phone;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Footer from 'v4/App/components/Footer';\nimport LegalLinks from 'v4/App/components/LegalLinks';\nimport Eligibility from '../Eligibility';\nimport Login from './Login';\nimport Navbar from './Navbar';\nimport Phone from './Phone';\n\nfunction Auth() {\n return (\n <>\n \n \n \n \n \n \n \n \n
\n \n
\n \n );\n}\n\nexport default Auth;\n","import React from 'react';\nimport { Query } from '@apollo/client/react/components';\nimport { gql } from '@apollo/client';\nimport { withRouter } from 'react-router-dom';\nimport { Navbar as UINavbar } from 'shared/components/campaign';\nimport Navbar, { BackButton } from '../../Navbar';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query getProfileNavbar($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n backgroundImages {\n id\n mobileUrl\n }\n }\n }\n`;\n\nconst DashboardNavbar = ({\n location,\n history,\n match: {\n params: { dealId: dealHashid },\n },\n}) => (\n \n {({ loading, error, data }) => {\n if (loading) {\n return null;\n }\n\n if (error) {\n console.log(error);\n }\n\n const {\n quikly: { backgroundImages },\n } = data;\n\n const [backgroundImage] = backgroundImages;\n\n const goBack = () => {\n if (/profile\\/?$/.test(history.location.pathname)) {\n window.location.href = `/q/${dealHashid}/dashboard`;\n } else {\n history.goBack();\n }\n };\n\n const backgroundImageStyles = () => ({\n backgroundImage: `url(${backgroundImage.mobileUrl})`,\n });\n\n return (\n \n \n
\n \n
\n
\n
\n \n \n );\n }}\n \n);\n\nexport default withRouter(DashboardNavbar);\n","import React from 'react';\nimport { gql } from '@apollo/client';\nimport { Query } from '@apollo/client/react/components';\nimport './styles.scss';\n\nconst GET_ORDERS = gql`\n {\n viewer {\n id\n orders {\n edges {\n node {\n id\n createdAt\n itemFullDescription\n receiptToken\n quikly {\n name\n image {\n url(variant: \"web\")\n }\n }\n }\n }\n }\n }\n }\n`;\n\nconst globalIdToQId = id => atob(id).replace(/.*-(\\d*)/i, '$1');\n\nconst Orders = props => (\n \n {({ loading, error, data }) => {\n if (loading) return 'Loading';\n if (error) {\n return error.message;\n }\n\n const {\n viewer: {\n orders: { edges },\n },\n } = data;\n const {\n match: {\n params: { brandSlug },\n },\n } = props;\n\n return (\n
\n

My Rewards

\n {edges.map(({ node: order }) => (\n \n
\n \"your\n

{order.quikly.name}

\n

{order.itemFullDescription}

\n
\n \n ))}\n
\n );\n }}\n
\n);\n\nexport default Orders;\n","import React from 'react';\nimport { useParams, Link } from 'react-router-dom';\n\nexport default function ViewOrdersButton() {\n const { brandSlug, dealId } = useParams();\n return (\n View My Past Rewards\n );\n}\n","import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useAuth } from 'shared/useAuth';\n\nexport default function LogoutButton() {\n const { signOut } = useAuth();\n const { dealId: dealHashid } = useParams();\n const onCompleted = () => {\n // Lame HACK: browser needs time for the cookie to actually be removed.\n setTimeout(() => {\n window.location = `/q/${dealHashid}`;\n }, 500);\n };\n const onClick = () => {\n signOut({ onCompleted });\n };\n\n return (\n \n );\n}\n","import React, { useContext } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { useMutation } from '@apollo/client';\nimport { gql } from '@apollo/client';\n\nconst MUTATION = gql`\n mutation deleteMyAccountLink {\n deleteMyAccount(input: {}) {\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function DeleteMyAccountLink() {\n const { dealId } = useParams();\n const { setAlert } = useContext(UIContext);\n const onCompleted = () => {\n window.location.href = `/q/${dealId}`;\n };\n const onError = ({ graphQLErrors, networkError }) => {\n const msg = graphQLErrors[0] ? graphQLErrors[0].message : networkError;\n setAlert({\n type: 'error',\n message: msg,\n });\n };\n const [deleteAccount] = useMutation(MUTATION, { onError, onCompleted });\n\n const onDeleteMyAccount = event => {\n event.preventDefault();\n\n if (\n window.confirm(\n 'Are you sure you want to delete your profile? ' +\n 'You will not be notified of upcoming campaigns or be able to access any claimed rewards.',\n )\n ) {\n deleteAccount();\n }\n };\n\n return ;\n}\n","import React from 'react';\nimport { useParams, Link } from 'react-router-dom';\n\nexport default function SetPhoneNumber() {\n const { dealId: dealHashid, brandSlug } = useParams();\n return (\n \n Add My Phone Number\n \n );\n}\n","import React, { useContext, useReducer } from 'react';\nimport { gql, useQuery, useMutation } from '@apollo/client';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { useParams } from 'react-router-dom';\nimport {\n Input,\n Button,\n LoadingAnimation,\n SelectorButton,\n} from 'shared/components/campaign';\nimport ViewOrdersButton from './ViewOrdersButton';\nimport LogoutButton from './LogoutButton';\nimport DeleteMyAccountLink from './DeleteMyAccountLink';\nimport SetPhoneNumber from './SetPhoneNumber';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query profileWhenAuthenticated($dealHashid: String!) {\n viewer {\n id\n canReceiveEmail\n firstName\n lastName\n email\n phone\n notifySms\n }\n quikly(hashid: $dealHashid) {\n id\n useEmailOnly\n noLiveRelease\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation profileUpdateUser($user: UserAttributes!) {\n updateUser(input: { user: $user }) {\n viewer: user {\n id\n firstName\n lastName\n email\n phone\n notifySms\n }\n errors {\n key\n message\n }\n }\n }\n`;\n\nexport default function WhenAuthenticated() {\n const [user, setUser] = useReducer(\n (state, toAdd) => ({\n ...state,\n ...toAdd,\n }),\n {\n firstName: '',\n lastName: '',\n email: '',\n notifySms: false,\n },\n );\n\n const { setAlert, setAlert: onError } = useContext(UIContext);\n const { dealId: dealHashid } = useParams();\n\n const onCompleted = ({\n viewer: { firstName, lastName, email, notifySms },\n }) => {\n setUser({ firstName, lastName, email, notifySms });\n };\n const { data, loading } = useQuery(QUERY, {\n variables: { dealHashid },\n onError,\n onCompleted,\n });\n const [updateUser, { loading: submitting }] = useMutation(MUTATION, {\n variables: { user },\n onError,\n onCompleted: res => {\n if (res.updateUser.errors.length > 0) {\n res.updateUser.errors.forEach(error => setAlert(error));\n return;\n }\n\n setAlert({ message: 'Your profile has been updated.', type: 'success' });\n onCompleted(res.updateUser);\n },\n });\n\n const options = [\n { value: 'notify_sms', label: 'SMS' },\n { value: 'notify_email', label: 'Email' },\n ];\n\n if (loading) {\n return ;\n }\n\n const {\n quikly: { useEmailOnly, noLiveRelease },\n viewer: { phone, canReceiveEmail },\n } = data;\n const { firstName, lastName, email, notifySms } = user;\n\n const showPhone = !noLiveRelease && !useEmailOnly;\n\n const handleSelectorClick = ({ target: { value } }) => {\n if (!phone) {\n setAlert({\n message: 'You must add a phone number to opt into sms notifications.',\n expire: true,\n });\n return;\n }\n\n setUser({ notifySms: value === 'notify_sms' });\n };\n\n const phoneForDisplay = (phone || '').replace(\n /(\\d{3})(\\d{3})(\\d{4})/,\n '$1-$2-$3',\n );\n\n return (\n <>\n {\n e.preventDefault();\n updateUser();\n }}\n >\n {firstName || lastName ? (\n

\n {firstName}\n  \n {lastName}\n

\n ) : (\n

Profile

\n )}\n {\n setUser({ firstName: e.target.value });\n }}\n />\n {\n setUser({ lastName: e.target.value });\n }}\n />\n {canReceiveEmail && (\n {\n setUser({ email: e.target.value });\n }}\n />\n )}\n\n {showPhone && (\n <>\n \n\n
\n

Notification preference:

\n
\n \n
\n
\n \n )}\n\n \n\n {showPhone && (\n \n MSG & DATA RATES MAY APPLY. Clicking Verify My Number and\n selecting "SMS" above shall constitute my electronic\n signature and is my agreement to receive up to four (4) text\n messages total to my phone number from Quikly's automated system.\n Consent to receive text messages is not required to make a purchase.\n Text STOP to cancel.\n \n )}\n \n\n
    \n {showPhone && (\n
  • \n \n
  • \n )}\n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n
  • \n
\n \n );\n}\n","import React, { useContext } from 'react';\nimport { gql, useQuery, useMutation } from '@apollo/client';\nimport { useParams } from 'react-router-dom';\nimport { Input, Button, SelectorButton } from 'shared/components/campaign';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport LogoutButton from './LogoutButton';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query profileNotAuthenticated($dealHashid: String!) {\n viewer {\n id\n fullName\n email\n phone\n notifySms\n }\n quikly(hashid: $dealHashid) {\n id\n useEmailOnly\n noLiveRelease\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation sendAuthEmail($dealHashid: String!) {\n sendAuthEmail(input: { dealHashid: $dealHashid }) {\n clientMutationId\n }\n }\n`;\n\nexport default function WhenNotAuthenticated() {\n const { setAlert, setAlert: onError } = useContext(UIContext);\n\n const onCompleted = () => {\n setAlert({\n message: 'Email Sent! Check your inbox for the link to log in.',\n type: 'success',\n });\n };\n const { dealId: dealHashid } = useParams();\n const [sendAuthEmail, { loading: submitting }] = useMutation(MUTATION, {\n variables: { dealHashid },\n onError,\n onCompleted,\n });\n const { data, loading } = useQuery(QUERY, {\n variables: { dealHashid },\n onError,\n });\n\n if (loading) {\n return null;\n }\n\n const {\n viewer: { fullName, email, phone, notifySms, canReceiveEmail },\n quikly: { useEmailOnly, noLiveRelease },\n } = data;\n\n const showPhone = !noLiveRelease && !useEmailOnly;\n\n const phoneNumberForDisplay = (phone || '').replace(\n /(\\d{3})(\\d{3})(\\d{4})/,\n '$1-$2-$3',\n );\n const options = [\n { value: 'notify_sms', label: 'SMS' },\n { value: 'notify_email', label: 'Email' },\n ];\n\n return (\n <>\n {\n e.preventDefault();\n sendAuthEmail();\n }}\n >\n

{fullName}

\n {canReceiveEmail && (\n \n )}\n {showPhone && (\n <>\n \n\n
\n

Your current notification preferences:

\n
\n \n
\n
\n \n )}\n\n

\n To change your settings we need to send a magic link to your email.\n Once you click that link you will be able make changes.\n

\n \n Send Email\n \n \n
    \n
  • \n \n
  • \n
\n \n );\n}\n","import React, { useContext } from 'react';\nimport { gql, useQuery } from '@apollo/client';\nimport { UIContext } from 'v4/App/providers/UIProvider';\n\nimport WhenAuthenticated from './WhenAuthenticated';\nimport WhenNotAuthenticated from './WhenNotAuthenticated';\n\nconst QUERY = gql`\n query profile {\n viewer {\n id\n authenticated\n }\n }\n`;\n\nexport default function Profile() {\n const { setAlert: onError } = useContext(UIContext);\n const { data, loading } = useQuery(QUERY, { onError });\n\n if (loading) {\n return null;\n }\n\n const {\n viewer: { authenticated },\n } = data;\n\n return (\n
\n {!authenticated && }\n {authenticated && }\n
\n );\n}\n","import React, { useContext, useState } from 'react';\nimport { gql, useQuery, useMutation } from '@apollo/client';\nimport { useParams, useHistory } from 'react-router-dom';\nimport { Input, Button } from 'shared/components/campaign';\nimport { formatPhoneNumber } from 'v4/App/utils';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport './styles.scss';\n\nconst QUERY = gql`\n query profilePref($dealHashid: String!) {\n viewer {\n id\n phone\n authenticated\n }\n quikly(hashid: $dealHashid) {\n id\n confirmTextMessage: customContentFor(key: \"phone_confirm_text_message\")\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation confirmPhoneProfile($dealHashid: String!, $phone: String!) {\n confirmPhone(input: { dealHashid: $dealHashid, phoneNumber: $phone }) {\n confirmed\n errors {\n key\n message\n }\n }\n }\n`;\n\n// TODO: handle reconfirm current number\n\nexport default function ProfilePreferences() {\n const { setAlert, setAlert: onError } = useContext(UIContext);\n const { dealId: dealHashid, brandSlug } = useParams();\n const history = useHistory();\n const [phone, setPhone] = useState('');\n\n const { data } = useQuery(QUERY, {\n variables: { dealHashid },\n onCompleted: ({ viewer }) => {\n if (viewer.authenticated) {\n setPhone(viewer.phone);\n }\n },\n onError,\n });\n\n const onCompleted = ({\n confirmPhone: { confirmed: needToVerifyNumber, errors },\n }) => {\n if (needToVerifyNumber) {\n history.push(`/${brandSlug}/q/${dealHashid}/profile/verify`);\n return;\n }\n const errorMessage = errors.reduce((acc, error) => {\n if (error.key === 'IN_USE') {\n return (\n <>\n {error.message}\n \n Click here to sign up with a different email address.\n \n \n );\n }\n\n return error.message;\n }, null);\n\n if (errorMessage) {\n setAlert({\n type: 'error',\n message: errorMessage,\n });\n }\n };\n const [onSubmit, { loading: submitting }] = useMutation(MUTATION, {\n variables: { dealHashid, phone },\n onError,\n onCompleted,\n });\n\n const {\n quikly: { confirmTextMessage },\n } = data || {\n quikly: { confirmTextMessage: '' },\n };\n\n const onChange = e => {\n const trueValue = e.target.value.replace(/\\D/g, '');\n if (trueValue.length <= 10) {\n setPhone(trueValue);\n }\n };\n\n const CustomTextRules = () => {\n if (confirmTextMessage) {\n return (\n \n );\n }\n\n return (\n <>\n Text Message. MSG & DATA\n RATES MAY APPLY. Clicking Verify My Number and selecting “Text Message”\n above shall constitute my electronic signature and is my agreement to\n receive up to four (4) text messages total to my phone number from\n Quikly's automated system. Consent to receive text messages is not\n required to make a purchase. Text STOP to cancel.\n \n );\n };\n\n return (\n <>\n

Update Your Preference

\n

\n When you enter your phone number below you'll be set up to receive\n text notifications from us. The faster you respond to your live release\n notification, the better the reward.\n

\n\n

\n Enter your phone number to be notified via text:\n

\n\n {\n e.preventDefault();\n onSubmit();\n }}\n >\n \n \n \n \n \n \n \n );\n}\n","import React, { useState, useContext } from 'react';\nimport { Button, InputActivationCode } from 'shared/components/campaign';\nimport { useMutation, useQuery } from '@apollo/client';\nimport { gql } from '@apollo/client';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport { useParams, useHistory } from 'react-router-dom';\n\nconst QUERY = gql`\n query profileVerify {\n viewer {\n id\n pendingPhone\n }\n }\n`;\n\nconst MUTATION = gql`\n mutation profileVerifyPhone(\n $code: String!\n $notifySms: Boolean!\n $dealHashid: String!\n ) {\n verifyPhone(\n input: { code: $code, notifySms: $notifySms, dealHashid: $dealHashid }\n ) {\n clientMutationId\n }\n }\n`;\n\nexport default function Verify() {\n const { setAlert: onError } = useContext(UIContext);\n const [code, setCode] = useState('');\n const { dealId: dealHashid, brandSlug } = useParams();\n const history = useHistory();\n const { data } = useQuery(QUERY, { onError });\n const onCompleted = () => {\n history.push(`/${brandSlug}/q/${dealHashid}/profile`);\n };\n const [submit, { loading: submitting }] = useMutation(MUTATION, {\n variables: { code, dealHashid, notifySms: true }, // notifySms hard coded to true. If they are on this screen they are opting into sms.\n onCompleted,\n onError,\n });\n\n const {\n viewer: { pendingPhone },\n } = data || { viewer: { pendingPhone: '' } };\n\n const formattedPhone = pendingPhone.replace(\n /(\\d{3})(\\d{3})(\\d{4})/,\n '$1-$2-$3',\n );\n\n return (\n <>\n

Verify Your Phone Number

\n

\n Check your text messages and enter the code we sent below:\n

\n \n

{`We sent a text message to ${formattedPhone}. `}

\n \n \n );\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Footer from 'v4/App/components/Footer';\nimport LegalLinks from 'v4/App/components/LegalLinks';\nimport Navbar from './Navbar';\nimport Orders from './Orders';\nimport ProfilePage from './ProfilePage';\nimport ProfilePreferences from './ProfilePreferences';\nimport Verify from './Verify';\n\nconst Profile = () => (\n <>\n \n \n \n \n \n \n \n
\n \n
\n \n);\n\nexport default Profile;\n","import React, { Suspense } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport Auth from './components/Auth';\nimport CampaignClosed from './components/CampaignClosed';\nimport PostSignUp from './components/PostSignUp';\nimport Profile from './components/Profile';\nimport Landing from './components/Landing';\nimport StaticContent from './components/StaticContent';\n\nconst DashboardRoutes = React.lazy(() =>\n import('./components/Dashboard/routes'),\n);\n\nexport default function AppRoutes() {\n return (\n \n \n \n \n\n \n \n \n \n \n \n \n \n );\n}\n","import { gql, useQuery } from '@apollo/client';\nimport React, { useContext, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { Wrapper } from 'shared/components/campaign/Container';\nimport Container from 'v4/App/components/Container';\nimport Modal from 'v4/App/components/Modal';\nimport { UIContext } from 'v4/App/providers/UIProvider';\nimport AlertNotification from './components/AlertNotification';\nimport Overlay from './Overlay';\nimport AppRoutes from './routes';\n\nconst QUERY = gql`\n query containerQuery($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n backgroundImages {\n id\n url\n }\n brand {\n id\n fontUrl\n }\n }\n }\n`;\n\nconst AppContainer = () => {\n const {\n state: { fullscreenContainer },\n } = useContext(UIContext);\n\n const { dealId: dealHashid } = useParams();\n const { data } = useQuery(QUERY, {\n variables: { dealHashid },\n });\n\n const {\n quikly: {\n backgroundImages,\n brand: { fontUrl },\n },\n } = data || {\n overrideEnabled: false,\n quikly: { backgroundImages: [{ url: '' }], brand: { fontUrl: null } },\n };\n\n useEffect(() => {}, []);\n\n // Brand Font\n if (fontUrl) {\n let cssId = 'customFontCss';\n if (!document.getElementById(cssId)) {\n let head = document.getElementsByTagName('head').item(0);\n let link = document.createElement('link');\n link.id = cssId;\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = fontUrl;\n link.media = 'all';\n head.appendChild(link);\n }\n }\n\n return (\n \n \n \n \n \n\n
\n \n
\n
\n \n );\n};\n\nexport default AppContainer;\n","import { gql, useQuery } from '@apollo/client';\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useParams } from 'react-router-dom';\nimport { useWarning } from './useWarning';\nimport styles from './styles.module.scss';\n\nconst QUERY = gql`\n query getWarning($dealHashid: String!) {\n quikly(hashid: $dealHashid) {\n id\n brand {\n id\n showWarning\n slug\n }\n warningText: customContentFor(key: \"warning_text\")\n warningSubtext: customContentFor(key: \"warning_subtext\")\n warningTop: customContentFor(key: \"warning_top\")\n }\n }\n`;\n\nfunction WarningComponent() {\n const { setHeight } = useWarning();\n\n const { dealId: dealHashid } = useParams();\n\n const { data } = useQuery(QUERY, {\n variables: { dealHashid },\n });\n\n const settings = {\n minFontSize: 1,\n maxFontSize: 1000,\n minTextAreaRatio: 0.6,\n maxTextAreaRatio: 0.7,\n transformXScale: 1,\n transformYScale: 1,\n transformStep: 0.05,\n };\n\n const borderDims = useRef({\n area: 1,\n clientHeight: 2,\n });\n\n const textDims = useRef({\n area: 1,\n clientHeight: 1,\n fontSize: 1,\n });\n\n const textAreaRatio = useRef(0);\n\n const transformScale = useRef({\n x: 1,\n y: 1,\n });\n\n const windowWidth = useRef();\n const windowWidthIntervalId = useRef();\n const timeoutId = useRef();\n const warningRef = useRef();\n const borderRef = useRef();\n const textRef = useRef();\n\n const {\n quikly: {\n brand: { showWarning, slug },\n warningText,\n warningSubtext,\n warningTop,\n },\n } = data || {\n quikly: {\n brand: {\n showWarning: false,\n slug: '',\n },\n warningText: '',\n warningSubtext: '',\n warningTop: null,\n },\n };\n\n function getElementDims(elem) {\n const style = window.getComputedStyle(elem);\n const rect = elem.getBoundingClientRect();\n return {\n offsetWidth: elem.offsetWidth,\n clientWidth: elem.clientWidth,\n computedWidth: Math.floor(rect.width),\n clientHeight: elem.clientHeight,\n computedHeight: Math.floor(rect.height),\n fontSize: parseFloat(style.getPropertyValue('font-size')),\n area: Math.floor(rect.width) * Math.floor(rect.height),\n };\n }\n\n function recalculate() {\n borderDims.current = getElementDims(borderRef.current);\n textDims.current = getElementDims(textRef.current);\n textAreaRatio.current = textDims.current.area / borderDims.current.area;\n }\n\n function changeTextSize(delta) {\n textRef.current.style.fontSize = `${textDims.current.fontSize + delta}px`;\n borderRef.current.style.borderWidth = `${(textDims.current.fontSize +\n delta) /\n 12}px`;\n recalculate();\n }\n\n function changeTextScale(delta, axis) {\n if (axis === 'y') {\n transformScale.current.y += delta;\n }\n\n if (axis === 'x') {\n transformScale.current.x += delta;\n }\n\n if (window.navigator.userAgent.indexOf('Trident') > -1) {\n textRef.current.style.transform = `translateY(-50%) scaleX(${transformScale.current.x}) scaleY(${transformScale.current.y})`;\n } else {\n textRef.current.style.transform = `scaleX(${transformScale.current.x}) scaleY(${transformScale.current.y})`;\n }\n\n recalculate();\n }\n\n function checkTextFit() {\n if (!textRef.current) {\n return;\n }\n\n textRef.current.style.fontSize = `${settings.minFontSize}px`;\n transformScale.current = { x: 1, y: 1 };\n changeTextScale(0);\n\n while (\n textAreaRatio.current < settings.minTextAreaRatio &&\n textDims.current.clientHeight < borderDims.current.clientHeight &&\n textDims.current.fontSize < settings.maxFontSize\n ) {\n changeTextSize(1);\n }\n\n if (\n textAreaRatio.current > settings.maxTextAreaRatio ||\n textDims.current.clientHeight > borderDims.current.clientHeight\n ) {\n changeTextSize(-1);\n }\n\n // Make text fill height of label using scaleY to skew vertically until above 60%\n while (\n textAreaRatio.current < settings.minTextAreaRatio &&\n textDims.current.computedHeight < borderDims.current.clientHeight\n ) {\n changeTextScale(settings.transformStep, 'y');\n }\n\n if (\n textAreaRatio.current > settings.maxTextAreaRatio ||\n textDims.current.computedHeight > borderDims.current.clientHeight\n ) {\n changeTextScale(-settings.transformStep, 'y');\n }\n\n // Make text fill width of label using scaleX to skew horizontally until above 60%\n while (\n textAreaRatio.current < settings.minTextAreaRatio &&\n textDims.current.computedWidth < borderDims.current.clientWidth\n ) {\n changeTextScale(settings.transformStep, 'x');\n }\n\n if (\n textAreaRatio.current > settings.maxTextAreaRatio ||\n textDims.current.computedWidth > borderDims.current.clientWidth\n ) {\n changeTextScale(-settings.transformStep, 'x');\n }\n }\n\n function getWarningHeight() {\n return warningRef.current ? warningRef.current.offsetHeight : 0;\n }\n\n function setPadding(height) {\n document\n .getElementsByTagName('body')[0]\n .setAttribute('style', 'padding-top:' + height + 'px;');\n }\n\n function updateHeights() {\n const height = getWarningHeight();\n setHeight(height);\n setPadding(height);\n }\n\n function onResize() {\n clearTimeout(timeoutId.current);\n\n timeoutId.current = setTimeout(() => {\n checkTextFit();\n }, 50);\n }\n\n function detectWindowWidthChange() {\n const pageBody = document.body;\n windowWidth.current = pageBody.clientWidth;\n windowWidthIntervalId.current = setInterval(() => {\n if (windowWidth.current !== pageBody.clientWidth) {\n checkTextFit();\n windowWidth.current = pageBody.clientWidth;\n }\n }, 50);\n }\n\n useLayoutEffect(() => {\n if (!showWarning) {\n return;\n }\n\n checkTextFit();\n detectWindowWidthChange();\n\n window.addEventListener('resize', onResize);\n return function cleanup() {\n window.removeEventListener('resize', onResize);\n clearInterval(windowWidthIntervalId);\n };\n }, [showWarning]);\n\n useEffect(() => {\n if (!showWarning) {\n return;\n }\n\n updateHeights();\n\n window.addEventListener('resize', updateHeights);\n return function cleanup() {\n window.removeEventListener('resize', updateHeights);\n };\n }, [showWarning]);\n\n if (!showWarning) {\n return null;\n }\n\n return (\n \n
\n {warningTop && (\n

{warningTop}

\n )}\n \n

\n {warningText}\n

\n
\n

\n {(slug === 'velo' || slug === 'vuse') && 'UNDERAGE SALE PROHIBITED'}\n {warningSubtext}\n

\n
\n
\n );\n}\n\nexport default function Warning() {\n const [element, setElement] = useState(null);\n\n useEffect(() => {\n setElement(document.getElementById('warning-portal'));\n }, []);\n\n if (!element) {\n return null;\n }\n\n return ReactDOM.createPortal(, element);\n}\n","import { emitter, experimentDebugger } from '@marvelapp/react-ab-test';\nimport M from 'utils/Metrics';\n\n// will not display on production builds\nexperimentDebugger.enable();\n\nemitter.addPlayListener((experimentName, variantName) => {\n M.track('ABTest', {\n properties: { event: 'start', experimentName, variantName },\n gaAction: `start-${experimentName}`,\n gaLabel: variantName,\n });\n});\n\nemitter.addWinListener((experimentName, variantName) => {\n M.track('ABTest', {\n properties: { event: 'win', experimentName, variantName },\n gaAction: `win-${experimentName}`,\n gaLabel: variantName,\n });\n});\n","import React, { useEffect } from 'react';\nimport { CookiesProvider } from 'react-cookie';\nimport { Provider } from 'react-redux';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport Alert from 'utils/Alert';\nimport ErrorBoundary from 'utils/ErrorBoundary';\nimport UIProvider, { UIContext } from 'v4/App/providers/UIProvider';\nimport { connection } from 'v4/App/utils';\nimport { Provider as ProvideAuth } from 'shared/useAuth';\nimport { Provider as WarningProvider } from 'v4/App/components/Warning/useWarning';\nimport { PageTracker, ScrollToTop } from './components';\nimport StaticContent from './components/StaticContent';\nimport AppContainer from './AppContainer';\nimport Warning from './components/Warning';\n\nimport './experiments';\nimport ReviewerRedirect from './ReviewerRedirect';\nimport ReviewerRedirectV2 from './ReviewerRedirectV2';\nimport './styles.scss';\n\nconst App = ({ store, actions: { setDomainState }, ...rest }) => {\n useEffect(() => {\n setDomainState(rest);\n }, []);\n\n const reviewerOnlyRoutes = [\n }\n />,\n }\n />,\n ];\n\n const authToken = rest.user ? rest.user.authToken : undefined;\n\n return (\n \n \n \n \n \n \n \n {rest.override.enabled && reviewerOnlyRoutes}\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\nexport default connection(() => ({}))(App);\n","import 'whatwg-fetch';\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport 'classlist-polyfill';\nimport 'utils/polyfills/forEach';\nimport 'utils/polyfills/arrayFrom';\nimport 'utils/polyfills/cssVariables';\nimport 'utils/polyfills/closest';\n// import 'utils/sentry'; // Disabled for RJR\n\n// disabled for rjr\n//import 'v4/initializers/facebook';\n\nimport 'utils/postMessageOnResize';\n\nimport mountComponent from 'utils/reactRails';\nimport App from 'v4/App';\nimport store from 'v4/store';\n\nimport 'shared/components/styles/base.scss';\n\nmountComponent(App, store);\n"],"sourceRoot":""}