{"version":3,"file":"js/participant_byoa_apply-4830057f5685f2763610.js","mappings":"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","sources":["webpack://user-interviews/./app/javascript/participant/apply/apply_sign_up.jsx","webpack://user-interviews/./app/javascript/packs/participant_byoa_apply.js","webpack://user-interviews/./app/javascript/components/dope_form/dope_form.tsx","webpack://user-interviews/./app/javascript/design_system_components/logo/logo.module.css?cfd9","webpack://user-interviews/./app/javascript/design_system_components/logo/logo.tsx","webpack://user-interviews/./app/javascript/hooks/use_http.js","webpack://user-interviews/./app/javascript/hooks/use_client_has_rendered.ts","webpack://user-interviews/./app/javascript/hooks/use_rails_context.tsx","webpack://user-interviews/./app/javascript/hooks/use_csrf.tsx","webpack://user-interviews/./app/javascript/participant/apply/study_details_accordion.jsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport * as routes from 'lib/routes';\nimport { ErrorRenderer } from 'lib/errors';\n\nimport {\n Button,\n Card,\n CardSizes,\n CardStack,\n CheckboxButton,\n CheckboxButtonGroup,\n FormControlLabel,\n FormGroup,\n Input,\n LoadingOverlay,\n} from '@user-interviews/ui-design-system';\n\nimport useHttp from 'hooks/use_http';\nimport { TimezoneSelect } from 'common/timezone_select';\nimport { DopeForm } from 'components/dope_form';\nimport { Logo } from 'design_system_components/logo';\n\nimport StudyDetailsAccordion from './study_details_accordion';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './apply_sign_up.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nfunction ApplySignUp({\n dataConsentNoticeText,\n email,\n errors,\n firstName,\n isDataConsentNoticeActive,\n isDataConsentNoticeChecked,\n isDataConsentNoticeErrorPresent,\n lastName,\n logoUrl,\n projectAccessCode,\n projectId,\n teamName,\n timezoneName,\n}) {\n const { get, loading } = useHttp();\n const [projectDetails, setProjectDetails] = useState(undefined);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [dataConsentNoticeChecked, setDataConsentNoticeChecked] = useState(\n isDataConsentNoticeChecked,\n );\n\n const handleDCNCheckboxChange = () =>\n setDataConsentNoticeChecked((prev) => !prev);\n\n const handleSubmit = () => {\n setIsSubmitting(true);\n };\n\n const APPLY_SIGN_UP_FORM_POSSIBLE_ERROR_INPUT_IDS = {\n first_name: 'first-name',\n last_name: 'last-name',\n email: 'email',\n timezone_name: 'timezone-name',\n accept_data_consent_notice: 'data-consent-notice-checkbox',\n };\n\n const focusOnFirstInputError = (key) => {\n const firstErroredInputId =\n APPLY_SIGN_UP_FORM_POSSIBLE_ERROR_INPUT_IDS[key];\n const firstErroredElement = document.getElementById(firstErroredInputId);\n if (firstErroredElement) {\n firstErroredElement.focus();\n }\n };\n\n const findFirstErroredInput = () => {\n setTimeout(() => {\n focusOnFirstInputError(Object.keys(errors)[0]);\n }, '0');\n };\n\n useEffect(() => {\n if (errors) {\n findFirstErroredInput();\n }\n\n async function fetchProjectDetails() {\n const url = routes.api_project_participation_details_path({\n project_id: projectId,\n });\n\n const response = await get(url, {\n onError: (error) =>\n ErrorRenderer.alert(error, 'fetching participation details'),\n });\n\n if (response) {\n setProjectDetails(response);\n }\n }\n\n fetchProjectDetails();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors, projectId]);\n\n return (\n <main className=\"ApplySignUp\">\n <CardStack size={CardSizes.SMALL}>\n <div className=\"ApplySignUp__header\">\n {logoUrl && (\n <Logo alignment=\"center\" alt={`${teamName} logo`} src={logoUrl} />\n )}\n </div>\n <h1 className=\"ApplySignUp__header__title\">\n You’ve been invited to participate in a study\n </h1>\n <LoadingOverlay visible={loading} />\n\n <div className=\"ApplySignUp__form\">\n {projectDetails && (\n <Card noPadding size={CardSizes.SMALL}>\n <StudyDetailsAccordion\n description={projectDetails.publicDescription}\n incentive={projectDetails.incentive}\n noIncentive={projectDetails.noIncentive}\n requiresDocumentSignature={\n projectDetails.requiresDocumentSignature\n }\n sessionLength={projectDetails.sessionLength}\n title={projectDetails.publicTitle}\n />\n </Card>\n )}\n <DopeForm\n action={routes.submit_projects_apply_path({\n access_code: projectAccessCode || 'FAKE_ACCESS',\n })}\n onSubmit={handleSubmit}\n >\n <Card className=\"ApplySignUp__Card\" size={CardSizes.SMALL}>\n <FormGroup\n errors={{ firstName: errors.first_name }}\n inputKey=\"firstName\"\n label=\"First name\"\n labelHtmlFor=\"first-name\"\n required\n >\n <Input\n aria-describedby={\n errors.first_name && 'form-errors-firstName'\n }\n aria-invalid={!!errors.first_name}\n aria-required=\"true\"\n defaultValue={firstName}\n id=\"first-name\"\n name=\"first_name\"\n />\n </FormGroup>\n <FormGroup\n errors={{ lastName: errors.last_name }}\n inputKey=\"lastName\"\n label=\"Last name\"\n labelHtmlFor=\"last-name\"\n required\n >\n <Input\n aria-describedby={errors.last_name && 'form-errors-lastName'}\n aria-invalid={!!errors.last_name}\n aria-required=\"true\"\n defaultValue={lastName}\n id=\"last-name\"\n name=\"last_name\"\n />\n </FormGroup>\n <FormGroup\n errors={{ email: errors.email }}\n inputKey=\"email\"\n label=\"Email\"\n labelHtmlFor=\"email\"\n required\n >\n <Input\n aria-describedby={errors.email && 'form-errors-email'}\n aria-invalid={!!errors.email}\n aria-required=\"true\"\n defaultValue={email}\n id=\"email\"\n name=\"email\"\n />\n </FormGroup>\n {isDataConsentNoticeActive && (\n <FormGroup\n errors={{\n dataConsentNotice:\n isDataConsentNoticeErrorPresent &&\n 'Notice must be accepted',\n }}\n inputKey=\"dataConsentNotice\"\n labelHtmlFor=\"data-consent-notice\"\n required\n >\n <div className=\"ApplySignUp__form__DataConsentNotice\">\n <CheckboxButtonGroup\n className=\"ApplySignUp__form__DataConsentNotice__CheckboxButtonGroup\"\n defaultValue={isDataConsentNoticeChecked}\n >\n <FormControlLabel\n bordered={false}\n Control={() => (\n <CheckboxButton\n aria-describedby={\n isDataConsentNoticeErrorPresent\n ? 'form-errors-dataConsentNotice'\n : null\n }\n aria-invalid={isDataConsentNoticeErrorPresent}\n aria-required=\"true\"\n checked={dataConsentNoticeChecked}\n id=\"data-consent-notice-checkbox\"\n name=\"accept_data_consent_notice\"\n value={1}\n onChange={handleDCNCheckboxChange}\n />\n )}\n id=\"data-consent-notice-checkbox\"\n text=\"\"\n >\n <div\n className=\"ApplySignUp__form__DataConsentNotice__content--scrolling\"\n dangerouslySetInnerHTML={{\n __html: dataConsentNoticeText,\n }}\n />\n </FormControlLabel>\n </CheckboxButtonGroup>\n </div>\n </FormGroup>\n )}\n </Card>\n\n <div className=\"ApplySignUp__form__submit__group\">\n <FormGroup\n errors={{ timezone: errors.timezone_name }}\n inputKey=\"timezone\"\n labelHtmlFor=\"timezone-name\"\n required\n >\n <TimezoneSelect\n defaultValue={timezoneName}\n id=\"timezone-name\"\n isSearchable\n menuPlacement=\"top\"\n name=\"timezone_name\"\n placeholder=\"Select timezone...\"\n useSystemFallback\n />\n </FormGroup>\n <Button\n className=\"ApplySignUp__form__continue-button\"\n disabled={loading || isSubmitting}\n type=\"submit\"\n variant=\"primary\"\n >\n Continue to participate\n </Button>\n <input\n id=\"accept_terms\"\n name=\"accept_terms\"\n type=\"hidden\"\n value=\"1\"\n />\n </div>\n </DopeForm>\n </div>\n </CardStack>\n </main>\n );\n}\n\nApplySignUp.propTypes = {\n dataConsentNoticeText: propTypes.string,\n email: propTypes.string,\n errors: propTypes.object,\n firstName: propTypes.string,\n isDataConsentNoticeActive: propTypes.bool,\n isDataConsentNoticeChecked: propTypes.bool,\n isDataConsentNoticeErrorPresent: propTypes.bool,\n lastName: propTypes.string,\n logoUrl: propTypes.string,\n projectAccessCode: propTypes.string,\n projectId: propTypes.number.isRequired,\n teamName: propTypes.string,\n timezoneName: propTypes.string,\n};\n\nexport default ApplySignUp;\n","import { registerComponent } from 'lib/react_on_rails';\nimport ApplySignUp from 'participant/apply/apply_sign_up';\n\n// eslint-disable-next-line local-rules/css_modules\nimport 'participant/apply/apply_success.scss';\n\nregisterComponent('ApplySignUp', ApplySignUp);\n","import type { ForwardedRef, FormEventHandler, ReactNode } from 'react';\n\nimport React, { forwardRef } from 'react';\nimport { Form } from '@user-interviews/ui-design-system';\nimport { useCSRF } from 'hooks/use_csrf';\n\ntype DopeFormProps = {\n children?: ReactNode;\n action?: string;\n className?: string;\n id: string;\n method?: string;\n multipart?: string;\n name?: string;\n onSubmit?: FormEventHandler<HTMLFormElement>;\n};\n\nexport const DopeForm = forwardRef(\n (\n { children, ...props }: DopeFormProps,\n ref: ForwardedRef<HTMLFormElement>,\n ) => {\n const { csrfToken, csrfParam } = useCSRF();\n\n return (\n <Form {...props} ref={ref}>\n <input name={csrfParam} type=\"hidden\" value={csrfToken} />\n {children}\n </Form>\n );\n },\n);\n","// extracted by mini-css-extract-plugin\nvar _1 = \"TrQMEu0ChvYLrooq_1sL\";\nvar _2 = \"Qrbg_u90rXoFjjS8XK10\";\nexport { _1 as \"logo\", _2 as \"logoContainer\" }\n","import React from 'react';\n\nimport { FlexContainer } from '@user-interviews/ui-design-system';\n\nimport * as styles from './logo.module.css';\n\ntype LogoProps = {\n alt: string;\n alignment: 'center' | 'flex-start' | 'flex-end';\n src: string;\n};\n\nexport function Logo({ alt, alignment = 'center', src }: LogoProps) {\n return (\n <FlexContainer\n className={styles.logoContainer}\n flexDirection=\"row\"\n justifyContent={alignment}\n >\n <img alt={alt} className={styles.logo} src={src} />\n </FlexContainer>\n );\n}\n","import { useMemo, useState } from 'react';\n\nimport Http, { FormatResponse } from 'lib/http';\nimport { useTracking } from 'react-tracking';\nimport { reactTrackingEvent } from 'lib/analytics';\n\nconst defaultOnError = (error) => {\n throw error;\n};\n\nconst defaultOnSuccess = FormatResponse.jsonApi({});\n\nfunction buildMakeRequest(method, setLoading, trackEvent) {\n return async (\n url,\n { data = {}, onSuccess = defaultOnSuccess, onError = defaultOnError } = {},\n ) => {\n let start;\n try {\n setLoading(true);\n\n start = performance.now();\n const response = await Http[method].call(null, url, data);\n return onSuccess(response);\n } catch (error) {\n return onError(error);\n } finally {\n setLoading(false);\n const end = performance.now() - start;\n const pageLocation = window.location.pathname\n .replace(/\\/[0-9]+\\//g, '/:id/')\n .replace(/\\/[0-9]+/g, '/:id');\n // e.g.: Loading Page -- '/projects/:id/messages/:id'\n trackEvent({\n event: `Loading Page -- '${pageLocation.replace(/\\/+$/, '')}'`,\n request_url: url,\n timeSpent: end,\n });\n }\n };\n}\n\nconst useHttp = () => {\n const [loading, setLoading] = useState(false);\n const { trackEvent } = useTracking({}, { dispatch: reactTrackingEvent });\n /* eslint-disable react-hooks/exhaustive-deps */\n return {\n loading,\n delete: useMemo(\n () => buildMakeRequest('delete', setLoading, trackEvent),\n [],\n ),\n get: useMemo(() => buildMakeRequest('get', setLoading, trackEvent), []),\n patch: useMemo(() => buildMakeRequest('patch', setLoading, trackEvent), []),\n post: useMemo(() => buildMakeRequest('post', setLoading, trackEvent), []),\n put: useMemo(() => buildMakeRequest('put', setLoading, trackEvent), []),\n };\n /* eslint-enable react-hooks/exhaustive-deps */\n};\n\nexport default useHttp;\n","import { useState, useEffect } from 'react';\n\nexport function useClientHasRendered() {\n const [hasRendered, setHasRendered] = useState(false);\n\n useEffect(() => {\n setHasRendered(true);\n }, []);\n\n return hasRendered;\n}\n","import React, {\n useMemo,\n useContext,\n createContext,\n type ReactNode,\n} from 'react';\nimport { z } from 'zod';\n\nimport { customContextSchema } from 'lib/react_on_rails/custom_context_schema';\n\ntype ReactOnRailsContext = z.infer<typeof customContextSchema>;\n\nexport type RailsContextValue = {\n env: ReactOnRailsContext['env'];\n request: {\n csrfParam: ReactOnRailsContext['request']['csrfParam'];\n csrfToken: ReactOnRailsContext['request']['csrfToken'];\n location: ReactOnRailsContext['location'];\n };\n uiState: ReactOnRailsContext['uiState'];\n user: ReactOnRailsContext['user'];\n};\n\nexport const RailsContext = createContext<RailsContextValue | null>(null);\n\nexport function useRailsContext() {\n const ctx = useContext(RailsContext);\n\n if (!ctx) return null;\n\n return ctx;\n}\n\ntype RailsContextProviderProps = {\n railsContext: unknown;\n children: ReactNode;\n};\n\nexport function RailsContextProvider({\n railsContext,\n children,\n}: RailsContextProviderProps) {\n const { env, location, request, uiState, user } =\n customContextSchema.parse(railsContext);\n\n const contextValue = useMemo(\n () => ({\n env,\n request: {\n ...request,\n location,\n },\n uiState,\n user,\n }),\n [env, location, request, uiState, user],\n );\n\n return (\n <RailsContext.Provider value={contextValue}>\n {children}\n </RailsContext.Provider>\n );\n}\n","import { useState, useEffect } from 'react';\n\nimport { isServer } from 'lib/ssr_utils';\nimport { useClientHasRendered } from './use_client_has_rendered';\nimport { useRailsContext } from './use_rails_context';\n\nfunction getMetaContent(name: string) {\n if (isServer) return '';\n\n return (\n document.querySelector(`meta[name=\"${name}\"]`)?.getAttribute('content') ??\n ''\n );\n}\n\nexport function useCSRF() {\n const railsContext = useRailsContext();\n const clientHasRendered = useClientHasRendered();\n const [csrfParam, setCsrfParam] = useState(\n () => railsContext?.request?.csrfParam ?? '',\n );\n const [csrfToken, setCsrfToken] = useState(\n () => railsContext?.request?.csrfToken ?? '',\n );\n\n useEffect(() => {\n if (!clientHasRendered) return;\n\n if (!csrfParam) setCsrfParam(getMetaContent('csrf-param'));\n if (!csrfToken) setCsrfToken(getMetaContent('csrf-token'));\n }, [clientHasRendered, csrfParam, csrfToken]);\n\n return { csrfToken, csrfParam };\n}\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faClock,\n faFileSignature,\n faGift,\n faBell,\n} from 'lib/font_awesome/regular';\n\nimport {\n Accordion,\n AccordionItem,\n AccordionToggle,\n AccordionCollapse,\n} from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './study_details_accordion.scss';\n\n// Disabled when adding max-props rule.\n// Future work should stay under 6 props\n// eslint-disable-next-line local-rules/max-props\nfunction StudyDetailsAccordion({\n description,\n requiresDocumentSignature,\n incentive,\n noIncentive,\n sessionLength,\n title,\n deadline,\n}) {\n return (\n <Accordion defaultActiveKey=\"0\">\n <AccordionItem borderless>\n <AccordionToggle eventKey=\"0\" title={title} />\n <AccordionCollapse\n eventKey=\"0\"\n UNSAFE_className=\"StudyDetailsAccordion__collapse\"\n >\n <div className=\"StudyDetailsAccordion__details\">\n {deadline && (\n <div\n aria-label=\"Session length\"\n className=\"StudyDetailsAccordion__details__line-item\"\n >\n <FontAwesomeIcon className=\"fa-fw\" icon={faBell} /> Complete by{' '}\n {deadline}\n </div>\n )}\n <div\n aria-label=\"Session length\"\n className=\"StudyDetailsAccordion__details__line-item\"\n >\n <FontAwesomeIcon className=\"fa-fw\" icon={faClock} />{' '}\n {sessionLength}\n </div>\n <div\n aria-label=\"Compensation\"\n className=\"StudyDetailsAccordion__details__line-item\"\n >\n {!noIncentive && (\n <>\n <FontAwesomeIcon className=\"fa-fw\" icon={faGift} />{' '}\n {incentive}\n </>\n )}\n </div>\n {requiresDocumentSignature && (\n <div aria-label=\"Document signing\">\n <FontAwesomeIcon className=\"fa-fw\" icon={faFileSignature} />{' '}\n Document review and signature required\n </div>\n )}\n </div>\n <p className=\"StudyDetailsAccordion__description\">{description}</p>\n </AccordionCollapse>\n </AccordionItem>\n </Accordion>\n );\n}\n\nStudyDetailsAccordion.propTypes = {\n deadline: propTypes.string,\n description: propTypes.string.isRequired,\n incentive: propTypes.string.isRequired,\n noIncentive: propTypes.bool,\n requiresDocumentSignature: propTypes.bool.isRequired,\n sessionLength: propTypes.string.isRequired,\n title: propTypes.string.isRequired,\n};\n\nStudyDetailsAccordion.defaultProps = {\n noIncentive: false,\n};\n\nexport default StudyDetailsAccordion;\n"],"names":["ApplySignUp","dataConsentNoticeText","email","errors","firstName","isDataConsentNoticeActive","isDataConsentNoticeChecked","isDataConsentNoticeErrorPresent","lastName","logoUrl","projectAccessCode","projectId","teamName","timezoneName","_useHttp","useHttp","get","loading","_useState2","_slicedToArray","useState","undefined","projectDetails","setProjectDetails","_useState4","isSubmitting","setIsSubmitting","_useState6","dataConsentNoticeChecked","setDataConsentNoticeChecked","handleDCNCheckboxChange","prev","APPLY_SIGN_UP_FORM_POSSIBLE_ERROR_INPUT_IDS","first_name","last_name","timezone_name","accept_data_consent_notice","useEffect","setTimeout","key","firstErroredInputId","firstErroredElement","document","getElementById","focus","focusOnFirstInputError","Object","keys","async","url","routes","project_id","response","onError","error","ErrorRenderer","alert","fetchProjectDetails","React","className","CardStack","size","CardSizes","SMALL","Logo","alignment","alt","src","LoadingOverlay","visible","Card","noPadding","StudyDetailsAccordion","description","publicDescription","incentive","noIncentive","requiresDocumentSignature","sessionLength","title","publicTitle","DopeForm","action","access_code","onSubmit","handleSubmit","FormGroup","inputKey","label","labelHtmlFor","required","Input","defaultValue","id","name","dataConsentNotice","CheckboxButtonGroup","FormControlLabel","bordered","Control","CheckboxButton","checked","value","onChange","text","dangerouslySetInnerHTML","__html","timezone","TimezoneSelect","isSearchable","menuPlacement","placeholder","useSystemFallback","Button","disabled","type","variant","propTypes","isRequired","registerComponent","forwardRef","_ref","ref","children","props","_objectWithoutProperties","_excluded","_useCSRF","useCSRF","csrfToken","csrfParam","Form","assign","_1","_2","FlexContainer","styles","flexDirection","justifyContent","defaultOnError","defaultOnSuccess","FormatResponse","jsonApi","buildMakeRequest","method","setLoading","trackEvent","data","onSuccess","start","performance","now","Http","call","end","pageLocation","window","location","pathname","replace","event","request_url","timeSpent","useTracking","dispatch","reactTrackingEvent","delete","useMemo","patch","post","put","useClientHasRendered","hasRendered","setHasRendered","RailsContext","createContext","useRailsContext","useContext","RailsContextProvider","railsContext","_customContextSchema$","customContextSchema","parse","env","request","uiState","user","contextValue","_objectSpread","Provider","getMetaContent","isServer","querySelector","getAttribute","clientHasRendered","setCsrfParam","setCsrfToken","deadline","Accordion","defaultActiveKey","AccordionItem","borderless","AccordionToggle","eventKey","AccordionCollapse","UNSAFE_className","FontAwesomeIcon","icon","faBell","faClock","faGift","faFileSignature","defaultProps"],"sourceRoot":""}