{"version":3,"file":"js/participant_social_buttons-76301deb660a5dd56f1c.js","mappings":"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","sources":["webpack://user-interviews/./app/javascript/hooks/use_zod_schema.ts","webpack://user-interviews/./app/javascript/components/dope_form/dope_form.tsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/connect_facebook_button.jsx","webpack://user-interviews/./app/javascript/hooks/use_client_has_rendered.ts","webpack://user-interviews/./app/javascript/participant/social_buttons/linkedin/connect_linkedin_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/linkedin/signup_linkedin_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/share_facebook_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/share_facebook_button.module.scss?db0a","webpack://user-interviews/./app/javascript/participant/social_buttons/twitter/share_twitter_button.module.scss?7263","webpack://user-interviews/./app/javascript/participant/social_buttons/twitter/share_twitter_button.tsx","webpack://user-interviews/./app/javascript/components/owner_boundary/context.tsx","webpack://user-interviews/./app/javascript/hooks/use_rails_context.tsx","webpack://user-interviews/./app/javascript/hoc/with_tracked_click.jsx","webpack://user-interviews/./app/javascript/hooks/use_page_title/use_page_title.ts","webpack://user-interviews/./app/javascript/hoc/utils.ts","webpack://user-interviews/./app/javascript/participant/social_buttons/sign_in_or_up_with_social.js","webpack://user-interviews/./app/javascript/hooks/use_csrf.tsx","webpack://user-interviews/./app/javascript/packs/participant_social_buttons.js","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/signup_facebook_button.jsx","webpack://user-interviews/./app/javascript/hooks/use_error_logger.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { type ZodSchema } from 'zod';\nimport { useErrorLogger } from './use_error_logger';\n\n// The goal of this hook is to provide a sane boundary between Typescript\n// and Javascript code. Using this hook with props and a corresponding\n// schema will attempt to parse the unknown into the schema. In development,\n// this will throw an error on failure. In production, this will swallow the\n// error, while ensuring it is logged to Appsignal.\nexport function useZodSchema<T>(unknownProps: unknown, schema: ZodSchema<T>) {\n const logError = useErrorLogger();\n\n return useMemo(() => {\n if (['development', 'test'].includes(process.env.NODE_ENV ?? '')) {\n return schema.parse(unknownProps);\n }\n\n try {\n return schema.parse(unknownProps);\n } catch (error) {\n logError(error as Error);\n\n return unknownProps as T;\n }\n }, [logError, schema, unknownProps]);\n}\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","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { TrackedButton } from 'common/analytics';\nimport {\n oauthActions,\n oauthPath,\n oauthProviders,\n oauthUserTypes,\n} from 'common/routing';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\nimport { DopeForm } from 'components/dope_form';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faFacebook } from 'lib/font_awesome/brands';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './connect_facebook_button.scss';\n\nfunction ConnectFacebookButton({\n className,\n buttonText,\n oauthAction,\n trackingEvent,\n returnTo,\n}) {\n const clientHasRendered = useClientHasRendered();\n\n return (\n <DopeForm\n action={oauthPath({\n action: oauthAction,\n provider: oauthProviders.FACEBOOK,\n returnTo: returnTo || clientHasRendered ? window.location.href : '',\n userType: oauthUserTypes.PARTICIPANT,\n })}\n method=\"post\"\n >\n <TrackedButton\n className={`ConnectFacebookButton btn-sign-in ${className}`}\n event={trackingEvent}\n eventData={{ provider: oauthProviders.FACEBOOK }}\n type=\"submit\"\n variant=\"brand-facebook\"\n >\n <FontAwesomeIcon className=\"icon-left\" icon={faFacebook} />\n <span className=\"btn-social__divided-content\">{buttonText}</span>\n </TrackedButton>\n </DopeForm>\n );\n}\n\nConnectFacebookButton.propTypes = {\n buttonText: propTypes.string,\n className: propTypes.string,\n oauthAction: propTypes.string,\n returnTo: propTypes.string,\n trackingEvent: propTypes.string,\n};\n\nConnectFacebookButton.defaultProps = {\n buttonText: 'Connect with Facebook',\n className: '',\n oauthAction: oauthActions.CONNECT,\n trackingEvent: trackingEvents.PARTICIPANT_OAUTH_CONNECT_CLICKED,\n};\n\nexport default ConnectFacebookButton;\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, { useRef, useState } from 'react';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSpinnerThird } from 'lib/font_awesome/solid';\n\nimport classNames from 'classnames';\n\nimport { TrackedButton } from 'common/analytics';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\nimport { DopeForm } from 'components/dope_form';\nimport {\n oauthActions,\n oauthPath,\n oauthProviders,\n oauthUserTypes,\n} from 'common/routing';\n\nimport { faLinkedinIn } from 'lib/font_awesome/brands';\nimport * as propTypes from 'lib/prop_types';\nimport { trackingEvents } from 'lib/analytics';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './connect_linkedin_button.scss';\n\nfunction ConnectLinkedInButton({\n className,\n buttonText,\n oauthAction,\n trackingEvent,\n returnTo,\n onBeforeSubmit,\n}) {\n const clientHasRendered = useClientHasRendered();\n const formRef = useRef(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleSubmit = async (event) => {\n event.preventDefault();\n setIsSubmitting(true);\n\n const ableToSubmit = await onBeforeSubmit();\n\n if (ableToSubmit) {\n formRef.current.submit();\n }\n\n setIsSubmitting(false);\n };\n\n return (\n <div>\n <DopeForm\n action={oauthPath({\n action: oauthAction,\n provider: oauthProviders.LINKEDIN,\n returnTo: returnTo || clientHasRendered ? window.location.href : '',\n userType: oauthUserTypes.PARTICIPANT,\n })}\n method=\"post\"\n ref={formRef}\n onSubmit={handleSubmit}\n >\n <TrackedButton\n className={`ConnectLinkedInButton btn-sign-in ${className}`}\n disabled={isSubmitting}\n event={trackingEvent}\n eventData={{ provider: oauthProviders.LINKEDIN }}\n type=\"submit\"\n variant=\"brand-linkedin\"\n >\n <FontAwesomeIcon\n className={classNames('icon-left', {\n 'fa-spin': isSubmitting,\n })}\n icon={isSubmitting ? faSpinnerThird : faLinkedinIn}\n />\n <span className=\"btn-social__divided-content\">{buttonText}</span>\n </TrackedButton>\n </DopeForm>\n </div>\n );\n}\n\nConnectLinkedInButton.propTypes = {\n buttonText: propTypes.string,\n className: propTypes.string,\n oauthAction: propTypes.string,\n returnTo: propTypes.string,\n trackingEvent: propTypes.string,\n onBeforeSubmit: propTypes.func,\n};\n\nConnectLinkedInButton.defaultProps = {\n buttonText: 'Connect with LinkedIn',\n className: '',\n oauthAction: oauthActions.CONNECT,\n trackingEvent: trackingEvents.PARTICIPANT_OAUTH_CONNECT_CLICKED,\n onBeforeSubmit: () => true,\n};\n\nexport default ConnectLinkedInButton;\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\n\nimport signInOrUpWithSocial from '../sign_in_or_up_with_social';\n\nimport ConnectLinkedInButton from './connect_linkedin_button';\n\nfunction SignupLinkedInButton({ className, returnTo, signIn }) {\n const clientHasRendered = useClientHasRendered();\n const { buttonText, oauthAction, trackingEventName } =\n signInOrUpWithSocial(signIn);\n\n return (\n <ConnectLinkedInButton\n buttonText={`${buttonText} with LinkedIn`}\n className={className}\n oauthAction={oauthAction}\n returnTo={returnTo || clientHasRendered ? window.location.href : null}\n trackingEvent={trackingEventName}\n />\n );\n}\n\nSignupLinkedInButton.propTypes = {\n className: propTypes.string,\n returnTo: propTypes.string,\n signIn: propTypes.bool,\n};\n\nSignupLinkedInButton.defaultProps = {\n className: null,\n signIn: false,\n};\n\nexport default SignupLinkedInButton;\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport { Button } from '@user-interviews/ui-design-system';\nimport { TrackedAnchor } from 'common/analytics';\nimport { trackingEvents } from 'lib/analytics';\nimport { faFacebook } from 'lib/font_awesome/brands';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './share_facebook_button.module.scss';\n\nconst popUpFeatures =\n 'toolbar=no,' +\n 'location=0,status=no,' +\n 'menubar=no,scrollbars=yes,' +\n 'resizable=yes,width=600,' +\n 'height=350';\n\nfunction ShareFacebookButton({ btnText, href }) {\n const handleClick = (event) => {\n event.preventDefault();\n window.open(href, 'targetWindow', popUpFeatures);\n return false;\n };\n\n return (\n <TrackedAnchor\n event={trackingEvents.FACEBOOK_SHARE_BUTTON_CLICKED}\n href={href}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n onClick={handleClick}\n >\n <Button\n className={styles.shareFacebookButton}\n leadingIcon={faFacebook}\n variant=\"brand-facebook\"\n >\n {btnText}\n </Button>\n </TrackedAnchor>\n );\n}\n\nShareFacebookButton.propTypes = {\n btnText: propTypes.string,\n href: propTypes.string.isRequired,\n};\n\nexport default ShareFacebookButton;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"zI0FlCRxobn1yOxqbes5\";\nvar _2 = \"xvXtujBN4RzYmKKY2FJm\";\nvar _3 = \"vT7Y0WKolyZTofKcF_dJ\";\nvar _4 = \"OgvyU3Xg5jojDZZPRX1K\";\nvar _5 = \"DXOUWqhyPWpO_znpsCgB\";\nvar _6 = \"gW33esD2LjHZ1eOC_5x0\";\nvar _7 = \"j_VYIUk3Xf0TNF3LsOe5\";\nvar _8 = \"dBjEUtSh6yQuh5VaGrxa\";\nvar _9 = \"w1mFdZaTMVB4Alhyl0rD\";\nvar _a = \"muKN43D7pXVkKiFKU4DT\";\nvar _b = \"UQxKWvKj_7QQdqAc6Dpj\";\nvar _c = \"QajCu0hc8SSUKD1kWptQ\";\nvar _d = \"oI7Kt2t_UJ65ZYLoFXgG\";\nvar _e = \"PQIGWj85xFfN8PZr9Z4C\";\nvar _f = \"uzC5RPnV5SHOSDNaxe2u\";\nvar _10 = \"w0Wh8_IOgzDHP8h1Gx_V\";\nvar _11 = \"SWHLdglx7AorKa5uJTta\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"participant-dashboard__project__info__status__string\", _10 as \"schedule-project-participant-page__time-slots\", _11 as \"shareFacebookButton\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"PKFx6yttg8bzLsJqZz_A\";\nvar _2 = \"FEyhgPzKKtOwX4N2HflH\";\nvar _3 = \"sCOzJnsdxaBuaH_T0Fwj\";\nvar _4 = \"_7hqclHBoLRXhvU0Y_Md\";\nvar _5 = \"u4he2spVciFiWcSmmsxB\";\nvar _6 = \"mnsR8K9tloitGOpelTCz\";\nvar _7 = \"Xh3ikEJ_pbmyujtid5ZN\";\nvar _8 = \"tHcVM2HCQvHYBOPoMndf\";\nvar _9 = \"omLkVZkpOQ9uMn_7Uyez\";\nvar _a = \"M9ggLhoeLqsKMmAwhQZr\";\nvar _b = \"mErgneij6b75_VhJelhv\";\nvar _c = \"z_AC6jnmnS64uRKHmxvU\";\nvar _d = \"OceteHYEDTGaedmWr8H2\";\nvar _e = \"qPPIlGNqlNFsHBTuZ7xA\";\nvar _f = \"Zks0NtDA_JAe8s9N3q6L\";\nvar _10 = \"PjzXVFNSE9ifZTGCtzIk\";\nvar _11 = \"BZQveYtujOjLUhgUdYVw\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"participant-dashboard__project__info__status__string\", _10 as \"schedule-project-participant-page__time-slots\", _11 as \"shareTwitterButton\" }\n","import React, { type MouseEvent } from 'react';\nimport { z } from 'zod';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { TrackedAnchor } from 'common/analytics';\nimport { trackingEvents } from 'lib/analytics';\nimport { faXTwitter } from 'lib/font_awesome/brands';\nimport { useZodSchema } from 'hooks/use_zod_schema';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './share_twitter_button.module.scss';\n\nconst popUpFeatures =\n 'toolbar=no,' +\n 'location=0,status=no,' +\n 'menubar=no,scrollbars=yes,' +\n 'resizable=yes,width=600,' +\n 'height=350';\n\nconst ShareTwitterButtonSchema = z.object({\n btnText: z.string().optional(),\n href: z.string().url(),\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function ShareTwitterButton(props: any) {\n const { btnText, href } = useZodSchema(props, ShareTwitterButtonSchema);\n\n const handleClick = (event: MouseEvent) => {\n event.preventDefault();\n window.open(href, 'targetWindow', popUpFeatures);\n return false;\n };\n\n return (\n <TrackedAnchor\n event={trackingEvents.TWITTER_SHARE_BUTTON_CLICKED}\n href={href}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n onClick={handleClick}\n >\n <Button\n className={styles.shareTwitterButton}\n leadingIcon={faXTwitter}\n variant=\"brand-twitter\"\n >\n {btnText}\n </Button>\n </TrackedAnchor>\n );\n}\n","import React, {\n createContext,\n useMemo,\n useContext,\n type ReactNode,\n} from 'react';\nimport { type JSClient } from '@appsignal/types';\nimport { Ownership } from 'lib/generated_constants/ownership';\n\nconst OwnershipContext = createContext<{\n owner: Ownership | 'frontend';\n logError: (error: Error) => void;\n} | null>(null);\n\ntype OwnershipProviderProps = {\n owner: Ownership | 'frontend';\n appsignal: JSClient | null;\n children: ReactNode;\n};\n\nfunction fallbackErrorLogger(error: Error) {\n // eslint-disable-next-line no-console\n console.error(error);\n}\n\nexport function OwnershipProvider({\n owner,\n appsignal,\n children,\n}: OwnershipProviderProps) {\n const contextValue = useMemo(\n () => ({\n owner,\n logError: appsignal ? appsignal.sendError : fallbackErrorLogger,\n }),\n [appsignal, owner],\n );\n\n return (\n <OwnershipContext.Provider value={contextValue}>\n {children}\n </OwnershipContext.Provider>\n );\n}\n\nexport function useOwnershipContext() {\n const ownershipContext = useContext(OwnershipContext);\n const logError = useMemo(\n () => (ownershipContext ? ownershipContext.logError : () => {}),\n [ownershipContext],\n );\n\n if (!ownershipContext) {\n return {\n owner: 'frontend' as const,\n logError,\n };\n }\n\n return ownershipContext;\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 React, { Component } from 'react';\n\nimport { track, trackingPropsShape } from 'lib/analytics';\nimport * as propTypes from 'lib/prop_types';\n\nimport { getDisplayName } from './utils';\n\nexport default function withTrackedClick(Target) {\n class TrackedComponent extends Component {\n static displayName = `${getDisplayName(Target)}WithTrackedClick`;\n\n static propTypes = {\n event: propTypes.string.isRequired,\n eventData: propTypes.object,\n onClick: propTypes.func,\n ...trackingPropsShape,\n };\n\n static defaultProps = {\n eventData: {},\n };\n\n handleClick = (event) => {\n this.props.tracking.trackEvent({\n ...this.props.eventData,\n event: this.props.event,\n });\n\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n get targetProps() {\n const transferProps = { ...this.props };\n\n // Need to remove eventData, otherwise child props complain about:\n // https://reactjs.org/warnings/unknown-prop.html\n delete transferProps.eventData;\n\n return {\n ...transferProps,\n onClick: this.handleClick,\n };\n }\n\n render() {\n return <Target {...this.targetProps} />;\n }\n }\n\n return track()(TrackedComponent);\n}\n","import { useEffect } from 'react';\n\nconst UPDATE_PAGE_TITLE_EVENT = 'updatePageTitle';\n\n/**\n * Used to trigger event to update html title\n */\nexport function triggerUsePageTitleUpdate(newTitle?: string) {\n const event = new CustomEvent(UPDATE_PAGE_TITLE_EVENT, {\n detail: { title: newTitle },\n });\n window.dispatchEvent(event);\n}\n\n/**\n * Hook that adds event listener to update html title\n * and updates the title whenever UPDATE_PAGE_TITLE_EVENT is sent\n */\nexport function usePageTitle(initialTitle?: string) {\n useEffect(() => {\n const updateTitle = (event: CustomEvent) => {\n const newTitle = event.detail.title || initialTitle;\n document.title = newTitle\n ? `${newTitle} | User Interviews`\n : 'User Interviews';\n };\n\n window.addEventListener(\n UPDATE_PAGE_TITLE_EVENT,\n updateTitle as EventListener,\n );\n // Dispatch event on mount to set the initial title\n triggerUsePageTitleUpdate();\n\n return () => {\n window.removeEventListener(\n UPDATE_PAGE_TITLE_EVENT,\n updateTitle as EventListener,\n );\n };\n }, [initialTitle]);\n}\n","import type { ComponentType } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDisplayName(WrappedComponent: ComponentType<any>) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n}\n","import { trackingEvents } from 'lib/analytics';\n\nimport { oauthActions } from 'common/routing';\n\nconst signInOrUpWithSocial = (signIn) => {\n const buttonText = signIn ? 'Sign in' : 'Sign up';\n const oauthAction = signIn ? oauthActions.SIGNIN : oauthActions.SIGNUP;\n const trackingEventName = signIn\n ? trackingEvents.PARTICIPANT_OAUTH_SIGNIN_CLICKED\n : trackingEvents.PARTICIPANT_OAUTH_SIGNUP_CLICKED;\n\n return {\n buttonText,\n oauthAction,\n trackingEventName,\n };\n};\n\nexport default signInOrUpWithSocial;\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 { registerComponent } from 'lib/react_on_rails';\nimport {\n ConnectFacebookButton,\n ShareFacebookButton,\n ConnectLinkedInButton,\n ShareTwitterButton,\n SignupFacebookButton,\n SignupLinkedInButton,\n} from 'participant/social_buttons';\n\nregisterComponent('ConnectFacebookButton', ConnectFacebookButton);\nregisterComponent('ConnectLinkedInButton', ConnectLinkedInButton);\nregisterComponent('ShareFacebookButton', ShareFacebookButton);\nregisterComponent('ShareTwitterButton', ShareTwitterButton);\nregisterComponent('SignupFacebookButton', SignupFacebookButton);\nregisterComponent('SignupLinkedInButton', SignupLinkedInButton);\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\n\nimport signInOrUpWithSocial from '../sign_in_or_up_with_social';\n\nimport ConnectFacebookButton from './connect_facebook_button';\n\nfunction SignupFacebookButton({ className, returnTo, signIn }) {\n const clientHasRendered = useClientHasRendered();\n const { buttonText, oauthAction, trackingEventName } =\n signInOrUpWithSocial(signIn);\n\n return (\n <ConnectFacebookButton\n buttonText={`${buttonText} with Facebook`}\n className={className}\n oauthAction={oauthAction}\n returnTo={returnTo || clientHasRendered ? window.location.href : ''}\n trackingEvent={trackingEventName}\n />\n );\n}\n\nSignupFacebookButton.propTypes = {\n className: propTypes.string,\n returnTo: propTypes.string,\n signIn: propTypes.bool,\n};\n\nSignupFacebookButton.defaultProps = {\n className: null,\n signIn: false,\n};\n\nexport default SignupFacebookButton;\n","import { useCallback } from 'react';\nimport { useOwnershipContext } from 'components/owner_boundary/context';\nimport { useRailsContext } from './use_rails_context';\n\nconst errorMessages = new Map<string, number>();\n\nexport function useErrorLogger() {\n const ctx = useRailsContext();\n const expirationSeconds =\n ctx?.env.APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS ?? 30;\n\n const { logError } = useOwnershipContext();\n\n return useCallback(\n (error: Error) => {\n const lastLoggedAt = errorMessages.get(error.message);\n const now = Date.now();\n\n if (!lastLoggedAt || now - lastLoggedAt > expirationSeconds * 1000) {\n logError(error);\n errorMessages.set(error.message, Date.now());\n }\n },\n [expirationSeconds, logError],\n );\n}\n"],"names":["useZodSchema","unknownProps","schema","logError","useErrorLogger","useMemo","includes","process","parse","error","DopeForm","forwardRef","_ref","ref","children","props","_objectWithoutProperties","_excluded","_useCSRF","useCSRF","csrfToken","csrfParam","React","Form","Object","assign","name","type","value","ConnectFacebookButton","className","buttonText","oauthAction","trackingEvent","returnTo","clientHasRendered","useClientHasRendered","action","oauthPath","provider","oauthProviders","FACEBOOK","window","location","href","userType","oauthUserTypes","PARTICIPANT","method","TrackedButton","event","eventData","variant","FontAwesomeIcon","icon","faFacebook","propTypes","defaultProps","oauthActions","CONNECT","trackingEvents","PARTICIPANT_OAUTH_CONNECT_CLICKED","_useState2","useState","hasRendered","setHasRendered","useEffect","ConnectLinkedInButton","onBeforeSubmit","formRef","useRef","isSubmitting","setIsSubmitting","LINKEDIN","onSubmit","async","preventDefault","current","submit","disabled","classNames","faSpinnerThird","faLinkedinIn","SignupLinkedInButton","signIn","_signInOrUpWithSocial","signInOrUpWithSocial","trackingEventName","ShareFacebookButton","btnText","TrackedAnchor","FACEBOOK_SHARE_BUTTON_CLICKED","rel","target","onClick","open","Button","leadingIcon","isRequired","popUpFeatures","ShareTwitterButtonSchema","z","object","string","optional","url","ShareTwitterButton","_useZodSchema","TWITTER_SHARE_BUTTON_CLICKED","styles","faXTwitter","OwnershipContext","createContext","fallbackErrorLogger","console","OwnershipProvider","owner","appsignal","contextValue","sendError","Provider","useOwnershipContext","ownershipContext","useContext","RailsContext","useRailsContext","RailsContextProvider","railsContext","_customContextSchema$","customContextSchema","env","request","uiState","user","_objectSpread","withTrackedClick","Target","TrackedComponent","Component","constructor","args","handleClick","this","tracking","trackEvent","targetProps","transferProps","render","displayName","getDisplayName","trackingPropsShape","track","UPDATE_PAGE_TITLE_EVENT","triggerUsePageTitleUpdate","newTitle","CustomEvent","detail","title","dispatchEvent","usePageTitle","initialTitle","updateTitle","document","addEventListener","removeEventListener","WrappedComponent","SIGNIN","SIGNUP","PARTICIPANT_OAUTH_SIGNIN_CLICKED","PARTICIPANT_OAUTH_SIGNUP_CLICKED","getMetaContent","isServer","querySelector","getAttribute","_slicedToArray","setCsrfParam","_useState4","setCsrfToken","registerComponent","SignupFacebookButton","errorMessages","Map","ctx","expirationSeconds","APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS","useCallback","lastLoggedAt","get","message","now","Date","set"],"sourceRoot":""}