{"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":""}