{"version":3,"file":"js/participant_opt_in-0bb7c428542cf759735f.js","mappings":"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","sources":["webpack://user-interviews/./app/javascript/hooks/use_zod_schema.ts","webpack://user-interviews/./app/javascript/researcher/participant_search/filtered_view/utils.js","webpack://user-interviews/./app/javascript/hooks/use_media_query.js","webpack://user-interviews/./app/javascript/participant/project_application/components/header/recruit_header.module.scss?8597","webpack://user-interviews/./app/javascript/components/survey_builder/constants.js","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/prop_types.js","webpack://user-interviews/./app/javascript/hooks/use_env_vars.ts","webpack://user-interviews/./app/javascript/participant/project_application/components/project_application_loading_skeleton.module.scss?3daf","webpack://user-interviews/./app/javascript/participant/project_application/components/project_application_loading_skeleton.tsx","webpack://user-interviews/./app/javascript/components/page/page.module.scss?774e","webpack://user-interviews/./app/javascript/components/page/page.tsx","webpack://user-interviews/./app/javascript/hooks/use_sidebar_mobile_breakpoint.ts","webpack://user-interviews/./app/javascript/researcher/participant_search/segment_builder/lib/filter_list.js","webpack://user-interviews/./app/javascript/api/opt_in_forms/endpoints.js","webpack://user-interviews/./app/javascript/components/survey_builder/confirmation_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/context.js","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/condition_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/actions.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/answer_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/operator_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/controls/controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/condition_row/condition_row.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/errors.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic/skip_logic.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/section_skip_logic.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/skip_logic_modal/skip_logic_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_upgrade_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/actions.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/qualify_logic_select.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/editing.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/pick.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/pick_none.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/other_answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answer/answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/answers.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/accept.module.scss?3b22","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/accept.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/remove_button.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/useAutosizeTextArea.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/useAutosizeGridTextArea.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid.module.scss?ca23","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid_answer.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid_question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/grid/grid.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/hint.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_form_question_icon_label.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/survey_new_attribute_modal.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/map_attribute.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/key_question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/other_option_checkbox.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/required.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/question_controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question_controls/question_controls.module.scss?fa9e","webpack://user-interviews/./app/javascript/components/survey_builder/question/text.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/type.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/question/question.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/add_new_page_button.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/add_new_page_button.module.scss?c980","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_controls.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_controls.module.scss?d686","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section_dropdown.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/sections/section/section.module.scss?e3c2","webpack://user-interviews/./app/javascript/components/survey_builder/sections/sections.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/survey_builder.jsx","webpack://user-interviews/./app/javascript/components/survey_builder/index.js","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/preview_banner.module.scss?72b6","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/preview_banner.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/hub_survey_preview_header.module.scss?331e","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/hub_survey_preview_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/recruit_survey_preview_header.module.scss?36df","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/recruit_survey_preview_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form_header.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_end.module.scss?4973","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_end.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form.module.scss?4951","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/components/survey_preview_form.jsx","webpack://user-interviews/./app/javascript/hooks/use_http.js","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form_card.module.css?269e","webpack://user-interviews/./app/javascript/hooks/use_client_has_rendered.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in.module.css?8ce4","webpack://user-interviews/./app/javascript/components/page/components/sidebar/hooks/use_sidebar_context.ts","webpack://user-interviews/./app/javascript/api/population_labels/endpoints.ts","webpack://user-interviews/./app/javascript/api/projects/endpoints.ts","webpack://user-interviews/./app/javascript/researcher/project_workspace/constants.ts","webpack://user-interviews/./app/javascript/hooks/use_authorization.js","webpack://user-interviews/./app/javascript/researcher/surveys/components/empty_survey_notice.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/boolean_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/answer_input.module.scss?0915","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/boolean_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/date_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/float_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/text_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_none_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_one_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_one_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_many_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/pick_many_answer_input_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/answer_input_components/survey_answer_input.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_question_form_group.module.scss?afa8","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_question_form_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/grid_question.module.scss?4378","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/row_title_cell.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/column_title_cell.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/answer_title_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/pick_one_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/pick_many_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/question_input_row.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/grid_question_components/grid_question_form_group.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form_card.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form.module.scss?edd6","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_form.jsx","webpack://user-interviews/./app/javascript/researcher/project_workspace/hooks/use_project_workspace_context.tsx","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_loading_skeleton.module.scss?d73d","webpack://user-interviews/./app/javascript/researcher/surveys/components/survey_section_loading_skeleton.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/prop_types.js","webpack://user-interviews/./app/javascript/store/slices/column_configuration_slice.js","webpack://user-interviews/./app/javascript/api/utils.ts","webpack://user-interviews/./app/javascript/components/owner_boundary/context.tsx","webpack://user-interviews/./app/javascript/researcher/participant_search/invite_rules_drawer/constants.js","webpack://user-interviews/./app/javascript/api/segments/endpoints.js","webpack://user-interviews/./app/javascript/api/participant_population_opt_in_forms/endpoints.js","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/researcher/project_workspace/slice.js","webpack://user-interviews/./app/javascript/researcher/project_workspace/store/utils.js","webpack://user-interviews/./app/javascript/hooks/use_page_title/use_page_title.ts","webpack://user-interviews/./app/javascript/components/survey_builder/prop_types.js","webpack://user-interviews/./app/javascript/components/connect_calendar/prop_types.js","webpack://user-interviews/./app/javascript/store/slices/segments_slice.js","webpack://user-interviews/./app/javascript/participant/opt_in/components/header.module.css?ea37","webpack://user-interviews/./app/javascript/participant/opt_in/components/header.tsx","webpack://user-interviews/./app/javascript/api/feature_flag/endpoints.js","webpack://user-interviews/./app/javascript/hooks/use_feature_flag.js","webpack://user-interviews/./app/javascript/researcher/participant_search/segment_builder/lib/filter_utils.js","webpack://user-interviews/./app/javascript/components/dope_browser_router.tsx","webpack://user-interviews/./app/javascript/components/cloudflare_turnstile/cloudflare_turnstile.tsx","webpack://user-interviews/./app/javascript/components/phone_number/phone_number.jsx","webpack://user-interviews/./app/javascript/api/tag_types.js","webpack://user-interviews/./app/javascript/hoc/with_page_providers.tsx","webpack://user-interviews/./app/javascript/api/team_projects/endpoints.js","webpack://user-interviews/./app/javascript/researcher/project_workspace/hooks/use_get_project_state.ts","webpack://user-interviews/./app/javascript/api/response_sets/endpoints.js","webpack://user-interviews/./app/javascript/hoc/utils.ts","webpack://user-interviews/./app/javascript/hooks/use_auth_user_context.ts","webpack://user-interviews/./app/javascript/components/page/components/footer/footer.module.scss?ffdc","webpack://user-interviews/./app/javascript/components/page/components/footer/footer.tsx","webpack://user-interviews/./app/javascript/api/account_hub_configurations/endpoints.ts","webpack://user-interviews/./app/javascript/api/participants/endpoints.js","webpack://user-interviews/./app/javascript/participant/participant_profile/constants.js","webpack://user-interviews/./app/javascript/hoc/with_auth_user_context.jsx","webpack://user-interviews/./app/javascript/api/survey_sections/endpoints.js","webpack://user-interviews/./app/javascript/researcher/surveys/utils/utils.ts","webpack://user-interviews/./app/javascript/store/slices/project_details_slice.js","webpack://user-interviews/./app/javascript/store/root_reducer.js","webpack://user-interviews/./app/javascript/store/store.js","webpack://user-interviews/./app/javascript/components/page/components/sidebar/hooks/use_is_sidebar_open.ts","webpack://user-interviews/./app/javascript/components/page/components/sidebar_context_provider/sidebar_context_provider.tsx","webpack://user-interviews/./app/javascript/components/owner_boundary/owner_boundary.tsx","webpack://user-interviews/./app/javascript/hooks/use_appsignal.ts","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary_condition.jsx","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary.module.css?16ac","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary_conditions.jsx","webpack://user-interviews/./app/javascript/components/question_skip_logic_summary/question_skip_logic_summary.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/hooks/use_get_survey_preview_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_get_first_survey_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_get_next_survey_section.js","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/survey_preview/survey_preview.jsx","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/survey_preview/survey_preview_page.jsx","webpack://user-interviews/./app/javascript/participant/apply/study_details_accordion.jsx","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/navigation_item.module.scss?4926","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/navigation_item.tsx","webpack://user-interviews/./app/javascript/components/page/components/navigation_item/hooks/use_is_active.ts","webpack://user-interviews/./app/javascript/api/base_slice.js","webpack://user-interviews/./app/javascript/api/population_attributes/endpoints.ts","webpack://user-interviews/./app/javascript/researcher/surveys/survey_preview/hooks/use_requested_preview_section_params.js","webpack://user-interviews/./app/javascript/store/slices/participant_profile_slice.js","webpack://user-interviews/./app/javascript/hooks/use_error_logger.tsx","webpack://user-interviews/./app/javascript/api/participant_population_opt_in_form_participants/endpoints.ts","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_get_opt_in_form.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in_success.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/components/survey.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_survey_response_set.ts","webpack://user-interviews/./app/javascript/participant/opt_in/utils.ts","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_get_first_survey_section.ts","webpack://user-interviews/./app/javascript/participant/opt_in/components/opt_in.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/hooks/use_opt_in_form_key_from_url.ts","webpack://user-interviews/./app/javascript/participant/opt_in/opt_in_page.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/opt_in_preview_page.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/index.ts","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/components/account_menu_popover/account_menu_popover.module.scss?a55e","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/components/account_menu_popover/account_menu_popover.tsx","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/account_navigation_item.module.scss?7b53","webpack://user-interviews/./app/javascript/components/page/components/sidebar/components/account_navigation_item/account_navigation_item.tsx","webpack://user-interviews/./app/javascript/components/page/components/sidebar/sidebar.module.scss?3dae","webpack://user-interviews/./app/javascript/components/page/components/sidebar/sidebar.tsx","webpack://user-interviews/./app/javascript/participant/opt_in/components/default_questions_form.tsx","webpack://user-interviews/./app/javascript/researcher/surveys/hooks/use_alert_focus.js","webpack://user-interviews/./app/javascript/hooks/use_tracking_with_default_dispatch.ts","webpack://user-interviews/./app/javascript/participant/project_application/components/survey/constants.ts","webpack://user-interviews/./app/javascript/researcher/surveys/constants.js","webpack://user-interviews/./app/javascript/api/population_invite_filters/endpoints.js"],"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","export const firstNameAccessor = 'firstName';\nexport const lastNameAccessor = 'lastName';\nexport const phoneNumberAccessor = 'phoneNumber';\nexport const timezoneAccessor = 'timezone';\nexport const sourceTypeAccessor = 'sourceType';\nexport const participantLabelsAccessor = 'participantLabels';\nexport const createdAtAccessor = 'activityStats.createdAt';\nexport const daysSinceInvitedAccessor = 'activityStats.daysSinceInvited';\nexport const lastBulkEmailAccessor = 'lastBulkEmailSentAt';\nexport const daysSinceAppliedAccessor = 'activityStats.daysSinceApplied';\nexport const daysSinceParticipatedAccessor =\n 'activityStats.daysSinceParticipated';\nexport const totalIncentivesEarnedAccessor = 'totalIncentivesEarned';\nexport const unsubscribedAccessor = 'unsubscribed';\n\nexport const populationAttributeAccessorPrefix = `participantAttribute`;\n\nexport const buildColumns = ({\n canViewPii,\n columnOrder,\n hiddenColumns,\n maxIncentiveYear,\n minIncentiveYear,\n populationAttributes,\n}) => {\n const hiddenColumnsLookUp = buildHiddenColumnsLookUp(hiddenColumns);\n\n const populationAttributesLookUp = buildPopulationAttributeColumnsLookUp({\n hiddenColumnsLookUp,\n populationAttributes,\n });\n\n const baseColumnLookUp = buildHubDefaultColumnsLookUp({\n canViewPii,\n hiddenColumnsLookUp,\n maxIncentiveYear,\n minIncentiveYear,\n });\n\n const columnMap = new Map([\n ...baseColumnLookUp,\n ...populationAttributesLookUp,\n ]);\n\n const order = columnOrder?.length\n ? completeColumnOrder({\n columnOrder,\n populationAttributes,\n })\n : buildHubDefaultColumnOrder({\n maxIncentiveYear,\n minIncentiveYear,\n populationAttributes,\n });\n\n const columns = [];\n\n order.forEach((columnAccessor) => {\n const column = columnMap.get(columnAccessor);\n\n if (column) columns.push(column);\n });\n\n return columns;\n};\n\nconst buildHubDefaultColumnOrder = ({\n maxIncentiveYear,\n minIncentiveYear,\n populationAttributes,\n}) => [\n firstNameAccessor,\n lastNameAccessor,\n phoneNumberAccessor,\n timezoneAccessor,\n createdAtAccessor,\n sourceTypeAccessor,\n participantLabelsAccessor,\n daysSinceInvitedAccessor,\n lastBulkEmailAccessor,\n daysSinceAppliedAccessor,\n daysSinceParticipatedAccessor,\n totalIncentivesEarnedAccessor,\n ...yearlyIncentiveAccessors(maxIncentiveYear, minIncentiveYear),\n 'unsubscribed',\n ...populationAttributeAccessors(populationAttributes),\n];\n\nexport const buildHiddenColumnsLookUp = (hiddenColumns) => {\n const lookup = new Map();\n\n if (hiddenColumns?.length) {\n hiddenColumns.forEach((hiddenColumn) => {\n lookup.set(hiddenColumn, true);\n });\n }\n\n return lookup;\n};\n\nexport const buildHubDefaultColumnsLookUp = ({\n canViewPii,\n hiddenColumnsLookUp,\n maxIncentiveYear,\n minIncentiveYear,\n}) => {\n const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n return new Map([\n [\n firstNameAccessor,\n {\n accessor: firstNameAccessor,\n Header: 'First name',\n hidden: !!hiddenColumns.get(firstNameAccessor),\n id: firstNameAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n lastNameAccessor,\n {\n accessor: lastNameAccessor,\n Header: canViewPii ? 'Last name' : 'Last Initial',\n hidden: !!hiddenColumns.get(lastNameAccessor),\n id: lastNameAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n phoneNumberAccessor,\n {\n accessor: phoneNumberAccessor,\n Header: 'Phone number',\n hidden: !!hiddenColumns.get(phoneNumberAccessor),\n id: phoneNumberAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n timezoneAccessor,\n {\n accessor: timezoneAccessor,\n Header: 'Timezone',\n hidden: !!hiddenColumns.get(timezoneAccessor),\n id: timezoneAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n sourceTypeAccessor,\n {\n accessor: sourceTypeAccessor,\n Header: 'Source',\n hidden: !!hiddenColumns.get(sourceTypeAccessor),\n id: sourceTypeAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n participantLabelsAccessor,\n {\n accessor: participantLabelsAccessor,\n Header: 'Labels',\n hidden: !!hiddenColumns.get(participantLabelsAccessor),\n id: participantLabelsAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n createdAtAccessor,\n {\n accessor: createdAtAccessor,\n Header: 'Date added',\n hidden: !!hiddenColumns.get(createdAtAccessor),\n id: createdAtAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n daysSinceInvitedAccessor,\n {\n accessor: daysSinceInvitedAccessor,\n Header: 'Last invited',\n hidden: !!hiddenColumns.get(daysSinceInvitedAccessor),\n id: daysSinceInvitedAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n lastBulkEmailAccessor,\n {\n accessor: lastBulkEmailAccessor,\n Header: 'Last bulk email',\n hidden: !!hiddenColumns.get(lastBulkEmailAccessor),\n id: lastBulkEmailAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n daysSinceAppliedAccessor,\n {\n accessor: daysSinceAppliedAccessor,\n Header: 'Last applied',\n hidden: !!hiddenColumns.get(daysSinceAppliedAccessor),\n id: daysSinceAppliedAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n daysSinceParticipatedAccessor,\n {\n accessor: daysSinceParticipatedAccessor,\n Header: 'Last participated',\n hidden: !!hiddenColumns.get(daysSinceParticipatedAccessor),\n id: daysSinceParticipatedAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n totalIncentivesEarnedAccessor,\n {\n accessor: totalIncentivesEarnedAccessor,\n Header: 'Total incentives earned',\n hidden: !!hiddenColumns.get(totalIncentivesEarnedAccessor),\n id: totalIncentivesEarnedAccessor,\n meta: nonEditableMetaData,\n },\n ],\n [\n unsubscribedAccessor,\n {\n accessor: unsubscribedAccessor,\n Header: 'Unsubscribed',\n hidden: !!hiddenColumns.get(unsubscribedAccessor),\n id: unsubscribedAccessor,\n meta: nonEditableMetaData,\n },\n ],\n ...buildYearlyIncentiveColumnsLookUp({\n hiddenColumnsLookUp,\n maxIncentiveYear,\n minIncentiveYear,\n }),\n ]);\n};\n\nexport const buildPopulationAttributeColumnsLookUp = ({\n hiddenColumnsLookUp,\n populationAttributes,\n}) => {\n if (!populationAttributes) return [];\n\n const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n const lookUp = new Map();\n\n populationAttributes.forEach((populationAttribute) => {\n const accessor = `${populationAttributeAccessorPrefix}${populationAttribute.id}`;\n\n lookUp.set(accessor, {\n accessor,\n editable: true,\n id: populationAttribute.id,\n Header: populationAttribute.name,\n hidden: !!hiddenColumns.get(accessor),\n meta: populationAttribute.meta,\n });\n });\n\n return lookUp;\n};\n\nexport const buildYearlyIncentiveColumnsLookUp = ({\n hiddenColumnsLookUp,\n maxIncentiveYear,\n minIncentiveYear,\n}) => {\n const hiddenColumns = hiddenColumnsLookUp || new Map();\n\n const lookUp = new Map();\n\n yearlyIncentiveYears(maxIncentiveYear, minIncentiveYear).forEach((year) => {\n const accessor = `totalIncentives${year}`;\n\n lookUp.set(accessor, {\n accessor,\n Header: `Total incentives (${year})`,\n hidden: !!hiddenColumns.get(accessor),\n id: accessor,\n meta: nonEditableMetaData,\n });\n });\n\n return lookUp;\n};\n\nconst completeColumnOrder = ({ columnOrder, populationAttributes }) => {\n if (!populationAttributes?.length || !columnOrder?.length) return columnOrder;\n\n const missingPopulationAttributes = [];\n\n populationAttributes.forEach((populationAttribute) => {\n const accessor = `${populationAttributeAccessorPrefix}${populationAttribute.id}`;\n\n if (!columnOrder.includes(accessor))\n missingPopulationAttributes.push(accessor);\n });\n\n return [...columnOrder, ...missingPopulationAttributes];\n};\n\nexport const nonEditableMetaData = {\n canDelete: false,\n canUpdate: false,\n};\n\nexport const populationAttributeAccessors = (populationAttributes) => {\n if (!populationAttributes) {\n return [];\n }\n\n return populationAttributes.map(\n (populationAttribute) =>\n `${populationAttributeAccessorPrefix}${populationAttribute.id}`,\n );\n};\n\nexport const rearrangeColumnOrder = ({\n activeAccessor,\n columnOrder,\n overAccessor,\n}) => {\n const reorderColumns = [...columnOrder];\n\n const activeColumnIndex = reorderColumns.indexOf(activeAccessor);\n\n const activeColumn = reorderColumns.splice(activeColumnIndex, 1);\n if (activeColumn) {\n const spliceIndex = reorderColumns.indexOf(overAccessor);\n reorderColumns.splice(spliceIndex, 0, activeColumn[0]);\n }\n\n return reorderColumns;\n};\n\nexport const updateHiddenColumns = (accessor, hiddenColumns) => {\n if (!hiddenColumns) return [accessor];\n\n const index = hiddenColumns.indexOf(accessor);\n\n if (index === -1) {\n hiddenColumns.push(accessor);\n } else {\n hiddenColumns.splice(index, 1);\n }\n\n return hiddenColumns;\n};\n\nexport const yearlyIncentiveAccessors = (maxIncentiveYear, minIncentiveYear) =>\n yearlyIncentiveYears(maxIncentiveYear, minIncentiveYear).map(\n (year) => `totalIncentives${year}`,\n );\n\nexport const yearlyIncentiveYears = (maxIncentiveYear, minIncentiveYear) => {\n const years = [];\n\n let currentYear = maxIncentiveYear;\n\n if (currentYear === 0 || minIncentiveYear === 0) {\n return years;\n }\n\n while (currentYear >= minIncentiveYear) {\n years.push(currentYear);\n\n currentYear -= 1;\n }\n\n return years;\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { isServer } from 'lib/ssr_utils';\n\nexport const MEDIA_BREAKPOINT_LG = '(min-width: 992px)';\nexport const MEDIA_BREAKPOINT_MD = '(min-width: 768px)';\nexport const MEDIA_BREAKPOINT_SM = '(min-width: 576px)';\nexport const MEDIA_BREAKPOINT_XS = '(max-width: 575px)';\n\nexport default (mediaQuery) => {\n const mediaQueryList = useMemo(\n () => (isServer ? null : window.matchMedia(mediaQuery)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const [mediaQueryMatches, setMediaQueryMatches] = useState(\n mediaQueryList?.matches,\n );\n\n const handleMediaQueryChange = useCallback(\n ({ matches }) => setMediaQueryMatches(matches),\n [],\n );\n\n useEffect(() => {\n function addEventListener() {\n if (!mediaQueryList) return;\n\n if (typeof mediaQueryList.addEventListener === 'function') {\n mediaQueryList.addEventListener('change', handleMediaQueryChange);\n } else {\n // This is deprecated, though Safari 13 still has this so keep it here until that's old\n mediaQueryList.addListener(handleMediaQueryChange);\n }\n }\n\n function removeEventListener() {\n if (!mediaQueryList) return;\n\n if (typeof mediaQueryList.removeEventListener === 'function') {\n mediaQueryList.removeEventListener('change', handleMediaQueryChange);\n } else {\n // This is deprecated, though Safari 13 still has this so keep it here until that's old\n mediaQueryList.removeListener(handleMediaQueryChange);\n }\n }\n\n addEventListener();\n\n return removeEventListener;\n }, [handleMediaQueryChange, mediaQueryList]);\n\n return mediaQueryMatches;\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"e2MycXpgF7K4L01YLe59\";\nvar _2 = \"kopZYYDvKhkRN5UcXvQh\";\nvar _3 = \"dWZLwNEhi4MlJBmEwqs0\";\nvar _4 = \"eUbKHo_U8uR6ocmK5fHS\";\nvar _5 = \"vYPuztWmYkx4GD_oWTKb\";\nvar _6 = \"FcJk_1mW6UsMmsAFgKb9\";\nvar _7 = \"P4GNMlKHiwAMcV7xN8Rj\";\nvar _8 = \"VjssZedoEy9lQKjZb6vQ\";\nvar _9 = \"A9By_evqvH1mwj8ZdWth\";\nvar _a = \"hEShea8Tr_uaodJFcFvX\";\nvar _b = \"QcHctPtFpjcMeXtmGpVK\";\nvar _c = \"pgYk_uCCMwnXweAcqMYP\";\nvar _d = \"luJzSlKj6XLaQR9Ru2Ig\";\nvar _e = \"YNDZS9Gr8lWpBXx4Lbvw\";\nvar _f = \"COg5r8mnrhCTXvTJH8Bt\";\nvar _10 = \"RPW1I31LWIo7PLvLWoX2\";\nvar _11 = \"DXNZf0uV_p6GFQSg9_Be\";\nvar _12 = \"jUytm4WdrpbqQ9jfPzkd\";\nvar _13 = \"mXREzF4oOZrUHoWzVbIq\";\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 \"divider\", _10 as \"header\", _11 as \"heading\", _12 as \"participant-dashboard__project__info__status__string\", _13 as \"schedule-project-participant-page__time-slots\" }\n","export const CONDITION_OPERATOR_EQL = '==';\nexport const CONDITION_OPERATOR_NOT_EQL = '!=';\n\nexport const JOIN_METHOD_OR = 'or';\nexport const JOIN_METHOD_AND = 'and';\n\nexport const OPT_IN_FORM_TYPE = 'opt-in';\nexport const SCREENER_FORM_TYPE = 'screener';\n\nexport * from 'lib/generated_constants/surveys';\n","import * as propTypes from 'lib/prop_types';\n\nexport const questionPropType = propTypes.shape({\n text: propTypes.string.isRequired,\n uuid: propTypes.string.isRequired,\n});\n\nexport const answerPropType = propTypes.shape({\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n});\n\nexport const skipLogicConditionPropType = propTypes.shape({\n answerId: propTypes.string,\n operator: propTypes.string,\n questionId: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const skipLogicPropType = propTypes.shape({\n joinMethod: propTypes.string,\n skipLogicConditions: propTypes.arrayOf(skipLogicConditionPropType),\n targetSectionId: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const surveySectionPropType = propTypes.shape({\n title: propTypes.string,\n uuid: propTypes.string,\n});\n","import { ENV } from 'lib/react_on_rails/env';\nimport { useClientHasRendered } from './use_client_has_rendered';\n\nexport const useEnvVars = () => {\n const clientHasRendered = useClientHasRendered();\n\n if (!clientHasRendered || !ENV) return {};\n\n return {\n billingPagePaidSubContactUrl: ENV.BILLING_PAGE_PAID_SUB_CONTACT_URL,\n billingPageFreeTrialContactUrl: ENV.BILLING_PAGE_FREE_TRIAL_CONTACT_URL,\n chiliPiperRouterKey: ENV.CHILIPIPER_TEAMS_PLANS_INBOUND_ROUTER_KEY,\n isWorkspaceEmailStatsEnabled: ENV.WORKSPACE_EMAIL_STATS_ENABLED,\n isSubscriptionSelfServeEnabled: ENV.SUBSCRIPTION_SELF_SERVE_ENABLED,\n isPageThemesEnabled: ENV.PAGE_THEMES_ENABLED,\n cloudflareTurnstileCaptchaSiteKey:\n ENV.CLOUDFLARE_TURNSTILE_CAPTCHA_SITE_KEY,\n cloudflareTurnstileCaptchaEnabled: ENV.CLOUDFLARE_TURNSTILE_CAPTCHA_ENABLED,\n participantQnrSignupBuffer: ENV.PARTICIPANT_QNR_SIGNUP_BUFFER,\n siteBaseUrl: ENV.SITE_BASE_URL,\n paragonConfig: ENV.PARAGON_CONFIG,\n };\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"C4PUgxMKGH_VH0fmvXvN\";\nvar _2 = \"CubaHdUiLPgIt0OKp1Eq\";\nvar _3 = \"tIHm0cGa96ebjN4c08M_\";\nvar _4 = \"ORIAMgDY2YiYHLAid_h0\";\nvar _5 = \"EP0kpEqECqjign_ng8B8\";\nvar _6 = \"uUV1kigUj3PHAbhgmAgY\";\nvar _7 = \"n3QoitDnApNAAfTzsJOY\";\nvar _8 = \"PKWMQUAVukisw6AyBMGl\";\nvar _9 = \"nVyhGlIjQseQEVLMBwM5\";\nvar _a = \"RygaqaGUjVpDqNIz7NU5\";\nvar _b = \"CbiOf5OBCwbRZ3d58diO\";\nvar _c = \"pCPE6WBHhJKa9KMdJ4do\";\nvar _d = \"T7brubd3TPP95n6Huu82\";\nvar _e = \"b8_KZXNtUrIIZV07dQnY\";\nvar _f = \"VulEwh_Hxb1zDY_9Knxs\";\nvar _10 = \"WFXYBTCzvf7O36urTXqF\";\nvar _11 = \"DYBdjn_oJxCuY3r4byu6\";\nvar _12 = \"Sf3G6pErHe6R_ILB_4Pv\";\nvar _13 = \"egJnd7_TocVWZsqLdJ86\";\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 \"header\", _10 as \"headingText\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\", _13 as \"text\" }\n","import React from 'react';\n\nimport {\n Card,\n CardStack,\n Flex,\n LoadingSkeleton,\n} from '@user-interviews/ui-design-system';\n\nimport { SurveySectionLoadingSkeleton } from 'researcher/surveys/components/survey_section_loading_skeleton';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './project_application_loading_skeleton.module.scss';\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as headerStyles from './header/recruit_header.module.scss';\n\nexport const TEST_ID = 'ProjectApplicationLoadingSkeleton';\n\nconst TITLE_HEIGHT = 24;\nconst GREETING_HEIGHT = 18;\nconst SUB_GREETING_HEIGHT = 14;\n\nconst TITLE_WIDTH = 300;\nconst GREETING_WIDTH = 200;\nconst SUB_GREETING_WIDTH = 220;\n\ntype ProjectApplicationLoadingSkeletonProps = {\n hideHeader?: boolean;\n};\n\nexport function ProjectApplicationLoadingSkeleton({\n hideHeader,\n}: ProjectApplicationLoadingSkeletonProps) {\n return (\n <Flex\n alignItems=\"center\"\n container\n data-testid={TEST_ID}\n flexDirection=\"column\"\n >\n {!hideHeader && (\n <Flex\n alignItems=\"center\"\n className={styles.header}\n container\n flexDirection=\"column\"\n >\n <div className={headerStyles.heading}>\n <LoadingSkeleton\n className={styles.headingText}\n height={TITLE_HEIGHT}\n width={TITLE_WIDTH}\n />\n </div>\n <div className={headerStyles.divider} />\n <LoadingSkeleton\n className={styles.text}\n height={GREETING_HEIGHT}\n width={GREETING_WIDTH}\n />\n <LoadingSkeleton\n className={styles.text}\n height={SUB_GREETING_HEIGHT}\n width={SUB_GREETING_WIDTH}\n />\n </Flex>\n )}\n\n <CardStack size=\"sm\">\n <Card size=\"sm\">\n <SurveySectionLoadingSkeleton />\n </Card>\n </CardStack>\n </Flex>\n );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"G8EQhUU36YRLoxZPRZKK\";\nvar _2 = \"aBxHLy4Wrj0FInbNnj07\";\nvar _3 = \"A4o84Yzrngi3f_Z5h2rU\";\nvar _4 = \"RqDO8bIHuP5O5udOQdo9\";\nvar _5 = \"nNxWUZ_8R7g4tbD6GGFQ\";\nvar _6 = \"d8iBh7ulOhKtHFnQOD0E\";\nvar _7 = \"vsnU2jmmhcGeEqgtcMC0\";\nvar _8 = \"LnhOwoznRWzZNEdjgzXU\";\nvar _9 = \"Y155sPDA8xz_XSdsNv6P\";\nvar _a = \"CUa0x_I1IGtlp_FiX6Z9\";\nvar _b = \"HiLJeqxp2vIFImSaGUWq\";\nvar _c = \"HFDGwN5IFPeVLPvH2_0I\";\nvar _d = \"LotZBQASCaS_JzO9NKXX\";\nvar _e = \"QhbNlx6wJQu5OBTLJjPB\";\nvar _f = \"jShz01whv_Rbg6kjOt8t\";\nvar _10 = \"lbiIyziMGztSAF5UudRm\";\nvar _11 = \"UyNT6yt0HrSg1_4YDeTF\";\nvar _12 = \"bWzbX_Kqv0qWE1a8ER9q\";\nvar _13 = \"dG6r7IZPur2GO8ntJiMX\";\nvar _14 = \"fSpUmB53jwwOE5CflCp6\";\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 \"centered\", _10 as \"fullHeight\", _11 as \"padded\", _12 as \"page\", _13 as \"participant-dashboard__project__info__status__string\", _14 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useRef, useState, type ReactNode } from 'react';\n\nimport { LoadingOverlay, Main } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\nimport { Footer } from './components/footer';\nimport { Sidebar } from './components/sidebar';\nimport { SidebarContextProvider } from './components/sidebar_context_provider';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './page.module.scss';\n\ntype PageProps = {\n children: ReactNode;\n isCentered?: boolean;\n isFullHeight?: boolean;\n isPadded?: boolean;\n};\n\nexport function Page({\n children,\n isCentered,\n isFullHeight,\n isPadded,\n}: PageProps) {\n const sidebarRef = useRef<HTMLDivElement>(null);\n const [\n isNavigationItemTriggeringPageLoad,\n setIsNavigationItemTriggeringPageLoad,\n ] = useState(false);\n\n const handlePageLoading = () => setIsNavigationItemTriggeringPageLoad(true);\n\n return (\n <div\n className={classNames(styles.page, {\n [styles.centered]: isCentered,\n [styles.fullHeight]: isFullHeight,\n [styles.padded]: isPadded,\n })}\n >\n <LoadingOverlay visible={isNavigationItemTriggeringPageLoad} />\n\n <SidebarContextProvider sidebarRef={sidebarRef}>\n <Sidebar ref={sidebarRef} onHandlePageLoading={handlePageLoading} />\n </SidebarContextProvider>\n\n <Main>{children}</Main>\n\n <Footer />\n </div>\n );\n}\n","import useMediaQuery, { MEDIA_BREAKPOINT_MD } from 'hooks/use_media_query';\n\nexport function useSidebarMobileBreakpoint() {\n const isMobile = !useMediaQuery(MEDIA_BREAKPOINT_MD);\n\n return isMobile;\n}\n","import {\n FIELD_FILTER_OPERANDS,\n ACTIVITY_STAT_FILTER_OPERANDS,\n ATTRIBUTE_FILTER_OPERANDS,\n INCENTIVE_OPERANDS,\n PARTICIPANT_LABEL_OPERANDS,\n POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS,\n POPULATION_ATTRIBUTE_IS_SET_OPERANDS,\n PROJECT_OPERANDS,\n OPT_IN_FORM_OPERANDS,\n} from 'lib/generated_constants/filters_constants';\n\nimport generateUUID from 'lib/generate_uuid';\n\nexport const FILTER_KEYS = {\n email: 'email',\n created_at: 'created_at',\n first_name: 'first_name',\n labels: 'labels',\n last_applied_at: 'last_applied_at',\n last_invited_at: 'last_invited_at',\n last_participated_at: 'last_participated_at',\n last_name: 'last_name',\n opt_in_form: 'opt_in_form',\n phone_number: 'phone_number',\n project_participation: 'project_participation',\n source: 'source',\n yearly_payment: 'yearly_payment',\n unsubscribed: 'unsubscribed',\n};\n\nexport const getParamKey = () => `filter-param-key-${generateUUID()}`;\n\nexport const getDefaultParams = (isNotSetOperand) => {\n if (isNotSetOperand) {\n return {\n key: getParamKey(),\n orIsNotSet: false,\n };\n }\n\n return {\n key: getParamKey(),\n };\n};\n\nconst defaultFilterRuleOperand = (operands, type) => {\n // Note: Some operands are limited by type, if not all operands are available\n // to each filter type. If type is passed, only return operands relevant to that type.\n const availableOperands = type ? operands[type] : operands;\n\n return availableOperands[0] || {};\n};\n\nconst createPopulationAttributeFilter = (attribute) => {\n const { id, name, type } = attribute;\n\n const defaultAttributeFilterRuleOperand = defaultFilterRuleOperand(\n ATTRIBUTE_FILTER_OPERANDS,\n type,\n );\n\n const availableOperands = type\n ? ATTRIBUTE_FILTER_OPERANDS[type]\n : ATTRIBUTE_FILTER_OPERANDS;\n\n return {\n availableOperands,\n defaultFilterRuleShape: {\n activityStat: null,\n field: null,\n operand: defaultAttributeFilterRuleOperand.key,\n params: [\n getDefaultParams(POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS[type]),\n ],\n participantPopulationAttributeId: id,\n type,\n },\n attribute,\n id,\n name,\n isSetOperand: POPULATION_ATTRIBUTE_IS_SET_OPERANDS[type],\n isNotSetOperand: POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS[type],\n };\n};\n\nexport const defaultLabelOperand = defaultFilterRuleOperand(\n PARTICIPANT_LABEL_OPERANDS,\n);\n\nconst defaultBooleanOperand = defaultFilterRuleOperand(\n FIELD_FILTER_OPERANDS,\n 'boolean',\n);\n\nconst defaultActivityStatDateOperand = defaultFilterRuleOperand(\n ACTIVITY_STAT_FILTER_OPERANDS,\n 'date',\n);\n\nconst defaultDecimalOperand = defaultFilterRuleOperand(\n INCENTIVE_OPERANDS,\n 'decimal',\n);\n\nconst defaultIntegerOperand = defaultFilterRuleOperand(\n FIELD_FILTER_OPERANDS,\n 'integer',\n);\n\nconst defaultStringOperand = defaultFilterRuleOperand(\n FIELD_FILTER_OPERANDS,\n 'string',\n);\n\nexport const standardFilters = {\n [FILTER_KEYS.labels]: {\n availableOperands: PARTICIPANT_LABEL_OPERANDS,\n defaultFilterRuleShape: {\n activityStat: null,\n field: null,\n operand: defaultLabelOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n },\n name: 'Labels',\n id: FILTER_KEYS.labels,\n },\n [FILTER_KEYS.project_participation]: {\n availableOperands: PROJECT_OPERANDS,\n defaultFilterRuleShape: {\n activityStat: null,\n field: null,\n operand: defaultFilterRuleOperand(PROJECT_OPERANDS).key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n },\n addRowLabel: 'Add another project',\n name: 'Project history',\n id: FILTER_KEYS.project_participation,\n },\n [FILTER_KEYS.opt_in_form]: {\n availableOperands: OPT_IN_FORM_OPERANDS,\n defaultFilterRuleShape: {\n activityStat: null,\n field: null,\n operand: defaultFilterRuleOperand(OPT_IN_FORM_OPERANDS).key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n },\n addRowLabel: 'Add another opt-in form',\n id: FILTER_KEYS.opt_in_form,\n name: 'Opt-in form history',\n },\n [FILTER_KEYS.email]: {\n availableOperands: FIELD_FILTER_OPERANDS.string,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.email,\n operand: defaultStringOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'string',\n },\n id: FILTER_KEYS.email,\n name: 'Email',\n },\n [FILTER_KEYS.first_name]: {\n availableOperands: FIELD_FILTER_OPERANDS.string,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.first_name,\n operand: defaultStringOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'string',\n },\n id: FILTER_KEYS.first_name,\n name: 'First name',\n },\n [FILTER_KEYS.last_name]: {\n availableOperands: FIELD_FILTER_OPERANDS.string,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.last_name,\n operand: defaultStringOperand.key,\n participantPopulationAttributeId: null,\n params: [getDefaultParams()],\n type: 'string',\n },\n id: FILTER_KEYS.last_name,\n name: 'Last name',\n },\n [FILTER_KEYS.phone_number]: {\n availableOperands: FIELD_FILTER_OPERANDS.string,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.phone_number,\n operand: defaultStringOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'string',\n },\n id: FILTER_KEYS.phone_number,\n name: 'Phone number',\n },\n [FILTER_KEYS.source]: {\n availableOperands: FIELD_FILTER_OPERANDS.integer,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.source,\n operand: defaultIntegerOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'integer',\n },\n id: FILTER_KEYS.source,\n name: 'First source',\n },\n [FILTER_KEYS.unsubscribed]: {\n availableOperands: FIELD_FILTER_OPERANDS.boolean,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.unsubscribed,\n operand: defaultBooleanOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'boolean',\n },\n id: FILTER_KEYS.unsubscribed,\n name: 'Unsubscribed',\n },\n [FILTER_KEYS.last_applied_at]: {\n availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n defaultFilterRuleShape: {\n activityStat: FILTER_KEYS.last_applied_at,\n field: null,\n operand: defaultActivityStatDateOperand.key,\n params: [getDefaultParams(true)],\n participantPopulationAttributeId: null,\n type: 'date',\n },\n id: FILTER_KEYS.last_applied_at,\n name: 'Last applied date',\n isSetOperand: 'activity_stat_date_is_set',\n isNotSetOperand: 'activity_stat_date_is_not_set',\n },\n [FILTER_KEYS.last_invited_at]: {\n availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n defaultFilterRuleShape: {\n activityStat: FILTER_KEYS.last_invited_at,\n field: null,\n operand: defaultActivityStatDateOperand.key,\n params: [getDefaultParams(true)],\n participantPopulationAttributeId: null,\n type: 'date',\n },\n id: FILTER_KEYS.last_invited_at,\n name: 'Last invited date',\n isSetOperand: 'activity_stat_date_is_set',\n isNotSetOperand: 'activity_stat_date_is_not_set',\n },\n [FILTER_KEYS.last_participated_at]: {\n availableOperands: ACTIVITY_STAT_FILTER_OPERANDS.date,\n defaultFilterRuleShape: {\n activityStat: FILTER_KEYS.last_participated_at,\n field: null,\n operand: defaultActivityStatDateOperand.key,\n params: [getDefaultParams(true)],\n participantPopulationAttributeId: null,\n type: 'date',\n },\n id: FILTER_KEYS.last_participated_at,\n name: 'Last participated date',\n isSetOperand: 'activity_stat_date_is_set',\n isNotSetOperand: 'activity_stat_date_is_not_set',\n },\n [FILTER_KEYS.yearly_payment]: {\n availableOperands: INCENTIVE_OPERANDS.decimal,\n defaultFilterRuleShape: {\n activityStat: null,\n field: null,\n operand: defaultDecimalOperand.key,\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'decimal',\n },\n id: FILTER_KEYS.yearly_payment,\n name: 'Incentives earned',\n },\n [FILTER_KEYS.created_at]: {\n availableOperands: FIELD_FILTER_OPERANDS.date,\n defaultFilterRuleShape: {\n activityStat: null,\n field: FILTER_KEYS.created_at,\n operand: 'field_date_before',\n params: [getDefaultParams()],\n participantPopulationAttributeId: null,\n type: 'date',\n },\n id: FILTER_KEYS.created_at,\n name: 'Date added',\n },\n};\n\nexport const buildFilterList = ({ populationAttributes }) => {\n if (!populationAttributes?.length > 0) return standardFilters;\n\n const attributes = {};\n\n populationAttributes.forEach((attribute) => {\n attributes[attribute.id] = createPopulationAttributeFilter(attribute);\n });\n\n return { ...attributes, ...standardFilters };\n};\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { OPT_IN_FORMS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const optInFormsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getOptInForm: builder.query({\n query: ({ optInFormId, include }) =>\n routes.api_opt_in_form_path(optInFormId, { include }),\n transformResponse: deserializeJSONApiResponse,\n providesTags: (_result, _error, { id }) => [\n { type: OPT_IN_FORMS_TAG, id },\n ],\n }),\n updateOptInForm: builder.mutation({\n query: ({ optInFormId, attributes }) => ({\n url: routes.api_opt_in_form_path(optInFormId),\n method: 'PATCH',\n body: {\n data: {\n attributes,\n },\n },\n ...headersAndCredentials(),\n }),\n transformResponse: deserializeJSONApiResponse,\n invalidatesTags: [OPT_IN_FORMS_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useGetOptInFormQuery, useUpdateOptInFormMutation } =\n optInFormsApi;\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport {\n Button,\n ModalBody,\n ModalHeader,\n ModalFooter,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { TrackedModal } from 'common/modals';\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\nexport function ConfirmationModal({\n buttonText,\n confirmEvent,\n message,\n openEvent,\n title,\n onConfirm,\n onRequestClose,\n}) {\n const isOpen = message && title && onConfirm;\n\n return (\n <TrackedModal\n event={openEvent}\n isOpen={!!isOpen}\n onRequestClose={onRequestClose}\n >\n <ModalHeader\n title={title}\n titleId=\"SurveyBuilder-confirm-delete-modal\"\n onRequestClose={onRequestClose}\n />\n <ModalBody>{message || ''}</ModalBody>\n <ModalFooter>\n <Button variant=\"transparent\" onClick={onRequestClose}>\n Cancel\n </Button>\n <TrackedButton\n event={confirmEvent}\n type=\"button\"\n variant=\"primary\"\n onClick={onConfirm}\n >\n {buttonText}\n </TrackedButton>\n </ModalFooter>\n </TrackedModal>\n );\n}\n\nConfirmationModal.propTypes = {\n buttonText: propTypes.string,\n confirmEvent: propTypes.string,\n message: propTypes.node,\n openEvent: propTypes.string,\n title: propTypes.string,\n onConfirm: propTypes.func,\n onRequestClose: propTypes.func,\n};\n\nConfirmationModal.defaultProps = {\n buttonText: 'Confirm',\n confirmEvent: 'Survey -- Action Confirmed',\n openEvent: 'Survey -- Modal Opened',\n};\n","import React from 'react';\n\nexport default React.createContext(null);\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport * as Constants from '../../../constants';\n\nexport function ConditionSelect({\n isReadonly,\n joinMethod,\n position,\n onUpdate,\n}) {\n const handleChange = useCallback(\n (event) => onUpdate({ joinMethod: event.target.value }),\n [onUpdate],\n );\n\n if (position === 0) {\n return <b className=\"SkipLogicModal__skip-logic__row__prefix\">If</b>;\n }\n\n return (\n <select\n className=\"form-select SkipLogicModal__skip-logic__row__prefix\"\n disabled={isReadonly}\n value={joinMethod}\n onChange={handleChange}\n >\n <option value={Constants.JOIN_METHOD_OR}>OR</option>\n <option value={Constants.JOIN_METHOD_AND}>AND</option>\n </select>\n );\n}\n\nConditionSelect.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n joinMethod: propTypes.string,\n position: propTypes.number.isRequired,\n onUpdate: propTypes.func.isRequired,\n};\n\nConditionSelect.defaultProps = {\n joinMethod: '',\n};\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlus, faMinus } from 'lib/font_awesome/regular';\n\nimport SurveyContext from '../../../context';\n\nexport function Actions({ isReadonly, skipLogicCondition, skipLogicId }) {\n if (isReadonly) return null;\n\n const { skipLogicFunctions } = useContext(SurveyContext);\n const handleAdd = () =>\n skipLogicFunctions.addCondition(skipLogicId, skipLogicCondition.uuid);\n const handleRemove = () =>\n skipLogicFunctions.removeCondition(skipLogicId, skipLogicCondition.uuid);\n\n return (\n <>\n <Button\n className=\"btn btn-remove\"\n key=\"remove\"\n variant=\"default\"\n onClick={handleRemove}\n >\n <FontAwesomeIcon icon={faMinus} />\n </Button>\n <Button\n className=\"btn btn-add\"\n key=\"add\"\n variant=\"default\"\n onClick={handleAdd}\n >\n <FontAwesomeIcon icon={faPlus} />\n </Button>\n </>\n );\n}\n\nActions.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n skipLogicCondition: propTypes.object.isRequired,\n skipLogicId: propTypes.string.isRequired,\n};\n","import React, { useContext, useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport SurveyContext from '../../../../context';\n\nexport function AnswerSelect({\n answerIds,\n isReadonly,\n skipLogicCondition,\n onUpdate,\n}) {\n const { survey } = useContext(SurveyContext);\n\n const answers = useMemo(() => {\n if (!answerIds) return null;\n\n return answerIds.map((answerId) => {\n const answer = survey.answers[answerId];\n\n // TODO: Fix holistically\n if (!answer) return null;\n\n return (\n <option key={answer.uuid} value={answer.uuid}>\n {answer.text}\n </option>\n );\n });\n }, [survey.answers, answerIds]);\n\n const handleChange = useCallback(\n (event) => onUpdate({ answerId: event.target.value }),\n [onUpdate],\n );\n\n return (\n <select\n className={classNames('form-select', {\n 'is-invalid': skipLogicCondition.errors.answer,\n })}\n disabled={isReadonly}\n value={skipLogicCondition.answerId || ''}\n onChange={handleChange}\n >\n <option value=\"\" />\n\n {answers}\n </select>\n );\n}\n\nAnswerSelect.propTypes = {\n answerIds: propTypes.array.isRequired,\n isReadonly: propTypes.bool.isRequired,\n skipLogicCondition: propTypes.object.isRequired,\n onUpdate: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../../../constants';\n\nexport function OperatorSelect({\n isReadonly,\n questionType,\n skipLogicCondition,\n onUpdate,\n}) {\n const handleChange = (event) => onUpdate({ operator: event.target.value });\n\n return (\n <select\n className={classNames('form-select', {\n 'is-invalid': skipLogicCondition.errors.operator,\n })}\n disabled={isReadonly}\n value={skipLogicCondition.operator || ''}\n onChange={handleChange}\n >\n <option value={Constants.CONDITION_OPERATOR_EQL}>\n {questionType === Constants.QUESTION_PICK_ANY ? 'is chosen' : 'is'}\n </option>\n <option value={Constants.CONDITION_OPERATOR_NOT_EQL}>\n {questionType === Constants.QUESTION_PICK_ANY\n ? 'is not chosen'\n : 'is not'}\n </option>\n </select>\n );\n}\n\nOperatorSelect.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n questionType: propTypes.string.isRequired,\n skipLogicCondition: propTypes.object.isRequired,\n onUpdate: propTypes.func.isRequired,\n};\n","import React, { useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { SingleSelect } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../../../constants';\n\nimport { AnswerSelect } from './answer_select';\nimport { OperatorSelect } from './operator_select';\n\nexport function Controls({\n isReadonly,\n skipLogicCondition,\n skipLogicOptions,\n survey,\n onUpdate,\n}) {\n const handleQuestionChanged = useCallback(\n (event) =>\n onUpdate({\n answerId: '',\n questionId: event.value,\n }),\n [onUpdate],\n );\n\n const conditionQuestion = survey.questions[skipLogicCondition.questionId];\n\n const controls = useMemo(() => {\n if (!conditionQuestion) {\n return (\n <>\n <select className=\"form-select\" disabled />\n <select className=\"form-select\" disabled />\n </>\n );\n }\n\n if (conditionQuestion.pick === Constants.QUESTION_PICK_ANY) {\n return (\n <>\n <AnswerSelect\n answerIds={conditionQuestion.answerIds}\n isReadonly={isReadonly}\n skipLogicCondition={skipLogicCondition}\n onUpdate={onUpdate}\n />\n <OperatorSelect\n isReadonly={isReadonly}\n questionType={conditionQuestion.pick}\n skipLogicCondition={skipLogicCondition}\n onUpdate={onUpdate}\n />\n </>\n );\n }\n\n return (\n <>\n <OperatorSelect\n isReadonly={isReadonly}\n questionType={conditionQuestion.pick}\n skipLogicCondition={skipLogicCondition}\n onUpdate={onUpdate}\n />\n <AnswerSelect\n answerIds={conditionQuestion.answerIds}\n isReadonly={isReadonly}\n skipLogicCondition={skipLogicCondition}\n onUpdate={onUpdate}\n />\n </>\n );\n }, [conditionQuestion, isReadonly, onUpdate, skipLogicCondition]);\n\n return (\n <div className=\"SkipLogicModal__skip-logic__row__controls\">\n <SingleSelect\n aria-label=\"Select question\"\n className={classNames('single-select', {\n 'is-invalid': skipLogicCondition.errors.question,\n })}\n disabled={isReadonly}\n inputId=\"question-select\"\n modal\n options={skipLogicOptions}\n value={{\n label: conditionQuestion?.text,\n value: skipLogicCondition.questionId,\n }}\n onChange={handleQuestionChanged}\n />\n {controls}\n </div>\n );\n}\n\nControls.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n skipLogicCondition: propTypes.object.isRequired,\n skipLogicOptions: propTypes.array.isRequired,\n survey: propTypes.object.isRequired,\n onUpdate: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport SurveyContext from '../../../context';\nimport { surveyPropType } from '../../../prop_types';\n\nimport { ConditionSelect } from './condition_select';\nimport { Actions } from './actions';\nimport { Controls } from './controls';\n\nexport function ConditionRow({\n isReadonly,\n position,\n skipLogic,\n skipLogicCondition,\n skipLogicOptions,\n survey,\n}) {\n const {\n skipLogicFunctions: {\n update: updateSkipLogic,\n updateCondition: updateSkipLogicCondition,\n },\n } = useContext(SurveyContext);\n\n const skipLogicId = skipLogic.uuid;\n\n const handleSkipLogicUpdate = useCallback(\n (changes) => updateSkipLogic(skipLogicId, changes),\n [skipLogicId, updateSkipLogic],\n );\n\n const handleConditionUpdate = useCallback(\n (changes) => updateSkipLogicCondition(skipLogicCondition.uuid, changes),\n [skipLogicCondition.uuid, updateSkipLogicCondition],\n );\n\n return (\n <div className=\"SkipLogicModal__skip-logic__row\">\n <ConditionSelect\n isReadonly={isReadonly}\n joinMethod={skipLogic.joinMethod}\n position={position}\n onUpdate={handleSkipLogicUpdate}\n />\n\n <Controls\n isReadonly={isReadonly}\n skipLogicCondition={skipLogicCondition}\n skipLogicOptions={skipLogicOptions}\n survey={survey}\n onUpdate={handleConditionUpdate}\n />\n\n <Actions\n isReadonly={isReadonly}\n skipLogicCondition={skipLogicCondition}\n skipLogicId={skipLogic.uuid}\n />\n </div>\n );\n}\n\nConditionRow.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n position: propTypes.number.isRequired,\n skipLogic: propTypes.shape({\n joinMethod: propTypes.string.isRequired,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n skipLogicCondition: propTypes.object.isRequired,\n skipLogicOptions: propTypes.array.isRequired,\n survey: surveyPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { surveyPropType } from '../../prop_types';\n\nexport function Errors({ skipLogic, survey }) {\n const hasConditionErrors = skipLogic.conditionIds.find(\n (id) => !!Object.keys(survey.skipLogicConditions[id].errors).length,\n );\n\n const hasErrors = !!Object.keys(skipLogic.errors).length;\n\n if (!hasErrors && !hasConditionErrors) return null;\n\n return (\n <div className=\"SkipLogicModal__skip-logic__row\">\n <div className=\"SkipLogicModal__skip-logic__row__prefix\" />\n <div\n className={classNames(\n 'SkipLogicModal__skip-logic__row__control',\n 'invalid-feedback',\n 'force-display',\n )}\n >\n {hasConditionErrors && <p>Conditions are invalid</p>}\n {hasErrors &&\n Object.keys(skipLogic.errors).map((key) => (\n <p key={key}>{skipLogic.errors[key]}</p>\n ))}\n </div>\n </div>\n );\n}\n\nErrors.propTypes = {\n skipLogic: propTypes.shape({\n conditionIds: propTypes.array.isRequired,\n errors: propTypes.shape({\n text: propTypes.string,\n }).isRequired,\n }).isRequired,\n survey: surveyPropType.isRequired,\n};\n","import React, { useMemo, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyPropType } from '../../prop_types';\n\nimport { ConditionRow } from './condition_row';\nimport { Errors } from './errors';\n\nconst getSkipLogicOptions = (sectionId, survey) => {\n const section = survey.sections[sectionId];\n\n const groupedOptions = [];\n\n const questions = section.questionIds.reduce((acc, questionId) => {\n const question = survey.questions[questionId];\n\n if (\n question.pick !== Constants.QUESTION_PICK_NONE &&\n question.pick !== Constants.QUESTION_BOOLEAN\n )\n acc.push(question);\n\n return acc;\n }, []);\n\n questions.forEach((question) => {\n if (question.questionIds) {\n const questionGroupQuestions = question.questionIds.map(\n (questionGroupQuestionId) => {\n const questionGroupQuestion =\n survey.questions[questionGroupQuestionId];\n return {\n label: questionGroupQuestion.text,\n value: questionGroupQuestion.uuid,\n };\n },\n );\n groupedOptions.push({\n label: question.text,\n options: questionGroupQuestions,\n });\n } else {\n groupedOptions.push({\n label: question.text || 'Untitled',\n value: question.uuid,\n });\n }\n });\n\n return groupedOptions;\n};\n\nexport function SkipLogic({\n isReadonly,\n sectionId,\n skipLogic,\n survey,\n onRemove,\n onUpdate,\n}) {\n const skipLogicId = skipLogic.uuid;\n\n const handleUpdate = useCallback(\n (event) => onUpdate(skipLogicId, { targetSectionId: event.target.value }),\n [onUpdate, skipLogicId],\n );\n\n const handleRemove = useCallback(\n () => onRemove(sectionId, skipLogicId),\n [onRemove, sectionId, skipLogicId],\n );\n\n const targetableSections = useMemo(() => {\n const sectionIds = survey.sectionIds.slice(\n survey.sectionIds.indexOf(sectionId) + 1,\n );\n\n return sectionIds.map((id) => {\n const section = survey.sections[id];\n\n return (\n <option key={section.uuid} value={section.uuid}>\n {section.title}\n </option>\n );\n });\n }, [survey.sectionIds, survey.sections, sectionId]);\n\n const skipLogicConditions = useMemo(\n () =>\n skipLogic.conditionIds.map((conditionId, index) => {\n const skipLogicCondition = survey.skipLogicConditions[conditionId];\n const skipLogicOptions = getSkipLogicOptions(sectionId, survey);\n\n return (\n <ConditionRow\n isReadonly={isReadonly}\n key={skipLogicCondition.uuid}\n position={index}\n skipLogic={skipLogic}\n skipLogicCondition={skipLogicCondition}\n skipLogicOptions={skipLogicOptions}\n survey={survey}\n />\n );\n }),\n [skipLogic, sectionId, survey, isReadonly],\n );\n\n return (\n <div className=\"form-group SkipLogicModal__skip-logic\">\n {skipLogicConditions}\n\n <div className=\"SkipLogicModal__skip-logic__row\">\n <b className=\"SkipLogicModal__skip-logic__row__prefix\">Skip to</b>\n <select\n className=\"form-select SkipLogicModal__skip-logic__row__control\"\n disabled={isReadonly}\n value={skipLogic.targetSectionId || ''}\n onChange={handleUpdate}\n >\n <option value=\"\">Finish</option>\n {targetableSections}\n </select>\n\n {isReadonly || (\n <Button variant=\"outline-danger\" onClick={handleRemove}>\n Remove\n </Button>\n )}\n </div>\n\n <Errors skipLogic={skipLogic} survey={survey} />\n </div>\n );\n}\n\nSkipLogic.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n sectionId: propTypes.string.isRequired,\n skipLogic: propTypes.object.isRequired,\n survey: surveyPropType.isRequired,\n onRemove: propTypes.func.isRequired,\n onUpdate: propTypes.func.isRequired,\n};\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { faPlusCircle } from 'lib/font_awesome/solid';\n\nimport SurveyContext from '../context';\nimport { surveyPropType } from '../prop_types';\n\nimport { SkipLogic } from './skip_logic';\n\nexport function SectionSkipLogic({ isReadonly, section, survey }) {\n const { skipLogicFunctions } = useContext(SurveyContext);\n\n const {\n add: addSkipLogic,\n remove: removeSkipLogic,\n update: updateSkipLogic,\n } = skipLogicFunctions;\n\n const handleAdd = useCallback(\n () => addSkipLogic(section.uuid),\n [addSkipLogic, section.uuid],\n );\n\n if (!section.skipLogicIds?.length) {\n return (\n <p className=\"SkipLogicModal__empty-text\">\n There is no skip logic for this section.\n </p>\n );\n }\n\n return (\n <>\n {section.skipLogicIds.map((skipLogicId) => {\n const skipLogic = survey.skipLogics[skipLogicId];\n\n return (\n <SkipLogic\n isReadonly={isReadonly}\n key={skipLogic.uuid}\n sectionId={section.uuid}\n skipLogic={skipLogic}\n survey={survey}\n onRemove={removeSkipLogic}\n onUpdate={updateSkipLogic}\n />\n );\n })}\n\n {!isReadonly && (\n <Button\n className=\"btn-link--no-padding\"\n leadingIcon={faPlusCircle}\n variant=\"link\"\n onClick={handleAdd}\n >\n Add new logic statement\n </Button>\n )}\n </>\n );\n}\n\nSectionSkipLogic.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n section: propTypes.object.isRequired,\n survey: surveyPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport {\n Button,\n Modal,\n ModalHeader,\n ModalFooter,\n ModalBody,\n MODAL_SIZES,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyPropType } from '../prop_types';\n\nimport { SectionSkipLogic } from './section_skip_logic';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './skip_logic_modal.scss';\n\nexport function SkipLogicModal({\n isReadonly,\n sectionId,\n survey,\n onRequestCancel,\n onRequestClose,\n}) {\n const section = sectionId ? survey.sections[sectionId] : {};\n\n const { skipLogicIds } = section;\n const skipLogicsIncomplete =\n skipLogicIds !== undefined &&\n !skipLogicIds.every((skipLogicId) => {\n const skipLogic = survey.skipLogics[skipLogicId];\n const conditionsCompleted = skipLogic.conditionIds.every(\n (conditionId) => {\n const condition = survey.skipLogicConditions[conditionId];\n const conditionCompleted = condition.questionId && condition.answerId;\n return conditionCompleted;\n },\n );\n return conditionsCompleted;\n });\n\n return (\n <Modal\n className=\"SkipLogicModal\"\n isOpen={!!sectionId}\n size={MODAL_SIZES.LARGE}\n >\n <ModalHeader\n title={`${isReadonly ? 'Skip' : 'Edit skip'} logic for ${section.title}`}\n titleId=\"skip-logic-modal-title\"\n />\n <ModalBody>\n <p className=\"SkipLogicModal__clarifier\">\n Skip logic can only be applied to single or multi-choice questions.\n </p>\n <SectionSkipLogic\n isReadonly={isReadonly}\n section={section}\n survey={survey}\n />\n </ModalBody>\n <ModalFooter>\n <Button variant=\"transparent\" onClick={onRequestCancel}>\n Cancel\n </Button>\n <Button\n disabled={skipLogicsIncomplete}\n variant=\"primary\"\n onClick={onRequestClose}\n >\n Done\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n\nSkipLogicModal.propTypes = {\n isReadonly: propTypes.bool.isRequired,\n sectionId: propTypes.string,\n survey: surveyPropType.isRequired,\n onRequestCancel: propTypes.func.isRequired,\n onRequestClose: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport {\n Button,\n ModalBody,\n ModalHeader,\n ModalFooter,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { TrackedModal } from 'common/modals';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { PREMIUM_SURVEY_FEE } from 'lib/generated_constants/billing';\nimport {\n LegacyBundleMonthlyDisplayPrices,\n SubscriptionNames,\n} from 'lib/generated_constants/subscriptions';\n\nfunction SurveyUpgradeModal({\n isOpen = false,\n onRequestClose,\n onUpgradeClick,\n}) {\n return (\n <TrackedModal\n className=\"SurveyUpgradeModal\"\n event={trackingEvents.SURVEY_UPGRADE_MODAL_SHOWN}\n isOpen={isOpen}\n onRequestClose={onRequestClose}\n >\n <ModalHeader\n title=\"Upgrade project?\"\n titleId=\"survey-upgrade-modal\"\n onRequestClose={onRequestClose}\n />\n <ModalBody>\n <p>\n {/* UI-311 Another $ sign to change for other currencies */}\n Surveys with multiple pages add an extra ${PREMIUM_SURVEY_FEE} per\n completed participant session or are included in our subscription\n plans, starting at{' '}\n {LegacyBundleMonthlyDisplayPrices[SubscriptionNames.CONSUMER]} /\n month.\n </p>\n <p>\n Would you like to upgrade? You can choose pay as you go or\n subscription pricing in the final review step.\n </p>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"link\" onClick={onRequestClose}>\n Cancel\n </Button>\n <TrackedButton\n event={trackingEvents.SURVEY_UPGRADE_ACCEPTED}\n variant=\"primary\"\n onClick={onUpgradeClick}\n >\n Upgrade project\n </TrackedButton>\n </ModalFooter>\n </TrackedModal>\n );\n}\n\nSurveyUpgradeModal.propTypes = {\n isOpen: propTypes.bool,\n onRequestClose: propTypes.func.isRequired,\n onUpgradeClick: propTypes.func.isRequired,\n};\n\nexport default SurveyUpgradeModal;\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { TrackedIconButton } from 'common/analytics';\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function Actions({\n isRemovableQuestion,\n isVisible,\n questionUUID,\n sectionUUID,\n onDuplicate,\n onRemove,\n}) {\n const { account } = useContext(AuthUserContext);\n\n if (!isVisible) return null;\n const handleDuplicate = (event) => {\n event.stopPropagation();\n\n onDuplicate(sectionUUID, questionUUID);\n };\n const handleRemove = (event) => {\n event.stopPropagation();\n\n onRemove(sectionUUID, questionUUID);\n };\n\n return (\n <>\n <TrackedIconButton\n action=\"COPY\"\n ariaLabel=\"Duplicate Screener Question\"\n event={trackingEvents.BUILD_PROJECT_SCREENER_QUESTION_DUPLICATED}\n onClick={handleDuplicate}\n />\n <TrackedIconButton\n action=\"DELETE\"\n ariaLabel=\"Remove Screener Question\"\n disabled={!isRemovableQuestion}\n event={trackingEvents.SURVEY_REMOVE_QUESTION}\n eventData={{\n account_id: account?.id,\n }}\n onClick={handleRemove}\n />\n </>\n );\n}\n\nActions.propTypes = {\n isRemovableQuestion: propTypes.bool.isRequired,\n isVisible: propTypes.bool.isRequired,\n questionUUID: propTypes.string.isRequired,\n sectionUUID: propTypes.string.isRequired,\n onDuplicate: propTypes.func.isRequired,\n onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SingleSelect } from '@user-interviews/ui-design-system';\n\nimport { useFeatureFlag } from 'hooks/use_feature_flag';\nimport { Features } from 'lib/generated_constants/features';\n\nimport * as Constants from '../../constants';\n\nexport function QualifyLogicSelect({\n className,\n isPickOne,\n value,\n onAnswerChange,\n}) {\n const handleClick = (event) => event.stopPropagation();\n\n const handleQualifyLogicChange = useCallback(\n (selected) => onAnswerChange({ qualifyLogic: selected.value }),\n [onAnswerChange],\n );\n const { isEnabled: recruitApiEnabled } = useFeatureFlag({\n featureName: Features.RECRUIT_API,\n });\n\n let options;\n if (isPickOne) {\n options = Constants.PICK_ONE_QUALIFY_LOGIC_OPTIONS;\n } else if (recruitApiEnabled) {\n options = Constants.RECRUIT_API_LOGIC_OPTIONS;\n } else {\n options = Constants.QUALIFY_LOGIC_OPTIONS;\n }\n\n const { label } = options.find((option) => option.value === value) || {};\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions\n <div className={className} onClick={handleClick}>\n <SingleSelect\n aria-label=\"qualify logic select\"\n inputKey=\"answer-select\"\n options={options}\n value={{ label, value }}\n onChange={handleQualifyLogicChange}\n />\n </div>\n );\n}\n\nQualifyLogicSelect.propTypes = {\n className: propTypes.string,\n isPickOne: propTypes.bool.isRequired,\n value: propTypes.string.isRequired,\n onAnswerChange: propTypes.func.isRequired,\n};\n\nQualifyLogicSelect.defaultProps = {\n className: '',\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { IconButton } from '@user-interviews/ui-design-system';\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { faGripVertical } from 'lib/font_awesome/solid';\n\nimport { NEW_LINE_REGEX } from 'lib/surveys/builder/utilities';\n\nimport { SCREENER_FORM_TYPE } from 'components/survey_builder/constants';\nimport { SurveyBuilderContext } from 'components/survey_builder';\nimport { QualifyLogicSelect } from './qualify_logic_select';\n\nimport * as Constants from '../../constants';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './editing.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\nexport function Editing({\n answer,\n index,\n isEditing,\n isRemovableAnswer,\n questionId,\n questionType,\n onAdd,\n onRemove,\n onChange,\n}) {\n const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n const isBoolean = questionType === Constants.QUESTION_BOOLEAN;\n\n const {\n formState: { errors },\n } = useFormContext();\n const { formType } = useContext(SurveyBuilderContext);\n const isScreenerForm = formType === SCREENER_FORM_TYPE;\n const answerName = `answer.${answer.uuid}`;\n const { field: answerInput } = useController({\n defaultValue: answer.text,\n name: answerName,\n rules: { required: true },\n });\n\n const { attributes, listeners, setNodeRef, transform, transition } =\n useSortable({\n id: answer.uuid,\n });\n\n const style = {\n transform: CSS.Translate.toString(transform),\n transition,\n };\n\n const handleClick = (event) => event.stopPropagation();\n\n const handleAdd = useCallback(\n (event) => {\n event.stopPropagation();\n\n onAdd(questionId, answer.uuid);\n },\n [onAdd, questionId, answer.uuid],\n );\n\n const handleRemove = useCallback(\n (event) => {\n event.stopPropagation();\n\n onRemove(questionId, answer.uuid);\n },\n [onRemove, questionId, answer.uuid],\n );\n\n const handleTextChange = useCallback(\n (event) => {\n const eventValue = event.target.value;\n\n const answers = eventValue.split(NEW_LINE_REGEX);\n\n if (answers.length > 1) {\n answerInput.onChange(answers[0]);\n } else {\n answerInput.onChange(eventValue);\n }\n\n onChange({ text: eventValue });\n },\n [onChange, answerInput],\n );\n\n const hasErrors =\n errors?.answer?.[answer.uuid] || Object.keys(answer.errors).length;\n\n const optionNumber = (index || 0) + 1;\n\n return (\n <div\n className=\"SurveyBuilderRow editing\"\n id={answer.uuid}\n ref={setNodeRef}\n style={isEditing ? style : { display: 'none' }}\n >\n <div className=\"SurveyBuilderRow__text\">\n <div className=\"SurveyBuilderRow__text__answer\">\n <div\n className=\"drag-handle-wrapper\"\n id={`reorder-${answer.uuid}`}\n {...attributes}\n {...listeners}\n >\n <FontAwesomeIcon icon={faGripVertical} size=\"sm\" />\n </div>\n <div className=\"checkbox-wrapper\">\n <input\n aria-label=\"answer selected preview\"\n disabled\n type={isPickOne || isBoolean ? 'radio' : 'checkbox'}\n />\n </div>\n <div className=\"answer-wrapper\">\n <textarea\n /* We are saving data in both react-hook-form and survey builder context so we can\n validate the inputs for front end errors (RHF) and server errors (builder context) */\n {...answerInput}\n aria-invalid={!!hasErrors}\n aria-label={`option ${optionNumber}`}\n className={classNames('form-control', {\n 'is-invalid': hasErrors,\n })}\n disabled={isBoolean}\n name={answerName}\n style={isEditing ? null : { display: 'none' }}\n onChange={handleTextChange}\n onClick={handleClick}\n />\n <div className=\"invalid-feedback\">\n {hasErrors && \"Answer can't be blank\"}\n </div>\n </div>\n </div>\n </div>\n {isScreenerForm && (\n <div className=\"SurveyBuilderRow__controls\">\n <QualifyLogicSelect\n className=\"SurveyBuilderQuestion__type answer\"\n isPickOne={isPickOne}\n value={answer.qualifyLogic}\n onAnswerChange={onChange}\n />\n </div>\n )}\n\n {!isBoolean && (\n <div className=\"SurveyBuilderRow__actions\">\n <IconButton\n action=\"ADD\"\n ariaLabel={`add an option after option ${optionNumber}`}\n onClick={handleAdd}\n />\n <IconButton\n action=\"DELETE\"\n ariaLabel={`remove option ${optionNumber}`}\n disabled={!isRemovableAnswer}\n onClick={handleRemove}\n />\n </div>\n )}\n </div>\n );\n}\n\nEditing.propTypes = {\n answer: propTypes.shape({\n errors: propTypes.shape({\n text: propTypes.string,\n }).isRequired,\n qualifyLogic: propTypes.string.isRequired,\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n index: propTypes.number.isRequired,\n isEditing: propTypes.bool.isRequired,\n isRemovableAnswer: propTypes.bool.isRequired,\n questionId: propTypes.string.isRequired,\n questionType: propTypes.string.isRequired,\n onAdd: propTypes.func.isRequired,\n onChange: propTypes.func.isRequired,\n onRemove: propTypes.func.isRequired,\n};\n","import React, { useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\n\nimport * as Constants from '../../constants';\n\nexport function Pick({ answer, isEditing, questionType }) {\n const { formType } = useContext(SurveyBuilderContext);\n\n const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n const isBoolean = questionType === Constants.QUESTION_BOOLEAN;\n\n const qualifier = useMemo(() => {\n if (!answer.text) return null;\n if (formType === Constants.OPT_IN_FORM_TYPE) return null;\n\n if (answer.qualifyLogic === Constants.QUALIFY_LOGIC_REJECT)\n return <i> - Reject</i>;\n\n if (answer.qualifyLogic === Constants.QUALIFY_LOGIC_MUST) {\n return <i> - Must Select</i>;\n }\n\n if (isPickOne) return <i> - Accept</i>;\n\n return <i> - May Select</i>;\n }, [answer.text, answer.qualifyLogic, isPickOne, formType]);\n\n return (\n <div\n className=\"SurveyBuilderAnswer\"\n style={isEditing ? { display: 'none' } : null}\n >\n <input\n aria-label=\"answer selected preview\"\n disabled\n key=\"input\"\n type={isPickOne || isBoolean ? 'radio' : 'checkbox'}\n />\n <span key=\"text\">\n {answer.text}\n {qualifier}\n </span>\n </div>\n );\n}\n\nPick.propTypes = {\n answer: propTypes.shape({\n qualifyLogic: propTypes.string.isRequired,\n text: propTypes.string,\n }).isRequired,\n isEditing: propTypes.bool.isRequired,\n questionType: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport * as Constants from '../../constants';\n\nexport function PickNone({ answer }) {\n if (answer.responseClass === Constants.RESPONSE_CLASS_STRING) {\n return (\n <input\n aria-label=\"short answer\"\n className=\"form-control\"\n disabled\n type=\"text\"\n />\n );\n }\n\n if (answer.responseClass === Constants.RESPONSE_CLASS_TEXT) {\n return (\n <textarea\n aria-label=\"long answer\"\n className=\"form-control\"\n disabled\n style={{ resize: 'none' }}\n />\n );\n }\n\n if (answer.responseClass === Constants.RESPONSE_CLASS_DATE) {\n return (\n <input aria-label=\"date\" className=\"form-control\" disabled type=\"date\" />\n );\n }\n\n if (answer.responseClass === Constants.RESPONSE_CLASS_FLOAT) {\n return (\n <input\n aria-label=\"number\"\n className=\"form-control\"\n disabled\n type=\"number\"\n />\n );\n }\n\n return null;\n}\n\nPickNone.propTypes = {\n answer: propTypes.shape({\n responseClass: propTypes.oneOf([\n Constants.RESPONSE_CLASS_STRING,\n Constants.RESPONSE_CLASS_TEXT,\n Constants.RESPONSE_CLASS_DATE,\n Constants.RESPONSE_CLASS_FLOAT,\n ]).isRequired,\n }).isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\n\nimport { Text } from '@user-interviews/ui-design-system';\n\nimport * as Constants from '../../constants';\n\nimport { Pick } from './pick';\nimport { QualifyLogicSelect } from './qualify_logic_select';\n\nexport function OtherAnswer({ answer, isEditing, questionType, onChange }) {\n const { formType } = useContext(SurveyBuilderContext);\n\n const isPickOne = questionType === Constants.QUESTION_PICK_ONE;\n\n if (!isEditing) {\n return (\n <Pick answer={answer} isEditing={isEditing} questionType={questionType} />\n );\n }\n\n return (\n <>\n <div\n className=\"SurveyBuilderRow editing other\"\n style={isEditing ? {} : { display: 'none' }}\n >\n <div className=\"SurveyBuilderRow__text\">\n <div className=\"SurveyBuilderRow__text__answer\">\n <div className=\"drag-handle-wrapper\" />\n <div className=\"checkbox-wrapper\">\n <input\n aria-label=\"other answer selected preview\"\n disabled\n type={isPickOne ? 'radio' : 'checkbox'}\n />\n </div>\n <div className=\"answer-wrapper\">\n <Text>Other</Text>\n </div>\n </div>\n </div>\n <div className=\"SurveyBuilderRow__controls\" />\n <div className=\"SurveyBuilderRow__actions\" />\n </div>\n <div\n className=\"SurveyBuilderRow editing other second-line\"\n style={isEditing ? {} : { display: 'none' }}\n >\n <div className=\"SurveyBuilderRow__text\">\n <div className=\"SurveyBuilderRow__text__answer\">\n <div className=\"drag-handle-wrapper\" />\n <div className=\"checkbox-wrapper\" />\n <div className=\"answer-wrapper\">\n <textarea\n aria-label=\"option for other input\"\n className=\"form-control\"\n disabled\n />\n </div>\n </div>\n </div>\n {formType === Constants.SCREENER_FORM_TYPE && (\n <div className=\"SurveyBuilderRow__controls\">\n <QualifyLogicSelect\n className=\"SurveyBuilderQuestion__type answer\"\n isPickOne={isPickOne}\n value={answer.qualifyLogic}\n onAnswerChange={onChange}\n />\n </div>\n )}\n <div className=\"SurveyBuilderRow__actions\" />\n </div>\n </>\n );\n}\n\nOtherAnswer.propTypes = {\n answer: propTypes.shape({\n errors: propTypes.object.isRequired,\n qualifyLogic: propTypes.string.isRequired,\n responseClass: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n isEditing: propTypes.bool.isRequired,\n questionType: propTypes.string.isRequired,\n onChange: propTypes.func.isRequired,\n};\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { NEW_LINE_REGEX } from 'lib/surveys/builder/utilities';\n\nimport * as Constants from '../../constants';\nimport SurveyContext from '../../context';\n\nimport { Editing } from './editing';\nimport { Pick } from './pick';\nimport { PickNone } from './pick_none';\nimport { OtherAnswer } from './other_answer';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './answer.scss';\n\nexport function Answer({\n answer,\n index,\n isEditing,\n isRemovableAnswer,\n questionId,\n type,\n}) {\n const {\n answerFunctions: {\n add: addAnswer,\n addBatch: addAnswers,\n remove: removeAnswer,\n update: updateAnswer,\n },\n } = useContext(SurveyContext);\n\n const handleChange = useCallback(\n (changes) => {\n const answers = changes.text\n ?.split(NEW_LINE_REGEX)\n .filter((text) => !!text);\n\n if (changes.text && answers.length > 1) {\n addAnswers(questionId, answer.uuid, answers);\n } else {\n updateAnswer(answer.uuid, changes);\n }\n },\n [answer.uuid, addAnswers, questionId, updateAnswer],\n );\n\n if (answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING) {\n return (\n <OtherAnswer\n answer={answer}\n index={index}\n isEditing={isEditing}\n questionType={type}\n onChange={handleChange}\n />\n );\n }\n\n if (type === Constants.QUESTION_PICK_NONE) {\n return <PickNone answer={answer} />;\n }\n\n return (\n <>\n <Editing\n answer={answer}\n index={index}\n isEditing={isEditing}\n isRemovableAnswer={isRemovableAnswer}\n questionId={questionId}\n questionType={type}\n onAdd={addAnswer}\n onAddBatch={addAnswers}\n onChange={handleChange}\n onRemove={removeAnswer}\n />\n <Pick answer={answer} isEditing={isEditing} questionType={type} />\n </>\n );\n}\n\nAnswer.propTypes = {\n answer: propTypes.shape({\n errors: propTypes.object.isRequired,\n responseClass: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n index: propTypes.number.isRequired,\n isEditing: propTypes.bool.isRequired,\n isRemovableAnswer: propTypes.bool.isRequired,\n questionId: propTypes.string.isRequired,\n type: propTypes.string.isRequired,\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n DndContext,\n closestCenter,\n KeyboardSensor,\n MouseSensor,\n TouchSensor,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\n\nimport {\n SortableContext,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\n\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\n\nimport { isOtherAnswer } from 'researcher/surveys/utils';\n\nimport SurveyContext from '../context';\n\nimport { Answer } from './answer';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './question.scss';\n\nexport function Answers({ isEditing, question }) {\n const {\n answerFunctions: { move: moveAnswer },\n survey,\n } = useContext(SurveyContext);\n\n const sensors = useSensors(\n useSensor(MouseSensor, {}),\n useSensor(TouchSensor, {}),\n useSensor(KeyboardSensor, {}),\n );\n\n const { setNodeRef } = useDroppable({ id: 'answerList' });\n\n const questionUUID = question.uuid;\n\n const handleDragEnd = useCallback(\n (event) => {\n const activeAccessor = event?.active?.id;\n const overAccessor = event?.over?.id;\n\n if (overAccessor && activeAccessor !== overAccessor) {\n moveAnswer(questionUUID, activeAccessor, overAccessor);\n }\n },\n [moveAnswer, questionUUID],\n );\n\n const surveyAnswers = survey.answers;\n\n const answers = useMemo(\n () =>\n question.answerIds\n ?.filter((id) => !!surveyAnswers[id])\n .map((answerId) => surveyAnswers[answerId]),\n [question, surveyAnswers],\n );\n\n const isRemovableAnswer = useMemo(\n () => answers.filter((answer) => !isOtherAnswer(answer)).length > 1,\n [answers],\n );\n\n const answerUUIDs = answers.map((answer) => answer.uuid);\n\n return (\n <DndContext\n collisionDetection={closestCenter}\n modifiers={[restrictToVerticalAxis]}\n sensors={sensors}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={answerUUIDs}\n strategy={verticalListSortingStrategy}\n >\n <div id=\"answerList\" ref={setNodeRef}>\n {answers.map((answer, index) => (\n <Answer\n answer={answer}\n index={index}\n isEditing={isEditing}\n isRemovableAnswer={isRemovableAnswer}\n key={answer.uuid}\n questionId={question.uuid}\n type={question.pick}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n );\n}\n\nAnswers.propTypes = {\n isEditing: propTypes.bool.isRequired,\n question: propTypes.shape({\n answerIds: propTypes.array.isRequired,\n errors: propTypes.shape({\n text: propTypes.string,\n }).isRequired,\n isEditing: propTypes.bool,\n isKey: propTypes.bool.isRequired,\n isMandatory: propTypes.bool.isRequired,\n isNew: propTypes.bool,\n pick: propTypes.string.isRequired,\n text: propTypes.string.isRequired,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"w03erOGO9n2eg0y8kB2Y\";\nvar _2 = \"w9TcaODeaLKZRWslCraM\";\nvar _3 = \"MlbCL9jacjnu9j_fBNgA\";\nvar _4 = \"G5mfXG4eKuw44U72MrG0\";\nvar _5 = \"kLMgl91SvDfLSY8OzwE1\";\nvar _6 = \"qogfRG1iwHnL11Dn746I\";\nvar _7 = \"SnrLcwH2NPSuFttyRBds\";\nvar _8 = \"rZU0mWPZYawGJ2zjWyqw\";\nvar _9 = \"gztWwB81O_30gYKgk3uQ\";\nvar _a = \"WQTC24W5PeVKh6D2F7FE\";\nvar _b = \"sMmsJtbhSaBN7Ng9L9CP\";\nvar _c = \"tIMVlUo73jUSSTMfrc9n\";\nvar _d = \"a2QyzIlYk0s4hLdOrLNS\";\nvar _e = \"qzetCF4XTyH6b5dTPqQK\";\nvar _f = \"DtV12FrW2BRRWLmCOXzw\";\nvar _10 = \"Mh9hgsVRTBy35nJGwHEO\";\nvar _11 = \"iaSRBrJVXXmfr65avmcQ\";\nvar _12 = \"Q8fZRK5KFlp367AOSUEF\";\nvar _13 = \"_N6m4UnSMA_yQ9dMSYOc\";\nvar _14 = \"UdotQrgYIlJs8l6wCdcY\";\nvar _15 = \"YbUl0MTyP1I8oYpO7Hww\";\nvar _16 = \"Qn5WSltt9ZNbu3ZhbI6d\";\nvar _17 = \"zYZzS6V2ExdnCYlYjMXv\";\nexport { _1 as \"Accept\", _2 as \"ApplySuccessCard__detail__date\", _3 as \"BillingInfoCard__column\", _4 as \"CopyToClipboard\", _5 as \"DataConsentNotice__content__preview__body\", _6 as \"Input\", _7 as \"MessageList__message__timestamp\", _8 as \"ParticipantProfile__participant-details__attribute-value\", _9 as \"ProjectCustomEmailSets\", _a as \"ProjectListItem__status-date\", _b as \"ProjectListing__detail\", _c as \"ProjectListing__details\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"Toggle\", _f as \"UnmoderatedTask__deadline\", _10 as \"accept\", _11 as \"btn-link--neutral\", _12 as \"btn-outline-secondary\", _13 as \"may\", _14 as \"mayForPickOne\", _15 as \"participant-dashboard__project__info__status__string\", _16 as \"reject\", _17 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as Constants from '../../constants';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './accept.module.scss';\n\nexport function Accept({ answer, isEditing, questionGroupPick, onChange }) {\n const { qualifyLogic } = answer;\n const isPickOne = questionGroupPick === Constants.QUESTION_PICK_ONE;\n\n const handleClick = (value) => {\n onChange(answer.uuid, { qualifyLogic: value });\n };\n\n const QualifyLogicOptionsLookup = useMemo(() => {\n const options = isPickOne\n ? Constants.PICK_ONE_QUALIFY_LOGIC_OPTIONS\n : Constants.QUALIFY_LOGIC_OPTIONS;\n\n return options.reduce((acc, option) => {\n acc[option.key] = option;\n\n return acc;\n }, {});\n }, [isPickOne]);\n\n const currentOption = QualifyLogicOptionsLookup[qualifyLogic];\n\n function handleQualifyLogicChange(event) {\n event.stopPropagation();\n\n handleClick(currentOption.nextKey);\n }\n\n if (!isEditing) {\n return (\n <Flex className={styles.Input} container justifyContent=\"center\">\n <input\n aria-label=\"Answer selected preview\"\n disabled\n key=\"input\"\n type={isPickOne ? 'radio' : 'checkbox'}\n />\n </Flex>\n );\n }\n\n return (\n <div className={styles.Toggle}>\n <button\n className={classNames(styles.Accept, {\n [styles.accept]: qualifyLogic === Constants.QUALIFY_LOGIC_MUST,\n [styles.may]:\n qualifyLogic === Constants.QUALIFY_LOGIC_MAY && !isPickOne,\n [styles.mayForPickOne]:\n qualifyLogic === Constants.QUALIFY_LOGIC_MAY && isPickOne,\n [styles.reject]: qualifyLogic === Constants.QUALIFY_LOGIC_REJECT,\n })}\n disabled={!isEditing}\n type=\"button\"\n onClick={handleQualifyLogicChange}\n >\n {currentOption.label}\n </button>\n </div>\n );\n}\n\nAccept.propTypes = {\n answer: propTypes.object.isRequired,\n isEditing: propTypes.bool.isRequired,\n questionGroupPick: propTypes.string.isRequired,\n onChange: propTypes.func.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { useTracking } from 'react-tracking';\n\nimport { IconButton } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './remove_button.module.scss';\n\nexport function RemoveButton({\n ariaLabel,\n className,\n trackingEvent,\n onRemove,\n}) {\n const { trackEvent } = useTracking();\n\n const handleClick = (event) => {\n event.stopPropagation();\n\n trackEvent({ event: trackingEvent });\n\n onRemove();\n };\n\n return (\n <IconButton\n action=\"DELETE\"\n ariaLabel={ariaLabel}\n className={`${styles.RemoveButton} ${className}`}\n size=\"sm\"\n onClick={handleClick}\n />\n );\n}\n\nRemoveButton.propTypes = {\n ariaLabel: propTypes.string.isRequired,\n className: propTypes.string,\n trackingEvent: propTypes.string.isRequired,\n onRemove: propTypes.func.isRequired,\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useCallback, useEffect } from 'react';\n\nimport Resize from 'lib/events/resize';\n\nexport const useAutosizeTextArea = ({ textAreaRef, value, dependencies }) => {\n const resizeTextArea = useCallback(() => {\n if (textAreaRef) {\n const ref = textAreaRef;\n\n ref.style.height = '0px';\n\n const { scrollHeight } = ref;\n\n ref.style.height = `${scrollHeight}px`;\n }\n }, [textAreaRef]);\n\n useEffect(() => {\n const resizeListener = Resize.listen(resizeTextArea);\n return () => Resize.cleanup(resizeListener);\n }, [textAreaRef]);\n\n useEffect(resizeTextArea, [textAreaRef, value, ...dependencies]);\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useContext } from 'react';\n\nimport SurveyContext from '../../context';\nimport { useAutosizeTextArea } from './useAutosizeTextArea';\n\nexport const useAutosizeGridTextArea = (\n textAreaRef,\n value,\n questionGroupId,\n) => {\n const { survey } = useContext(SurveyContext);\n\n const questionGroup = survey.questions[questionGroupId];\n const firstQuestion = survey.questions[questionGroup.questionIds[0]];\n\n const totalAnswersInQuestionGroup = firstQuestion.answerIds.length;\n\n useAutosizeTextArea({\n textAreaRef,\n value,\n dependencies: [totalAnswersInQuestionGroup],\n });\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"FDVJxRQAK69gX1PI48_j\";\nvar _2 = \"gJ5CjR9xdjK0kna5d5sE\";\nvar _3 = \"yMX13nD1crXev840OimU\";\nvar _4 = \"IIapYZ0WlJD7AeiRMcQD\";\nvar _5 = \"uOGapTNNx7hYQI5_QvxG\";\nvar _6 = \"_6lycy4B5wlrrWscg6KEL\";\nvar _7 = \"K6_7UY4ag_dFkhbJoEOd\";\nvar _8 = \"gTkryA0CJ1FbhvmRroMO\";\nvar _9 = \"oTiv4LeELtpqfNHFP5VI\";\nvar _a = \"pkH3ij7gHT7PWLROHKow\";\nvar _b = \"f99InMUEtJ182CtouaBG\";\nvar _c = \"JedOAX1MW9H2j4S_JNLy\";\nvar _d = \"kjg1MpKhe4QeNKowtzOF\";\nvar _e = \"dtHkK7zZRwxxY5KIwVPO\";\nvar _f = \"tu6NIW8SsRABowod9IAo\";\nvar _10 = \"W2PcorlUZmTjxadHqcBk\";\nvar _11 = \"VAtHGkYOhM04Zd59CVyD\";\nvar _12 = \"AeO5QlFKEnq61dnDXbk_\";\nvar _13 = \"EXIW_WebhGomzujH_Bie\";\nvar _14 = \"EiEDicAvP98BcFS1OsnA\";\nvar _15 = \"O93faRgrFDEXrqCrmRVa\";\nvar _16 = \"aeUM7bcNG1icuYboeNLU\";\nvar _17 = \"UNzRrEIl_PQD24z77Vas\";\nvar _18 = \"lasQFFEmX6S4ah3Vcm6n\";\nvar _19 = \"VLJbEtQQtx9qmX6iLI5j\";\nvar _1a = \"OdYnAO68xgKEVu6mzmaB\";\nvar _1b = \"WMwTESA3tYNrSWlBm7d_\";\nvar _1c = \"WWAHTKSsZFTqO7lzbi1p\";\nvar _1d = \"FIQlGV07xvneayvRaHu2\";\nvar _1e = \"_EkW6Y0y7TRS1IkoUOYA\";\nvar _1f = \"s4GFbBghy2j2YkD0hw3r\";\nvar _20 = \"VvbTSRILnWXs9AQ1lRRy\";\nvar _21 = \"xdqMD2aH7D8yXUpVGLOF\";\nvar _22 = \"LavoK_1rODdqMR68bs2r\";\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 \"addButton\", _e as \"addButtons\", _f as \"answerRow\", _10 as \"box2\", _11 as \"box3\", _12 as \"box4\", _13 as \"box5\", _14 as \"box6\", _15 as \"box7\", _16 as \"box8\", _17 as \"boxRow\", _18 as \"btn-link--neutral\", _19 as \"btn-outline-secondary\", _1a as \"gridAnswer\", _1b as \"gridInput\", _1c as \"gridInputTextArea\", _1d as \"gridRow\", _1e as \"gridTitleNonEdit\", _1f as \"participant-dashboard__project__info__status__string\", _20 as \"qualificationInstructions\", _21 as \"removeButton\", _22 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useCallback, useState } from 'react';\nimport { Text } from '@user-interviews/ui-design-system';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { RemoveButton } from './remove_button';\nimport { useAutosizeGridTextArea } from './useAutosizeGridTextArea';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid.module.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\nexport function GridAnswer({\n answer,\n index,\n isEditing,\n isRemovable,\n questionGroupId,\n onRemove,\n onUpdateColumn,\n}) {\n const [textAreaRef, setTextAreaRef] = useState(null);\n\n const {\n formState: { errors },\n } = useFormContext();\n\n const answerName = `answer.${answer.uuid}`;\n const answerText = answer.text || 'column';\n\n const { field: answerInput } = useController({\n defaultValue: answer.text,\n name: answerName,\n rules: { required: true },\n });\n\n useAutosizeGridTextArea(textAreaRef, answerInput.value, questionGroupId);\n\n const hasErrors = !!errors.answer?.[answer.uuid];\n\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n\n const handleChange = useCallback(\n ({ target: { value } }) => {\n answerInput.onChange(value);\n onUpdateColumn(index, { text: value });\n },\n [answerInput, index, onUpdateColumn],\n );\n\n const handleRemove = useCallback(() => {\n onRemove(index);\n }, [index, onRemove]);\n\n if (!isEditing) {\n return (\n <Text className={styles.gridTitleNonEdit} textAlign=\"center\">\n {answerText}\n </Text>\n );\n }\n\n return (\n <div className={styles.gridAnswer}>\n <div className={styles.gridInput}>\n <textarea\n aria-invalid={!!errors}\n aria-label=\"Answer text\"\n className={classNames(\n styles.gridInputTextArea,\n 'form-control question',\n { 'is-invalid': hasErrors },\n )}\n name={answerInput.name}\n placeholder=\"Column value\"\n ref={setTextAreaRef}\n rows={1}\n value={answerInput.value}\n onChange={handleChange}\n onClick={handleClick}\n />\n\n {isRemovable && (\n <RemoveButton\n ariaLabel={`Remove ${answerText}`}\n className={styles.removeButton}\n trackingEvent={trackingEvents.SURVEY_REMOVE_GRID_COLUMN}\n onRemove={handleRemove}\n />\n )}\n </div>\n </div>\n );\n}\n\nGridAnswer.propTypes = {\n answer: propTypes.object.isRequired,\n index: propTypes.number.isRequired,\n isEditing: propTypes.bool.isRequired,\n isRemovable: propTypes.bool.isRequired,\n questionGroupId: propTypes.string.isRequired,\n onRemove: propTypes.func.isRequired,\n onUpdateColumn: propTypes.func.isRequired,\n};\n","import React, { useCallback, useState } from 'react';\nimport { Text } from '@user-interviews/ui-design-system';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport { useController, useFormContext } from 'react-hook-form';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { RemoveButton } from './remove_button';\nimport { useAutosizeGridTextArea } from './useAutosizeGridTextArea';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid.module.scss';\n\nexport function GridQuestion({\n isEditing,\n isRemovable,\n question,\n questionGroupId,\n onChange,\n onRemove,\n}) {\n const [textAreaRef, setTextAreaRef] = useState(null);\n\n const {\n formState: { errors },\n } = useFormContext();\n\n const questionName = `question.${question.uuid}`;\n const questionText = question.text || 'row';\n\n const { field: questionInput } = useController({\n defaultValue: question.text,\n name: questionName,\n rules: { required: true },\n });\n\n useAutosizeGridTextArea(textAreaRef, questionInput.value, questionGroupId);\n\n const hasErrors = !!errors.question?.[question.uuid];\n\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n\n const handleChange = useCallback(\n ({ target: { value } }) => {\n questionInput.onChange(value);\n onChange(question.uuid, { text: value });\n },\n [onChange, question.uuid, questionInput],\n );\n\n const handleRemove = useCallback(() => {\n onRemove(question.uuid);\n }, [onRemove, question.uuid]);\n\n if (!isEditing) {\n return (\n <Text className={styles.gridTitleNonEdit} textAlign=\"left\">\n {questionText}\n </Text>\n );\n }\n\n return (\n <div className={styles.gridInput}>\n <textarea\n aria-invalid={!!errors}\n aria-label=\"Question text\"\n className={classNames(\n styles.gridInputTextArea,\n 'form-control question',\n { 'is-invalid': hasErrors },\n )}\n name={questionInput.name}\n placeholder=\"Row value\"\n ref={setTextAreaRef}\n rows={1}\n value={questionInput.value}\n onChange={handleChange}\n onClick={handleClick}\n />\n\n {isRemovable && (\n <RemoveButton\n ariaLabel={`Remove ${questionText}`}\n className={styles.removeButton}\n trackingEvent={trackingEvents.SURVEY_REMOVE_GRID_ROW}\n onRemove={handleRemove}\n />\n )}\n </div>\n );\n}\n\nGridQuestion.propTypes = {\n isEditing: propTypes.bool.isRequired,\n isRemovable: propTypes.bool.isRequired,\n question: propTypes.object.isRequired,\n questionGroupId: propTypes.string.isRequired,\n onChange: propTypes.func.isRequired,\n onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Alert, Flex, MessageTypes } from '@user-interviews/ui-design-system';\n\nimport { TrackedButton } from 'common/analytics';\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faBullseyePointer, faPlus } from 'lib/font_awesome/regular';\n\nimport {\n MAX_COLUMN_COUNT,\n MAX_ROW_COUNT,\n MIN_COLUMN_COUNT,\n MIN_ROW_COUNT,\n} from 'lib/surveys/builder/question_group_utilities';\n\nimport SurveyContext from '../../context';\n\nimport { Accept } from './accept';\nimport { GridAnswer } from './grid_answer';\nimport { GridQuestion } from './grid_question';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './grid.module.scss';\n\nexport const QUAL_LOGIC_INSTRUCTIONS =\n 'Edit qualification logic by clicking on the cells within the grid';\nexport function Grid({ isEditing, questionGroupId }) {\n const isMobile = useSidebarMobileBreakpoint();\n\n const {\n answerFunctions: { update: updateAnswer },\n questionFunctions: { update: updateQuestion },\n questionGroupFunctions: {\n addColumn,\n addRow,\n removeColumn,\n removeRow,\n updateColumn,\n },\n survey,\n } = useContext(SurveyContext);\n\n const questionGroup = survey.questions[questionGroupId];\n const { questionIds } = questionGroup;\n\n const firstQuestion = survey.questions[questionIds[0]];\n const firstAnswers = firstQuestion.answerIds;\n\n const answerCount = firstQuestion.answerIds.length;\n const questionCount = questionGroup.questionIds.length;\n\n const handleAnswerChange = useCallback(\n (answerUUID, changes) => {\n updateAnswer(answerUUID, changes);\n },\n [updateAnswer],\n );\n\n const handleQuestionChange = useCallback(\n (questionUUID, changes) => {\n updateQuestion(questionUUID, changes);\n },\n [updateQuestion],\n );\n\n const handleAddColumn = useCallback(\n (event) => {\n event.stopPropagation();\n\n addColumn(questionGroup.uuid);\n },\n [addColumn, questionGroup.uuid],\n );\n\n const handleAddRow = useCallback(\n (event) => {\n event.stopPropagation();\n\n addRow(questionGroup.uuid, answerCount);\n },\n [addRow, answerCount, questionGroup.uuid],\n );\n\n const handleRemoveColumn = useCallback(\n (answerIndex) => {\n removeColumn(questionGroup.uuid, answerIndex);\n },\n [questionGroup.uuid, removeColumn],\n );\n\n const handleRemoveRow = useCallback(\n (questionUUID) => {\n removeRow(questionGroup.uuid, questionUUID);\n },\n [questionGroup.uuid, removeRow],\n );\n\n const handleUpdateColumn = useCallback(\n (answerIndex, changes) => {\n updateColumn(questionGroup.uuid, answerIndex, changes);\n },\n [questionGroup.uuid, updateColumn],\n );\n\n if (!questionGroup) return null;\n\n if (isMobile) {\n return (\n <Alert\n id={`question-type-unavailable-${questionGroup.uuid}`}\n message=\"Please switch to desktop view to build this question type\"\n removeBorderLeft\n title=\"Question type not available\"\n type={MessageTypes.INFO}\n />\n );\n }\n\n const boxStyle = styles[`box${answerCount + 1}`];\n\n return (\n <>\n <div className={styles.gridRow}>\n <div className={styles.answerRow}>\n <div className={boxStyle} />\n {firstAnswers &&\n firstAnswers.map((answerUUID, index) => (\n <div className={boxStyle} key={answerUUID}>\n <GridAnswer\n answer={survey.answers[answerUUID]}\n index={index}\n isEditing={isEditing}\n isRemovable={firstAnswers.length > MIN_COLUMN_COUNT}\n questionGroupId={questionGroup.uuid}\n onChange={handleAnswerChange}\n onRemove={handleRemoveColumn}\n onUpdateColumn={handleUpdateColumn}\n />\n </div>\n ))}\n </div>\n </div>\n\n {questionGroup.questionIds.map((questionUUID) => (\n <div className={styles.gridRow} key={questionUUID}>\n <div className={styles.boxRow}>\n <div className={boxStyle}>\n <GridQuestion\n isEditing={isEditing}\n isRemovable={questionGroup.questionIds.length > MIN_ROW_COUNT}\n question={survey.questions[questionUUID]}\n questionGroupId={questionGroup.uuid}\n onChange={handleQuestionChange}\n onRemove={handleRemoveRow}\n />\n </div>\n {survey.questions[questionUUID].answerIds\n .filter((answerUUID) => !!survey.answers[answerUUID])\n .map((answerUUID) => (\n <div className={boxStyle} key={`accept-${answerUUID}`}>\n <Accept\n answer={survey.answers[answerUUID]}\n isEditing={isEditing}\n questionGroupPick={questionGroup.pick}\n onChange={handleAnswerChange}\n />\n </div>\n ))}\n </div>\n </div>\n ))}\n\n {isEditing && (\n <>\n <Flex className={styles.addButtons}>\n <TrackedButton\n className={styles.addButton}\n disabled={questionCount >= MAX_ROW_COUNT}\n event={trackingEvents.SURVEY_ADD_GRID_ROW}\n leadingIcon={faPlus}\n type=\"button\"\n variant=\"outline-transparent\"\n onClick={handleAddRow}\n >\n Add row\n </TrackedButton>\n\n <TrackedButton\n className={styles.addButton}\n disabled={answerCount >= MAX_COLUMN_COUNT}\n event={trackingEvents.SURVEY_ADD_GRID_COLUMN}\n leadingIcon={faPlus}\n type=\"button\"\n variant=\"outline-transparent\"\n onClick={handleAddColumn}\n >\n Add column\n </TrackedButton>\n </Flex>\n <Flex className={styles.qualificationInstructions}>\n <FontAwesomeIcon\n className=\"icon-left\"\n fixedWidth\n icon={faBullseyePointer}\n />\n {QUAL_LOGIC_INSTRUCTIONS}\n </Flex>\n </>\n )}\n </>\n );\n}\n\nGrid.propTypes = {\n isEditing: propTypes.bool.isRequired,\n questionGroupId: propTypes.string.isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\nimport { FormGroup, Input } from '@user-interviews/ui-design-system';\nimport SurveyContext from '../context';\n\nexport function Hint({ question }) {\n const {\n questionFunctions: { update: updateQuestion },\n } = useContext(SurveyContext);\n\n const handleHintChange = ({ target: { value } }) => {\n updateQuestion(question.uuid, { helpText: value });\n };\n\n return (\n <FormGroup\n inputKey={`question-${question.uuid}-hint`}\n label=\"Hint text\"\n labelHelperText=\"Optional\"\n labelHtmlFor={`hint-text-${question.uuid}`}\n >\n <Input\n id={`hint-text-${question.uuid}`}\n name={`hint-text-${question.uuid}`}\n placeholder=\"Give context on this question to participants\"\n value={question.helpText || ''}\n onChange={handleHintChange}\n />\n </FormGroup>\n );\n}\n\nHint.propTypes = {\n question: propTypes.shape({\n helpText: propTypes.string,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n};\n","import React from 'react';\nimport * as propTypes from 'lib/prop_types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faCalendarAlt,\n faDotCircle,\n faFont,\n faHashtag,\n} from 'lib/font_awesome/solid';\n\nconst iconMap = {\n string: faFont,\n pick_one: faFont,\n pick_any: faFont,\n boolean: faDotCircle,\n date: faCalendarAlt,\n decimal: faHashtag,\n};\n\nexport function SurveyFormQuestionIconLabel({ attribute }) {\n return (\n <span className=\"FormQuestionIconLabel\">\n <FontAwesomeIcon\n aria-label={attribute.type}\n className=\"icon-left\"\n icon={iconMap[attribute.type]}\n />\n {attribute.name}\n </span>\n );\n}\n\nSurveyFormQuestionIconLabel.propTypes = {\n attribute: propTypes.shape({\n name: propTypes.string,\n type: propTypes.string,\n }).isRequired,\n};\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n FormGroup,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n MODAL_SIZES,\n SingleSelect,\n} from '@user-interviews/ui-design-system';\n\nimport {\n QUESTION_TYPE_BOOLEAN,\n QUESTION_TYPE_FLOAT,\n QUESTION_TYPE_DATE,\n} from '../constants';\n\nimport { SurveyFormQuestionIconLabel } from '../survey_form_question_icon_label';\n\nimport './survey_new_attribute_modal.module.css';\n\nexport function SurveyNewAttributeModal({\n attribute,\n questionType,\n visible,\n onChange,\n onClose,\n onSave,\n}) {\n const attributeTypes = {\n Text: 'string',\n [QUESTION_TYPE_BOOLEAN]: 'boolean',\n [QUESTION_TYPE_DATE]: 'date',\n [QUESTION_TYPE_FLOAT]: 'decimal',\n };\n\n const defaultAttributeType = attributeTypes[questionType] || 'string';\n\n const dataTypeOptions = Object.entries(attributeTypes).map(\n ([key, value]) => ({\n label: (\n <SurveyFormQuestionIconLabel attribute={{ name: key, type: value }} />\n ),\n value,\n }),\n );\n\n const handleInputChange = ({ target: { name, value } }) => {\n const updatedAttribute = { ...attribute, [name]: value };\n onChange(updatedAttribute);\n };\n\n useEffect(() => {\n if (!attribute.type) {\n const updatedAttribute = { ...attribute, type: defaultAttributeType };\n onChange(updatedAttribute);\n }\n }, [attribute, defaultAttributeType, onChange]);\n\n return (\n <Modal\n className=\"NewAttributeModal\"\n isOpen={visible}\n shouldCloseOnOverlayClick={false}\n size={MODAL_SIZES.MEDIUM}\n onRequestClose={onClose}\n >\n <ModalHeader\n title=\"Create a new attribute\"\n titleId=\"NewAttributeModal\"\n onRequestClose={onClose}\n />\n\n <ModalBody>\n <div className=\"ModalBody__description\">\n {`Creating a new attribute allows you to collect additional data for\\\n your Hub population. You'll be able to save a question to this attribute for use\\\n in your opt-in form, as well as map data to it from future CSV uploads.`}\n </div>\n\n <FormGroup label=\"Attribute name\" labelHtmlFor=\"new-attribute-name\">\n <input\n className=\"form-control\"\n id=\"new-attribute-name\"\n name=\"name\"\n type=\"text\"\n value={attribute.name}\n onChange={handleInputChange}\n />\n </FormGroup>\n\n <FormGroup\n label=\"Attribute type\"\n labelHtmlFor=\"new-attribute-type-select\"\n >\n <SingleSelect\n defaultValue={dataTypeOptions.find(\n (option) => option.value === defaultAttributeType,\n )}\n disabled\n id=\"new-attribute-type\"\n inputId=\"new-attribute-type-select\"\n name=\"type\"\n />\n <div className=\"form-group__instructional-text\">\n Attribute type is determined by the question type that you have\n selected.\n </div>\n </FormGroup>\n </ModalBody>\n\n <ModalFooter onRequestClose={onClose}>\n <button className=\"btn btn-primary\" type=\"button\" onClick={onSave}>\n Save attribute\n </button>\n </ModalFooter>\n </Modal>\n );\n}\n\nSurveyNewAttributeModal.propTypes = {\n attribute: PropTypes.object.isRequired,\n questionType: PropTypes.string.isRequired,\n visible: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n onSave: PropTypes.func.isRequired,\n};\n","import React, { useContext, useMemo, useState } from 'react';\nimport { useTracking } from 'react-tracking';\nimport { useParams } from 'react-router';\n\nimport {\n CreatableSelect,\n FormGroup,\n MessageTypes,\n} from '@user-interviews/ui-design-system';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlusCircle } from 'lib/font_awesome/solid';\nimport * as propTypes from 'lib/prop_types';\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useCreatePopulationAttributeMutation } from 'api/population_attributes';\nimport { useFormContext } from 'react-hook-form';\nimport { ErrorRenderer } from 'lib/errors';\nimport SurveyContext from '../context.js';\n\nimport { SurveyFormQuestionIconLabel } from '../survey_form_question_icon_label';\nimport { SurveyNewAttributeModal } from './survey_new_attribute_modal';\n\nexport function MapAttribute({ attributes, question, questionType }) {\n const {\n survey,\n questionFunctions: { update: updateQuestion },\n setToastMessage,\n } = useContext(SurveyContext);\n const [newAttributeModalVisible, setNewAttributeModalVisible] =\n useState(false);\n const [newAttribute, setNewAttribute] = useState({});\n const {\n formState: { errors },\n } = useFormContext();\n\n const { trackEvent } = useTracking();\n\n const { participantPopulationId } = useParams();\n\n const [createParticipantPopulationAttribute] =\n useCreatePopulationAttributeMutation();\n const formatCreateLabel = (inputValue) => (\n <div>\n <FontAwesomeIcon className=\"icon-left\" icon={faPlusCircle} />\n Create {inputValue || 'new'} attribute\n </div>\n );\n const isValidNewOption = () => true;\n\n const handleCreateAttribute = async () => {\n const { data: createdAttribute, error } =\n await createParticipantPopulationAttribute({\n participantPopulationId,\n name: newAttribute.name,\n type: newAttribute.type,\n });\n\n if (error) {\n setToastMessage({\n type: MessageTypes.ERROR,\n message: ErrorRenderer.compileRtkQueryErrorMessage(error),\n });\n } else {\n trackEvent({\n event: trackingEvents.SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_CREATED,\n participant_population_attribute_id: createdAttribute.data.id,\n });\n\n updateQuestion(question.uuid, {\n participantPopulationAttributeId: createdAttribute.data.id,\n });\n\n setNewAttributeModalVisible(false);\n }\n };\n\n const handleAttributeModalClose = () => {\n setNewAttributeModalVisible(false);\n };\n\n const handleNewAttributeChange = (newAttr) => {\n setNewAttribute(newAttr);\n };\n\n const handleNewAttributeModalOpen = (inputValue) => {\n setNewAttributeModalVisible(true);\n setNewAttribute({ name: inputValue });\n };\n\n const handleAttributeChange = (selectedOption) => {\n updateQuestion(question.uuid, {\n participantPopulationAttributeId: selectedOption.value,\n });\n\n trackEvent({\n event: trackingEvents.SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_SELECTED,\n participant_population_attribute_id: selectedOption.value,\n });\n };\n\n const mappedAttributeIds = useMemo(\n () =>\n Object.values(survey.questions).reduce(\n (acc, current) =>\n current &&\n current.uuid !== question.uuid &&\n current.participantPopulationAttributeId\n ? acc.concat(current.participantPopulationAttributeId.toString())\n : acc,\n [],\n ),\n [survey.questions, question.uuid],\n );\n\n const attributeOptions = useMemo(\n () =>\n Object.values(attributes).map((attribute) => ({\n label: attribute.name,\n value: attribute.id,\n isDisabled: mappedAttributeIds.includes(attribute.id),\n attribute,\n })),\n [mappedAttributeIds, attributes],\n );\n\n const selectedAttribute = useMemo(\n () =>\n question.participantPopulationAttributeId\n ? attributeOptions.find(\n (attributeOption) =>\n attributeOption.value ===\n question.participantPopulationAttributeId.toString(),\n )\n : null, // Fun fact -- this has to be null, not undefined, otherwise ReactSelect won't pick up the change\n [attributeOptions, question.participantPopulationAttributeId],\n );\n\n return (\n <>\n <SurveyNewAttributeModal\n attribute={newAttribute}\n questionType={questionType}\n visible={newAttributeModalVisible}\n onChange={handleNewAttributeChange}\n onClose={handleAttributeModalClose}\n onSave={handleCreateAttribute}\n />\n <FormGroup\n errors={errors}\n inputKey={`question-${question.uuid}-attribute`}\n label=\"Map to attribute\"\n labelHtmlFor=\"new-question-attribute\"\n labelTooltip=\"Map your custom questions to Hub attributes to collect data you can filter on later.\"\n required\n >\n <CreatableSelect\n allowCreateWhileLoading\n aria-label=\"Select or create a new attribute\"\n className=\"Select\"\n createOptionPosition=\"first\"\n formatOptionLabel={({ value, attribute }) =>\n attribute ? (\n <SurveyFormQuestionIconLabel attribute={attribute} />\n ) : (\n formatCreateLabel(value)\n )\n }\n inputId=\"new-question-attribute\"\n isSearchable\n isValidNewOption={isValidNewOption}\n name=\"attribute\"\n options={attributeOptions}\n placeholder=\"Select or create a new attribute\"\n styles={{\n indicatorSeparator: (provided) => ({\n ...provided,\n width: 0,\n }),\n }}\n value={selectedAttribute}\n onChange={handleAttributeChange}\n onCreateOption={handleNewAttributeModalOpen}\n />\n </FormGroup>\n </>\n );\n}\n\nMapAttribute.propTypes = {\n attributes: propTypes.arrayOf(\n propTypes.shape({\n id: propTypes.string,\n }),\n ).isRequired,\n question: propTypes.shape({\n participantPopulationAttributeId: propTypes.oneOfType([\n propTypes.number,\n propTypes.string,\n ]),\n uuid: propTypes.string.isRequired,\n }).isRequired,\n questionType: propTypes.string.isRequired,\n};\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex, Tooltip, ToggleInput } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function KeyQuestion({ isKey, pageTitle, position, onChange }) {\n const { account } = useContext(AuthUserContext);\n const { trackEvent } = useTracking();\n\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n const handleChange = ({ currentTarget: { checked } }) => {\n onChange({ isKey: checked });\n\n trackEvent({\n event: trackingEvents.SURVEY_KEY_QUESTION_SLIDER_CLICKED,\n is_enabled: checked,\n account_id: account?.id,\n });\n };\n\n const keyQuestionToggleInputId = `key-screener-question-toggle-${pageTitle}-${position}`;\n\n const tooltipText = (\n <div>\n Key screener questions will be highlighted in the applicants table and\n participant profiles.\n </div>\n );\n\n return (\n /* eslint-disable-next-line jsx-a11y/no-static-element-interactions */\n <Flex\n alignItems=\"center\"\n container\n flexDirection=\"row\"\n onClick={handleClick}\n >\n <ToggleInput\n id={keyQuestionToggleInputId}\n isChecked={isKey}\n labelLeft={false}\n labelText=\"Key screener question\"\n onToggle={handleChange}\n />\n <Tooltip text={tooltipText} />\n </Flex>\n );\n}\n\nKeyQuestion.propTypes = {\n isKey: propTypes.bool.isRequired,\n pageTitle: propTypes.string.isRequired,\n position: propTypes.number.isRequired,\n onChange: propTypes.func.isRequired,\n};\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport SurveyContext from '../../context';\n\nexport function OtherOptionCheckbox({\n checked,\n otherAnswerUuid,\n questionUuid,\n}) {\n const { account } = useContext(AuthUserContext);\n const {\n answerFunctions: { addOther, remove },\n } = useContext(SurveyContext);\n const { trackEvent } = useTracking();\n\n const handleClick = (event) => event.stopPropagation();\n\n const handleChange = ({ currentTarget }) => {\n if (currentTarget.checked) {\n addOther(questionUuid);\n } else {\n remove(questionUuid, otherAnswerUuid);\n }\n\n trackEvent({\n event: trackingEvents.SURVEY_OTHER_OPTION_CHECKBOX_CLICKED,\n is_enabled: currentTarget.checked,\n account_id: account?.id,\n });\n };\n\n return (\n <label onClick={handleClick}>\n <input checked={checked} type=\"checkbox\" onChange={handleChange} />\n Add \"Other\" option\n </label>\n );\n}\n\nOtherOptionCheckbox.propTypes = {\n checked: propTypes.bool.isRequired,\n otherAnswerUuid: propTypes.string,\n questionUuid: propTypes.string.isRequired,\n};\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n\nimport React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { useTracking } from 'react-tracking';\n\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nexport function Required({ isMandatory, onChange }) {\n const { account } = useContext(AuthUserContext);\n const { trackEvent } = useTracking();\n\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n const handleChange = ({ currentTarget: { checked } }) => {\n onChange({ isMandatory: checked });\n\n trackEvent({\n event: trackingEvents.SURVEY_REQUIRED_CHECKBOX_CLICKED,\n is_enabled: checked,\n account_id: account?.id,\n });\n };\n\n return (\n <label onClick={handleClick}>\n <input checked={isMandatory} type=\"checkbox\" onChange={handleChange} />\n Required\n </label>\n );\n}\n\nRequired.propTypes = {\n isMandatory: propTypes.bool.isRequired,\n onChange: propTypes.func.isRequired,\n};\n\n/* eslint-enable */\n","import React, { useContext } from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { isQuestionGroup, isPickOneOrAny } from 'lib/surveys/builder/utilities';\n\nimport { KeyQuestion } from './key_question';\nimport { OtherOptionCheckbox } from './other_option_checkbox';\nimport { Required } from './required';\nimport * as Constants from '../../constants';\n\nimport SurveyContext from '../../context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './question_controls.module.scss';\n\nexport function QuestionControls({\n otherAnswer,\n question,\n pageTitle,\n position,\n onChange,\n}) {\n const { formType } = useContext(SurveyContext);\n const isScreenerForm = formType === Constants.SCREENER_FORM_TYPE;\n\n return (\n <Flex\n alignItems=\"center\"\n className={styles.QuestionControls}\n container\n flexDirection=\"row\"\n >\n <Required isMandatory={question.isMandatory} onChange={onChange} />\n {isPickOneOrAny(question) && !isQuestionGroup(question) && (\n <OtherOptionCheckbox\n checked={!!otherAnswer}\n otherAnswerUuid={otherAnswer?.uuid}\n questionUuid={question.uuid}\n />\n )}\n {isScreenerForm && (\n <KeyQuestion\n isKey={question.isKey}\n pageTitle={pageTitle}\n position={position}\n onChange={onChange}\n />\n )}\n </Flex>\n );\n}\n\nQuestionControls.propTypes = {\n otherAnswer: propTypes.shape({\n errors: propTypes.object.isRequired,\n responseClass: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n }),\n pageTitle: propTypes.string.isRequired,\n position: propTypes.number.isRequired,\n question: propTypes.shape({\n answerIds: propTypes.array,\n errors: propTypes.shape({\n text: propTypes.string,\n }).isRequired,\n isEditing: propTypes.bool,\n isKey: propTypes.bool.isRequired,\n isMandatory: propTypes.bool.isRequired,\n isNew: propTypes.bool,\n pick: propTypes.string.isRequired,\n text: propTypes.string.isRequired,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n onChange: propTypes.func.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ECzAW_fZZHhC64af5GW0\";\nexport { _1 as \"QuestionControls\" }\n","import React, { useCallback } from 'react';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { useController, useFormContext } from 'react-hook-form';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './text.scss';\n\nexport function Text({\n isEditing,\n isMandatory,\n serverErrors,\n text,\n onChange,\n uuid,\n}) {\n const {\n formState: { errors },\n } = useFormContext();\n const questionName = `question.${uuid}`;\n const { field: questionInput } = useController({\n defaultValue: text,\n name: questionName,\n rules: { required: true },\n });\n\n const hasErrors = !!errors.question?.[uuid] || serverErrors;\n const error = errors.question?.[uuid];\n const errorMessage =\n error?.type === 'required' ? \"Question can't be blank\" : error?.message;\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n\n const handleChange = useCallback(\n ({ target: { value } }) => {\n questionInput.onChange(value);\n onChange({ text: value });\n },\n [onChange, questionInput],\n );\n\n return (\n <div className=\"SurveyBuilderRow__text__form\">\n <textarea\n {...questionInput}\n aria-invalid={!!errors}\n aria-label=\"question text\"\n className={classNames('form-control question', {\n 'is-invalid': hasErrors,\n })}\n name={`question.${uuid}`}\n style={isEditing ? null : { display: 'none' }}\n onChange={handleChange}\n onClick={handleClick}\n />\n <div\n className=\"invalid-feedback\"\n style={isEditing ? null : { display: 'none' }}\n >\n {serverErrors || errorMessage}\n </div>\n <span\n className={classNames({ 'required-field': isMandatory })}\n style={!isEditing ? { whiteSpace: 'pre-wrap' } : { display: 'none' }}\n >\n {text}\n </span>\n </div>\n );\n}\n\nText.propTypes = {\n isEditing: propTypes.bool.isRequired,\n isMandatory: propTypes.bool.isRequired,\n serverErrors: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string.isRequired,\n onChange: propTypes.func.isRequired,\n};\n\nText.defaultProps = {\n text: '',\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\nimport { SingleSelect } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderContext } from 'components/survey_builder';\nimport * as Constants from '../constants';\n\nconst questionTypes = Constants.QUESTION_TYPES.map((questionType) => ({\n label: questionType,\n value: questionType,\n}));\n\nexport function Type({ isVisible, type, onChange }) {\n const { formType } = useContext(SurveyBuilderContext);\n\n const filteredQuestionTypes = useMemo(() => {\n if (formType === Constants.SCREENER_FORM_TYPE) {\n return questionTypes.filter(\n (questionType) =>\n questionType.label !== Constants.QUESTION_TYPE_BOOLEAN &&\n questionType.label !== Constants.QUESTION_TYPE_DATE &&\n questionType.label !== Constants.QUESTION_TYPE_FLOAT,\n );\n }\n if (formType === Constants.OPT_IN_FORM_TYPE) {\n return questionTypes.filter(\n (questionType) =>\n questionType.label !== Constants.QUESTION_TYPE_PICK_ANY_GRID &&\n questionType.label !== Constants.QUESTION_TYPE_PICK_ONE_GRID,\n );\n }\n return questionTypes;\n }, [formType]);\n\n // Prevent a click from triggering parent event\n const handleClick = (event) => event.stopPropagation();\n\n const handleChange = useCallback(\n (selected) => {\n onChange({ questionType: selected.value });\n },\n [onChange],\n );\n\n if (!isVisible) return null;\n\n return (\n /* eslint-disable jsx-a11y/no-static-element-interactions */\n /* eslint-disable jsx-a11y/click-events-have-key-events */\n <div className=\"SurveyBuilderQuestion__type\" onClick={handleClick}>\n <SingleSelect\n aria-label=\"question type select\"\n inputId=\"question-type-select\"\n options={filteredQuestionTypes}\n value={{ label: type, value: type }}\n onChange={handleChange}\n />\n </div>\n /* eslint-enable */\n );\n}\n\nType.propTypes = {\n isVisible: propTypes.bool.isRequired,\n type: propTypes.string.isRequired,\n onChange: propTypes.func.isRequired,\n};\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { useParams } from 'react-router';\nimport propTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { LoadingSkeleton } from '@user-interviews/ui-design-system';\n\nimport * as Keycodes from 'lib/keycodes';\nimport { useFormContext } from 'react-hook-form';\n\nimport { QuestionSkipLogicSummary } from 'components/question_skip_logic_summary';\nimport {\n answerPropType,\n questionPropType,\n skipLogicPropType,\n surveySectionPropType,\n} from 'components/question_skip_logic_summary/prop_types';\n\nimport { faGripVertical } from 'lib/font_awesome/solid';\nimport { isQuestionGroup } from 'lib/surveys/builder/utilities';\nimport { useGetPopulationAttributesQuery } from 'api/population_attributes';\nimport * as Constants from '../constants';\n\nimport SurveyContext from '../context';\n\nimport { Actions } from './actions';\nimport { Answers } from './answers';\nimport { Grid } from './grid';\nimport { Hint } from './hint';\nimport { MapAttribute } from './map_attribute';\nimport { QuestionControls } from './question_controls/question_controls';\nimport { Text } from './text';\nimport { Type } from './type';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './question.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\nexport function Question({\n isRemovableQuestion,\n pageTitle,\n position,\n question,\n questionSkipLogics,\n screenerSections,\n sectionAnswers,\n sectionUUID,\n sectionQuestions,\n}) {\n const {\n formState: { errors },\n getValues,\n } = useFormContext();\n\n const {\n isReadonly,\n formType,\n questionFunctions: {\n add: addQuestion,\n determineType: determineQuestionType,\n duplicate: duplicateQuestion,\n remove: removeQuestion,\n update: updateQuestion,\n updateType: updateQuestionType,\n },\n survey,\n } = useContext(SurveyContext);\n\n const isOptInForm = formType === Constants.OPT_IN_FORM_TYPE;\n\n const { participantPopulationId } = useParams();\n\n const { data: participantPopulationAttributes, isLoading } =\n useGetPopulationAttributesQuery(participantPopulationId, {\n skip: !isOptInForm,\n });\n\n const [isEditing, setEditing] = useState(!!question.isEditing);\n\n const hasFrontendErrors =\n errors?.question?.[question.uuid] ||\n Object.keys(errors?.answer || {}).some((key) =>\n question.answerIds?.includes(key),\n );\n\n const isIncompletePage =\n getValues()?.formData?.pageStatuses['screener-survey'] === 'incomplete';\n\n const answers = useMemo(\n () =>\n question.answerIds\n ?.filter((id) => !!survey.answers[id])\n ?.map((answerId) => survey.answers[answerId]),\n [question, survey.answers],\n );\n\n const hasErrors = useMemo(() => {\n if (Object.keys(question.errors).length || hasFrontendErrors) return true;\n\n return !!answers?.find((answer) => !!Object.keys(answer.errors).length);\n }, [answers, hasFrontendErrors, question.errors]);\n\n const controlsVisible = !isReadonly && isEditing;\n\n const questionType = determineQuestionType(question);\n\n const filterAttributesByQuestionType = (attributes, type) => {\n if (!attributes) return [];\n\n if (type === Constants.QUESTION_TYPE_DATE) {\n return attributes.filter((attribute) => attribute.type === 'date');\n }\n\n if (type === Constants.QUESTION_TYPE_FLOAT) {\n return attributes.filter((attribute) => attribute.type === 'decimal');\n }\n\n if (type === Constants.QUESTION_TYPE_BOOLEAN) {\n return attributes.filter((attribute) => attribute.type === 'boolean');\n }\n return attributes.filter((attribute) => attribute.type === 'string');\n };\n\n const filteredAttributes = filterAttributesByQuestionType(\n participantPopulationAttributes,\n questionType,\n );\n\n const otherAnswer = useMemo(\n () =>\n answers?.find(\n (answer) =>\n answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING,\n ),\n [answers],\n );\n\n const handleQuestionSelected = useCallback(() => {\n if (isReadonly) return;\n setEditing(!isEditing);\n }, [isReadonly, isEditing]);\n\n const handleChange = useCallback(\n (changes) => {\n updateQuestion(question.uuid, changes);\n },\n [question.uuid, updateQuestion],\n );\n\n const handleChangeType = useCallback(\n (changes) => {\n updateQuestionType(question.uuid, changes.questionType);\n },\n [question.uuid, updateQuestionType],\n );\n\n const handleEnterPress = useCallback(\n (event) => {\n if (event.keyCode !== Keycodes.ENTER) return;\n\n handleQuestionSelected();\n },\n [handleQuestionSelected],\n );\n\n useEffect(() => {\n const questionLength = Object.keys(survey.questions).length;\n if (questionLength === 1 || isIncompletePage) {\n setEditing(true);\n }\n }, [isIncompletePage, survey.questions]);\n\n const hasSkipLogic = questionSkipLogics.length > 0;\n\n const questionNumber = position ? position + 1 : 1;\n\n if (isLoading) return <LoadingSkeleton count={3} />;\n\n return (\n <Draggable\n draggableId={question.uuid}\n index={position}\n isDragDisabled={isReadonly}\n key={question.uuid}\n >\n {(provided, snapshot) => (\n <div\n className={classNames('SurveyBuilderQuestion', {\n editing: isEditing,\n 'has-errors': hasErrors,\n dragging: snapshot.isDragging,\n })}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n id={`question-${question.uuid}`}\n >\n <div\n className=\"SurveyBuilderQuestion__Content\"\n role=\"button\"\n tabIndex=\"0\"\n onClick={handleQuestionSelected}\n onKeyDown={handleEnterPress}\n >\n {isReadonly || (\n <span\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n <FontAwesomeIcon\n aria-label={`Drag question ${questionNumber}`}\n className=\"SurveyBuilderQuestion__drag-handle\"\n icon={faGripVertical}\n size=\"sm\"\n />\n </span>\n )}\n\n <div className=\"SurveyBuilderRow\">\n <div className=\"SurveyBuilderRow__text\" id=\"screener_question\">\n <Text\n isEditing={controlsVisible}\n isMandatory={question.isMandatory}\n serverErrors={question.errors.text}\n text={question.text}\n uuid={question.uuid}\n onChange={handleChange}\n />\n </div>\n\n <div className=\"SurveyBuilderRow__controls\">\n <Type\n isVisible={controlsVisible}\n type={questionType}\n onChange={handleChangeType}\n />\n </div>\n\n <div className=\"SurveyBuilderRow__actions\">\n <Actions\n isRemovableQuestion={isRemovableQuestion}\n isVisible={!isReadonly}\n questionUUID={question.uuid}\n sectionUUID={sectionUUID}\n onAdd={addQuestion}\n onDuplicate={duplicateQuestion}\n onRemove={removeQuestion}\n />\n </div>\n </div>\n\n <div className=\"SurveyBuilderQuestion__answers\">\n {isQuestionGroup(question) ? (\n <Grid isEditing={isEditing} questionGroupId={question.uuid} />\n ) : (\n <Answers isEditing={isEditing} question={question} />\n )}\n </div>\n\n {isOptInForm && (\n // this div prevents the question from collapsing when you click on the map attribute component\n // role and keydown are needed to satisfy accessibility linter\n <div\n role=\"button\"\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.stopPropagation();\n }\n }}\n >\n <MapAttribute\n attributes={filteredAttributes}\n question={question}\n questionType={questionType}\n />\n <Hint question={question} />\n </div>\n )}\n\n {controlsVisible && (\n <div className=\"row\">\n <QuestionControls\n otherAnswer={otherAnswer}\n pageTitle={pageTitle}\n position={position}\n question={question}\n onChange={handleChange}\n />\n </div>\n )}\n\n {hasSkipLogic && (\n <div\n className={classNames('skip-logic-summary-container', {\n 'skip-logic-summary-container--editing': isEditing,\n })}\n >\n <QuestionSkipLogicSummary\n questionId={question.uuid}\n screenerSections={screenerSections}\n sectionAnswers={sectionAnswers}\n sectionQuestions={sectionQuestions}\n skipLogics={questionSkipLogics}\n survey={survey}\n />\n </div>\n )}\n </div>\n </div>\n )}\n </Draggable>\n );\n}\n\nQuestion.propTypes = {\n isRemovableQuestion: propTypes.bool.isRequired,\n pageTitle: propTypes.string.isRequired,\n position: propTypes.number.isRequired,\n question: propTypes.shape({\n answerIds: propTypes.array,\n errors: propTypes.shape({\n text: propTypes.string,\n }).isRequired,\n isEditing: propTypes.bool,\n isKey: propTypes.bool.isRequired,\n isMandatory: propTypes.bool.isRequired,\n isNew: propTypes.bool,\n pick: propTypes.string.isRequired,\n text: propTypes.string.isRequired,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n questionSkipLogics: propTypes.arrayOf(skipLogicPropType).isRequired,\n screenerSections: propTypes.arrayOf(surveySectionPropType).isRequired,\n sectionAnswers: propTypes.arrayOf(answerPropType).isRequired,\n sectionQuestions: propTypes.arrayOf(questionPropType).isRequired,\n sectionUUID: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { faPlusCircle } from 'lib/font_awesome/regular';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './add_new_page_button.module.scss';\n\nexport function AddNewPageButton({ onAddSection }) {\n return (\n <div className={styles.AddNewPageButton}>\n <Button leadingIcon={faPlusCircle} variant=\"link\" onClick={onAddSection}>\n Add new page\n </Button>\n </div>\n );\n}\n\nAddNewPageButton.propTypes = {\n onAddSection: propTypes.func.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"x_S4yMt6Mt6bQSEEm5GF\";\nexport { _1 as \"AddNewPageButton\" }\n","import React, { useContext, useCallback } from 'react';\nimport propTypes from 'prop-types';\n\nimport { faCodeBranch } from 'lib/font_awesome/solid';\n\nimport { TrackedButton } from 'common/analytics';\nimport { AuthUserContext } from 'common/authorization';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport SurveyContext from '../../context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './section_controls.module.scss';\n\nexport function SectionControls({ section, hasSkipLogic }) {\n const { account } = useContext(AuthUserContext);\n\n const {\n setSurveyDuplicateBeforeEdit,\n questionFunctions,\n skipLogicFunctions,\n isReadonly,\n } = useContext(SurveyContext);\n const handleAddQuestion = useCallback(\n () => questionFunctions.add(section.uuid),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [questionFunctions.add, section.uuid],\n );\n const handleEditSkipLogic = useCallback(\n () => {\n setSurveyDuplicateBeforeEdit();\n\n if (!hasSkipLogic) {\n skipLogicFunctions.add(section.uuid);\n }\n skipLogicFunctions.edit(section.uuid);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n hasSkipLogic,\n skipLogicFunctions.edit,\n skipLogicFunctions.add,\n section.uuid,\n setSurveyDuplicateBeforeEdit,\n ],\n );\n\n const skipLogicCTA = `${hasSkipLogic ? 'Edit' : 'Add'} skip logic`;\n\n return (\n <div className={styles.SectionControls}>\n {!isReadonly && (\n <TrackedButton\n event={trackingEvents.SURVEY_ADD_NEW_QUESTION}\n eventData={{\n account_id: account?.id,\n }}\n variant=\"primary\"\n onClick={handleAddQuestion}\n >\n Add new question\n </TrackedButton>\n )}\n\n {(!isReadonly || hasSkipLogic) && (\n <TrackedButton\n event={\n hasSkipLogic\n ? trackingEvents.SURVEY_EDIT_SKIP_LOGIC\n : trackingEvents.SURVEY_ADD_SKIP_LOGIC\n }\n eventData={{\n account_id: account?.id,\n }}\n leadingIcon={faCodeBranch}\n variant=\"link\"\n onClick={handleEditSkipLogic}\n >\n {isReadonly ? 'View skip logic' : skipLogicCTA}\n </TrackedButton>\n )}\n </div>\n );\n}\n\nSectionControls.propTypes = {\n hasSkipLogic: propTypes.bool.isRequired,\n section: propTypes.shape({\n skipLogicIds: propTypes.array.isRequired,\n uuid: propTypes.string.isRequired,\n }).isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"vB1fk9ezeeybEevrJl96\";\nvar _2 = \"xMSedlun_B_nMNkMEQQK\";\nvar _3 = \"DFQtNyQkF_Zg9Q6ew2Aj\";\nvar _4 = \"D4IYvtSHnpVCNrXkqh5p\";\nvar _5 = \"wBwKZMMvL3n1hcdMvkkI\";\nvar _6 = \"I_QWSl9Ay2jsLXqXqpVj\";\nvar _7 = \"Dvs1BmUQxVwdPHf5ugDT\";\nvar _8 = \"HNde0M1RtBEOvTibtNug\";\nvar _9 = \"edcC_o4TE0oY5bxGOaGU\";\nvar _a = \"x9AfS3tomV3l_YDLGaIK\";\nvar _b = \"IQfhLRNTBCZPXKUvdbnH\";\nvar _c = \"lN8tgmuhyhO1SUTKbEqC\";\nvar _d = \"MyzR2BPjdrTOVyy081hD\";\nvar _e = \"XCQqrzxE2B8Se6nCXscw\";\nvar _f = \"_Ea7_DC_ia3CTUND_gFH\";\nvar _10 = \"uvQrT9rAgf9yxV2DUhQ4\";\nvar _11 = \"SIIlboOCALpMvFxokJ3o\";\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 \"SectionControls\", _c as \"TeamMemberInviterForm__section__invite-via-link\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport {\n Dropdown,\n DropdownItem,\n DropdownMenu,\n DropdownToggle,\n} from '@user-interviews/ui-design-system';\n\nimport { TrackedDropdownItem } from 'common/analytics';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faEllipsisV } from 'lib/font_awesome/regular';\n\nexport function SectionDropdown({\n className,\n removeable,\n onDuplicate,\n onRemove,\n}) {\n return (\n <Dropdown className={className}>\n <DropdownToggle\n aria-label=\"dropdown toggle screener page options\"\n removeCaret\n variant=\"transparent\"\n >\n <FontAwesomeIcon icon={faEllipsisV} size=\"lg\" />\n </DropdownToggle>\n <DropdownMenu>\n <TrackedDropdownItem\n aria-label=\"Duplicate screener page\"\n event={trackingEvents.SURVEY_DUPLICATE_PAGE_CLICKED}\n onClick={onDuplicate}\n >\n Duplicate\n </TrackedDropdownItem>\n\n {removeable && (\n <DropdownItem aria-label=\"Remove Screener Page\" onClick={onRemove}>\n Delete\n </DropdownItem>\n )}\n </DropdownMenu>\n </Dropdown>\n );\n}\n\nSectionDropdown.propTypes = {\n className: propTypes.string,\n removeable: propTypes.bool.isRequired,\n onDuplicate: propTypes.func.isRequired,\n onRemove: propTypes.func.isRequired,\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\nimport { Droppable } from 'react-beautiful-dnd';\n\nimport {\n Accordion,\n AccordionItem,\n AccordionCollapse,\n AccordionToggle,\n Card,\n CardSizes,\n} from '@user-interviews/ui-design-system';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { isQuestionGroup } from 'lib/surveys/builder/utilities';\n\nimport SurveyContext from '../../context';\nimport { Question } from '../../question';\n\nimport { AddNewPageButton } from './add_new_page_button';\nimport { SectionControls } from './section_controls';\nimport { SectionDropdown } from './section_dropdown';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './section.module.scss';\n\nexport function Section({ section }) {\n const { allowEmpty, isReadonly, survey, sectionFunctions, setModalProps } =\n useContext(SurveyContext);\n\n const sectionQuestions = useMemo(\n () => section.questionIds.map((id) => survey.questions[id]),\n [section, survey.questions],\n );\n\n const sectionAnswers = useMemo(\n () =>\n sectionQuestions\n .reduce((answerIds, sectionQuestion) => {\n if (sectionQuestion.answerIds) {\n return [...answerIds, ...sectionQuestion.answerIds];\n }\n\n return answerIds;\n }, [])\n .map((answerId) => survey.answers[answerId]),\n [sectionQuestions, survey.answers],\n );\n\n const isRemovableQuestion = section.questionIds.length > 1;\n\n const removeable =\n !isReadonly && (allowEmpty || survey.sectionIds.length > 1);\n\n const hasSkipLogicErrors = !!section.skipLogicIds.find((id) => {\n const skipLogic = survey.skipLogics[id];\n if (!skipLogic) return false;\n\n if (Object.keys(skipLogic.errors).length) return true;\n\n return skipLogic.conditionIds.find((conditionId) => {\n const condition = survey.skipLogicConditions[conditionId];\n if (!condition) return false;\n\n return Object.keys(condition.errors).length;\n });\n });\n\n const hasSkipLogic = section.skipLogicIds.length > 0;\n\n const removeMessage = () => {\n if (!hasSkipLogic)\n return 'Deleting the page will also delete all questions inside the page.';\n\n return (\n <div>\n You may need to adjust your skip logic. Any skip logic that pointed to\n this page will now point to the end of the screener.\n <br />\n <br />\n Deleting the page will also delete all questions inside the page.\n </div>\n );\n };\n\n const handleRemove = useCallback(() => {\n setModalProps({\n buttonText: 'Confirm delete',\n title: 'Are you sure you want to delete this page?',\n message: removeMessage(),\n openEvent: trackingEvents.SURVEY_DELETE_PAGE_MODAL_SHOWN,\n confirmEvent: trackingEvents.SURVEY_DELETE_PAGE_CONFIRM_CLICKED,\n onConfirm: () => sectionFunctions.remove(section.uuid),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [setModalProps, sectionFunctions, section.uuid]);\n\n const handleAddSection = useCallback(\n () => sectionFunctions.add(section.uuid),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sectionFunctions.add, section.uuid],\n );\n\n const handleDuplicateSection = useCallback(\n () => sectionFunctions.duplicate(section.uuid),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sectionFunctions.duplicate, section.uuid],\n );\n\n const sectionQuestionCount = section.questionIds?.length;\n const questionText = sectionQuestionCount === 1 ? 'Question' : 'Questions';\n const helperText = `| ${sectionQuestionCount} ${questionText}`;\n\n return (\n <>\n <Droppable droppableId={section.uuid}>\n {(provided) => (\n <Card\n className={styles.SurveyBuilderSection}\n noPadding\n size={CardSizes.LARGE}\n >\n {!isReadonly && (\n <SectionDropdown\n className={styles.SectionDropdown}\n removeable={removeable}\n onDuplicate={handleDuplicateSection}\n onRemove={handleRemove}\n />\n )}\n <Accordion defaultActiveKey={section.uuid} flush>\n <AccordionItem borderless>\n <AccordionToggle\n chevronLateral\n chevronLeft\n collapsedText={helperText}\n eventKey={section.uuid}\n title={section.title}\n />\n <AccordionCollapse eventKey={section.uuid}>\n <div className=\"form-section\" ref={provided.innerRef}>\n {hasSkipLogicErrors && (\n <div className={styles.errors}>\n There were errors with the skip logic for this section\n </div>\n )}\n\n {section.questionIds.map((questionId, index) => {\n // eslint-disable-next-line no-use-before-define\n const questionSkipLogics = getSkipLogicsInvolvingQuestion(\n questionId,\n section.uuid,\n survey,\n );\n\n return (\n <Question\n isRemovableQuestion={isRemovableQuestion}\n key={questionId}\n pageTitle={section.title}\n position={index}\n question={survey.questions[questionId]}\n questionSkipLogics={questionSkipLogics}\n screenerSections={Object.values(survey.sections)}\n sectionAnswers={sectionAnswers}\n sectionQuestions={sectionQuestions}\n sectionUUID={section.uuid}\n />\n );\n })}\n {provided.placeholder}\n\n <SectionControls\n hasSkipLogic={hasSkipLogic}\n section={section}\n />\n </div>\n </AccordionCollapse>\n </AccordionItem>\n </Accordion>\n </Card>\n )}\n </Droppable>\n\n {!isReadonly && <AddNewPageButton onAddSection={handleAddSection} />}\n </>\n );\n}\n\nSection.propTypes = {\n section: propTypes.object.isRequired,\n};\n\nconst getSkipLogicsInvolvingQuestion = (questionId, sectionId, survey) => {\n const section = survey.sections[sectionId];\n const question = survey.questions[questionId];\n\n const questionIds = isQuestionGroup(question)\n ? question.questionIds\n : [questionId];\n\n const skipLogicsInvolvingThisQuestion = [];\n\n section.skipLogicIds.forEach((skipLogicId) => {\n let skipLogic = survey.skipLogics[skipLogicId];\n let hasConditionsInvolvingThisQuestion = false;\n\n const conditions = skipLogic.conditionIds\n .filter(\n (conditionId) => survey.skipLogicConditions[conditionId] !== undefined,\n )\n .map((conditionId) => {\n const condition = survey.skipLogicConditions[conditionId];\n\n if (\n !hasConditionsInvolvingThisQuestion &&\n questionIds.includes(condition.questionId)\n ) {\n hasConditionsInvolvingThisQuestion = true;\n }\n return condition;\n });\n\n if (hasConditionsInvolvingThisQuestion) {\n skipLogic = {\n ...skipLogic,\n skipLogicConditions: conditions,\n };\n skipLogicsInvolvingThisQuestion.push(skipLogic);\n }\n });\n\n return skipLogicsInvolvingThisQuestion;\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"Zf91ABAL770cdfn7mrdQ\";\nvar _2 = \"t8_taZPwoBpGhzEfuY2Q\";\nvar _3 = \"FXhZEPY0My2JgSAjXRXO\";\nexport { _1 as \"SectionDropdown\", _2 as \"SurveyBuilderSection\", _3 as \"errors\" }\n","import React, { useContext, useCallback } from 'react';\nimport { DragDropContext } from 'react-beautiful-dnd';\n\nimport SurveyContext from '../context';\nimport { surveyPropType } from '../prop_types';\n\nimport { Section } from './section';\nimport { AddNewPageButton } from './section/add_new_page_button';\n\nfunction Sections({ survey }) {\n const { sectionFunctions, questionFunctions, isReadonly } =\n useContext(SurveyContext);\n const hasSections = survey.sectionIds.length;\n\n const handleMove = useCallback(\n (result) => {\n if (!result) return;\n questionFunctions.move(result);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [questionFunctions.move],\n );\n\n const handleAddSection = useCallback(\n () => sectionFunctions.add(null),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [sectionFunctions.add],\n );\n\n return (\n <DragDropContext onDragEnd={handleMove}>\n {survey.sectionIds.map((sectionId) => (\n <Section key={sectionId} section={survey.sections[sectionId]} />\n ))}\n\n {!isReadonly && !hasSections && (\n <AddNewPageButton onAddSection={handleAddSection} />\n )}\n </DragDropContext>\n );\n}\n\nSections.propTypes = {\n survey: surveyPropType.isRequired,\n};\n\nexport default Sections;\n","/* eslint-disable react/destructuring-assignment */\nimport React, { Component } from 'react';\nimport propTypes from 'prop-types';\nimport memoizeOne from 'memoize-one';\n\nimport { track, trackingEvents, trackingPropsShape } from 'lib/analytics';\n\nimport {\n buildSkipLogic,\n buildSkipLogicCondition,\n insertIntoArray,\n} from 'lib/surveys/builder/utilities';\n\nimport { AnswerUtilities } from 'lib/surveys/builder/answer_utilities';\nimport { QuestionUtilities } from 'lib/surveys/builder/question_utilities';\nimport { QuestionGroupUtilities } from 'lib/surveys/builder/question_group_utilities';\nimport { SectionUtilities } from 'lib/surveys/builder/section_utilities';\nimport { SkipLogicConditionUtilities } from 'lib/surveys/builder/skip_logic_condition_utilities';\nimport { SkipLogicUtilities } from 'lib/surveys/builder/skip_logic_utilities';\n\nimport {\n OPT_IN_FORM_TYPE,\n SCREENER_FORM_TYPE,\n} from 'components/survey_builder/constants';\nimport { ConfirmationModal } from './confirmation_modal';\nimport { surveyPropType } from './prop_types';\nimport { SkipLogicModal } from './skip_logic_modal';\nimport SurveyUpgradeModal from './survey_upgrade_modal';\nimport Sections from './sections';\n\nimport SurveyContext from './context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './survey_builder.scss';\n\nclass SurveyBuilder extends Component {\n state = {\n checkPremium: this.props.checkPremium,\n upgradeModalIsOpen: false,\n modalProps: {\n buttonText: undefined,\n confirmEvent: undefined,\n message: undefined,\n openEvent: undefined,\n title: undefined,\n onConfirm: undefined,\n },\n surveyDuplicateBeforeEdit: undefined,\n };\n\n getMemoizedSurveyContextValue = memoizeOne((contextProps, formType) => ({\n ...contextProps,\n formType,\n }));\n\n handleAddAnswers = (questionUUID, answerUUID, answers) => {\n this.props.tracking.trackEvent({\n event: trackingEvents.SURVEY_ANSWER_BATCH_ADDED,\n });\n\n const updates = AnswerUtilities.addBatch(\n questionUUID,\n answerUUID,\n answers,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleAddAnswer = (questionUUID, prevAnswerUUID) => {\n const updates = AnswerUtilities.add(\n questionUUID,\n prevAnswerUUID,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleAddOtherAnswer = (questionUUID) => {\n const updates = AnswerUtilities.addOther(questionUUID, this.survey);\n\n this.updateSurvey(updates);\n };\n\n handleMoveAnswer = (questionId, activeAnswerId, overAnswerId) => {\n this.props.tracking.trackEvent({\n event: trackingEvents.SURVEY_ANSWER_MOVED,\n });\n\n const updates = AnswerUtilities.move(\n questionId,\n activeAnswerId,\n overAnswerId,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleAddQuestion = (sectionUUID, prevQuestionUUID) => {\n const update = QuestionUtilities.add(\n sectionUUID,\n prevQuestionUUID,\n this.survey,\n );\n\n this.updateSurvey(update);\n };\n\n handleAddSection = (prevSectionUUID) => {\n const updates = this.updatedSections(SectionUtilities.add, prevSectionUUID);\n\n this.updateSurvey(updates);\n };\n\n handleDuplicateSection = (sectionUUID) => {\n const updates = this.updatedSections(\n SectionUtilities.duplicate,\n sectionUUID,\n );\n\n this.updateSurvey(updates);\n };\n\n handleRemoveSection = (sectionUUID) => {\n const changes = this.updatedSections(SectionUtilities.remove, sectionUUID);\n this.handleUnsetModalProps();\n\n this.updateSurvey(changes);\n };\n\n updatedSections = (updateFn, sectionIdentifier) =>\n updateFn(sectionIdentifier, this.survey, this.props.formType);\n\n handleAddSectionClicked = (prevSectionUUID) => {\n if (this.survey.sectionIds.length === 0) {\n this.handleAddSection();\n } else {\n this.requestPremiumAction(this.handleAddSection, [prevSectionUUID]);\n }\n };\n\n handleDuplicateSectionClicked = (sectionUUID) => {\n this.requestPremiumAction(this.handleDuplicateSection, [sectionUUID]);\n };\n\n handleAddSkipLogic = (sectionUUID) => {\n const section = { ...this.survey.sections[sectionUUID] };\n const newSkipLogic = buildSkipLogic();\n section.skipLogicIds = insertIntoArray(\n section.skipLogicIds,\n newSkipLogic.uuid,\n );\n\n const newSkipLogicCondition = buildSkipLogicCondition();\n newSkipLogic.conditionIds.push(newSkipLogicCondition.uuid);\n\n this.updateSurvey({\n sections: { ...this.survey.sections, [section.uuid]: section },\n skipLogicConditions: {\n ...this.survey.skipLogicConditions,\n [newSkipLogicCondition.uuid]: newSkipLogicCondition,\n },\n skipLogics: {\n ...this.survey.skipLogics,\n [newSkipLogic.uuid]: newSkipLogic,\n },\n });\n };\n\n handleAddSkipLogicCondition = (skipLogicUUID, prevConditionUUID) => {\n const skipLogic = { ...this.survey.skipLogics[skipLogicUUID] };\n const newSkipLogicCondition = buildSkipLogicCondition();\n\n skipLogic.conditionIds = insertIntoArray(\n skipLogic.conditionIds,\n newSkipLogicCondition.uuid,\n prevConditionUUID,\n );\n\n this.updateSurvey({\n skipLogicConditions: {\n ...this.survey.skipLogicConditions,\n [newSkipLogicCondition.uuid]: newSkipLogicCondition,\n },\n skipLogics: { ...this.survey.skipLogics, [skipLogic.uuid]: skipLogic },\n });\n };\n\n setSurveyDuplicateBeforeEdit = () => {\n this.setState({\n surveyDuplicateBeforeEdit: this.survey,\n });\n };\n\n handleCloseSkipLogic = () => {\n this.setState({\n skipLogicSectionId: undefined,\n surveyDuplicateBeforeEdit: undefined,\n });\n };\n\n handleDuplicateQuestion = (sectionUUID, questionUUID) => {\n const updates = QuestionUtilities.duplicate(\n sectionUUID,\n questionUUID,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleMoveQuestion = ({ destination, source, draggableId }) => {\n if (!destination) return false;\n\n if (destination.droppableId === source.droppableId) {\n const updates = QuestionUtilities.moveWithinSection(\n destination,\n draggableId,\n this.survey,\n );\n\n return this.updateSurvey(updates);\n }\n\n const skipLogicConditions = Object.values(\n this.survey.skipLogicConditions,\n ).filter((condition) => condition && condition.questionId === draggableId);\n\n if (skipLogicConditions.length > 0) {\n const numSkipConditions = skipLogicConditions.length;\n\n return this.handleSetModalProps({\n buttonText: 'Confirm move',\n title: 'Are you sure you want to move this question?',\n message: (\n <div>\n Moving this question across a page means that\n <strong>\n {numSkipConditions} skip logic\n {numSkipConditions > 1 ? ' conditions' : ' condition'} will be\n removed.\n </strong>\n Skip logic statements that do not reference this question will\n be unaffected.\n </div>\n ),\n confirmEvent: trackingEvents.SURVEY_MOVE_QUESTION_CONFIRM_CLICKED,\n openEvent: trackingEvents.SURVEY_MOVE_QUESTION_MODAL_SHOWN,\n onConfirm: () =>\n this.handleMoveQuestionFromSection(source, destination, draggableId),\n });\n }\n\n return this.handleMoveQuestionFromSection(source, destination, draggableId);\n };\n\n trackQuestionMoved = (targetSection, currentSection) => {\n const { tracking } = this.props;\n\n tracking.trackEvent({\n event: trackingEvents.SURVEY_QUESTION_MOVED_FROM_PAGE,\n screener_section_target: targetSection.title,\n screener_section_current: currentSection.title,\n });\n };\n\n // TODO: RS-20454 Moving into QuestionUtilities\n handleMoveQuestionFromSection = (source, destination, questionId) => {\n let survey = { ...this.survey };\n\n const currentSection = survey.sections[source.droppableId];\n const targetSection = survey.sections[destination.droppableId];\n\n this.trackQuestionMoved(targetSection, currentSection);\n\n const currentPosition = currentSection.questionIds.indexOf(questionId);\n const question = currentSection.questionIds.splice(currentPosition, 1)[0];\n\n // Move question\n targetSection.questionIds.splice(destination.index, 0, question);\n\n // Remove question's skip logic conditions\n const skipLogicUpdates =\n SkipLogicConditionUtilities.removeQuestionConditions(\n currentSection.uuid,\n questionId,\n survey,\n );\n survey = { ...survey, ...skipLogicUpdates };\n\n // Remove origin section if last question\n if (currentSection.questionIds.length === 0) {\n survey = {\n ...survey,\n ...this.updatedSections(SectionUtilities.remove, currentSection.uuid),\n };\n }\n\n this.handleUnsetModalProps();\n\n this.updateSurvey({\n sections: survey.sections,\n sectionIds: survey.sectionIds,\n skipLogics: survey.skipLogics,\n skipLogicConditions: survey.skipLogicConditions,\n });\n };\n\n handleRemoveSkipLogic = (sectionUUID, skipLogicUUID) => {\n const updates = SkipLogicUtilities.remove(\n sectionUUID,\n skipLogicUUID,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleRemoveSkipLogicCondition = (skipLogicUUID, skipLogicConditionUUID) => {\n const updates = SkipLogicConditionUtilities.removeConditions(\n skipLogicUUID,\n [skipLogicConditionUUID],\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleEditSkipLogicClicked = (sectionUUID) => {\n this.requestPremiumAction(this.handleOpenSkipLogic, [sectionUUID]);\n };\n\n handleCancelSkipLogicEdit = () => {\n this.updateSurvey({\n sections: {\n ...this.state.surveyDuplicateBeforeEdit.sections,\n },\n skipLogicConditions: {\n ...this.state.surveyDuplicateBeforeEdit.skipLogicConditions,\n },\n skipLogics: {\n ...this.state.surveyDuplicateBeforeEdit.skipLogics,\n },\n });\n\n this.handleCloseSkipLogic();\n };\n\n handleOpenSkipLogic = (sectionUUID) => {\n this.setState({ skipLogicSectionId: sectionUUID });\n };\n\n handleRemoveAnswer = (questionUUID, answerUUID) => {\n const updates = AnswerUtilities.remove(\n questionUUID,\n answerUUID,\n this.survey,\n );\n\n this.updateSurvey(updates);\n };\n\n handleRemoveQuestion = (sectionUUID, questionUUID) => {\n const update = QuestionUtilities.remove(\n sectionUUID,\n questionUUID,\n this.survey,\n );\n\n this.updateSurvey(update);\n };\n\n handleSetModalProps = (modalProps) => {\n this.setState({ modalProps });\n };\n\n handleUnsetModalProps = () => {\n this.setState({\n modalProps: {\n buttonText: undefined,\n confirmEvent: undefined,\n message: undefined,\n openEvent: undefined,\n title: undefined,\n onConfirm: undefined,\n },\n });\n };\n\n handleUpdateAnswer = (answerUUID, update) => {\n const updates = AnswerUtilities.update(answerUUID, update, this.survey);\n\n this.updateSurvey(updates);\n };\n\n handleUpdateQuestion = (questionUUID, updates) => {\n const update = QuestionUtilities.update(questionUUID, updates, this.survey);\n\n this.updateSurvey(update);\n };\n\n handleUpdateQuestionType = (questionUUID, questionType) => {\n const update = QuestionUtilities.updateType(\n questionUUID,\n questionType,\n this.survey,\n );\n\n this.updateSurvey(update);\n };\n\n handleAddQuestionColumn = (questionGroupUUID) => {\n const update = QuestionGroupUtilities.addColumn(\n questionGroupUUID,\n this.survey,\n );\n\n this.updateSurvey(update);\n };\n\n handleAddQuestionRow = (questionGroupUUID) => {\n const update = QuestionGroupUtilities.addRow(\n questionGroupUUID,\n this.survey,\n );\n\n this.updateSurvey(update);\n };\n\n handleRemoveQuestionColumn = (questionGroupUUID, answerIndex) => {\n const update = QuestionGroupUtilities.removeColumn({\n questionGroupUUID,\n answerIndex,\n survey: this.survey,\n });\n\n this.updateSurvey(update);\n };\n\n handleRemoveQuestionRow = (questionGroupUUID, questionUUID) => {\n const update = QuestionGroupUtilities.removeRow({\n questionGroupUUID,\n questionUUID,\n survey: this.survey,\n });\n\n this.updateSurvey(update);\n };\n\n handleUpdateQuestionColumn = (questionGroupUUID, answerIndex, updates) => {\n const update = QuestionGroupUtilities.updateColumn({\n questionGroupUUID,\n answerIndex,\n updates,\n survey: this.survey,\n });\n\n this.updateSurvey(update);\n };\n\n handleUpdateSkipLogic = (skipLogicUUID, updates) => {\n this.updateSurvey({\n skipLogics: {\n ...this.survey.skipLogics,\n [skipLogicUUID]: {\n ...this.survey.skipLogics[skipLogicUUID],\n ...updates,\n errors: {},\n },\n },\n });\n };\n\n handleUpdateSkipLogicCondition = (skipLogicConditionUUID, updates) => {\n this.updateSurvey({\n skipLogicConditions: {\n ...this.survey.skipLogicConditions,\n [skipLogicConditionUUID]: {\n ...this.survey.skipLogicConditions[skipLogicConditionUUID],\n ...updates,\n errors: {},\n },\n },\n });\n };\n\n handleUpgradeModalUpgradeClick = () => {\n const [callback, args] = this.state.requestedPremiumAction;\n this.setState({ checkPremium: false, requestedPremiumAction: undefined });\n\n callback.apply(this, args);\n this.setState({ upgradeModalIsOpen: false });\n };\n\n handleUpgradeModalRequestClose = () => {\n this.props.tracking.trackEvent({\n event: trackingEvents.SURVEY_UPGRADE_DISMISSED,\n });\n this.setState({ upgradeModalIsOpen: false });\n };\n\n determineQuestionType = (question) =>\n QuestionUtilities.determineType(question, this.survey);\n\n get contextProps() {\n return {\n allowEmpty: this.props.allowEmpty,\n isReadonly: this.props.isReadonly,\n survey: this.survey,\n setModalProps: this.handleSetModalProps,\n setSurveyDuplicateBeforeEdit: this.setSurveyDuplicateBeforeEdit,\n setToastMessage: this.props.setToastMessage,\n answerFunctions: {\n add: this.handleAddAnswer,\n addBatch: this.handleAddAnswers,\n addOther: this.handleAddOtherAnswer,\n move: this.handleMoveAnswer,\n remove: this.handleRemoveAnswer,\n update: this.handleUpdateAnswer,\n },\n sectionFunctions: {\n add: this.handleAddSectionClicked,\n duplicate: this.handleDuplicateSectionClicked,\n remove: this.handleRemoveSection,\n },\n questionFunctions: {\n add: this.handleAddQuestion,\n determineType: this.determineQuestionType,\n duplicate: this.handleDuplicateQuestion,\n move: this.handleMoveQuestion,\n remove: this.handleRemoveQuestion,\n update: this.handleUpdateQuestion,\n updateType: this.handleUpdateQuestionType,\n },\n questionGroupFunctions: {\n addColumn: this.handleAddQuestionColumn,\n addRow: this.handleAddQuestionRow,\n removeColumn: this.handleRemoveQuestionColumn,\n removeRow: this.handleRemoveQuestionRow,\n updateColumn: this.handleUpdateQuestionColumn,\n },\n skipLogicFunctions: {\n add: this.handleAddSkipLogic,\n addCondition: this.handleAddSkipLogicCondition,\n removeCondition: this.handleRemoveSkipLogicCondition,\n updateCondition: this.handleUpdateSkipLogicCondition,\n edit: this.handleEditSkipLogicClicked,\n remove: this.handleRemoveSkipLogic,\n update: this.handleUpdateSkipLogic,\n },\n };\n }\n\n get survey() {\n return this.props.survey;\n }\n\n requestPremiumAction(callback, args = []) {\n if (this.state.checkPremium) {\n this.setState({\n requestedPremiumAction: [callback, args],\n upgradeModalIsOpen: true,\n });\n } else {\n callback.apply(this, args);\n }\n }\n\n updateSurvey(updates) {\n this.props.onUpdateSurvey(updates);\n }\n\n render() {\n const contextValue = this.getMemoizedSurveyContextValue(\n this.contextProps,\n this.props.formType,\n );\n\n return (\n <div className=\"SurveyBuilder form-well\">\n <ConfirmationModal\n buttonText={this.state.modalProps.buttonText}\n confirmEvent={this.state.modalProps.confirmEvent}\n message={this.state.modalProps.message}\n openEvent={this.state.modalProps.openEvent}\n title={this.state.modalProps.title}\n onConfirm={this.state.modalProps.onConfirm}\n onRequestClose={this.handleUnsetModalProps}\n />\n <SurveyContext.Provider value={contextValue}>\n <SkipLogicModal\n isReadonly={this.props.isReadonly}\n sectionId={this.state.skipLogicSectionId}\n survey={this.survey}\n onRequestCancel={this.handleCancelSkipLogicEdit}\n onRequestClose={this.handleCloseSkipLogic}\n />\n\n <SurveyUpgradeModal\n isOpen={this.state.upgradeModalIsOpen}\n onRequestClose={this.handleUpgradeModalRequestClose}\n onUpgradeClick={this.handleUpgradeModalUpgradeClick}\n />\n\n <Sections survey={this.survey} />\n </SurveyContext.Provider>\n </div>\n );\n }\n}\n\nSurveyBuilder.propTypes = {\n allowEmpty: propTypes.bool,\n checkPremium: propTypes.bool.isRequired,\n formType: propTypes.oneOf([OPT_IN_FORM_TYPE, SCREENER_FORM_TYPE]).isRequired,\n isReadonly: propTypes.bool,\n setToastMessage: propTypes.func,\n survey: surveyPropType.isRequired,\n onUpdateSurvey: propTypes.func.isRequired,\n ...trackingPropsShape,\n};\n\nSurveyBuilder.defaultProps = {\n allowEmpty: true,\n isReadonly: false,\n};\n\nexport default track()(SurveyBuilder);\n","import { registerComponent } from 'lib/react_on_rails';\nimport SurveyBuilder from './survey_builder';\nimport * as SurveyBuilderConstants from './constants';\nimport SurveyContext from './context';\n\nregisterComponent('SurveyBuilder', SurveyBuilder);\n\nexport {\n SurveyBuilder,\n SurveyBuilderConstants,\n SurveyContext as SurveyBuilderContext,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"t4R17IUpaCUQy4lnM28T\";\nvar _2 = \"Ju9dKLTcRWsUHzbSz2fc\";\nvar _3 = \"rOKErF3y3XqCwayeAJZQ\";\nvar _4 = \"B7VZ493fcR4Oor32LiRT\";\nvar _5 = \"MDXY1sro9Ntf90g9cDAw\";\nvar _6 = \"pD82CKh89KSatsZFRJdD\";\nvar _7 = \"BOJ990cUkecdQxMMnE9A\";\nvar _8 = \"_9dvfA0NUQsgX6wMg1mHK\";\nvar _9 = \"KfRTXySUTveFvhLCClx5\";\nvar _a = \"E27xDsw6EQ7l3Ojl0K9P\";\nvar _b = \"RxUlQhVuNlAD1DXpsTAJ\";\nvar _c = \"rTAVbjNvUnk_IlMJwIrQ\";\nvar _d = \"v_3UU5JH5A3p6NNuuX5l\";\nvar _e = \"DtErWqxwYvdAtz1QVK1u\";\nvar _f = \"w3iWVFPRj9_Uj8L3DGu0\";\nvar _10 = \"UfR0YbtadDHWcNIq_Vuz\";\nvar _11 = \"TYGAXtxGhzJYvMFUp7Hg\";\nvar _12 = \"GHe8LvDL1Xl_0Zc4MFyD\";\nvar _13 = \"f8NctEftd5asn7NDIVpg\";\nvar _14 = \"pFPF53NKSLDqAkzFNY3x\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"Header\", _6 as \"Icon\", _7 as \"MessageList__message__timestamp\", _8 as \"MobileBreak\", _9 as \"ParticipantProfile__participant-details__attribute-value\", _a as \"PreviewBanner\", _b as \"ProjectCustomEmailSets\", _c as \"ProjectListItem__status-date\", _d as \"ProjectListing__detail\", _e as \"ProjectListing__details\", _f as \"TeamMemberInviterForm__section__invite-via-link\", _10 as \"UnmoderatedTask__deadline\", _11 as \"btn-link--neutral\", _12 as \"btn-outline-secondary\", _13 as \"participant-dashboard__project__info__status__string\", _14 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './preview_banner.module.scss';\n\nexport function PreviewBanner() {\n return (\n <div className={styles.PreviewBanner}>\n <span aria-label=\"Magnifying Glass\" className={styles.Icon} role=\"img\">\n 🔠\n </span>\n <span className={styles.Header}>You are in preview mode. </span>\n <br className={styles.MobileBreak} />\n <span>\n Any added skip logic will be applied. We recommend testing all possible\n paths.\n </span>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"jD0X6GIIZIv1QfW541hn\";\nvar _2 = \"IP6yOUv5cY8G0EDlVgjZ\";\nexport { _1 as \"HubSurveyHeader\", _2 as \"Logo\" }\n","import React from 'react';\n\nimport {\n Card,\n CardSizes,\n Flex,\n Heading,\n Text,\n} from '@user-interviews/ui-design-system';\nimport classNames from 'classnames';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport StudyDetailsAccordion from 'participant/apply/study_details_accordion';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './hub_survey_preview_header.module.scss';\n\nexport function HubSurveyPreviewHeader({\n cardSize,\n logoUrl,\n projectDetails,\n teamName,\n title,\n}) {\n return (\n <>\n <Flex\n alignItems=\"center\"\n className={styles.HubSurveyHeader}\n container\n flexDirection=\"column\"\n >\n {logoUrl && (\n <div\n className={classNames(\n 'logo-container logo-container--centered',\n styles.Logo,\n )}\n >\n <img\n alt={`${teamName} logo`}\n className=\"logo-thumbnail\"\n src={logoUrl}\n />\n </div>\n )}\n\n <Heading level={1} size=\"xxxl\" textAlign=\"center\">\n Apply to see if you qualify for the study\n </Heading>\n\n <Text size=\"lg\" textAlign=\"center\">\n {projectDetails.surveyCompletionTime}\n </Text>\n </Flex>\n\n <Card noPadding size={cardSize}>\n <StudyDetailsAccordion\n description={projectDetails.description}\n incentive={projectDetails.incentive}\n noIncentive={projectDetails.noIncentive}\n requiresDocumentSignature={projectDetails.requiresDocumentSignature}\n sessionLength={projectDetails.sessionLength}\n title={title}\n />\n </Card>\n </>\n );\n}\n\nHubSurveyPreviewHeader.propTypes = {\n cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n logoUrl: propTypes.string,\n projectDetails: propTypes.object,\n teamName: propTypes.string,\n title: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"GDuHyhSta8MuJsBOHH2Y\";\nvar _2 = \"ecBuu5N15dCjY6oSVCf9\";\nvar _3 = \"BW9Iv3k1v4mIVxNDp1Pj\";\nvar _4 = \"j8q52jdSSaxqZbeTH252\";\nvar _5 = \"WOO99kQFA6casVTZwR2x\";\nvar _6 = \"_7kQUpMvpdO86fjtDlwC\";\nvar _7 = \"Bd_qoVency4Yz7_8bPRb\";\nvar _8 = \"zaSWbB9sQKf9p6qq641p\";\nvar _9 = \"bm_fL4uS1v08QhU3xKcF\";\nvar _a = \"vd5g4_6ZY32CamrbWhi1\";\nvar _b = \"uVerhcCQWV_J6sNTucYN\";\nvar _c = \"Thxgh0d2ilTKi9RZJa1h\";\nvar _d = \"bEfagH2PGs6l9mYZTsyv\";\nvar _e = \"bixIJuAs_GzVPKmYxvNf\";\nvar _f = \"rL3WDQphMHvMDitvUzXr\";\nvar _10 = \"YbAMpW3H_GqEsl4jx1sL\";\nvar _11 = \"taVy_bGCX1oDRrm1p3Lu\";\nvar _12 = \"xi6utMuayQkFSpqLcE3z\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"Divider\", _6 as \"Header\", _7 as \"MessageList__message__timestamp\", _8 as \"ParticipantProfile__participant-details__attribute-value\", _9 as \"ProjectCustomEmailSets\", _a as \"ProjectListItem__status-date\", _b as \"ProjectListing__detail\", _c as \"ProjectListing__details\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"UnmoderatedTask__deadline\", _f as \"btn-link--neutral\", _10 as \"btn-outline-secondary\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Heading } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './recruit_survey_preview_header.module.scss';\n\nexport function RecruitSurveyPreviewHeader({ title }) {\n return (\n <div className={styles.Header}>\n <Heading level={1} size=\"xxxl\" textAlign=\"center\">\n {title}\n </Heading>\n </div>\n );\n}\n\nRecruitSurveyPreviewHeader.propTypes = {\n title: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { CardSizes } from '@user-interviews/ui-design-system';\n\nimport { HubSurveyPreviewHeader } from './hub_survey_preview_header';\nimport { RecruitSurveyPreviewHeader } from './recruit_survey_preview_header';\n\nexport function SurveyPreviewFormHeader({\n cardSize,\n logoUrl,\n projectDetails,\n publicSurvey,\n teamName,\n title,\n}) {\n return publicSurvey ? (\n <RecruitSurveyPreviewHeader title={title} />\n ) : (\n <HubSurveyPreviewHeader\n cardSize={cardSize}\n logoUrl={logoUrl}\n projectDetails={projectDetails}\n teamName={teamName}\n title={title}\n />\n );\n}\n\nSurveyPreviewFormHeader.propTypes = {\n cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n logoUrl: propTypes.string,\n projectDetails: propTypes.object,\n publicSurvey: propTypes.bool.isRequired,\n teamName: propTypes.string,\n title: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"JwCEVOMQEKIQUCzFNDIw\";\nvar _2 = \"Oq4P8MzWkhZf06PMkB6C\";\nvar _3 = \"KG3_VxMfN1IERe1sxqGL\";\nvar _4 = \"bJsK7TNKcmVovX9QdyOa\";\nvar _5 = \"whShshlwbc4sj9jIJF4U\";\nvar _6 = \"Pxav6A_YZ9uZRJilOkc7\";\nvar _7 = \"FoelbympKZ9QI0eZmQcj\";\nvar _8 = \"D1dtbYqzEvsraY3jn86t\";\nvar _9 = \"aoGUAnVSy9AplT5x54YM\";\nvar _a = \"N9e2y_T_EJ2Oe9VYzUWM\";\nvar _b = \"zhh0mMntS39UIYi9SXwu\";\nvar _c = \"ooI3zTrcAIaIPCsGFvtz\";\nvar _d = \"N2jaeEdnd8EaV72wWgSv\";\nvar _e = \"xwOIrznqP3j5L2GPJ7H3\";\nvar _f = \"parydvWq6QDmL83dg1_N\";\nvar _10 = \"YQmnDHj156cliiSaA22n\";\nvar _11 = \"c7SLz7Aa768ct3Ib2dab\";\nvar _12 = \"X8SPaynG56Az3HiS3AM7\";\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 \"RestartButton\", _c as \"SuccessIcon\", _d as \"TeamMemberInviterForm__section__invite-via-link\", _e as \"UnmoderatedTask__deadline\", _f as \"btn-link--neutral\", _10 as \"btn-outline-secondary\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { faCircleCheck, faSync } from 'lib/font_awesome/solid';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, Flex, Heading, Text } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_preview_end.module.scss';\n\nexport function SurveyPreviewEnd({ onRestartPreview, isOptInForm }) {\n return (\n <Flex alignItems=\"center\" container flexDirection=\"column\">\n <div className={styles.SuccessIcon}>\n <FontAwesomeIcon\n data-testid=\"end-of-preview-check-icon\"\n icon={faCircleCheck}\n />\n </div>\n\n <Heading level={2} size=\"xxxl\" textAlign=\"center\" weight=\"bold\">\n {`You've reached the end of the ${isOptInForm ? 'opt-in form' : 'screener survey'} preview.`}\n </Heading>\n\n <Text size=\"lg\" textAlign=\"center\">\n {!isOptInForm &&\n 'If everything looks good, close this window and continue setting up your project. '}\n To start over or test another skip logic path, click the button below.\n </Text>\n\n <Button className={styles.RestartButton} onClick={onRestartPreview}>\n <FontAwesomeIcon className=\"icon-left\" icon={faSync} />\n Go back to start\n </Button>\n </Flex>\n );\n}\n\nSurveyPreviewEnd.propTypes = {\n isOptInForm: propTypes.bool,\n onRestartPreview: propTypes.func.isRequired,\n};\n\nSurveyPreviewEnd.defaultProps = {\n isOptInForm: false,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"JkR8pAUtZZhp0gsXiPR1\";\nexport { _1 as \"SurveyPreviewForm\" }\n","import React, { useMemo, useState } from 'react';\nimport propTypes from 'prop-types';\n\nimport { CardStack, Flex } from '@user-interviews/ui-design-system';\n\nimport { TitledPage } from 'common/routing';\n\nimport { ProjectDefaultName } from 'lib/generated_constants/projects';\nimport { Header } from 'participant/opt_in/components/header';\nimport { DefaultQuestionsForm } from 'participant/opt_in/components/default_questions_form';\nimport { surveySectionPropType } from '../../prop_types';\nimport { PreviewBanner } from './preview_banner';\nimport { SurveyPreviewFormHeader } from './survey_preview_form_header';\nimport { SurveyPreviewEnd } from './survey_preview_end';\nimport { SurveySectionForm } from '../../components/survey_section_form';\nimport { determineCardSize } from '../../utils';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_preview_form.module.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\nexport function SurveyPreviewForm({\n isLoading,\n isSubmitting,\n logoUrl,\n previewCompleted,\n projectDetails,\n publicSurvey,\n surveySection,\n teamName,\n title,\n onRestartPreview,\n onSubmitSection,\n optInForm,\n}) {\n const titleWithDefaultName = title || ProjectDefaultName;\n const pageTitlePrefix = surveySection?.title\n ? `${surveySection.title} - `\n : '';\n const pageTitle = `${optInForm ? 'Opt-in form' : `${pageTitlePrefix}Survey`} preview - ${titleWithDefaultName}`;\n\n const cardSize = useMemo(\n () => determineCardSize(surveySection),\n [surveySection],\n );\n const [submittedDefaultQuestions, setSubmittedDefaultQuestions] =\n useState(false);\n\n const handleRestartPreview = () => {\n setSubmittedDefaultQuestions(false);\n onRestartPreview();\n };\n\n const showEndPage =\n previewCompleted ||\n (optInForm && !optInForm.surveyId && submittedDefaultQuestions);\n\n return (\n <TitledPage title={pageTitle}>\n <Flex\n alignItems=\"center\"\n className={styles.SurveyPreviewForm}\n container\n flexDirection=\"column\"\n >\n <PreviewBanner />\n <CardStack size={cardSize}>\n {optInForm ? (\n <Header\n isPreview\n logoOnly={showEndPage}\n logoUrl={optInForm.logoUrl}\n optInFormDescription={optInForm.description}\n optInFormTitle={optInForm.title}\n teamName={optInForm.team.name}\n />\n ) : (\n <SurveyPreviewFormHeader\n cardSize={cardSize}\n logoUrl={logoUrl}\n projectDetails={projectDetails}\n publicSurvey={publicSurvey}\n teamName={teamName}\n title={titleWithDefaultName}\n />\n )}\n\n {showEndPage ? (\n <SurveyPreviewEnd\n isOptInForm={!!optInForm}\n onRestartPreview={handleRestartPreview}\n />\n ) : optInForm && !submittedDefaultQuestions ? (\n <DefaultQuestionsForm\n isSubmitting={false}\n optInForm={optInForm}\n onSubmitForm={() => {\n setSubmittedDefaultQuestions(true);\n }}\n />\n ) : (\n <SurveySectionForm\n cardSize={cardSize}\n isLoading={isLoading}\n isSubmitting={isSubmitting}\n surveySection={surveySection}\n onSubmit={onSubmitSection}\n />\n )}\n </CardStack>\n </Flex>\n </TitledPage>\n );\n}\n\nSurveyPreviewForm.propTypes = {\n isLoading: propTypes.bool.isRequired,\n isSubmitting: propTypes.bool.isRequired,\n logoUrl: propTypes.string,\n optInForm: propTypes.object,\n previewCompleted: propTypes.bool.isRequired,\n projectDetails: propTypes.object,\n publicSurvey: propTypes.bool.isRequired,\n surveySection: surveySectionPropType,\n teamName: propTypes.string,\n title: propTypes.string,\n onRestartPreview: propTypes.func.isRequired,\n onSubmitSection: propTypes.func.isRequired,\n};\n\nSurveyPreviewForm.defaultProps = {\n logoUrl: undefined,\n projectDetails: undefined,\n title: undefined,\n surveySection: null,\n teamName: undefined,\n optInForm: null,\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","// extracted by mini-css-extract-plugin\nvar _1 = \"UokFfKCU9QXSNZeqVzXo\";\nexport { _1 as \"surveyFormCard\" }\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","// extracted by mini-css-extract-plugin\nvar _1 = \"YOsCC24vMmJnhxxroaTM\";\nvar _2 = \"oyAXtBQqnkJwvNfSs52I\";\nvar _3 = \"O_kOuR6klBqZbBwD3RGP\";\nvar _4 = \"WEsqjcSTHuv12vKvo46h\";\nexport { _1 as \"consentNotice\", _2 as \"consentNoticeBody\", _3 as \"optInFormPage\", _4 as \"submitButton\" }\n","import { useContext } from 'react';\nimport { SidebarContext } from '../../sidebar_context_provider';\n\nexport function useSidebarContext() {\n return useContext(SidebarContext);\n}\n","/* eslint-disable camelcase */\nimport type {\n RequestOperations,\n PathParameters,\n ResponseBody,\n} from 'lib/swagger_helper';\nimport * as routes from 'lib/routes';\nimport { apiSlice } from 'api/base_slice';\nimport { POPULATION_LABELS_TAG } from 'api/tag_types';\nimport { headersAndCredentials } from 'api/utils';\n\nexport type ParticipantPopulationLabelsRawResponse =\n ResponseBody<'getParticipantPopulationLabels'>;\nexport type BulkParticipantPopulationLabelOperations =\n RequestOperations<'bulkParticipantPopulationLabels'>;\n\nfunction transformResponse(response: ParticipantPopulationLabelsRawResponse) {\n const { data } = response;\n\n return data\n .sort((a, b) => a.attributes.label.localeCompare(b.attributes.label))\n .map((raw) => ({\n ...raw.attributes,\n id: raw.id,\n meta: raw.meta,\n // older code expects this transformation of API response state\n value: raw.attributes.label,\n }));\n}\n\nexport type ParticipantPopulationLabelsApiResponse = ReturnType<\n typeof transformResponse\n>;\n\nexport const populationLabelsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getPopulationLabels: builder.query<\n ParticipantPopulationLabelsApiResponse,\n PathParameters<'getParticipantPopulationLabels'>\n >({\n query: ({ participant_population_id }) =>\n routes.api_participant_population_labels_path(\n participant_population_id,\n ),\n providesTags: [POPULATION_LABELS_TAG],\n transformResponse,\n }),\n bulkPopulationLabels: builder.mutation<\n unknown,\n {\n operations: BulkParticipantPopulationLabelOperations;\n } & PathParameters<'bulkParticipantPopulationLabels'>\n >({\n query: ({ operations, participant_population_id }) => ({\n url: routes.bulk_api_participant_population_labels_path(\n participant_population_id,\n ),\n method: 'POST',\n body: { 'atomic:operations': operations },\n ...headersAndCredentials(),\n }),\n invalidatesTags: [POPULATION_LABELS_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useGetPopulationLabelsQuery, useBulkPopulationLabelsMutation } =\n populationLabelsApi;\n","// using the any type here until this endpoint gets RSwag.\n// The API has a lot of conditionally included resources so its a bit of work\n// to tease it out.\nimport { merge } from 'lodash';\nimport * as routes from 'lib/routes';\nimport type { RequestBodyAttributes } from 'lib/swagger_helper';\n\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\nimport { apiSlice } from 'api/base_slice';\nimport {\n PROJECT_TAG,\n PROJECT_COST_BREAKDOWN_TAG,\n PROJECT_EXPECTED_COST_DETAILS_TAG,\n PROJECT_PAYMENT_METHODS_TAG,\n PROJECT_DEMOGRAPHIC_RULES_TAG,\n PROJECT_AVAILABILITY_SETTINGS_TAG,\n PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG,\n} from 'api/tag_types';\n\nexport const projectsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getProject: builder.query<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n {\n projectId: string;\n include?: string;\n }\n >({\n query: ({ projectId, include }) =>\n routes.api_project_path(projectId, { include }),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n transformResponse: (response: any) =>\n merge(deserializeJSONApiResponse(response), {\n meta: {\n invalidLaunchMessages: response.meta?.invalidLaunchMessages,\n invalidLaunchProps: response.meta?.invalidLaunchProps,\n firstProjectId: response.meta?.firstProjectId,\n canEdit: response.meta?.canEdit,\n },\n }),\n providesTags: (_result, _error, { projectId }) => [\n { type: PROJECT_TAG, id: projectId },\n ],\n }),\n createProject: builder.mutation<\n { id: string },\n RequestBodyAttributes<'createProject'>\n >({\n query: (attributes) => ({\n url: routes.api_projects_path(),\n method: 'POST',\n body: { data: { attributes, type: 'project' } },\n ...headersAndCredentials(),\n }),\n transformResponse: deserializeJSONApiResponse,\n }),\n updateProject: builder.mutation<\n unknown,\n {\n projectId: string;\n skipProjectInvalidation?: boolean;\n attributes: unknown;\n }\n >({\n query: ({ projectId, attributes }) => ({\n url: routes.api_project_path(projectId),\n method: 'PATCH',\n body: { data: { attributes } },\n ...headersAndCredentials(),\n }),\n transformResponse: deserializeJSONApiResponse,\n invalidatesTags: (\n _result,\n _error,\n { projectId, skipProjectInvalidation },\n ) => [\n ...(skipProjectInvalidation\n ? []\n : [{ type: PROJECT_TAG, id: projectId } as const]),\n { type: PROJECT_COST_BREAKDOWN_TAG, id: projectId },\n { type: PROJECT_EXPECTED_COST_DETAILS_TAG, id: projectId },\n { type: PROJECT_PAYMENT_METHODS_TAG, id: projectId },\n { type: PROJECT_DEMOGRAPHIC_RULES_TAG, id: projectId },\n {\n type: PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG,\n id: 'LIST',\n },\n PROJECT_AVAILABILITY_SETTINGS_TAG,\n ],\n }),\n deleteProject: builder.mutation<unknown, { projectId: string | number }>({\n query: ({ projectId }) => ({\n url: routes.api_project_path(projectId),\n method: 'DELETE',\n ...headersAndCredentials(),\n }),\n invalidatesTags: (_result, _error, { projectId }) => [\n { type: PROJECT_TAG, id: projectId },\n ],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useGetProjectQuery,\n useCreateProjectMutation,\n useUpdateProjectMutation,\n useDeleteProjectMutation,\n} = projectsApi;\n","export const ACTIVITY_STEP = 'activity';\nexport const DETAILS_STEP = 'details';\nexport const EXPERIENCE_STEP = 'experience';\nexport const RECRUITMENT_STEP = 'recruitment';\nexport const SCHEDULING_DRAWER = 'scheduling_drawer';\nexport const PREPARATION_INSTRUCTIONS_DRAWER =\n 'preparation_instructions_drawer';\nexport const TASK_LOCATION_DRAWER = 'task_location_drawer';\nexport const RECRUITMENT_CRITERIA_DRAWER = 'recruitment_criteria_drawer';\nexport const SCREENER_SURVEY_DRAWER = 'screener_survey_drawer';\nexport const SCREENER_VIDEO_DRAWER = 'screener_video_drawer';\nexport const INTERNAL_TITLE_DESCRIPTION_MODAL =\n 'internal_title_description_modal';\nexport const URL_REGEX = /https?:\\/\\/\\w+((:\\d+)?\\/\\S*)?/;\nexport const URL_SECURED_REGEX = /^https:\\/\\/(?:[\\w-]+\\.)*[\\w-]+\\.\\w+(?:.*)?$/;\nexport const TRACKING_ID = 'TRACKINGID';\nexport const VALID_TRACKING_ID_REGEX =\n /(?:\\/TRACKINGID(?:\\/|$)|[?&][^=]+=TRACKINGID(?:&|$))/;\nexport const COMPENSATION_TYPE_OTHER = 'Other';\nexport const CASH_COMPENSATION_OPTION = { label: 'Cash', value: 'Cash' };\nexport const OTHER_COMPENSATION_OPTION = {\n label: 'Other',\n value: COMPENSATION_TYPE_OTHER,\n};\nexport const VISA_GIFT_CARD_COMPENSATION_OPTION = {\n label: 'Visa gift card',\n value: 'Visa gift card',\n};\nexport const ALL_THEY_PAY_COMPENSATION_OPTIONS = [\n CASH_COMPENSATION_OPTION,\n VISA_GIFT_CARD_COMPENSATION_OPTION,\n { label: 'Tango gift card', value: 'Tango gift card' },\n { label: 'Amazon gift card', value: 'Amazon gift card' },\n OTHER_COMPENSATION_OPTION,\n];\n\nexport const THEY_PAY_IN_PERSON_DEFAULT_COMPENSATION =\n CASH_COMPENSATION_OPTION.value;\nexport const THEY_PAY_DEFAULT_COMPENSATION =\n VISA_GIFT_CARD_COMPENSATION_OPTION.value;\n\nexport const THEY_PAY_COMPENSATION_OPTION_VALUES = [\n 'Visa gift card',\n 'Tango gift card',\n 'Amazon gift card',\n];\n\nexport const THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES = [\n CASH_COMPENSATION_OPTION.value,\n ...THEY_PAY_COMPENSATION_OPTION_VALUES,\n];\n\nexport const TOAST_PROJECT_UPDATE_SUCCESS = 'Project updated.';\n","import { useContext, useMemo } from 'react';\nimport AuthUserContext from 'common/authorization/auth_user_context';\n\nimport { MATCH_TYPES } from 'common/authorization/match_types';\n\nconst MATCH_HANDLERS = {\n [MATCH_TYPES.ANY]: (permissions) => permissions.some.bind(permissions),\n [MATCH_TYPES.ALL]: (permissions) => permissions.every.bind(permissions),\n};\n\nconst checkAuthorization = (config, authorization) => {\n const { matchType = MATCH_TYPES.ALL, to, notTo } = config;\n const hasAllowlist = to && to.length > 0;\n const hasBlocklist = notTo && notTo.length > 0;\n if (!hasAllowlist && !hasBlocklist) {\n return false;\n }\n\n const authorize = (permissions, target) => {\n const permissionsArray = [].concat(permissions);\n const checkPermissions = MATCH_HANDLERS[matchType](permissionsArray);\n return checkPermissions(\n (permission) => (authorization[permission] === true) === target,\n );\n };\n\n const authorizationList = [];\n if (hasAllowlist) {\n authorizationList.push(authorize(to, true));\n }\n if (hasBlocklist) {\n authorizationList.push(authorize(notTo, false));\n }\n\n return authorizationList.every((auth) => auth === true);\n};\n\nconst useAuthorization = (config) => {\n const { matchType = MATCH_TYPES.ALL } = config;\n if (MATCH_HANDLERS[matchType] === undefined) {\n throw new Error(`matchType must be one of: ${Object.keys(MATCH_HANDLERS)}`);\n }\n\n const context = useContext(AuthUserContext);\n if (!context) {\n throw new Error('useAuthorization invoked without AuthUserContext');\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const authorization = context.authorization || {};\n\n return useMemo(\n () => checkAuthorization(config, authorization),\n [config, authorization],\n );\n};\n\nexport default useAuthorization;\n","import React from 'react';\n\nimport { Card, CardSizes, Text } from '@user-interviews/ui-design-system';\n\nimport * as propTypes from 'lib/prop_types';\n\nexport function EmptySurveyNotice({ isPreview }) {\n return (\n <Card size={CardSizes.SMALL}>\n <Text size=\"lg\" textAlign=\"center\" weight=\"bold\">\n The survey for this project is empty\n </Text>\n\n {isPreview && (\n <Text textAlign=\"center\">\n Please fill in at least one question completely in order to preview\n the screener survey.\n </Text>\n )}\n </Card>\n );\n}\n\nEmptySurveyNotice.propTypes = {\n isPreview: propTypes.bool.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n FormControlLabel,\n RadioButton,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\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\nexport function BooleanAnswerInput({\n answer,\n ariaLabel,\n bordered,\n className,\n formValue,\n hasError,\n question,\n text,\n value,\n onBlur,\n onChange,\n}) {\n const checked = answer.id === formValue.answerId;\n\n return (\n <FormControlLabel\n aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n aria-invalid={hasError ? 'true' : null}\n aria-label={ariaLabel}\n bordered={bordered}\n checked={checked}\n className={className}\n Control={RadioButton}\n id={`pick-one-${answer.id}`}\n name={`answer-${answer.id}`}\n text={text}\n value={value}\n onBlur={onBlur}\n onChange={() =>\n onChange({\n ...formValue,\n answerId: answer.id,\n value: answer.text,\n })\n }\n />\n );\n}\n\nBooleanAnswerInput.propTypes = {\n answer: surveyAnswerPropType.isRequired,\n ariaLabel: propTypes.string,\n bordered: propTypes.bool,\n className: propTypes.string,\n formValue: propTypes.shape({\n answerId: propTypes.string,\n }).isRequired,\n hasError: propTypes.bool,\n question: surveyQuestionPropType.isRequired,\n text: propTypes.string,\n value: propTypes.string.isRequired,\n onBlur: propTypes.func.isRequired,\n onChange: propTypes.func.isRequired,\n};\n\nBooleanAnswerInput.defaultProps = {\n bordered: true,\n text: '',\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"HA92JZT6dYLppDUNcg3j\";\nvar _2 = \"x1YStjE3cGRx32ImFmOz\";\nexport { _1 as \"PickManyAnswer\", _2 as \"PickOneAnswer\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { RadioButtonGroup } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { BooleanAnswerInput } from './boolean_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function BooleanAnswerInputGroup({ hasError, question }) {\n const { control } = useFormContext();\n\n const validate = (value) => {\n if (question.isMandatory && value.answerId === null) {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: null }}\n name={`${Constants.BOOLEAN_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, value } }) => (\n <RadioButtonGroup fullWidth>\n {question.answers.map((answer) => (\n <BooleanAnswerInput\n answer={answer}\n checked={answer.id === value.answerId}\n className={styles.PickOneAnswer}\n formValue={value}\n hasError={hasError}\n key={answer.id}\n question={question}\n text={answer.text}\n value={answer.id}\n onBlur={onBlur}\n onChange={onChange}\n />\n ))}\n </RadioButtonGroup>\n )}\n rules={{ validate }}\n />\n );\n}\n\nBooleanAnswerInputGroup.propTypes = {\n hasError: propTypes.bool,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { DateTimePicker } from 'common/deprecated';\n\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function DateAnswerInput({ hasError, question }) {\n const { control } = useFormContext();\n\n const answer = question.answers[0];\n\n const validate = (inputValue) => {\n if (question.isMandatory && inputValue.value.trim() === '') {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: answer.id, value: '' }}\n name={`${Constants.DATE_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { value, onChange } }) => (\n <DateTimePicker\n aria-describedby={\n hasError ? `form-errors-required-${question.id}` : null\n }\n aria-invalid={hasError}\n aria-required={question.isMandatory}\n className=\"form-control\"\n date={value.value}\n dateViewMode=\"years\"\n id={`question-input-${question.id}`}\n showPickerEnforcedInput\n onChangeDate={(event) =>\n onChange({ answerId: answer.id, value: event.startDate })\n }\n />\n )}\n rules={{\n validate,\n }}\n />\n );\n}\n\nDateAnswerInput.propTypes = {\n hasError: propTypes.bool.isRequired,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Input } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function FloatAnswerInput({ hasError, question }) {\n const { control } = useFormContext();\n\n const answer = question.answers[0];\n\n const validate = (inputValue) => {\n if (question.isMandatory && inputValue.value.trim() === '') {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: answer.id, value: '' }}\n name={`${Constants.FLOAT_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, ref } }) => (\n <Input\n aria-describedby={\n hasError ? `form-errors-required-${question.id}` : null\n }\n aria-invalid={hasError}\n aria-required={question.isMandatory}\n className=\"form-control\"\n id={`question-input-${question.id}`}\n ref={ref}\n type=\"number\"\n onBlur={onBlur}\n onChange={(e) =>\n onChange({ answerId: answer.id, value: e.currentTarget.value })\n }\n />\n )}\n rules={{\n validate,\n }}\n />\n );\n}\n\nFloatAnswerInput.propTypes = {\n hasError: propTypes.bool.isRequired,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Input } from '@user-interviews/ui-design-system';\n\nimport { Controller, useFormContext } from 'react-hook-form';\nimport { useTracking } from 'react-tracking';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { hasValidURL } from 'lib/has_valid_url';\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nexport function TextAnswerInput({ hasError, question }) {\n const { control } = useFormContext();\n const { trackEvent } = useTracking();\n\n const answer = question.answers[0];\n const answerType = answer.responseClass;\n const isLongTextAnswer = answerType === Constants.RESPONSE_CLASS_TEXT;\n\n const InputComponent = isLongTextAnswer ? 'textarea' : Input;\n const inputGroupKey = isLongTextAnswer\n ? Constants.LONG_ANSWER_INPUT_GROUP_KEY\n : Constants.SHORT_ANSWER_INPUT_GROUP_KEY;\n\n const sendPasteTrackingEvent = () => {\n trackEvent({\n event: trackingEvents.PARTICIPANT_SURVEY_RESPONSE_ANSWER_TEXT_PASTED,\n question_id: question.id,\n });\n };\n\n const handlePaste = (onChange, value, e) => {\n const pastedContent = e.clipboardData.getData('text');\n\n // Need to check if first the entire input value doesn't have URL and then if the pasted content doesn't have URL\n const wasValidPaste =\n !hasValidURL(e.target.value) && !hasValidURL(pastedContent);\n\n if (wasValidPaste) {\n sendPasteTrackingEvent();\n }\n\n onChange({\n ...value,\n responseDetailAttributes: { wasPasted: wasValidPaste },\n });\n };\n\n const validate = (inputValue) => {\n if (question.isMandatory && inputValue.value.trim() === '') {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: answer.id, value: '' }}\n name={`${inputGroupKey}.q${question.id}`}\n render={({ field: { onBlur, onChange, ref, value } }) => (\n <InputComponent\n aria-describedby={\n hasError ? `form-errors-required-${question.id}` : null\n }\n aria-invalid={hasError}\n aria-required={question.isMandatory}\n className=\"form-control\"\n id={`question-input-${question.id}`}\n ref={ref}\n onBlur={onBlur}\n onChange={(e) =>\n onChange({\n ...value,\n answerId: answer.id,\n value: e.currentTarget.value,\n })\n }\n onPaste={(e) => handlePaste(onChange, value, e)}\n />\n )}\n rules={{\n validate,\n }}\n />\n );\n}\n\nTextAnswerInput.propTypes = {\n hasError: propTypes.bool.isRequired,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { DateAnswerInput } from './date_answer_input';\nimport { FloatAnswerInput } from './float_answer_input';\nimport { TextAnswerInput } from './text_answer_input';\n\nexport function PickNoneInput({ hasError, question, responseClass }) {\n switch (responseClass) {\n case Constants.RESPONSE_CLASS_DATE: {\n return <DateAnswerInput hasError={hasError} question={question} />;\n }\n case Constants.RESPONSE_CLASS_FLOAT: {\n return <FloatAnswerInput hasError={hasError} question={question} />;\n }\n default: {\n return <TextAnswerInput hasError={hasError} question={question} />;\n }\n }\n}\n\nPickNoneInput.propTypes = {\n hasError: propTypes.bool.isRequired,\n question: surveyQuestionPropType.isRequired,\n responseClass: propTypes.string.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n FormControlLabel,\n Input,\n RadioButton,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\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\nexport function PickOneAnswerInput({\n answer,\n ariaLabel,\n bordered,\n className,\n formValue,\n hasError,\n isOtherAnswer,\n question,\n text,\n value,\n onBlur,\n onChange,\n}) {\n const checked = answer.id === formValue.answerId;\n\n return (\n <FormControlLabel\n aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n aria-invalid={hasError ? 'true' : null}\n aria-label={ariaLabel}\n bordered={bordered}\n checked={checked}\n className={className}\n Control={RadioButton}\n id={`pick-one-${answer.id}`}\n name={`answer-${answer.id}`}\n text={text}\n value={value}\n onBlur={onBlur}\n onChange={() =>\n onChange({\n ...formValue,\n answerId: answer.id,\n })\n }\n >\n {isOtherAnswer && checked && (\n <Input\n aria-label=\"Other input\"\n autoComplete=\"off\"\n name={`answer-${answer.id}-other-input`}\n placeholder=\"Type your response here\"\n type=\"text\"\n value={formValue.responseOther}\n onBlur={onBlur}\n onChange={(e) =>\n onChange({ ...formValue, responseOther: e.currentTarget.value })\n }\n />\n )}\n </FormControlLabel>\n );\n}\n\nPickOneAnswerInput.propTypes = {\n answer: surveyAnswerPropType.isRequired,\n ariaLabel: propTypes.string,\n bordered: propTypes.bool,\n className: propTypes.string,\n formValue: propTypes.shape({\n answerId: propTypes.string,\n otherAnswerId: propTypes.string,\n responseOther: propTypes.string,\n }).isRequired,\n hasError: propTypes.bool,\n isOtherAnswer: propTypes.bool,\n\n question: surveyQuestionPropType.isRequired,\n text: propTypes.string,\n value: propTypes.string.isRequired,\n onBlur: propTypes.func.isRequired,\n onChange: propTypes.func.isRequired,\n};\n\nPickOneAnswerInput.defaultProps = {\n bordered: true,\n isOtherAnswer: false,\n text: '',\n};\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport { RadioButtonGroup } from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { PickOneAnswerInput } from './pick_one_answer_input';\nimport { isOtherAnswer } from '../../utils';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function PickOneAnswerInputGroup({ hasError, question }) {\n const { control } = useFormContext();\n\n const otherAnswerId = useMemo(\n () => question.answers.find(isOtherAnswer)?.id,\n [question.answers],\n );\n\n const validate = (value) => {\n if (question.isMandatory && value.answerId === null) {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n if (\n value.answerId === value.otherAnswerId &&\n value.responseOther.trim() === ''\n ) {\n return Constants.REQUIRED_OTHER_VALUE_ERROR_MESSAGE;\n }\n return null;\n };\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: null, otherAnswerId, responseOther: '' }}\n name={`${Constants.PICK_ONE_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, value } }) => (\n <RadioButtonGroup fullWidth>\n {question.answers.map((answer) => (\n <PickOneAnswerInput\n answer={answer}\n checked={answer.id === value.answerId}\n className={styles.PickOneAnswer}\n formValue={value}\n hasError={hasError}\n isOtherAnswer={isOtherAnswer(answer)}\n key={answer.id}\n question={question}\n text={answer.text}\n value={answer.id}\n onBlur={onBlur}\n onChange={onChange}\n />\n ))}\n </RadioButtonGroup>\n )}\n rules={{ validate }}\n />\n );\n}\n\nPickOneAnswerInputGroup.propTypes = {\n hasError: propTypes.bool,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n CheckboxButton,\n FormControlLabel,\n Input,\n} from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType, surveyQuestionPropType } from '../../prop_types';\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\nexport function PickManyAnswerInput({\n answer,\n ariaLabel,\n bordered,\n checked,\n className,\n formValue,\n hasError,\n isOtherAnswer,\n question,\n text,\n value,\n onBlur,\n onChange,\n onFormChange,\n}) {\n return (\n <FormControlLabel\n aria-describedby={hasError ? `form-errors-required-${question.id}` : null}\n aria-invalid={hasError ? 'true' : null}\n aria-label={ariaLabel}\n bordered={bordered}\n checked={checked}\n className={className}\n Control={CheckboxButton}\n id={`pick-many-${answer.id}`}\n name={`answer-${answer.id}`}\n text={text}\n value={value}\n onBlur={onBlur}\n onChange={onChange}\n >\n {isOtherAnswer && checked && (\n <Input\n aria-label=\"Other input\"\n autoComplete=\"off\"\n name={`answer-${answer.id}-other-input`}\n placeholder=\"Type your response here\"\n type=\"text\"\n value={formValue.responseOther}\n onBlur={onBlur}\n onChange={(e) =>\n onFormChange({ ...formValue, responseOther: e.currentTarget.value })\n }\n />\n )}\n </FormControlLabel>\n );\n}\n\nPickManyAnswerInput.propTypes = {\n answer: surveyAnswerPropType.isRequired,\n ariaLabel: propTypes.string,\n bordered: propTypes.bool,\n checked: propTypes.bool,\n className: propTypes.string,\n formValue: propTypes.shape({\n answerIds: propTypes.arrayOf(propTypes.string),\n otherAnswerId: propTypes.string,\n responseOther: propTypes.string,\n }).isRequired,\n hasError: propTypes.bool,\n isOtherAnswer: propTypes.bool,\n question: surveyQuestionPropType.isRequired,\n text: propTypes.string,\n value: propTypes.string.isRequired,\n onBlur: propTypes.func.isRequired,\n onChange: propTypes.func,\n onFormChange: propTypes.func.isRequired,\n};\n\nPickManyAnswerInput.defaultProps = {\n bordered: true,\n checked: true,\n isOtherAnswer: false,\n text: '',\n};\n","import React, { useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n BUTTON_GROUP_ORIENTATIONS,\n CheckboxButtonGroup,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\n\nimport { surveyQuestionPropType } from '../../prop_types';\nimport { isOtherAnswer } from '../../utils';\nimport { PickManyAnswerInput } from './pick_many_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './answer_input.module.scss';\n\nexport function PickManyAnswerInputGroup({ hasError, question }) {\n const { control } = useFormContext();\n\n const validate = (value) => {\n if (question.isMandatory && value.answerIds.length === 0) {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n if (\n value.answerIds.includes(value.otherAnswerId) &&\n value.responseOther.trim() === ''\n ) {\n return Constants.REQUIRED_OTHER_VALUE_ERROR_MESSAGE;\n }\n return null;\n };\n\n const otherAnswerId = useMemo(\n () => question.answers.find(isOtherAnswer)?.id,\n [question.answers],\n );\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerIds: [], otherAnswerId, responseOther: '' }}\n name={`${Constants.PICK_MANY_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, value } }) => (\n <CheckboxButtonGroup\n fullWidth\n orientation={BUTTON_GROUP_ORIENTATIONS.COLUMN}\n value={value.answerIds}\n onChange={(answerIds) => onChange({ ...value, answerIds })}\n >\n {question.answers.map((answer) => (\n <PickManyAnswerInput\n answer={answer}\n className={styles.PickManyAnswer}\n formValue={value}\n hasError={hasError}\n isOtherAnswer={isOtherAnswer(answer)}\n key={answer.id}\n question={question}\n text={answer.text}\n value={answer.id}\n onBlur={onBlur}\n onFormChange={onChange}\n />\n ))}\n </CheckboxButtonGroup>\n )}\n rules={{ validate }}\n />\n );\n}\n\nPickManyAnswerInputGroup.propTypes = {\n hasError: propTypes.bool,\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { BooleanAnswerInputGroup } from './boolean_answer_input_group';\nimport { PickNoneInput } from './pick_none_input';\nimport { PickOneAnswerInputGroup } from './pick_one_answer_input_group';\nimport { PickManyAnswerInputGroup } from './pick_many_answer_input_group';\n\nexport function SurveyAnswerInput({ hasError, question }) {\n const questionType = question.pick;\n\n switch (questionType) {\n // Checkboxes (multi select)\n case Constants.QUESTION_PICK_ANY: {\n return (\n <PickManyAnswerInputGroup hasError={hasError} question={question} />\n );\n }\n case Constants.QUESTION_PICK_NONE: {\n return (\n <PickNoneInput\n hasError={hasError}\n question={question}\n responseClass={question.answers[0].responseClass}\n />\n );\n }\n // Multiple choice (single select)\n case Constants.QUESTION_PICK_ONE: {\n return (\n <PickOneAnswerInputGroup hasError={hasError} question={question} />\n );\n }\n case Constants.QUESTION_BOOLEAN: {\n return (\n <BooleanAnswerInputGroup hasError={hasError} question={question} />\n );\n }\n default:\n return null;\n }\n}\n\nSurveyAnswerInput.propTypes = {\n hasError: propTypes.bool.isRequired,\n question: surveyQuestionPropType.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ILBcxXyXCENPij4UL4fo\";\nvar _2 = \"p6JM4REQqNxlVBlwuAZl\";\nvar _3 = \"Jk2P2vuiHOXpUfGZNswI\";\nvar _4 = \"hRA2Qn6L7rhxr3qIZjpG\";\nvar _5 = \"cbOYS__y6QB6yU24iRLC\";\nvar _6 = \"RSUA73EZ01e8EDJddczA\";\nvar _7 = \"za7SZ17NkDWv9ReSZ3qk\";\nvar _8 = \"JU1e1ADOvP5h7zxfFTAn\";\nvar _9 = \"ObNkJeEE6ThDAj_ZoTDI\";\nvar _a = \"hJpc4s4nS8vUj85nUyI8\";\nvar _b = \"LrtLOowUNvE_DYCR53CJ\";\nvar _c = \"J6809Ro14kPE2cVWP366\";\nvar _d = \"Ek0HgS_Wi2xViEOTuM1b\";\nvar _e = \"vDRS6NLjGcIJ1Fw8awq0\";\nvar _f = \"f7pGGkyu2K8u4OuJ4Rwz\";\nvar _10 = \"n4TFzGqqRCNK8AcQRYQr\";\nvar _11 = \"mAbmWaHsnpt6TBkODFgd\";\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 \"Title\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\nimport { FormGroup } from '@user-interviews/ui-design-system';\nimport { useFormState } from 'react-hook-form';\n\nimport * as Constants from '../constants';\n\nimport { surveyQuestionPropType } from '../prop_types';\nimport { SurveyAnswerInput } from './answer_input_components/survey_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_question_form_group.module.scss';\n\nexport function SurveyQuestionFormGroup({ question }) {\n const { errors } = useFormState();\n\n const questionType = question.pick;\n const answerType = question.answers[0].responseClass;\n\n const inputGroupKey = `${questionType}${answerType}`;\n const inputKey = `q${question.id}`;\n const hasError = !!errors[inputGroupKey]?.[inputKey];\n\n const elementType =\n questionType === Constants.QUESTION_PICK_NONE ? 'div' : 'fieldset';\n\n return (\n <FormGroup\n displayErrorText={hasError}\n elementType={elementType}\n errors={errors[inputGroupKey]}\n helperText={question.helpText}\n id={`question-${question.id}`}\n inputKey={inputKey}\n label={question.text}\n labelClassName={styles.Title}\n labelHtmlFor={`question-input-${question.id}`}\n required={question.isMandatory}\n >\n <SurveyAnswerInput hasError={hasError} question={question} />\n </FormGroup>\n );\n}\n\nSurveyQuestionFormGroup.propTypes = {\n question: surveyQuestionPropType.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"hj9aA5MuoiBtmXhMxSGO\";\nvar _2 = \"oVjoqtCL9b8CXoVMqxk2\";\nvar _3 = \"blQTHBXXn0g_65mEidIL\";\nvar _4 = \"a3OFMZu2lNxoT9774Hmi\";\nvar _5 = \"l6OUXcUK3U9XDnxrg1ta\";\nexport { _1 as \"AnswerTitleCell\", _2 as \"GridQuestion\", _3 as \"InputCell\", _4 as \"QuestionTitleCell\", _5 as \"Title\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function QuestionTitleCell({ title }) {\n return (\n <Flex\n alignItems=\"center\"\n className={styles.QuestionTitleCell}\n container\n justifyContent=\"flex-start\"\n >\n {title}\n </Flex>\n );\n}\n\nQuestionTitleCell.propTypes = {\n title: propTypes.string,\n};\n\nQuestionTitleCell.defaultProps = {\n title: '',\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function AnswerTitleCell({ title }) {\n return (\n <Flex\n alignItems=\"center\"\n className={styles.AnswerTitleCell}\n container\n justifyContent=\"center\"\n >\n {title}\n </Flex>\n );\n}\n\nAnswerTitleCell.propTypes = {\n title: propTypes.string,\n};\n\nAnswerTitleCell.defaultProps = {\n title: '',\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { surveyAnswerPropType } from '../../prop_types';\nimport { QuestionTitleCell } from './row_title_cell';\n\nimport { AnswerTitleCell } from './column_title_cell';\n\nexport function AnswerTitleRow({ answers }) {\n return (\n <Flex alignItems=\"stretch\" container>\n <QuestionTitleCell />\n {answers.map((answer) => (\n <AnswerTitleCell key={`answer-${answer.id}`} title={answer.text} />\n ))}\n </Flex>\n );\n}\n\nAnswerTitleRow.propTypes = {\n answers: propTypes.arrayOf(surveyAnswerPropType).isRequired,\n};\n","import React from 'react';\n\nimport { Controller, useFormContext, useFormState } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\nimport { PickOneAnswerInput } from '../answer_input_components/pick_one_answer_input';\n\nexport function PickOneInputRow({ question }) {\n const { control } = useFormContext();\n const { errors } = useFormState();\n\n const validate = (value) => {\n if (question.isMandatory && value.answerId === null) {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n const inputKey = `q${question.id}`;\n const hasError = !!errors[Constants.PICK_ONE_INPUT_GROUP_KEY]?.[inputKey];\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerId: null }}\n name={`${Constants.PICK_ONE_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, value } }) =>\n question.answers.map((answer) => (\n <PickOneAnswerInput\n answer={answer}\n ariaLabel={`${question.text}-${answer.text}`}\n bordered={false}\n className={styles.InputCell}\n formValue={value}\n hasError={hasError}\n key={answer.id}\n question={question}\n value={answer.id}\n onBlur={onBlur}\n onChange={onChange}\n />\n ))\n }\n rules={{ validate }}\n />\n );\n}\n\nPickOneInputRow.propTypes = {\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\n\nimport {\n BUTTON_GROUP_ORIENTATIONS,\n CheckboxButtonGroup,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useFormContext, useFormState } from 'react-hook-form';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\nimport { PickManyAnswerInput } from '../answer_input_components/pick_many_answer_input';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function PickManyInputRow({ question }) {\n const { control } = useFormContext();\n const { errors } = useFormState();\n\n const validate = (value) => {\n if (question.isMandatory && value.answerIds.length === 0) {\n return Constants.REQUIRED_ERROR_MESSAGE;\n }\n return null;\n };\n\n const inputKey = `q${question.id}`;\n const hasError = !!errors[Constants.PICK_MANY_INPUT_GROUP_KEY]?.[inputKey];\n\n return (\n <Controller\n control={control}\n defaultValue={{ answerIds: [] }}\n name={`${Constants.PICK_MANY_INPUT_GROUP_KEY}.q${question.id}`}\n render={({ field: { onBlur, onChange, value } }) => (\n <CheckboxButtonGroup\n orientation={BUTTON_GROUP_ORIENTATIONS.ROW}\n value={value.answerIds}\n onChange={(answerIds) => onChange({ ...value, answerIds })}\n >\n {question.answers.map((answer) => (\n <PickManyAnswerInput\n answer={answer}\n ariaLabel={`${question.text}-${answer.text}`}\n bordered={false}\n className={styles.InputCell}\n formValue={value}\n hasError={hasError}\n key={answer.id}\n question={question}\n value={answer.id}\n onBlur={onBlur}\n onFormChange={onChange}\n />\n ))}\n </CheckboxButtonGroup>\n )}\n rules={{ validate }}\n />\n );\n}\n\nPickManyInputRow.propTypes = {\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\n\nimport { Flex } from '@user-interviews/ui-design-system';\n\nimport { isPickOneQuestion } from 'lib/surveys/utils';\n\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { PickOneInputRow } from './pick_one_input_row';\nimport { PickManyInputRow } from './pick_many_input_row';\nimport { QuestionTitleCell } from './row_title_cell';\n\nexport function QuestionInputRow({ question }) {\n const isPickOne = isPickOneQuestion(question);\n const InputRow = isPickOne ? PickOneInputRow : PickManyInputRow;\n\n return (\n <Flex alignItems=\"stretch\" container key={question.id}>\n <QuestionTitleCell title={question.text} />\n <InputRow question={question} />\n </Flex>\n );\n}\n\nQuestionInputRow.propTypes = {\n question: surveyQuestionPropType.isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n Flex,\n FormGroup,\n InputLegend,\n} from '@user-interviews/ui-design-system';\nimport { useFormState } from 'react-hook-form';\n\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nimport { isPickOneQuestion } from 'lib/surveys/utils';\n\nimport * as Constants from '../../constants';\nimport { surveyQuestionPropType } from '../../prop_types';\n\nimport { SurveyQuestionFormGroup } from '../survey_question_form_group';\nimport { AnswerTitleRow } from './answer_title_row';\nimport { QuestionInputRow } from './question_input_row';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as styles from './grid_question.module.scss';\n\nexport function GridQuestionFormGroup({ questions, questionGroup }) {\n const { errors } = useFormState();\n const isMobile = useSidebarMobileBreakpoint();\n\n if (isMobile) {\n return (\n <div>\n <InputLegend className={styles.Title} text={questionGroup.text} />\n {questions.map((question) => (\n <SurveyQuestionFormGroup key={question.id} question={question} />\n ))}\n </div>\n );\n }\n\n const isPickOneGrid = isPickOneQuestion(questions[0]);\n const inputGroupKey = isPickOneGrid\n ? Constants.PICK_ONE_INPUT_GROUP_KEY\n : Constants.PICK_MANY_INPUT_GROUP_KEY;\n\n const someQuestionWithError = questions.find((question) => {\n const inputKey = `q${question.id}`;\n return !!errors[inputGroupKey]?.[inputKey];\n });\n\n const gridHasErrors = !!someQuestionWithError;\n\n return (\n <FormGroup\n displayErrorText={gridHasErrors}\n elementType=\"fieldset\"\n errors={errors[inputGroupKey]}\n id={`question-group-${questionGroup.id}`}\n inputKey={`q${someQuestionWithError?.id}`}\n label={questionGroup.text}\n labelClassName={styles.Title}\n required={questionGroup.isMandatory}\n >\n <Flex className={styles.GridQuestion} container flexDirection=\"column\">\n <AnswerTitleRow answers={questions[0].answers} />\n\n {questions.map((question) => (\n <QuestionInputRow key={question.id} question={question} />\n ))}\n </Flex>\n </FormGroup>\n );\n}\n\nGridQuestionFormGroup.propTypes = {\n questionGroup: propTypes.object.isRequired,\n questions: propTypes.arrayOf(surveyQuestionPropType).isRequired,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Card, CardSizes } from '@user-interviews/ui-design-system';\n\nimport {\n QuestionEntityType,\n groupQuestionsByQuestionGroup,\n} from 'lib/surveys/utils';\n\nimport { surveySectionPropType } from '../prop_types';\nimport { SurveyQuestionFormGroup } from './survey_question_form_group';\nimport { SurveySectionLoadingSkeleton } from './survey_section_loading_skeleton';\nimport { GridQuestionFormGroup } from './grid_question_components/grid_question_form_group';\n\nimport * as styles from './survey_section_form_card.module.css';\n\nexport function SurveySectionFormCard({ cardSize, isLoading, surveySection }) {\n return (\n <Card\n className={styles.surveyFormCard}\n isLoading={isLoading}\n loadingSkeleton={<SurveySectionLoadingSkeleton />}\n size={cardSize}\n >\n {surveySection?.questions &&\n groupQuestionsByQuestionGroup(surveySection.questions).map(\n (formQuestion) => {\n if (formQuestion.type === QuestionEntityType.QUESTION_GROUP) {\n return (\n <GridQuestionFormGroup\n key={`questionGroup${formQuestion.questionGroup.id}`}\n questionGroup={formQuestion.questionGroup}\n questions={formQuestion.questions}\n />\n );\n }\n return (\n <SurveyQuestionFormGroup\n key={formQuestion.question.id}\n question={formQuestion.question}\n />\n );\n },\n )}\n </Card>\n );\n}\n\nSurveySectionFormCard.propTypes = {\n cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n isLoading: propTypes.bool.isRequired,\n surveySection: surveySectionPropType,\n};\n\nSurveySectionFormCard.defaultProps = {\n surveySection: null,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"x9Tc9GtCL3e7uWDwKjk1\";\nvar _2 = \"KzlzgutiWZmNk6Dye58k\";\nvar _3 = \"V_xMq6LtZZzIe9PR5nNw\";\nvar _4 = \"ovbRTwL2drd6wWYhZ7Sw\";\nvar _5 = \"_oszdEFGMTYE2OK5IsI8\";\nvar _6 = \"vzN_jBtAT2P9uRcthE3h\";\nvar _7 = \"Vd7cbniNsbpcG4Lb5jr3\";\nvar _8 = \"AUA3ycgVna3BV8BFjkfp\";\nvar _9 = \"EOATJgr5hwkAWK50xCMA\";\nvar _a = \"aD9x7QLAFSRiC4e7jJRd\";\nvar _b = \"Nw99pxwUc9QsdexW0cKF\";\nvar _c = \"d6CLJV_HcHHYHh1XBTzY\";\nvar _d = \"MkwkpMGEpGsnzFMVHJci\";\nvar _e = \"dhzr9_1WaZcuV1Mhgw1g\";\nvar _f = \"GEVPybDvBhfAi0U2czOw\";\nvar _10 = \"loiXLD8kUW2iEPTaByxw\";\nvar _11 = \"BgmFhi6ImB7rIoMVrhaE\";\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 \"SubmitButton\", _c as \"TeamMemberInviterForm__section__invite-via-link\", _d as \"UnmoderatedTask__deadline\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"participant-dashboard__project__info__status__string\", _11 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Button, CardSizes } from '@user-interviews/ui-design-system';\n\nimport { EmptySurveyNotice } from './empty_survey_notice';\nimport { surveySectionPropType } from '../prop_types';\nimport { SurveySectionFormCard } from './survey_section_form_card';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_section_form.module.scss';\n\nexport function SurveySectionForm({\n cardSize,\n isLoading,\n isSubmitting,\n surveySection,\n onSubmit,\n}) {\n const surveyIsEmpty = !(isLoading || isSubmitting || surveySection);\n\n if (surveyIsEmpty) return <EmptySurveyNotice isPreview />;\n\n return (\n <>\n <SurveySectionFormCard\n cardSize={cardSize}\n isLoading={isLoading}\n surveySection={surveySection}\n />\n {!isLoading && (\n <div>\n <Button\n className={styles.SubmitButton}\n disabled={isSubmitting}\n isLoading={isSubmitting}\n loadingText=\"Submitting\"\n onClick={onSubmit}\n >\n Continue\n </Button>\n </div>\n )}\n </>\n );\n}\n\nSurveySectionForm.propTypes = {\n cardSize: propTypes.oneOf(Object.values(CardSizes)).isRequired,\n isLoading: propTypes.bool.isRequired,\n isSubmitting: propTypes.bool.isRequired,\n surveySection: surveySectionPropType,\n onSubmit: propTypes.func.isRequired,\n};\n\nSurveySectionForm.defaultProps = {\n surveySection: null,\n};\n","import React, { createContext, useContext, useMemo } from 'react';\nimport propTypes from 'prop-types';\n\nimport {\n Toast,\n useToast,\n MessageTypes,\n} from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\nimport { connectedCalendarDetailsPropType } from 'components/connect_calendar/prop_types';\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { type SyncTrackingHook } from 'hooks/use_tracking_with_default_dispatch';\n\ntype ProjectWorkspaceProviderProps = {\n children: React.ReactNode;\n\n projectId: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n connectedCalendarDetails?: any;\n serverProject?: {\n isDraft: boolean;\n isPrivate: boolean | null;\n isUnmoderatedTask: boolean | null;\n };\n};\n\ntype ProjectWorkspaceContextType = Omit<\n ProjectWorkspaceProviderProps,\n 'children'\n> & {\n setToastMessage: (options: {\n title?: string;\n type: (typeof MessageTypes)[keyof typeof MessageTypes];\n message: string;\n }) => void;\n};\n\nconst ProjectWorkspaceContext = createContext<ProjectWorkspaceContextType>(\n {} as ProjectWorkspaceContextType,\n);\n\nexport function ProjectWorkspaceProvider({\n children,\n connectedCalendarDetails,\n projectId,\n serverProject,\n}: ProjectWorkspaceProviderProps) {\n const authUserContext = useAuthUserContext();\n const { dismissMessage, messages, setMessage } = useToast();\n\n const { Track } = useTracking({\n eventData: {\n project_id: projectId,\n ...(authUserContext?.account && {\n account_id: authUserContext.account.id,\n }),\n ...(authUserContext?.user && { user_id: authUserContext.user.id }),\n },\n }) as SyncTrackingHook;\n\n const contextValue = useMemo(\n () => ({\n connectedCalendarDetails,\n projectId,\n serverProject,\n setToastMessage: setMessage,\n }),\n [connectedCalendarDetails, projectId, serverProject, setMessage],\n );\n\n return (\n <ProjectWorkspaceContext.Provider value={contextValue}>\n <Toast autoDismiss messages={messages} onToastClosed={dismissMessage} />\n <Track>{children}</Track>\n </ProjectWorkspaceContext.Provider>\n );\n}\n\nProjectWorkspaceProvider.propTypes = {\n connectedCalendarDetails: connectedCalendarDetailsPropType,\n projectId: propTypes.string.isRequired,\n serverProject: propTypes.object,\n};\n\n/**\n * Hook to access the project workspace context.\n *\n * @returns {ProjectWorkspaceContextType} The project workspace context containing:\n * - projectId: The ID of the current project\n * - connectedCalendarDetails: Details about connected calendar integrations\n * - serverProject: Server-side project data including draft/private/unmoderated status\n * - setToastMessage: Function to display toast notifications with title, type and message\n */\nexport function useProjectWorkspaceContext() {\n return useContext(ProjectWorkspaceContext);\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ONzAHOqFKurN8664tjwW\";\nvar _2 = \"j9jIL9pnpe0UwHgLJFkK\";\nvar _3 = \"CpsWnPNGtEunMv4OObmf\";\nexport { _1 as \"Answer\", _2 as \"QuestionGroup\", _3 as \"QuestionTitle\" }\n","import React from 'react';\n\nimport { LoadingSkeleton } from '@user-interviews/ui-design-system';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './survey_section_loading_skeleton.module.scss';\n\nexport const TEST_ID = 'SurveySectionLoadingSkeleton';\n\nconst QUESTION_TITLE_HEIGHT = 14;\nconst QUESTION_TITLE_WIDTH = '40%';\nconst QUESTION_ANSWER_HEIGHT = 54;\nconst QUESTION_ANSWER_WIDTH = '100%';\n\nconst TOTAL_QUESTION_GROUPS = 2;\n\nexport function SurveySectionLoadingSkeleton() {\n return (\n <div data-testid={TEST_ID}>\n {[...Array(TOTAL_QUESTION_GROUPS).keys()].map((key) => (\n <div className={styles.QuestionGroup} key={key}>\n <LoadingSkeleton\n className={styles.QuestionTitle}\n height={QUESTION_TITLE_HEIGHT}\n width={QUESTION_TITLE_WIDTH}\n />\n <LoadingSkeleton\n className={styles.Answer}\n count={2}\n height={QUESTION_ANSWER_HEIGHT}\n width={QUESTION_ANSWER_WIDTH}\n />\n </div>\n ))}\n </div>\n );\n}\n","import * as propTypes from 'lib/prop_types';\n\nexport const surveyAnswerPropType = propTypes.shape({\n displayOrder: propTypes.number,\n id: propTypes.string,\n qualifyLogic: propTypes.string,\n qualifyLogicDisplay: propTypes.string,\n responseClass: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const surveyQuestionPropType = propTypes.shape({\n answers: propTypes.arrayOf(surveyAnswerPropType),\n displayOrder: propTypes.number,\n id: propTypes.string,\n isKey: propTypes.bool,\n isMandatory: propTypes.bool,\n pick: propTypes.string,\n text: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const surveySkipLogicConditionPropType = propTypes.shape({\n answerId: propTypes.string,\n id: propTypes.string,\n operator: propTypes.string,\n questionId: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const surveySkipLogicPropType = propTypes.shape({\n id: propTypes.string,\n joinMethod: propTypes.string,\n skipLogicConditions: propTypes.arrayOf(surveySkipLogicConditionPropType),\n targetSectionId: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const surveySectionPropType = propTypes.shape({\n displayOrder: propTypes.number,\n id: propTypes.string,\n questions: propTypes.arrayOf(surveyQuestionPropType),\n skipLogics: propTypes.arrayOf(surveySkipLogicPropType),\n title: propTypes.string,\n uuid: propTypes.string,\n});\n\nexport const participantScreenerKeyPropType = propTypes.shape({\n key: propTypes.string.isRequired,\n participant_id: propTypes.number.isRequired,\n});\n","/* eslint-disable no-param-reassign */\nimport { createSlice, isAnyOf } from '@reduxjs/toolkit';\n\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport { accountHubConfigurationsApi } from 'api/account_hub_configurations';\n\nimport {\n rearrangeColumnOrder,\n updateHiddenColumns,\n} from 'researcher/participant_search/filtered_view/utils';\n\nconst matchPopulationAttributesFetched = isAnyOf(\n populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst matchAccountHubConfigurationsFetched = isAnyOf(\n accountHubConfigurationsApi.endpoints.getAccountHubConfigurations\n .matchFulfilled,\n);\n\nconst initialState = {\n columnOrder: [],\n hiddenColumns: [],\n populationAttributes: [],\n};\n\nexport const columnConfigurationSlice = createSlice({\n name: 'columnConfiguration',\n initialState,\n reducers: {\n HIDE_ALL_COLUMNS: (state, action) => {\n const { columns } = action.payload;\n\n const columnAccessors = columns.map((column) => column.accessor);\n\n state.hiddenColumns = columnAccessors;\n },\n REORDER_COLUMNS: (state, action) => {\n const { activeAccessor, currentColumnOrder, overAccessor } =\n action.payload;\n\n const reorderedColumns = rearrangeColumnOrder({\n activeAccessor,\n columnOrder: currentColumnOrder,\n overAccessor,\n });\n\n state.columnOrder = reorderedColumns;\n },\n SHOW_ALL_COLUMNS: (state) => {\n state.hiddenColumns = [];\n },\n TOGGLE_HIDDEN_COLUMN: (state, action) => {\n const { hiddenColumns } = state;\n\n const { accessor } = action.payload;\n\n const updatedHiddenColumns = updateHiddenColumns(accessor, hiddenColumns);\n\n state.hiddenColumns = updatedHiddenColumns;\n },\n },\n extraReducers(builder) {\n builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n const populationAttributes = action.payload;\n\n return {\n ...state,\n populationAttributes,\n };\n });\n builder.addMatcher(\n matchAccountHubConfigurationsFetched,\n (state, action) => {\n const columnOrder = action.payload?.settings?.columns.order;\n const hiddenColumns = action.payload?.settings?.columns.hidden || [];\n\n return {\n ...state,\n columnOrder,\n hiddenColumns,\n };\n },\n );\n },\n});\n\nexport const {\n HIDE_ALL_COLUMNS,\n REORDER_COLUMNS,\n SHOW_ALL_COLUMNS,\n TOGGLE_HIDDEN_COLUMN,\n} = columnConfigurationSlice.actions;\n\nexport const columnConfigurationSliceReducer = columnConfigurationSlice.reducer;\n","// eslint-disable-next-line no-restricted-imports\nimport { getCSRFToken } from 'lib/csrf';\n\nimport Jsona from 'jsona';\n\nexport const dataFormatter = new Jsona();\n\nconst ACCEPT_V1_HEADER = 'application/json';\nexport const ACCEPT_V2_HEADER = 'application/vnd.user-interviews.v2';\n\nexport const headersAndCredentials = (accept = ACCEPT_V1_HEADER) => ({\n headers: {\n Accept: accept,\n 'X-Requested-With': 'XMLHTTPRequest',\n 'X-CSRF-Token': getCSRFToken() as string | undefined,\n },\n credentials: 'same-origin' as RequestCredentials,\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const deserializeJSONApiResponse = (response: any) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dataFormatter.deserialize(response) as any;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const deserializeJSONApiResponseWithMeta = (response: any) => {\n const data = dataFormatter.deserialize(response);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return { data: data as any, meta: response.meta as any };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const parseJSONApiResponse = (schema: Zod.Schema) => (response: any) =>\n schema.parse(deserializeJSONApiResponse(response));\n\nexport const parseJSONApiResponseWithMeta =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (schema: Zod.Schema) => (response: any) =>\n schema.parse(deserializeJSONApiResponseWithMeta(response));\n\nconst sortAlphabeticalByKey = <T>(objectArray: T[], key: keyof T) =>\n objectArray.sort((a, b) =>\n (a[key] as string).localeCompare(b[key] as string),\n );\n\nexport const sortAlphabeticalByName = <T>(\n objectArray: Array<T & { name: string }>,\n) => sortAlphabeticalByKey(objectArray, 'name');\n\nexport const sortAlphabeticalByTitle = <T>(\n objectArray: Array<T & { title: string }>,\n) => sortAlphabeticalByKey(objectArray, 'title');\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","export const HUB_INVITE_RULES_HEADER = 'Edit Hub invite rules';\n\nexport const PROJECT_INVITE_LIMIT_TITLE = 'Project invite limits';\n\nexport const PROJECT_INVITE_LIMIT_MIN = 1;\nexport const PROJECT_INVITE_LIMIT_MAX = 99;\n\nexport const PROJECT_INVITE_LIMIT_OUT_OF_RANGE_ERROR = `Project invite limit must be between ${PROJECT_INVITE_LIMIT_MIN} and ${PROJECT_INVITE_LIMIT_MAX}.`;\n\nexport const PROJECT_INVITE_LIMIT_ENABLED_ERROR =\n 'Please enter a number to set your project invite limit.';\n\nexport const PROJECT_INVITE_LIMIT_INPUT_LABEL = 'Project invite multiplier';\nexport const PROJECT_INVITE_LIMIT_ENABLED_LABEL =\n 'Project invite multiplier enabled';\n\nexport const PROJECT_INVITE_LIMIT_TEXT =\n 'Set the maximum number of invites a researcher can send per project to prevent over recruiting. ' +\n \"Invitation limits are set as a multiple of a project's requested participants.\";\nexport const PROJECT_INVITE_LIMIT_LINK_TEXT =\n 'Learn more about invitation limits';\nexport const PROJECT_INVITE_LIMIT_FORM_TEXT =\n 'x number of requested participants on project';\n\nexport const INVITE_FILTER_RULES_TITLE = 'Invite filter rules';\n\nexport const PUBLISH_INVITE_RULES = 'Publish changes';\n\nexport const PUBLISH_INVITE_RULES_SUCCESS_MESSAGE =\n 'Changes to Hub invite rules saved successfully';\nexport const PUBLISH_INVITE_RULES_ERROR_MESSAGE =\n 'There was an error saving Hub invite rules';\n\nexport const UNSUBSCRIBED_FILTER_KEY = 'unsubscribed';\n\nexport const UNSUBSCRIBED_PARTICIPANT_ALERT_MESSAGE =\n 'Unsubscribed participants are automatically excluded from invites.';\n\nexport const MULTI_TEAM_ORG_ALERT_MESSAGE =\n 'Invite rules affect all teams within your organization.';\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\n\nimport { SEGMENTS_TAG } from 'api/tag_types';\nimport {\n deserializeJSONApiResponse,\n headersAndCredentials,\n sortAlphabeticalByName,\n} from 'api/utils';\n\nexport const segmentsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n createSegment: builder.mutation({\n query: ({\n filterParams,\n participantPopulationId,\n teamId,\n populationPanelId,\n teamRoleId,\n }) => {\n // TODO: RS-15240 Update this to use V2 API\n const { filterName, filters } = filterParams;\n const params = {\n filter_name: filterName,\n filters: filters,\n participant_population_id: participantPopulationId,\n team_role_id: teamRoleId,\n ...(populationPanelId\n ? { population_panel_id: populationPanelId }\n : { team_id: teamId }),\n };\n\n return {\n url: routes.create_participant_population_search_filter_path({\n participant_population_id: participantPopulationId,\n }),\n method: 'POST',\n body: params,\n ...headersAndCredentials(),\n };\n },\n invalidatesTags: [SEGMENTS_TAG],\n }),\n deleteSegment: builder.mutation({\n query: ({ populationId, segmentId }) => ({\n url: routes.api_participant_population_segment_path(segmentId, {\n participant_population_id: populationId,\n }),\n method: 'DELETE',\n ...headersAndCredentials(),\n }),\n invalidatesTags: (result, error, { segmentId }) => [\n { type: SEGMENTS_TAG, id: segmentId },\n ],\n }),\n duplicateSegment: builder.mutation({\n query: ({ populationId, segmentId, teamRoleId, attributes }) => ({\n url: routes.api_participant_population_segment_duplicate_path(\n segmentId,\n {\n participant_population_id: populationId,\n team_role_id: teamRoleId,\n },\n ),\n method: 'POST',\n body: { data: { attributes } },\n ...headersAndCredentials(),\n }),\n invalidatesTags: (result, error, { populationId }) => [\n { type: SEGMENTS_TAG, id: populationId },\n ],\n transformResponse: deserializeJSONApiResponse,\n }),\n getSegments: builder.query({\n query: ({ populationId, teamId, populationPanelId }) =>\n routes.api_participant_population_segments_path({\n participant_population_id: populationId,\n ...(populationPanelId\n ? { population_panel_id: populationPanelId }\n : { team_id: teamId }),\n }),\n providesTags: (result, error, { populationId }) => [\n { type: SEGMENTS_TAG, id: populationId },\n ...(result?.data\n ? result.data.map(({ id }) => ({ type: SEGMENTS_TAG, id }))\n : []),\n ],\n transformResponse: (response) => {\n const data = sortAlphabeticalByName(\n deserializeJSONApiResponse(response),\n );\n const { meta } = response;\n return { data, meta };\n },\n }),\n\n updateSegment: builder.mutation({\n query: ({ populationId, segmentId, attributes }) => ({\n url: routes.api_participant_population_segment_path(segmentId, {\n participant_population_id: populationId,\n }),\n method: 'PATCH',\n body: { data: { attributes } },\n ...headersAndCredentials(),\n }),\n invalidatesTags: (result, error, { segmentId }) => [\n { type: SEGMENTS_TAG, id: segmentId },\n ],\n transformResponse: deserializeJSONApiResponse,\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useCreateSegmentMutation,\n useDeleteSegmentMutation,\n useDuplicateSegmentMutation,\n useGetSegmentsQuery,\n useUpdateSegmentMutation,\n} = segmentsApi;\n","import { apiSlice } from 'api/base_slice';\nimport * as routes from 'lib/routes';\nimport {\n deserializeJSONApiResponse,\n headersAndCredentials,\n sortAlphabeticalByTitle,\n} from 'api/utils';\nimport { OPT_IN_FORMS_TAG } from 'api/tag_types';\n\nexport const participantPopulationOptInFormsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getParticipantPopulationOptInForms: builder.query({\n query: (participantPopulationId) =>\n routes.api_participant_population_opt_in_forms_path({\n participant_population_id: participantPopulationId,\n }),\n transformResponse: (response) =>\n sortAlphabeticalByTitle(deserializeJSONApiResponse(response)),\n }),\n createOptInForm: builder.mutation({\n query: ({ participantPopulationId, attributes }) => ({\n url: routes.api_participant_population_opt_in_forms_path(\n participantPopulationId,\n ),\n method: 'POST',\n body: {\n data: {\n attributes,\n },\n },\n ...headersAndCredentials(),\n }),\n transformResponse: deserializeJSONApiResponse,\n invalidatesTags: [OPT_IN_FORMS_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useGetParticipantPopulationOptInFormsQuery,\n useCreateOptInFormMutation,\n} = participantPopulationOptInFormsApi;\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 { createSelector, createSlice, isAnyOf } from '@reduxjs/toolkit';\n\nimport { projectsApi } from 'api/projects';\n\nimport { buildProjectState } from 'researcher/project_workspace/hooks/use_get_project_state';\n\nimport {\n ACTIVITY_STEP,\n DETAILS_STEP,\n EXPERIENCE_STEP,\n RECRUITMENT_STEP,\n} from './constants';\nimport {\n buildActivityStepFields,\n buildDetailsStepFields,\n buildExperienceStepFields,\n buildRecruitmentStepFields,\n} from './store/utils';\n\nexport const STEPS_REQUIRED_FIELDS_SCHEMA = {\n [ACTIVITY_STEP]: buildActivityStepFields,\n [DETAILS_STEP]: buildDetailsStepFields,\n [EXPERIENCE_STEP]: buildExperienceStepFields,\n [RECRUITMENT_STEP]: buildRecruitmentStepFields,\n};\n\nconst matchProjectFetched = isAnyOf(\n projectsApi.endpoints.getProject.matchFulfilled,\n);\n\nconst calculateStepCompletionPercentage = ({\n invalidCount,\n totalRequiredCount,\n}) => {\n if (invalidCount === 0 && totalRequiredCount === 0) {\n return 100;\n }\n\n return Math.round(\n ((totalRequiredCount - invalidCount) / totalRequiredCount) * 100,\n );\n};\n\nconst initializeForm = (stepId) => ({\n stepId,\n});\n\nconst initializePrimaryForm = (stepId) => ({\n ...initializeForm(stepId),\n syncedValues: {},\n isValid: false,\n});\n\nconst initializeStep = (stepId) => ({\n id: stepId,\n forms: {\n primary: initializePrimaryForm(stepId),\n },\n metrics: {\n invalidCount: 0,\n totalRequiredCount: 0,\n },\n});\n\nconst initialState = {\n researchDesign: {\n currentStepId: null,\n steps: {\n [ACTIVITY_STEP]: initializeStep(ACTIVITY_STEP),\n [DETAILS_STEP]: initializeStep(DETAILS_STEP),\n [EXPERIENCE_STEP]: initializeStep(EXPERIENCE_STEP),\n [RECRUITMENT_STEP]: initializeStep(RECRUITMENT_STEP),\n },\n },\n};\n\nexport const projectWorkspaceSlice = createSlice({\n name: 'projectWorkspace',\n initialState,\n /* eslint-disable no-param-reassign */\n reducers: {\n formPrimaryRegister(state, { payload }) {\n const { stepId, defaultValues, isValid } = payload;\n\n state.researchDesign.currentStepId = stepId;\n state.researchDesign.steps[stepId].forms.primary.syncedValues =\n defaultValues;\n state.researchDesign.steps[stepId].forms.primary.isValid = isValid;\n },\n formPrimarySyncState(state, { payload }) {\n const { stepId, values, isValid } = payload;\n\n state.researchDesign.steps[stepId].forms.primary.syncedValues = {\n ...state.researchDesign.steps[stepId].forms.primary.syncedValues,\n ...values,\n };\n state.researchDesign.steps[stepId].forms.primary.isValid = isValid;\n },\n },\n extraReducers(builder) {\n /* the following logic handles updating step progressions after\n a user hits the save button. This general procedure is followed:\n\n 1. watch for any RTK-Q project query to resolve\n 2. grab the invalidLaunchProps from the meta key on the json:api payload\n 3. loop over each step form (primary and drawers) to build our metrics state by\n looking for the intersection between invalid launch props (from the server)\n and required fields for that particular form.\n */\n builder.addMatcher(matchProjectFetched, (state, { payload }) => {\n const { invalidLaunchProps, isDraft } = buildProjectState(payload);\n const { steps } = state.researchDesign;\n\n if (!isDraft || !invalidLaunchProps) return;\n\n Object.entries(steps).forEach(([stepId, step]) => {\n const requiredFieldsFn = STEPS_REQUIRED_FIELDS_SCHEMA[stepId];\n const requiredFields = requiredFieldsFn(payload);\n\n if (requiredFields) {\n step.metrics.totalRequiredCount = requiredFields.length;\n step.metrics.invalidCount = requiredFields.filter((field) =>\n invalidLaunchProps.includes(field),\n ).length;\n }\n });\n });\n },\n /* eslint-enable no-param-reassign */\n});\n\nexport const { formPrimaryRegister, formPrimarySyncState } =\n projectWorkspaceSlice.actions;\n\nconst rootSelector = (state) => state.projectWorkspace;\n\nconst stepsSelector = createSelector(\n rootSelector,\n (state) => state.researchDesign.steps,\n);\n\nexport const currentStepSelector = createSelector(rootSelector, (state) => {\n const { currentStepId, steps } = state.researchDesign;\n return steps[currentStepId];\n});\n\nexport const currentStepFormSelector = createSelector(\n currentStepSelector,\n (currentStep) => currentStep?.forms.primary,\n);\n\nexport const stepMetricsSelector = createSelector(\n stepsSelector,\n (_, stepId) => stepId,\n (steps, stepId) => {\n const { invalidCount, totalRequiredCount } = steps[stepId].metrics;\n\n return {\n completionPercentage: calculateStepCompletionPercentage({\n invalidCount,\n totalRequiredCount,\n }),\n };\n },\n);\n","import { buildProjectState } from 'researcher/project_workspace/hooks/use_get_project_state';\n\n// the following `buildXStepFields` functions help derive the completion percentage\n// of a particular step. I have mapped all relevant model validation error keys\n// e.g. `:foo` from `errors.add(:foo, 'is required')` to the step that manages said field\n\nexport function buildActivityStepFields(projectPayload) {\n const {\n isInPersonInterview,\n isOnlineInterview,\n isUnmoderatedTask,\n studyTypeId,\n } = buildProjectState(projectPayload);\n const fields = [\n 'estimatedTime', // Session length (Mod) || Task length (Unmod)\n 'interviewTypeId',\n 'studyType',\n ];\n\n if (isOnlineInterview) {\n // Prep instructions drawer\n fields.push('deviceRequirements');\n }\n\n if (studyTypeId) {\n if (isUnmoderatedTask) {\n // Deadline\n fields.push('availabilityRanges');\n // Task drawer\n fields.push('task');\n fields.push('timezone');\n } else {\n // Scheduling drawer (Attendance and location)\n fields.push('defaultModeratorId');\n // Scheduling drawer (Attendance and location)\n fields.push('defaultSessionLocation');\n // Scheduling drawer (scheduling rules)\n fields.push('timezone');\n\n if (isInPersonInterview) {\n // Scheduling drawer (Attendance and location)\n fields.push('location');\n // Scheduling drawer (Attendance and location)\n fields.push('locationExtraInfo');\n // Scheduling drawer (Attendance and location)\n fields.push('locationDetail');\n // Scheduling drawer (Attendance and location)\n fields.push('parkingDetails');\n }\n }\n }\n\n return fields;\n}\n\nexport function buildDetailsStepFields(projectPayload) {\n const { compensationMethodId } = projectPayload;\n const fields = ['compensationMethodId', 'numParticipants'];\n\n // account for the fact that compensationInfo errors will only be present\n // once all compensationMethodId errors are satisfied on the backend.\n // HasCompensation#compensation_method_valid\n if (compensationMethodId) {\n fields.push('compensationInfo');\n }\n\n return fields;\n}\n\nexport function buildExperienceStepFields(_projectPayload) {\n return ['publicDescription', 'publicTitle'];\n}\n\nexport function buildRecruitmentStepFields(projectPayload) {\n const { isOnlineInterview, isPhoneInterview, isHubProject } =\n buildProjectState(projectPayload);\n\n const fields = ['sourceType'];\n\n if (isHubProject) return fields;\n\n // survey drawer\n fields.push('surveyDraft');\n\n if (isOnlineInterview || isPhoneInterview) {\n // recruitment drawer\n fields.push('location');\n }\n\n return fields;\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 * as propTypes from 'lib/prop_types';\n\nexport const uUIDPropType = propTypes.string;\n\n// NOTE: This is supposed to encompass a survey passed to SurveyBuilder.\n// This should be what the server passes back to the view, not what the views use internally.\nexport const surveyPropType = propTypes.shape({\n accessCode: propTypes.string,\n answers: propTypes.objectOf(\n propTypes.shape({\n errors: propTypes.objectOf(propTypes.string).isRequired,\n qualifyLogic: propTypes.string,\n responseClass: propTypes.string,\n text: propTypes.string,\n uuid: uUIDPropType.isRequired,\n }),\n ).isRequired,\n errors: propTypes.objectOf(propTypes.string).isRequired,\n questions: propTypes.objectOf(\n propTypes.shape({\n answerIds: propTypes.arrayOf(uUIDPropType),\n errors: propTypes.objectOf(propTypes.string).isRequired,\n helpText: propTypes.string,\n isKey: propTypes.bool,\n isMandatory: propTypes.bool,\n participantPopulationAttributeId: propTypes.oneOfType([\n propTypes.number,\n propTypes.string,\n ]),\n pick: propTypes.string,\n questionIds: propTypes.arrayOf(propTypes.string),\n text: propTypes.string,\n uuid: uUIDPropType.isRequired,\n }),\n ).isRequired,\n sectionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n sections: propTypes.objectOf(\n propTypes.shape({\n errors: propTypes.objectOf(propTypes.string).isRequired,\n questionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n skipLogicIds: propTypes.arrayOf(uUIDPropType).isRequired,\n title: propTypes.string,\n uuid: uUIDPropType.isRequired,\n }),\n ).isRequired,\n skipLogicConditions: propTypes.objectOf(\n propTypes.shape({\n answerId: uUIDPropType,\n errors: propTypes.objectOf(propTypes.string).isRequired,\n operator: propTypes.string,\n questionId: uUIDPropType,\n uuid: uUIDPropType.isRequired,\n }),\n ).isRequired,\n skipLogics: propTypes.objectOf(\n propTypes.shape({\n conditionIds: propTypes.arrayOf(uUIDPropType).isRequired,\n errors: propTypes.objectOf(propTypes.string).isRequired,\n joinMethod: propTypes.string,\n targetSectionId: uUIDPropType,\n uuid: uUIDPropType.isRequired,\n }),\n ).isRequired,\n title: propTypes.string,\n});\n","import propTypes from 'prop-types';\n\nexport const connectedCalendarDetailsPropType = propTypes.shape({\n email: propTypes.string,\n preferences: propTypes.shape({ allowTentativeEvents: propTypes.bool }),\n provider: propTypes.string.isRequired,\n tokenInvalid: propTypes.bool.isRequired,\n tokenUpgradeRequested: propTypes.bool.isRequired,\n});\n"," import {\n createEntityAdapter,\n createSelector,\n createSlice,\n isAnyOf,\n} from '@reduxjs/toolkit';\n\nimport { participantPopulationOptInFormsApi } from 'api/participant_population_opt_in_forms';\n\nimport { populationInviteFiltersApi } from 'api/population_invite_filters';\n\nimport { populationLabelsApi } from 'api/population_labels';\n\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport { segmentsApi } from 'api/segments';\n\nimport { teamProjectsApi } from 'api/team_projects';\n\nimport {\n PROJECT_INVITE_LIMIT_MAX,\n PROJECT_INVITE_LIMIT_MIN,\n} from 'researcher/participant_search/invite_rules_drawer/constants';\n\nimport {\n buildFilterList,\n getDefaultParams,\n getParamKey,\n} from 'researcher/participant_search/segment_builder/lib/filter_list';\n\nimport {\n FILTER_RULE_APPLIED_SECTIONS,\n FILTER_RULE_PENDING_SECTIONS,\n appliedSectionLookup,\n buildFromServerFilterRules,\n hasApplicableFilterRule,\n} from 'researcher/participant_search/segment_builder/lib/filter_utils';\n\nimport { sortAlphabeticalByName } from 'api/utils';\n\nconst adapter = createEntityAdapter();\n\nconst matchPopulationInviteFilterFetched = isAnyOf(\n populationInviteFiltersApi.endpoints.getInviteFilter.matchFulfilled,\n);\n\nconst matchLabelsFetched = isAnyOf(\n populationLabelsApi.endpoints.getPopulationLabels.matchFulfilled,\n);\n\nconst matchOptInFormsFetched = isAnyOf(\n participantPopulationOptInFormsApi.endpoints\n .getParticipantPopulationOptInForms.matchFulfilled,\n);\n\nconst matchPopulationAttributesFetched = isAnyOf(\n populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst matchSegmentsFetched = isAnyOf(\n segmentsApi.endpoints.getSegments.matchFulfilled,\n);\n\nconst matchTeamProjectsFetched = isAnyOf(\n teamProjectsApi.endpoints.getTeamProjects.matchFulfilled,\n);\n\nconst appliedInitialState = {\n filterFlags: {},\n filterKeys: [],\n filterRules: {},\n};\n\nconst pendingInitialState = {\n ...appliedInitialState,\n removedFilterKeys: [],\n};\n\nexport const initialState = {\n filterRules: {\n filters: {},\n applied: {\n [FILTER_RULE_APPLIED_SECTIONS.edit]: appliedInitialState,\n [FILTER_RULE_APPLIED_SECTIONS.inviteFilter]: appliedInitialState,\n [FILTER_RULE_APPLIED_SECTIONS.segment]: appliedInitialState,\n },\n pending: {\n [FILTER_RULE_PENDING_SECTIONS.builder]: pendingInitialState,\n [FILTER_RULE_PENDING_SECTIONS.create]: pendingInitialState,\n [FILTER_RULE_PENDING_SECTIONS.edit]: pendingInitialState,\n [FILTER_RULE_PENDING_SECTIONS.inviteFilter]: pendingInitialState,\n },\n },\n inviteFilter: {\n applied: {},\n pending: {},\n },\n labels: adapter.getInitialState(),\n optInForms: adapter.getInitialState(),\n populationAttributes: adapter.getInitialState(),\n projects: adapter.getInitialState(),\n segments: {\n activeId: null,\n meta: {},\n ...adapter.getInitialState(),\n },\n};\n\nexport const segmentsSlice = createSlice({\n name: 'segments',\n initialState,\n reducers: {\n ADD_FILTER_RULE_PARAM: (state, action) => {\n const { filterKey, filterRuleSection } = action.payload;\n\n const filter = state.filterRules.filters[filterKey];\n const filterRule =\n state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n const newParams = [...filterRule.params];\n\n newParams.push(getDefaultParams(filter.isNotSetOperand));\n\n const newFilter = {\n ...filterRule,\n params: newParams,\n };\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n newFilter;\n },\n CLEAR_FILTERS: (state) => {\n state.segments.activeId = initialState.segments.activeId;\n state.filterRules.applied = initialState.filterRules.applied;\n state.filterRules.pending = initialState.filterRules.pending;\n },\n CREATE_FILTER_RULE: (state, action) => {\n const { filterKey, filterRuleSection } = action.payload;\n\n const filter = state.filterRules.filters[filterKey];\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] = {\n ...filter.defaultFilterRuleShape,\n };\n },\n REMOVE_FILTER_RULE: (state, action) => {\n const { filterKey, filterRuleSection } = action.payload;\n\n const { removedFilterKeys } =\n state.filterRules.pending[filterRuleSection];\n\n if (!removedFilterKeys.includes(filterKey))\n removedFilterKeys.push(filterKey);\n\n state.filterRules.pending[filterRuleSection].removedFilterKeys =\n removedFilterKeys;\n\n delete state.filterRules.pending[filterRuleSection].filterFlags[\n filterKey\n ];\n delete state.filterRules.pending[filterRuleSection].filterRules[\n filterKey\n ];\n\n state.filterRules.pending[filterRuleSection].filterKeys =\n state.filterRules.pending[filterRuleSection].filterKeys.filter(\n (key) => key !== filterKey,\n );\n },\n REMOVE_FILTER_RULE_PARAM: (state, action) => {\n const { filterKey, filterParamKey, filterRuleSection } = action.payload;\n\n const filter = state.filterRules.filters[filterKey];\n const filterRule =\n state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n let newParams = [...filterRule.params];\n\n if (newParams.length === 1) {\n newParams = [getDefaultParams(filter.isNotSetOperand)];\n } else {\n const paramIndex = newParams.findIndex(\n (param) => param.key === filterParamKey,\n );\n newParams.splice(paramIndex, 1);\n }\n\n const newFilterRule = {\n ...filterRule,\n params: newParams,\n };\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n newFilterRule;\n },\n RESET_PENDING_FILTERS: (state, action) => {\n const { filterRuleSection } = action.payload;\n\n state.filterRules.pending[filterRuleSection] = pendingInitialState;\n },\n SELECT_FILTER_RULE: (state, action) => {\n const { activeFilterKey, filterKey, filterRuleSection } = action.payload;\n\n if (activeFilterKey) {\n const activeFilterIndex =\n state.filterRules.pending[filterRuleSection].filterKeys.indexOf(\n activeFilterKey,\n );\n\n if (activeFilterIndex !== -1) {\n state.filterRules.pending[filterRuleSection].filterKeys[\n activeFilterIndex\n ] = filterKey;\n }\n\n delete state.filterRules.pending[filterRuleSection].filterRules[\n activeFilterKey\n ];\n } else {\n state.filterRules.pending[filterRuleSection].filterKeys = [\n ...state.filterRules.pending[filterRuleSection].filterKeys,\n filterKey,\n ];\n }\n },\n SELECT_FILTER_RULE_OPERAND: (state, action) => {\n const { filterKey, filterRuleSection, operand } = action.payload;\n\n const filterRule =\n state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n const newFilterRule = {\n ...filterRule,\n operand: operand.key,\n params: [getDefaultParams(filterRule.isNotSetOperand)],\n };\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n newFilterRule;\n },\n SET_ACTIVE_SEGMENT_ID: (state, action) => {\n const { segmentId } = action.payload;\n\n state.segments.activeId = segmentId;\n },\n SET_APPLIED_FILTER_RULES: (state, action) => {\n const { filterRuleSection, filterRules } = action.payload;\n\n const applied = buildFromServerFilterRules({\n filters: state.filterRules.filters,\n filterRules,\n });\n\n const section = appliedSectionLookup[filterRuleSection];\n\n state.filterRules.applied[section] = {\n ...appliedInitialState,\n filterFlags: applied.filterFlags,\n filterKeys: applied.filterKeys,\n filterRules: applied.filterRules,\n };\n },\n SET_FILTER_RULE: (state, action) => {\n const { filterKey, pendingFilterRule, filterRuleSection } =\n action.payload;\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n pendingFilterRule;\n },\n SET_INVITE_FILTER_ATTRIBUTES: (state, action) => {\n const { attributes } = action.payload;\n\n state.inviteFilter.pending = {\n ...state.inviteFilter.pending,\n ...attributes,\n };\n },\n SET_PENDING_FILTER_RULES: (state, action) => {\n const { filterRules, filterRuleSection } = action.payload;\n\n const pending = buildFromServerFilterRules({\n filters: state.filterRules.filters,\n filterRules,\n });\n\n state.filterRules.pending[filterRuleSection] = {\n ...state.filterRules.pending[filterRuleSection],\n filterFlags: {\n ...state.filterRules.pending[filterRuleSection].filterFlags,\n ...pending.filterFlags,\n },\n filterKeys: {\n ...state.filterRules.pending[filterRuleSection].filterKeys,\n ...pending.filterKeys,\n },\n filterRules: {\n ...state.filterRules.pending[filterRuleSection].filterRules,\n ...pending.filterRules,\n },\n };\n },\n SET_PENDING_FROM_APPLIED: (state, action) => {\n const { filterRuleSection } = action.payload;\n\n const section = appliedSectionLookup[filterRuleSection];\n\n state.filterRules.pending[filterRuleSection] = {\n ...pendingInitialState,\n ...state.filterRules.applied[section],\n };\n },\n SET_PENDING_FROM_SEGMENT: (state, action) => {\n const { segmentId, filterRuleSection } = action.payload;\n\n const { filterRules } = state.segments.entities[segmentId];\n\n const pending = buildFromServerFilterRules({\n filters: state.filterRules.filters,\n filterRules,\n });\n\n const section = appliedSectionLookup[filterRuleSection];\n\n state.filterRules.applied[section] = {\n ...pendingInitialState,\n filterFlags: pending.filterFlags,\n filterKeys: pending.filterKeys,\n filterRules: pending.filterRules,\n };\n\n state.filterRules.pending[filterRuleSection] = {\n ...pendingInitialState,\n filterFlags: pending.filterFlags,\n filterKeys: pending.filterKeys,\n filterRules: pending.filterRules,\n };\n },\n TOGGLE_IS_NOT_SET_CHECKED: (state, action) => {\n const { filterKey, filterRuleSection } = action.payload;\n\n const isNotSetChecked =\n state.filterRules.pending[filterRuleSection].filterFlags[filterKey]\n ?.isNotSetChecked;\n\n state.filterRules.pending[filterRuleSection].filterFlags[filterKey] = {\n isNotSetChecked: !isNotSetChecked,\n isSetChecked: false,\n };\n },\n TOGGLE_IS_SET_CHECKED: (state, action) => {\n const { filterKey, filterRuleSection } = action.payload;\n\n const isSetChecked =\n state.filterRules.pending[filterRuleSection].filterFlags[filterKey]\n ?.isSetChecked;\n\n if (!isSetChecked) {\n state.filterRules.pending[filterRuleSection].filterRules[\n filterKey\n ].params = [{ key: getParamKey() }];\n }\n\n state.filterRules.pending[filterRuleSection].filterFlags[filterKey] = {\n isNotSetChecked: false,\n isSetChecked: !isSetChecked,\n };\n },\n UPDATE_FILTER_RULE_PARAM: (state, action) => {\n const {\n filterKey,\n filterRuleKey,\n paramKey,\n paramValue,\n filterRuleSection,\n } = action.payload;\n\n const filterRule =\n state.filterRules.pending[filterRuleSection].filterRules[filterKey];\n\n const paramIndex = filterRule.params.findIndex(\n (param) => param.key === filterRuleKey,\n );\n\n const newParam = {\n ...filterRule.params[paramIndex],\n [paramKey]: paramValue,\n };\n\n const { params } = filterRule;\n\n params.splice(paramIndex, 1, newParam);\n\n const newFilterRule = {\n ...filterRule,\n params,\n };\n\n state.filterRules.pending[filterRuleSection].filterRules[filterKey] =\n newFilterRule;\n },\n },\n extraReducers(builder) {\n builder.addMatcher(matchPopulationInviteFilterFetched, (state, action) => {\n state.inviteFilter.applied = action.payload;\n state.inviteFilter.pending = action.payload;\n });\n builder.addMatcher(matchLabelsFetched, (state, action) => {\n adapter.setAll(state.labels, action.payload);\n });\n builder.addMatcher(matchOptInFormsFetched, (state, action) => {\n adapter.setAll(state.optInForms, action.payload);\n });\n builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n const populationAttributes = action.payload;\n\n state.filterRules.filters = buildFilterList({ populationAttributes });\n\n adapter.setAll(state.populationAttributes, populationAttributes);\n });\n builder.addMatcher(matchSegmentsFetched, (state, action) => {\n state.segments.meta = action.payload.meta;\n adapter.setAll(state.segments, action.payload.data);\n });\n builder.addMatcher(matchTeamProjectsFetched, (state, action) => {\n adapter.setAll(state.projects, action.payload);\n });\n },\n});\n\nexport const { selectAll: selectAllLabels, selectEntities: selectLabels } =\n adapter.getSelectors((state) => state.segments.labels);\n\nexport const { selectEntities: selectOptInForms } = adapter.getSelectors(\n (state) => state.segments.optInForms,\n);\n\nexport const {\n selectAll: selectAllPopulationAttributes,\n selectIds: selectPopulationAttributeIds,\n} = adapter.getSelectors((state) => state.segments.populationAttributes);\n\nexport const {\n selectEntities: selectSegmentsById,\n selectAll: selectAllSegments,\n selectEntities: selectSegments,\n} = adapter.getSelectors((state) => state.segments.segments);\n\nexport const selectSegmentsByAccessLevel = createSelector(\n [selectSegments],\n (segments) => {\n let privateSegments = [];\n let sharedSegments = [];\n\n Object.values(segments).forEach((segment) => {\n if (\n segment.teamPermissionRoleId ||\n segment.organizationPermissionRoleId\n ) {\n sharedSegments.push(segment);\n } else {\n privateSegments.push(segment);\n }\n });\n\n privateSegments = sortAlphabeticalByName(privateSegments);\n sharedSegments = sortAlphabeticalByName(sharedSegments);\n\n return { privateSegments, sharedSegments };\n },\n);\nexport const selectActiveSegmentId = (state) =>\n state.segments.segments.activeId;\n\nconst selectPendingSections = (state) => state.segments.filterRules.pending;\n\nexport const selectPendingSection = createSelector(\n [selectPendingSections, (_, sectionKey) => sectionKey],\n (pendingSections, sectionKey) => pendingSections[sectionKey],\n);\n\nconst selectAppliedEditSection = (state) =>\n state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.edit];\nconst selectAppliedInviteFilterSection = (state) =>\n state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.inviteFilter];\nexport const selectAppliedSegmentSection = (state) =>\n state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.segment];\nexport const selectAppliedSegmentFilterRules = (state) =>\n state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.segment]\n .filterRules;\n\nexport const selectPersistedFilterRule = createSelector(\n [\n selectAppliedEditSection,\n selectAppliedInviteFilterSection,\n selectAppliedSegmentSection,\n (_, keys) => keys,\n ],\n (\n editAppliedFilterRulesSection,\n inviteFilterAppliedFilterRulesSection,\n segmentFilterAppliedRulesSection,\n keys,\n ) => {\n const { filterRuleSection, filterKey } = keys;\n\n const appliedSectionKey = appliedSectionLookup[filterRuleSection];\n\n switch (appliedSectionKey) {\n case FILTER_RULE_APPLIED_SECTIONS.edit:\n return editAppliedFilterRulesSection.filterRules[filterKey];\n case FILTER_RULE_APPLIED_SECTIONS.inviteFilter:\n return inviteFilterAppliedFilterRulesSection.filterRules[filterKey];\n case FILTER_RULE_APPLIED_SECTIONS.segment:\n return segmentFilterAppliedRulesSection.filterRules[filterKey];\n default:\n return undefined;\n }\n },\n);\n\nexport const selectSegmentRoles = (state) =>\n state.segments.segments.meta?.roles;\n\nexport const selectFilters = (state) => state.segments.filterRules.filters;\n\nexport const selectInviteFilter = (state) =>\n state.segments.inviteFilter.pending;\nexport const selectAppliedInviteFilter = (state) =>\n state.segments.inviteFilter.applied;\n\nconst selectInviteFilterMultiplier = (state) =>\n state.segments.inviteFilter.pending.projectInviteMultiplier;\nconst selectInviteFilterMultiplierEnabled = (state) =>\n state.segments.inviteFilter.pending.projectInviteMultiplierEnabled;\n\nexport const selectAppliedInviteFilterRules = (state) =>\n state.segments.filterRules.applied[FILTER_RULE_APPLIED_SECTIONS.inviteFilter];\nexport const selectInviteFilterRules = (state) =>\n state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.inviteFilter];\n\nexport const selectProjectInviteMultiplierOutOfRange = createSelector(\n [selectInviteFilterMultiplier, selectInviteFilterMultiplierEnabled],\n (projectInviteMultiplier, projectInviteMultiplierEnabled) =>\n projectInviteMultiplierEnabled &&\n Number.isInteger(projectInviteMultiplier) &&\n (projectInviteMultiplier < PROJECT_INVITE_LIMIT_MIN ||\n projectInviteMultiplier > PROJECT_INVITE_LIMIT_MAX),\n);\n\nconst selectPendingCreateFilterFlags = (state) =>\n state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.create]\n .filterFlags;\n\nconst selectPendingCreateFilterRules = (state) =>\n state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.create]\n .filterRules;\n\nconst selectPendingEditFilterFlags = (state) =>\n state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.edit]\n .filterFlags;\n\nconst selectPendingEditFilterRules = (state) =>\n state.segments.filterRules.pending[FILTER_RULE_PENDING_SECTIONS.edit]\n .filterRules;\n\nexport const selectFilterOptions = createSelector([selectFilters], (filters) =>\n Object.values(filters).map((filter) => ({\n custom: !!filter.attribute,\n label: filter.name,\n value: filter.id,\n })),\n);\n\nexport const selectAllFiltersCount = createSelector(\n [selectFilters],\n (filters) => Object.keys(filters).length,\n);\n\nexport const selectActiveSegment = createSelector(\n [selectActiveSegmentId, selectSegments],\n (activeSegmentId, segmentsByIds) => segmentsByIds[activeSegmentId],\n);\n\nexport const selectAppliedFilterCount = createSelector(\n [selectAppliedSegmentFilterRules],\n (filterRules) => Object.keys(filterRules).length,\n);\n\nexport const selectHasApplicableCreateFilterRule = createSelector(\n [selectPendingCreateFilterFlags, selectPendingCreateFilterRules],\n (filterFlags, filterRules) =>\n hasApplicableFilterRule({ filterFlags, filterRules }),\n);\n\nexport const selectHasApplicableEditFilterRule = createSelector(\n [selectPendingEditFilterFlags, selectPendingEditFilterRules],\n (filterFlags, filterRules) =>\n hasApplicableFilterRule({ filterFlags, filterRules }),\n);\n\nexport const selectSegmentName = createSelector(\n [selectSegments, (_, segmentId) => segmentId],\n (segmentsById, segmentId) => segmentsById[segmentId]?.name,\n);\n\nexport const {\n ADD_FILTER_RULE_PARAM,\n CLEAR_FILTERS,\n CREATE_FILTER_RULE,\n REMOVE_FILTER_RULE,\n REMOVE_FILTER_RULE_PARAM,\n RESET_PENDING_FILTERS,\n SELECT_FILTER_RULE,\n SELECT_FILTER_RULE_OPERAND,\n SET_ACTIVE_SEGMENT_ID,\n SET_APPLIED_FILTER_RULES,\n SET_FILTER_RULE,\n SET_INVITE_FILTER_ATTRIBUTES,\n SET_PENDING_FILTER_RULES,\n SET_PENDING_FROM_APPLIED,\n SET_PENDING_FROM_SEGMENT,\n TOGGLE_IS_NOT_SET_CHECKED,\n TOGGLE_IS_SET_CHECKED,\n UPDATE_FILTER_RULE_PARAM,\n} = segmentsSlice.actions;\n\nexport const segmentsSliceReducer = segmentsSlice.reducer;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"BROB9Yo2nFE47axfpsAx\";\nvar _2 = \"UUEzPnYiATQ5IF6StQKq\";\nvar _3 = \"pcJwfHGdEyrbjvovspFb\";\nvar _4 = \"HBQO9q8a1PNOhlhvMKr1\";\nvar _5 = \"O0S3WqYj6DWNKlC09rNH\";\nvar _6 = \"fExsf5t68PD4C61oWaCX\";\nexport { _1 as \"description\", _2 as \"descriptionAccordionCollapse\", _3 as \"header\", _4 as \"logo\", _5 as \"logoContainer\", _6 as \"title\" }\n","import {\n Accordion,\n AccordionCollapse,\n AccordionItem,\n AccordionToggle,\n Button,\n Card,\n Flex,\n Heading,\n Text,\n} from '@user-interviews/ui-design-system';\nimport * as routes from 'lib/routes';\nimport React from 'react';\n\nimport sanitizeHtml from 'sanitize-html';\nimport * as styles from './header.module.css';\n\ntype HeaderProps = {\n isPreview?: boolean;\n logoOnly: boolean;\n logoUrl: string;\n optInFormDescription?: string;\n optInFormTitle?: string;\n teamName: string;\n};\n\nexport function Header({\n isPreview = false,\n logoOnly = false,\n logoUrl,\n optInFormDescription,\n optInFormTitle,\n teamName,\n}: HeaderProps) {\n const title = optInFormTitle || 'Sign up to participate in user research';\n\n const description =\n optInFormDescription ||\n 'Please fill out the information below to provide valuable' +\n ' feedback on our products and services.';\n\n return (\n <div className={styles.header}>\n {logoUrl && (\n <Flex\n alignItems=\"center\"\n className={styles.logoContainer}\n container\n flexDirection=\"column\"\n >\n <img alt={`${teamName} logo`} className={styles.logo} src={logoUrl} />\n {isPreview && (\n <Button href={routes.team_branding_path()} variant=\"link\">\n Edit team logo\n </Button>\n )}\n </Flex>\n )}\n\n {!logoOnly && (\n <>\n <Heading\n className={styles.title}\n level={1}\n size=\"xxxl\"\n textAlign=\"center\"\n >\n {title}\n </Heading>\n\n <Card noPadding size=\"sm\">\n <Accordion defaultActiveKey=\"0\" flush>\n <AccordionItem borderless eventKey=\"0\">\n <AccordionToggle eventKey=\"0\" title=\"Description\" />\n <AccordionCollapse\n eventKey=\"0\"\n UNSAFE_className={styles.descriptionAccordionCollapse}\n >\n <Text\n className={styles.description}\n dangerouslySetInnerHTML={{\n __html: sanitizeHtml(description),\n }}\n size=\"md\"\n />\n </AccordionCollapse>\n </AccordionItem>\n </Accordion>\n </Card>\n </>\n )}\n </div>\n );\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { FEATURE_FLAG_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse } from 'api/utils';\n\nexport const featureFlagApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getFeatureFlag: builder.query({\n query: ({ actorType, customProperties, featureName, sendTracking }) => ({\n method: 'GET',\n url: routes.api_feature_flag_path(featureName, {\n actorType,\n customProperties,\n sendTracking,\n }),\n }),\n transformResponse: deserializeJSONApiResponse,\n providesTags: (_, __, { featureName }) => [\n { type: FEATURE_FLAG_TAG, id: featureName },\n ],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useGetFeatureFlagQuery } = featureFlagApi;\n","import { Features } from 'lib/generated_constants/features';\nimport { useGetFeatureFlagQuery } from 'api/feature_flag';\n\n/*\n * There are situations where we may want to set a feature flag within a controller\n * instead of fetching from the api, as it gives the frontend the ability to immediately\n * reason about the flag's state (potentially useful for high level conditional rendering),\n * whereas fetching via the api will always have a bit of latency.\n *\n * To set this up in a controller add FeaturesConcern to your controller and\n * call set_feature_check before rendering. This will insert it into the window\n * via app/views/shared/_js_features.html.erb\n *\n * Note that this only supports features documented in app/services/features/flipper.rb\n *\n * While this does work, if you're looking for the new hotness you can add these\n * flags to the RailsContext in config/initializers/react_on_rails.rb and fetch it from\n * app/javascript/hooks/use_rails_context.tsx. An example of this can be found at\n * https://github.com/user-interviews/rails-server/pull/27742/files\n */\n\nconst Actors = {\n Account: 'Account',\n MixpanelUser: 'MixpanelUser',\n Organization: 'Organization',\n Participant: 'Participant',\n Team: 'Team',\n User: 'User',\n};\n\nfunction useFeatureFlag({\n customProperties = {},\n featureName,\n actorType,\n sendTracking,\n}) {\n if (!Object.values(Features).includes(featureName)) {\n throw new TypeError(`Received unexpected feature: ${featureName}`);\n }\n\n // When the featureName is already present in window.FEATURES, this means that\n // set_feature_check has been called in a corresponding view controller.\n // If that is the case, we can skip the redundant API request and just return that state.\n const isFeatureCheckAlreadyPresent = Object.keys(\n window.FEATURES || {},\n ).includes(featureName);\n\n const {\n data: { isEnabled: isEnabledViaApi } = {},\n isLoading: isGetFeatureFlagLoading,\n } = useGetFeatureFlagQuery(\n { actorType, customProperties, featureName, sendTracking },\n { skip: isFeatureCheckAlreadyPresent },\n );\n\n const isEnabled = isFeatureCheckAlreadyPresent\n ? window.FEATURES[featureName]\n : isEnabledViaApi;\n\n return {\n isLoading: isFeatureCheckAlreadyPresent ? false : isGetFeatureFlagLoading,\n isEnabled,\n };\n}\n\nexport { Actors, Features, useFeatureFlag };\n","import equal from 'fast-deep-equal/es6';\n\nimport {\n INCENTIVE_IS_NOT_SET_OPERAND,\n INCENTIVE_IS_SET_OPERAND,\n PROJECT_OPERANDS,\n OPT_IN_FORM_OPERANDS,\n OR_IS_NOT_SET_PARAM_KEY,\n} from 'lib/generated_constants/filters_constants';\n\nimport { QueryString } from 'lib/http';\nimport { FILTER_KEYS, defaultLabelOperand, getParamKey } from './filter_list';\n\nconst OPTIONAL_ROW_PARAM_KEYS = [\n OR_IS_NOT_SET_PARAM_KEY,\n 'yearCeiling',\n 'yearFloor',\n];\n\nconst EMPTY_INCENTIVE_OPERANDS = [\n INCENTIVE_IS_NOT_SET_OPERAND,\n INCENTIVE_IS_SET_OPERAND,\n];\n\nexport const INVITE_FILTER_HIDDEN_FIELDS = [\n FILTER_KEYS.labels,\n FILTER_KEYS.project_participation,\n];\n\nexport const PII_HIDDEN_FIELDS = [\n FILTER_KEYS.email,\n FILTER_KEYS.last_name,\n FILTER_KEYS.phone_number,\n];\n\nexport const FILTER_RULE_APPLIED_SECTIONS = {\n edit: 'edit',\n inviteFilter: 'inviteFilter',\n segment: 'segment',\n};\n\nexport const FILTER_RULE_PENDING_SECTIONS = {\n builder: 'builder',\n create: 'create',\n edit: 'edit',\n inviteFilter: 'inviteFilter',\n};\n\nexport const appliedSectionLookup = {\n [FILTER_RULE_PENDING_SECTIONS.builder]: FILTER_RULE_APPLIED_SECTIONS.segment,\n [FILTER_RULE_PENDING_SECTIONS.create]: FILTER_RULE_APPLIED_SECTIONS.segment,\n [FILTER_RULE_PENDING_SECTIONS.edit]: FILTER_RULE_APPLIED_SECTIONS.edit,\n [FILTER_RULE_PENDING_SECTIONS.inviteFilter]:\n FILTER_RULE_APPLIED_SECTIONS.inviteFilter,\n};\n\nexport const getIsInviteFilter = (filterRuleSection) =>\n filterRuleSection === FILTER_RULE_PENDING_SECTIONS.inviteFilter;\n\nexport const defaultLabelFilterOperandKey = defaultLabelOperand.key;\n\nconst getKeylessParams = (params) => {\n const keylessParams = [];\n\n [...params].forEach((param) => {\n const newParam = { ...param };\n delete newParam.key;\n keylessParams.push(newParam);\n });\n\n return keylessParams;\n};\n\nexport const buildLabelFilterRule = (labelIds = []) => ({\n operand: defaultLabelFilterOperandKey,\n params: [{ ids: labelIds }],\n});\n\nconst getProjectFilterKey = (jsonRule) => {\n const operandKeys = PROJECT_OPERANDS.map((operand) => operand.key);\n\n if (operandKeys.includes(jsonRule.operand))\n return FILTER_KEYS.project_participation;\n\n return undefined;\n};\n\nconst getOptInFormFilterKey = (jsonRule) => {\n const operandKeys = OPT_IN_FORM_OPERANDS.map((operand) => operand.key);\n\n if (operandKeys.includes(jsonRule.operand)) return FILTER_KEYS.opt_in_form;\n\n return undefined;\n};\n\nconst getIncentiveFilterKey = (jsonRule) => {\n if (jsonRule.operand.match(/^incentive/)) return FILTER_KEYS.yearly_payment;\n\n return undefined;\n};\n\nconst getParticipantLabelFilterKey = (jsonRule) => {\n if (jsonRule.operand.match(/^participant_label_has_any/))\n return FILTER_KEYS.labels;\n\n return undefined;\n};\n\nexport const getFilterKeyFromJsonRule = (jsonRule) =>\n jsonRule.participantPopulationAttributeId ||\n jsonRule.activityStat ||\n jsonRule.field ||\n getIncentiveFilterKey(jsonRule) ||\n getProjectFilterKey(jsonRule) ||\n getOptInFormFilterKey(jsonRule) ||\n getParticipantLabelFilterKey(jsonRule);\n\nexport const buildFromServerFilterRules = ({ filters, filterRules }) => {\n const appliedFilterRules = filterRules.reduce((acc, appliedFilterRule) => {\n acc[getFilterKeyFromJsonRule(appliedFilterRule)] = appliedFilterRule;\n\n return acc;\n }, {});\n\n const appliedFilterKeys = Object.keys(appliedFilterRules);\n\n const appliedFilterFlags = appliedFilterKeys.reduce((acc, filterKey) => {\n const appliedFilterRule = appliedFilterRules[filterKey];\n const filter = filters[filterKey];\n\n if (filter && appliedFilterRule) {\n const { operand, params } = appliedFilterRule;\n\n const { isNotSetOperand, isSetOperand } = filter;\n\n const orIsNotSetParams = params?.some((param) => param.orIsNotSet);\n\n acc[filterKey] = {\n isNotSetChecked: !!(operand === isNotSetOperand || orIsNotSetParams),\n isSetChecked: operand === isSetOperand,\n };\n }\n\n return acc;\n }, {});\n\n const keyedAppliedFilterRules = {};\n\n appliedFilterKeys.forEach((appliedFilterKey) => {\n const isSetChecked = appliedFilterFlags[appliedFilterKey]?.isSetChecked;\n const isNotSetOperand = filters[appliedFilterKey]?.isNotSetOperand;\n const isIsNotSetOperand =\n appliedFilterRules[appliedFilterKey].operand === isNotSetOperand;\n const defaultOperand =\n filters[appliedFilterKey]?.defaultFilterRuleShape.operand;\n const operand =\n isSetChecked || isIsNotSetOperand\n ? defaultOperand\n : appliedFilterRules[appliedFilterKey].operand;\n\n keyedAppliedFilterRules[appliedFilterKey] = {\n ...appliedFilterRules[appliedFilterKey],\n operand,\n params: [...appliedFilterRules[appliedFilterKey].params].map((param) => ({\n ...param,\n key: getParamKey(),\n })),\n };\n });\n\n return {\n filterFlags: appliedFilterFlags,\n filterKeys: appliedFilterKeys,\n filterRules: keyedAppliedFilterRules,\n };\n};\n\n// This is expected to return true if any values, including booleans, are set.\nexport const getHasValueSet = (param) => {\n const {\n ceiling,\n days,\n endAt,\n endDate,\n floor,\n ids,\n projectId,\n startAt,\n startDate,\n value,\n } = param;\n\n // Due to value possibly being false it needs to be last option\n const valueToCheck =\n ceiling ||\n days ||\n endAt ||\n endDate ||\n floor ||\n ids ||\n projectId ||\n startAt ||\n startDate ||\n value;\n\n return (\n valueToCheck !== null &&\n valueToCheck !== undefined &&\n valueToCheck.toString().trim() !== ''\n );\n};\n\nexport const hasValueSet = (params) =>\n params.some((param) => getHasValueSet(param));\n\nexport const hasApplicableFilterRule = ({ filterFlags, filterRules }) =>\n Object.keys(filterRules).some(\n (filterKey) =>\n filterFlags[filterKey]?.isNotSetChecked ||\n filterFlags[filterKey]?.isSetChecked ||\n EMPTY_INCENTIVE_OPERANDS.includes(filterRules[filterKey].operand) ||\n hasValueSet(filterRules[filterKey].params),\n );\n\nconst preparePendingFilterRule = ({\n filterFlags,\n pendingFilterRule,\n isNotSetOperand,\n isSetOperand,\n}) => {\n const preparedRule = { ...pendingFilterRule };\n\n const emptyParams = [{}];\n\n if (filterFlags?.isSetChecked) {\n preparedRule.params = emptyParams;\n preparedRule.operand = isSetOperand;\n } else if (filterFlags?.isNotSetChecked) {\n if (\n !hasValueSet(preparedRule.params) ||\n preparedRule.operand === isSetOperand\n ) {\n preparedRule.operand = isNotSetOperand;\n preparedRule.params = emptyParams;\n } else {\n preparedRule.params = pendingFilterRule.params.map((param) => ({\n ...param,\n orIsNotSet: true,\n }));\n }\n } else if (hasValueSet(preparedRule.params)) {\n if (isNotSetOperand) {\n preparedRule.params = pendingFilterRule.params.map((param) => ({\n ...param,\n orIsNotSet: false,\n }));\n }\n } else if (!EMPTY_INCENTIVE_OPERANDS.includes(preparedRule.operand)) {\n return null;\n }\n\n preparedRule.params = getKeylessParams(preparedRule.params);\n\n return preparedRule;\n};\n\nexport const buildFilterRulesToApply = ({\n filterFlags,\n filters,\n pendingFilterRules,\n}) =>\n Object.keys(pendingFilterRules).reduce((acc, filterKey) => {\n const filterRule = preparePendingFilterRule({\n filterFlags: filterFlags[filterKey],\n pendingFilterRule: pendingFilterRules[filterKey],\n isNotSetOperand: filters[filterKey].isNotSetOperand,\n isSetOperand: filters[filterKey].isSetOperand,\n });\n\n if (filterRule) acc[filterKey] = filterRule;\n\n return acc;\n }, {});\n\nexport const encodeFilterRules = (filterRules) =>\n QueryString.base64Encode(Object.values(filterRules));\n\nexport const hasSegmentChanged = ({\n activeSegmentId,\n segmentsById,\n appliedFilterRules,\n}) => {\n if (!activeSegmentId) return false;\n\n const activeSegment = segmentsById[activeSegmentId];\n\n if (!activeSegment) return false;\n\n const { filterRules } = segmentsById[activeSegmentId];\n\n const appliedFilterKeys = Object.keys(appliedFilterRules);\n\n if (appliedFilterKeys.length !== filterRules.length) return true;\n\n return filterRules.some((filterRule) => {\n const filterKey = getFilterKeyFromJsonRule(filterRule);\n\n const appliedFilterRule = appliedFilterRules[filterKey];\n\n if (!appliedFilterRule) return true;\n\n const keylessAppliedFilterRule = {\n ...appliedFilterRule,\n params: getKeylessParams(appliedFilterRule.params),\n };\n\n if (!equal(keylessAppliedFilterRule, filterRule)) return true;\n\n return false;\n });\n};\n\nexport const getRowParams = (operand) => {\n const params = Object.keys(operand.params)\n .filter((param) => !OPTIONAL_ROW_PARAM_KEYS.includes(param))\n .reduce((parsedParams, paramKey) => {\n // Params either map directly to their type (string value) or to a more complex structure\n // so we will unify them into one object interface every time the operand is set\n const paramValue = operand.params[paramKey];\n\n let parsedParam;\n if (paramValue instanceof Object) {\n parsedParam = {\n attributes: {},\n label: undefined,\n ...paramValue,\n key: paramKey,\n };\n } else {\n parsedParam = {\n attributes: {},\n label: undefined,\n key: paramKey,\n type: paramValue,\n };\n }\n\n return {\n ...parsedParams,\n [paramKey]: parsedParam,\n };\n }, {});\n\n // Will only ever be one param object\n return Object.values(params)[0] || {};\n};\n","import type { ReactElement } from 'react';\n\nimport React from 'react';\nimport { BrowserRouter, StaticRouter } from 'react-router';\nimport { isServer } from 'lib/ssr_utils';\n\nexport function DopeBrowserRouter({\n location,\n children,\n}: {\n location: string;\n children: ReactElement;\n}) {\n if (isServer) {\n return <StaticRouter location={location}>{children}</StaticRouter>;\n }\n\n return <BrowserRouter>{children}</BrowserRouter>;\n}\n","import React from 'react';\nimport { shouldIgnoreTurnstileError } from 'lib/telemetry/ignore_errors';\nimport { Turnstile } from '@marsidev/react-turnstile';\nimport { useEnvVars } from 'hooks/use_env_vars';\n\ntype CloudflareTurnstileProps = {\n onSuccess: () => void;\n};\n\nexport function CloudflareTurnstile({\n onSuccess = () => {},\n}: CloudflareTurnstileProps) {\n const { cloudflareTurnstileCaptchaSiteKey } = useEnvVars();\n\n const handleError = (code: string) => shouldIgnoreTurnstileError(code);\n\n return (\n <Turnstile\n siteKey={cloudflareTurnstileCaptchaSiteKey || ''}\n onError={handleError}\n onSuccess={onSuccess}\n />\n );\n}\n","import React from 'react';\n\nimport {\n Input,\n InputLabel,\n SingleSelect,\n} from '@user-interviews/ui-design-system';\n\nimport * as propTypes from 'lib/prop_types';\nimport { CountriesByCode } from 'lib/generated_constants/countries';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './phone_number.scss';\n\nconst SELECT_OPTIONS = Object.keys(CountriesByCode).map((code) => {\n const phoneCode = CountriesByCode[code].phone_code;\n const countryName = CountriesByCode[code].name;\n\n let formattedCountryName = `${countryName}`;\n if (phoneCode) formattedCountryName += ` (+${phoneCode})`;\n\n const label = `${code} - ${formattedCountryName}`;\n\n return { label, value: code };\n});\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\nexport function PhoneNumber({\n className,\n countryCode,\n disabled,\n hideLabels,\n labelClassName,\n phoneNumber,\n required,\n onCountryCodeChange,\n onPhoneNumberChange,\n}) {\n const countryCodeAria = {\n label: countryCode.labelText || 'Country code',\n };\n\n const phoneNumberAria = {\n label: phoneNumber.labelText || 'Phone number',\n };\n\n const isPhoneNumberOrCountryCodeErrorPresent =\n phoneNumber.phoneNumberErrorPresent ||\n countryCode.phoneCountryCodeErrorPresent;\n\n const getDefaultCountryCodeInput = () =>\n SELECT_OPTIONS.find(({ value }) => value === countryCode.defaultValue);\n\n const handleCountryCodeChange = (option) => {\n const value = option ? option.value : null;\n\n if (onCountryCodeChange) {\n onCountryCodeChange({ name: countryCode.name, value });\n }\n };\n\n const handlePhoneNumberChange = ({ target: { value } }) => {\n if (onPhoneNumberChange) {\n onPhoneNumberChange({ name: phoneNumber.name, value });\n }\n };\n\n return (\n <div className={`PhoneNumber ${className || ''}`}>\n <div className=\"PhoneNumber__country-code\">\n {!hideLabels && (\n <InputLabel\n className={`${labelClassName || ''}`}\n labelHelperText={countryCode.optional && 'Optional'}\n labelHtmlFor=\"country-code\"\n required={required}\n text={countryCodeAria.label}\n />\n )}\n <SingleSelect\n defaultValue={getDefaultCountryCodeInput()}\n disabled={disabled}\n inputId=\"country-code\"\n isClearable\n isSearchable\n name={countryCode.name}\n options={SELECT_OPTIONS}\n placeholder={countryCode.placeholder}\n onChange={handleCountryCodeChange}\n />\n </div>\n\n <div className=\"PhoneNumber__phone-number\">\n {!hideLabels && (\n <InputLabel\n className={`${labelClassName || ''}`}\n labelHelperText={phoneNumber.optional && 'Optional'}\n labelHtmlFor=\"phone-number\"\n required={required}\n text={phoneNumberAria.label}\n />\n )}\n <Input\n aria-describedby={\n isPhoneNumberOrCountryCodeErrorPresent ? 'phone-error' : null\n }\n aria-invalid={isPhoneNumberOrCountryCodeErrorPresent}\n defaultValue={phoneNumber.defaultValue}\n disabled={disabled}\n id=\"phone-number\"\n name={phoneNumber.name}\n placeholder={phoneNumber.placeholder}\n required={required}\n type=\"tel\"\n onChange={handlePhoneNumberChange}\n />\n </div>\n </div>\n );\n}\n\nPhoneNumber.propTypes = {\n className: propTypes.string,\n countryCode: propTypes.shape({\n defaultValue: propTypes.string,\n labelText: propTypes.string,\n name: propTypes.string,\n optional: propTypes.bool,\n phoneCountryCodeErrorPresent: propTypes.bool,\n placeholder: propTypes.string,\n }),\n disabled: propTypes.bool,\n hideLabels: propTypes.bool,\n labelClassName: propTypes.string,\n phoneNumber: propTypes.shape({\n defaultValue: propTypes.string,\n labelText: propTypes.oneOfType([propTypes.string, propTypes.element]),\n name: propTypes.string,\n optional: propTypes.bool,\n phoneNumberErrorPresent: propTypes.bool,\n placeholder: propTypes.string,\n }),\n required: propTypes.bool,\n onCountryCodeChange: propTypes.func,\n onPhoneNumberChange: propTypes.func,\n};\n\nPhoneNumber.defaultProps = {\n countryCode: {},\n disabled: false,\n hideLabels: false,\n phoneNumber: {},\n required: false,\n};\n","export const ACCESS_GRANTS_TAG = 'AccessGrants';\nexport const ACCOUNT_AVAILABILITY_SETTINGS_TAG = 'AccountAvailabilitySettings';\nexport const ACCOUNT_CHECKLIST_TAG = 'AccountChecklist';\nexport const ACCOUNT_COLLABORATORS_TAG = 'AccountCollaborators';\nexport const ACCOUNT_HUB_CONFIGURATIONS = 'AccountHubConfigurations';\nexport const ACCOUNT_INTEGRATIONS_TAG = 'AccountIntegrations';\nexport const ACCOUNT_PROJECT_TASK_EVENTS_TAG = 'AccountProjectTaskEvents';\nexport const ACCOUNT_PROJECTS_TAG = 'AccountProjects';\nexport const ACCOUNT_SIGNUP_INFO_TAG = 'AccountSignupInfo';\nexport const ACCOUNTS_TAG = 'Accounts';\nexport const ACCOUNT_TEAMS_TAG = 'AccountTeams';\nexport const BULK_EMAIL_TAG = 'BulkEmail';\nexport const COMMENTERS_TAG = 'Commenters';\nexport const COMMENTS_TAG = 'Comments';\nexport const DATA_JOB_TAG = 'DataJob';\nexport const PROJECT_AVAILABILITY_RANGES_TAG = 'ProjectAvailabilityRanges';\nexport const DEFAULT_SESSION_ROLES_TAG = 'DefaultSessionRoles';\nexport const DOPE_TABLE_COLUMNS_TAG = 'DopeTableColumns';\nexport const EMAIL_DOMAINS_TAG = 'EmailDomains';\nexport const EMAIL_PROFILE_TAG = 'EmailProfile';\nexport const EMAIL_THEME_TAG = 'EmailTheme';\nexport const FEATURE_FLAG_TAG = 'FeatureFlag';\nexport const OPEN_RECRUIT_PERIOD_TAG = 'OpenRecruitPeriod';\nexport const OPT_IN_FORMS_TAG = 'OptInForms';\nexport const PROJECT_COLLABORATOR_CALENDAR_EVENTS_TAG =\n 'ProjectCollaboratorCalendarEvents';\nexport const ORGANIZATION_ACCOUNTS_TAG = 'OrganizationAccounts';\nexport const ORGANIZATION_EMAIL_THEMES_TAG = 'OrganizationEmailThemes';\nexport const ORGANIZATION_PARTICIPANTS_TAG = 'OrganizationParticipants';\nexport const ORGANIZATION_POPULATION_PANELS_TAG =\n 'OrganizationPopulationPanels';\nexport const ORGANIZATION_PROJECT_CUSTOM_EMAIL_SETS_TAG =\n 'OrganizationProjectCustomEmailSets';\nexport const ORGANIZATION_TEAMS_TAG = 'OrganizationTeams';\nexport const PARTICIPANT_ATTRIBUTE_VALUES_TAG = 'ParticipantAttributeValues';\nexport const PARTICIPANT_FRAUD_REPORT_TAG = 'FraudReport';\nexport const PARTICIPANT_LABELS_TAG = 'ParticipantLabels';\nexport const PARTICIPANT_MANAGEMENT_INVITED_PARTICIPANTS_TAG =\n 'ParticipantManagementInvitedParticipants';\nexport const PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG =\n 'ParticipantManagementShortlistedParticipants';\nexport const PARTICIPANT_PROJECT_PARTICIPANTS_TAG =\n 'ParticipantProjectParticipants';\nexport const PARTICIPANT_PROJECTS_TAG = 'ParticipantProjects';\nexport const PARTICIPANT_SURVEY_RESPONSE_SETS_TAG =\n 'ParticipantSurveyResponseSets';\nexport const PARTICIPANT_TASK_EVENT_STATS_TAG = 'ParticipantTaskEventStats';\nexport const PARTICIPANTS_TAG = 'Participants';\nexport const PARTICIPATION_DETAILS_TAG = 'ParticipationDetails';\nexport const POPULATION_ATTRIBUTES_TAG = 'PopulationAttributes';\nexport const POPULATION_INVITE_FILTERS_TAG = 'PopulationInviteFilters';\nexport const POPULATION_LABELS_TAG = 'PopulationLabels';\nexport const POPULATION_PANEL_PARTICIPANTS_TAG = 'PopulationPanelParticipants';\nexport const PREPAID_BALANCE_ACCOUNTS_TAG = 'PrepaidBalanceAccounts';\nexport const PREPAID_BALANCE_INVITATIONS_TAG = 'PrepaidBalanceInvitations';\nexport const PREPAID_BALANCE_TAG = 'PrepaidBalance';\nexport const PREPAID_BALANCE_TRANSACTIONS_TAG = 'PrepaidBalanceTransactions';\nexport const PREPAID_BALANCES_TAG = 'PrepaidBalances';\nexport const PROJECT_ACCOUNT_ROLES_TAG = 'ProjectAccountRoles';\nexport const PROJECT_AVAILABILITY_SETTINGS_TAG = 'ProjectAvailabilitySettings';\nexport const PROJECT_CLOSE_REQUEST_TAG = 'ProjectCloseRequest';\nexport const PROJECT_COLLABORATORS_TAG = 'ProjectCollaborators';\nexport const PROJECT_COST_BREAKDOWN_TAG = 'ProjectCostBreakdown';\nexport const PROJECT_CUSTOM_EMAILS_TAG = 'ProjectCustomEmails';\nexport const PROJECT_DEMOGRAPHIC_RULES_TAG = 'ProjectDemographicRules';\nexport const PROJECT_EMAIL_STATS_TAG = 'ProjectEmailStats';\nexport const PROJECT_EXPECTED_COST_DETAILS_TAG = 'ProjectExpectedCostDetails';\nexport const PROJECT_FILE_UPLOADS_TAG = 'ProjectFileUploads';\nexport const PROJECT_INVOICES_TAG = 'ProjectInvoices';\nexport const PROJECT_LISTINGS_TAG = 'ProjectListings';\nexport const PROJECT_OCCUPATION_LINKS_TAG = 'ProjectOccupationLinks';\nexport const PROJECT_OCCUPATION_TAGS_TAG = 'ProjectOccupationTags';\nexport const PROJECT_PARTICIPANT_ADMIN_DATA_TAG = 'ProjectParticipantAdminData';\nexport const PROJECT_PARTICIPANT_APPLICATION_STATUSES_TAG =\n 'ProjectParticipantApplicationStatuses';\nexport const PROJECT_PARTICIPANT_TAG_TAG = 'ProjectParticipantTags';\nexport const PROJECT_PARTICIPANTS_TAG = 'ProjectParticipants';\nexport const PROJECT_PAYMENT_METHODS_TAG = 'ProjectPaymentMethods';\nexport const PROJECT_PROJECT_PARTICIPANTS_TAG = 'ProjectProjectParticipants';\nexport const PROJECT_PROJECT_SKILLS_TAG = 'ProjectProjectSkills';\nexport const PROJECT_PROJECT_TASKS_TAG = 'ProjectProjectTasks';\nexport const PROJECT_PROPOSED_AVAILABILITY_RANGE_COLLECTIONS_TAG =\n 'ProjectProposedAvailabilityRangeCollections';\nexport const PROJECT_PROPOSED_AVAILABILITY_RANGES_TAG =\n 'ProjectProposedAvailabilityRanges';\nexport const PROJECT_SCHEDULED_INVITE_SETTINGS_TAG =\n 'ProjectScheduledInviteSettings';\nexport const PROJECT_SESSIONS_SIGNUP_PAGE_TAG = 'ProjectSessionsSignupPage';\nexport const PROJECT_SESSIONS_TAG = 'ProjectSessions';\nexport const PROJECT_SETTINGS_TAG = 'ProjectSettings';\nexport const PROJECT_SUMMARIES_TAG = 'ProjectSummaries';\nexport const PROJECT_SURVEY_KEYS_TAG = 'ProjectSurveyKeys';\nexport const PROJECT_SURVEYS_TAG = 'ProjectSurveys';\nexport const PROJECT_TAG = 'Projects';\nexport const PROJECT_TAG_TAG = 'ProjectTag';\nexport const PROJECT_VIDEO_UPLOADS_TAG = 'ProjectVideoUploads';\nexport const PROJECT_WORKSPACE_CALENDAR_TAG = 'ProjectWorkspaceCalendar';\nexport const PROJECT_WORKSPACE_SESSIONS_TAG = 'ProjectWorkspaceSessions';\nexport const RECRUIT_PERIOD_TAG = 'RecruitPeriod';\nexport const REPORT_TAG = 'Report';\nexport const REPORTS_TAG = 'Reports';\nexport const RESEARCHER_NOTE_TAG = 'ResearcherNote';\nexport const RESPONSE_SETS_TAG = 'ResponseSets';\nexport const SCHEDULABLE_RANGES_TAG = 'SchedulableRanges';\nexport const SEGMENTS_TAG = 'Segments';\nexport const SESSION_PROJECT_PARTICIPANTS_TAG = 'SessionProjectParticipants';\nexport const SESSION_ROLES_TAG = 'SessionRoles';\nexport const SESSION_SIGNUP_PAGES_SESSIONS_TAG = 'SessionSignupPagesSessions';\nexport const SIGNATURE_REQUESTS_TAG = 'SignatureRequests';\nexport const STRIPE_CARDS_TAG = 'StripeCards';\nexport const SURVEY_PREVIEW_SECTIONS_TAG = 'SurveyPreviewSections';\nexport const SURVEY_SECTIONS_TAG = 'SurveySections';\nexport const TEAM_BILLING_INFOS_TAG = 'TeamBillingInfos';\nexport const TEAM_HUB_USAGE_TAG = 'TeamHubUsage';\nexport const TEAM_INVITES_TAG = 'TeamInvites';\nexport const TEAM_MEMBERS_TAG = 'TeamMembers';\nexport const TEAM_PARTICIPANTS_TAG = 'TeamParticipants';\nexport const TEAM_PROJECT_TEMPLATES_TAG = 'TeamProjectTemplates';\nexport const TEAM_PROJECTS_TAG = 'TeamProjects';\nexport const TEAM_SETTINGS_TAG = 'TeamSettings';\nexport const TEAM_SUBSCRIPTIONS_TAG = 'TeamSubscriptions';\nexport const TEAM_TAG = 'Team';\nexport const WORKSPACE_PARTICIPANTS_TAG = 'WorkspaceParticipants';\n","import React, { type ComponentType } from 'react';\nimport { Provider } from 'react-redux';\nimport { ErrorBoundary as AppsignalErrorBoundary } from '@appsignal/react';\n\nimport store from 'store/store';\nimport { DopeBrowserRouter } from 'components/dope_browser_router';\nimport { useTrackingWithDefaultDispatch } from 'hooks/use_tracking_with_default_dispatch';\nimport { RailsContextProvider, useRailsContext } from 'hooks/use_rails_context';\n// eslint-disable-next-line no-restricted-imports\nimport appsignal from 'lib/telemetry/appsignal';\n\nimport { getDisplayName } from './utils';\n\ntype PageProvidersProps = {\n children: React.ReactNode;\n};\n\nfunction PageProviders({ children }: PageProvidersProps) {\n const { Track } = useTrackingWithDefaultDispatch();\n const railsContext = useRailsContext();\n\n if (!appsignal) {\n return (\n <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n <Provider store={store}>\n <Track>{children}</Track>\n </Provider>\n </DopeBrowserRouter>\n );\n }\n\n return (\n <AppsignalErrorBoundary\n fallback={\n railsContext?.env.APPSIGNAL_FALLBACK\n ? (error?: Error) => (\n <div className=\"ui-error-boundary-fallback\">\n There was an error loading this component\n <span aria-label=\"warning\" role=\"img\">\n {' '}\n âš ï¸{' '}\n </span>\n {error && error.message}\n </div>\n )\n : undefined\n }\n instance={appsignal}\n >\n <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n <Provider store={store}>\n <Track>{children}</Track>\n </Provider>\n </DopeBrowserRouter>\n </AppsignalErrorBoundary>\n );\n}\n\nexport function withPageProviders<T extends object>(\n WrappedComponent: ComponentType<T>,\n) {\n function WithPageProviders(props: T, railsContext: unknown) {\n return function () {\n return (\n <RailsContextProvider railsContext={railsContext}>\n <PageProviders>\n <WrappedComponent {...props} />\n </PageProviders>\n </RailsContextProvider>\n );\n };\n }\n\n WithPageProviders.displayName = `withPageProviders(${getDisplayName(WrappedComponent)})`;\n return WithPageProviders;\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { TEAM_PROJECTS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, sortAlphabeticalByName } from 'api/utils';\n\n// TODO: Find graceful way to switch between sorted or not, likely backend?\n// Also researched passing args into transformResponse, but would not work even with upgrade\n// eslint-disable-next-line max-len\n// https://stackoverflow.com/questions/73070967/how-to-access-the-query-arguments-in-transformresponse-with-redux-toolkit-query\n// transformResponse: (response, meta, arg) => {\n\nexport const teamProjectsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getTeamProjects: builder.query({\n query: ({ teamId, ...rest }) =>\n routes.api_team_projects_path({ team_id: teamId, ...rest }),\n transformResponse: (response) =>\n sortAlphabeticalByName(deserializeJSONApiResponse(response)),\n providesTags: [TEAM_PROJECTS_TAG],\n }),\n getUnsortedTeamProjects: builder.query({\n query: ({ teamId, ...rest }) =>\n routes.api_team_projects_path({ team_id: teamId, ...rest }),\n transformResponse: deserializeJSONApiResponse,\n providesTags: (_result, _error, { id }) => [\n { type: TEAM_PROJECTS_TAG, id },\n ],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useGetTeamProjectsQuery, useGetUnsortedTeamProjectsQuery } =\n teamProjectsApi;\n","import { useMemo } from 'react';\nimport { z, type ZodSchema } from 'zod';\n\nimport { useGetProjectQuery } from 'api/projects';\n\nimport { useErrorLogger } from 'hooks/use_error_logger';\nimport {\n COMPENSATION_TYPE_OTHER,\n THEY_PAY_COMPENSATION_OPTION_VALUES,\n THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES,\n} from 'researcher/project_workspace/constants';\n\nimport { PARTICIPANT_EMAIL_CLASSES } from 'lib/generated_constants/emails';\nimport { PROJECT_SOURCE_TYPES } from 'lib/generated_constants/project_source_types';\nimport {\n CompensationMethods,\n IntegrationProviders,\n ProjectSettings,\n StudyTypes,\n InterviewTypes,\n ProjectStatuses,\n} from 'lib/generated_constants/projects';\n\nimport { useProjectWorkspaceContext } from './use_project_workspace_context';\n\nconst computeIsAutopayEnabled = (projectSettings: unknown) => {\n if (!projectSettings || typeof projectSettings !== 'object') return false;\n if (!('disableAutopay' in projectSettings)) return false;\n\n if (typeof projectSettings.disableAutopay === 'boolean')\n return projectSettings.disableAutopay === false;\n if (typeof projectSettings.disableAutopay === 'string')\n return projectSettings.disableAutopay === 'false';\n\n return false;\n};\n\nconst projectSchema = z\n .object({\n id: z.string(),\n accessCode: z.string(),\n additionalRecruitmentRequirementsHtml: z.string().nullable(),\n advancedScreening: z.boolean(),\n billingAccount: z.object({\n id: z.string(),\n commenterId: z.string(),\n initials: z.string(),\n email: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n fullName: z.string(),\n lookbackEnabledAt: z.string().nullable(),\n name: z.string(),\n nameLastFirst: z.string(),\n messagerId: z.number(),\n roleId: z.number().nullable().optional(),\n phoneNumber: z.string().nullable(),\n teams: z\n .array(z.object({ id: z.string() }))\n .optional()\n .nullable(),\n }),\n compensationAmount: z.string().nullable(),\n compensationMethodId: z.number().nullable(),\n compensationType: z.string().nullable(),\n confirmationNotesHtml: z.string().nullable(),\n consumerFee: z.number(),\n createdAt: z.string(),\n currentStatus: z.string(),\n defaultSessionLocation: z.string().nullable(),\n deviceRequirements: z\n .object({\n summary: z.array(z.array(z.string())),\n ids: z.array(z.number()),\n })\n .nullable(),\n documentDescription: z.object({\n description: z.string().nullable(),\n signatureRequestDataKey: z.string().nullable(),\n }),\n documentName: z.string().optional(),\n draftParticipantsCount: z.number(),\n emailProfileId: z.number().nullable(),\n emails: z.array(\n z.object({\n allowEdit: z.boolean(),\n class: z.enum(PARTICIPANT_EMAIL_CLASSES as [string, ...string[]]),\n description: z.string(),\n id: z.number().nullable(),\n purpose: z.string(),\n name: z.string(),\n slug: z.string(),\n }),\n ),\n emailThemeId: z.number().nullable(),\n hasDocumentSigning: z.boolean(),\n incentive: z.string(),\n internalDescription: z.string().nullable(),\n interviewType: z.string().nullable(),\n interviewTypeId: z.number().nullable(),\n isActive: z.boolean(),\n isEligibleForSessionObservers: z.boolean().nullable(),\n isPrivate: z.boolean(),\n isSystemHidden: z.boolean(),\n isZeroCost: z.boolean(),\n latestStatusTypeId: z.number(),\n location: z\n .object({\n address: z.string().nullable().optional(),\n autocomplete: z.string().nullable().optional(),\n city: z.string().nullable().optional(),\n countries: z.array(z.string()).optional(),\n detail: z.string().nullable().optional(),\n // TODO: Get a working type for this column; afaict it is indeed an array of objects. For some reason though, when\n // specifying the type as z.array(z.object({})), the data is not being coerced into an empty object making users unable\n // to see their City selections in the UI\n // googleLocationInfo: z.array(z.object({})).optional(),\n googleLocationInfo: z.any(),\n googleMapsUrl: z.string().nullable().optional(),\n latitude: z.number().nullable().optional().optional(),\n locationExtraInfo: z.string().nullable().optional(),\n longitude: z.number().nullable().optional().optional(),\n parkingAvailable: z.boolean().optional(),\n parkingInfo: z.string().nullable().optional(),\n regions: z.array(z.string()).optional(),\n })\n .nullable(),\n meta: z.object({\n canView: z.boolean(),\n canEdit: z.boolean(),\n invalidLaunchMessages: z.string().optional(),\n invalidLaunchProps: z.array(z.string()).optional(),\n firstProjectId: z.string().optional(),\n }),\n name: z.string().nullable(),\n numParticipants: z.number().nullable(),\n organizationId: z.number(),\n originalNumParticipants: z.number().nullable(),\n owner: z.object({\n id: z.string(),\n commenterId: z.string(),\n initials: z.string(),\n email: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n fullName: z.string(),\n lookbackEnabledAt: z.string().nullable(),\n name: z.string(),\n nameLastFirst: z.string(),\n messagerId: z.number(),\n roleId: z.number().nullable().optional(),\n phoneNumber: z.string().nullable(),\n teams: z\n .array(z.object({ id: z.string() }))\n .optional()\n .nullable(),\n relationshipNames: z.array(z.string()).optional(),\n }),\n participantPopulationId: z.number().nullable(),\n participantReferrals: z.boolean(),\n professionalFee: z.number(),\n projectCustomEmailSetId: z.number().nullable(),\n projectStatus: z.string(),\n publicDescription: z.string().nullable(),\n publicTitle: z.string().nullable(),\n remainingInviteCount: z.number().optional(),\n requireApproval: z.boolean().optional(),\n researcherWillCall: z.boolean(),\n screenerVideo: z\n .object({\n id: z.string(),\n prompt: z.string(),\n })\n .nullable(),\n sessionLength: z.string().nullable(),\n settings: z.object({\n // TODO: There are many more settings; their types are defined by the ProjectSetting BobEnum\n confirmOnJoin: z.boolean().optional(),\n requireApproval: z.boolean().optional(),\n participantReschedulingEnabled: z.boolean().optional(),\n rptInvitesOnly: z.boolean().optional(),\n }),\n sourceType: z.string(),\n studyLength: z.object({\n days: z.number().optional(),\n hours: z.number().optional(),\n minutes: z.number().optional(),\n }),\n studyType: z.string(),\n studyTypeId: z.number().nullable(),\n studyTypeName: z.string(),\n surveyDraft: z\n .object({\n id: z.string(),\n surveyJson: z.string(),\n })\n .nullable(),\n targetProfessionals: z.boolean(),\n task: z\n .object({\n id: z.string(),\n externalId: z.string().nullable(),\n provider: z.string(),\n repositoryUrl: z.string().nullable(),\n providerDisplayName: z.string().nullable(),\n title: z.string().nullable(),\n url: z.string().nullable(),\n })\n .nullable(),\n taskSession: z\n .object({\n id: z.string(),\n moderatorId: z.number(),\n numScheduled: z.number(),\n numSlots: z.number(),\n sessionLocation: z.string().nullable(),\n startTime: z.string(),\n datetimeDisplay: z.string(),\n hasPassed: z.boolean(),\n hostUrl: z.string().nullable(),\n hasZoomSessionLocation: z.boolean(),\n hasMeetSessionLocation: z.boolean(),\n start: z.string(),\n startDate: z.string(),\n timeDisplay: z.string(),\n })\n .nullable(),\n teamDomain: z.string().nullable(),\n teamId: z.number(),\n timezone: z.string(),\n timezoneAbbreviation: z.string(),\n useEmailTheme: z.boolean(),\n wePay: z.boolean().nullable(),\n })\n .passthrough()\n .optional();\n\nexport function buildProjectState(project: z.infer<typeof projectSchema>) {\n if (!project) return undefined;\n\n const {\n accessCode,\n additionalRecruitmentRequirementsHtml,\n advancedScreening,\n billingAccount,\n compensationAmount,\n compensationMethodId,\n compensationType,\n confirmationNotesHtml,\n consumerFee,\n defaultSessionLocation,\n deviceRequirements,\n documentDescription,\n documentName,\n draftParticipantsCount,\n emailProfileId,\n emailThemeId,\n emails,\n hasDocumentSigning,\n id,\n internalDescription,\n interviewTypeId,\n isActive,\n isEligibleForSessionObservers,\n isPrivate,\n isSystemHidden,\n isZeroCost,\n latestStatusTypeId,\n location,\n meta: { invalidLaunchMessages, invalidLaunchProps, firstProjectId } = {},\n name,\n numParticipants,\n organizationId,\n originalNumParticipants,\n owner,\n participantPopulationId,\n participantReferrals,\n professionalFee,\n projectCustomEmailSetId,\n publicDescription,\n publicTitle,\n remainingInviteCount,\n requireApproval,\n researcherWillCall,\n screenerVideo,\n sourceType,\n studyLength,\n studyTypeId,\n surveyDraft,\n targetProfessionals,\n task,\n taskSession,\n teamDomain,\n teamId,\n timezone,\n timezoneAbbreviation,\n useEmailTheme,\n } = project;\n\n const isAutopayEnabled = computeIsAutopayEnabled(project.settings);\n const isNoIncentiveTypeProject =\n compensationMethodId === CompensationMethods.NONE;\n const isWePay = compensationMethodId === CompensationMethods.WE_PAY;\n const senderId = project.owner?.messagerId;\n const hasIntegration =\n !!task?.provider &&\n IntegrationProviders.TRACKED_PROVIDERS.includes(task.provider);\n const isConfirmOnJoin =\n project.settings?.confirmOnJoin ?? ProjectSettings.confirmOnJoin.default;\n const isParticipantApprovalRequired =\n project.settings?.requireApproval ??\n ProjectSettings.requireApproval.default;\n const isRptProject =\n project.settings?.rptInvitesOnly ?? ProjectSettings.rptInvitesOnly.default;\n const isRecruitProject = sourceType === PROJECT_SOURCE_TYPES.PROJECT;\n const isHubProject = sourceType === PROJECT_SOURCE_TYPES.BYOA_PROJECT;\n const isSourcelessProject =\n sourceType === PROJECT_SOURCE_TYPES.SOURCELESS_PROJECT;\n const hasParticipantSource = !isSourcelessProject;\n const isOneOnOne = studyTypeId === StudyTypes.ONE_ON_ONE;\n const isFocusGroup = studyTypeId === StudyTypes.FOCUS_GROUP;\n const isMultiDay = studyTypeId === StudyTypes.MULTI_DAY;\n const isUnmoderatedTask = studyTypeId === StudyTypes.UNMODERATED_TASK;\n const hasStudyType =\n studyTypeId && Object.values(StudyTypes).includes(studyTypeId);\n const isModerated = hasStudyType && !isUnmoderatedTask;\n const isOnlineInterview = interviewTypeId === InterviewTypes.ONLINE;\n const isPhoneInterview = interviewTypeId === InterviewTypes.PHONE;\n const isInPersonInterview = interviewTypeId === InterviewTypes.IN_PERSON;\n const isDraft = latestStatusTypeId === ProjectStatuses.DRAFT;\n const isLaunchable = !invalidLaunchProps?.length;\n const isLaunched = latestStatusTypeId === ProjectStatuses.LAUNCHED;\n const participantReschedulingEnabled =\n project.settings?.participantReschedulingEnabled;\n const isFirstProject = String(firstProjectId) === String(id);\n\n const hasOtherCompensationType =\n !!compensationType &&\n (isInPersonInterview\n ? !THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES.includes(\n compensationType,\n )\n : !THEY_PAY_COMPENSATION_OPTION_VALUES.includes(compensationType));\n const derivedCompensationType = hasOtherCompensationType\n ? COMPENSATION_TYPE_OTHER\n : compensationType;\n const compensationTypeOtherCustomValue = hasOtherCompensationType\n ? compensationType\n : undefined;\n\n return {\n accessCode,\n additionalRecruitmentRequirementsHtml,\n advancedScreening,\n billingAccount,\n compensationAmount,\n compensationMethodId,\n compensationType: derivedCompensationType,\n compensationTypeOtherCustomValue,\n confirmationNotesHtml,\n consumerFee,\n defaultSessionLocation,\n deviceRequirements,\n documentDescription,\n documentName,\n draftParticipantsCount,\n emailProfileId,\n emailThemeId,\n emails,\n hasDocumentSigning,\n hasIntegration,\n hasParticipantSource,\n hasStudyType,\n id,\n internalDescription,\n interviewTypeId,\n invalidLaunchMessages,\n invalidLaunchProps,\n isActive,\n isAutopayEnabled,\n isConfirmOnJoin,\n isDraft,\n isEligibleForSessionObservers,\n isFirstProject,\n isFocusGroup,\n isHubProject,\n isInPersonInterview,\n isLaunchable,\n isLaunched,\n isModerated,\n isMultiDay,\n isNoIncentiveTypeProject,\n isOneOnOne,\n isOnlineInterview,\n isParticipantApprovalRequired,\n isPhoneInterview,\n isPrivate,\n isRecruitProject,\n isRptProject,\n isSourcelessProject,\n isSystemHidden,\n isUnmoderatedTask,\n isWePay,\n isZeroCost,\n latestStatusTypeId,\n location,\n name,\n numParticipants,\n organizationId,\n originalNumParticipants,\n owner,\n participantPopulationId,\n participantReferrals,\n participantReschedulingEnabled,\n professionalFee,\n projectCustomEmailSetId,\n publicDescription,\n publicTitle,\n remainingInviteCount,\n requireApproval,\n researcherWillCall,\n screenerVideo,\n senderId,\n sourceType,\n studyLength,\n studyTypeId,\n surveyDraft,\n targetProfessionals,\n task,\n taskSession,\n teamDomain,\n teamId,\n timezone,\n timezoneAbbreviation,\n useEmailTheme,\n };\n}\n\nexport type ProjectState = ReturnType<typeof buildProjectState>;\n\nfunction safelyParseSchema<T>(\n data: unknown,\n schema: ZodSchema<T>,\n callback: (error: Error) => void,\n) {\n if (['development', 'test'].includes(process.env.NODE_ENV ?? '')) {\n return schema.parse(data);\n }\n\n try {\n return schema.parse(data);\n } catch (error) {\n callback(error as Error);\n\n return data as T;\n }\n}\n\n// use this hook to pull project state instead of the rtk query directly.\n// this allows us to deserialize the data into a more usable format\n// and prevents a bunch of potential fallout if/when we rework the project\n// model for \"continuous research.\"\nexport function useGetProjectState() {\n const logError = useErrorLogger();\n const { projectId } = useProjectWorkspaceContext();\n const { data, ...rest } = useGetProjectQuery({\n projectId,\n include: [\n 'billing_account',\n 'default_session_location',\n 'document_description',\n 'document_name',\n // TODO: remove draft_participants_count once we're not using it\n // https://linear.app/user-interviews/issue/RXS-1981/[cleanup]-remove-feature-flag\n 'draft_participants_count',\n 'emails',\n 'screener_video',\n 'survey_draft',\n 'task',\n 'task_session',\n ].join(','),\n });\n\n const schema = useMemo(() => projectSchema, []);\n\n const projectState = useMemo(() => {\n if (!data) return undefined;\n const project = safelyParseSchema(data, schema, (error) => {\n logError(error);\n });\n\n return buildProjectState(project);\n }, [data, logError, schema]);\n\n return {\n ...rest,\n projectState,\n };\n}\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport {\n PARTICIPANT_SURVEY_RESPONSE_SETS_TAG,\n RESPONSE_SETS_TAG,\n} from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const responseSetListTag = { type: RESPONSE_SETS_TAG, id: 'LIST' };\n\nexport const responseSetsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getResponseSets: builder.query({\n query: (params) => routes.api_response_sets_path(params),\n transformResponse: deserializeJSONApiResponse,\n providesTags: (result) =>\n (result || [])\n .map((item) => ({ type: RESPONSE_SETS_TAG, id: item.id }))\n .concat([responseSetListTag]),\n }),\n createResponseSet: builder.mutation({\n query: ({ surveyId, ...body }) => ({\n url: routes.api_survey_response_sets_path({ survey_id: surveyId }),\n method: 'POST',\n body,\n ...headersAndCredentials(),\n }),\n transformResponse: (response) => {\n const data = deserializeJSONApiResponse(response);\n return { data, meta: response.meta };\n },\n invalidatesTags: [responseSetListTag],\n }),\n updateResponseSet: builder.mutation({\n query: (body) => ({\n url: routes.api_response_set_path(body.data.id),\n method: 'PATCH',\n body,\n ...headersAndCredentials(),\n }),\n transformResponse: (response) => {\n const data = deserializeJSONApiResponse(response);\n return { data, meta: response.meta };\n },\n invalidatesTags: (_result, _error, { id }) => [\n responseSetListTag,\n { type: RESPONSE_SETS_TAG, id },\n ],\n }),\n deleteResponseSet: builder.mutation({\n query: ({ responseSetId }) => ({\n url: routes.api_response_set_path(responseSetId),\n method: 'DELETE',\n ...headersAndCredentials(),\n }),\n invalidatesTags: (_result, _error, { responseSetId }) => [\n responseSetListTag,\n { type: RESPONSE_SETS_TAG, id: responseSetId },\n { type: PARTICIPANT_SURVEY_RESPONSE_SETS_TAG, id: responseSetId },\n ],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useGetResponseSetsQuery,\n useCreateResponseSetMutation,\n useLazyGetResponseSetsQuery,\n useUpdateResponseSetMutation,\n useDeleteResponseSetMutation,\n} = responseSetsApi;\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 { useContext } from 'react';\nimport { AuthUserContext } from 'common/authorization';\n\nexport function useAuthUserContext() {\n return useContext(AuthUserContext);\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"uZ8MYdiaESWJCjqimXr_\";\nvar _2 = \"aa9WlUhp90siVi_Ayqxn\";\nvar _3 = \"i_7LQn2fzgWYqOghLEsJ\";\nvar _4 = \"bOP4we4EJhWfZ29hojhw\";\nvar _5 = \"GpMsvbkp0xzLDEAdAY1P\";\nvar _6 = \"anplxCL1Xh4TQfnAP6m5\";\nvar _7 = \"WTDCDb0MrH_KJyB2KqJC\";\nvar _8 = \"yHeLU4wrRNzbB9A6Bsm6\";\nvar _9 = \"o4iyErwAfjslH12W8ZrQ\";\nvar _a = \"weOS2ShpYK55NLNmwQso\";\nvar _b = \"pUQlsNTSySEI3mf31Ie2\";\nvar _c = \"Wl9T3o9_QVLnptqBY2a7\";\nvar _d = \"MG27koMBbHco262N2hsH\";\nvar _e = \"_JZqcqc8HGsVbMVsr037\";\nvar _f = \"SijfAn9XLWNIE3g60WXj\";\nvar _10 = \"ABf0lDMn9qxRJGK0aTJM\";\nvar _11 = \"lMpXHGKGf9MSv3RGnAdA\";\nvar _12 = \"XNff4WDFfomxfyjEQ21A\";\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 \"footer\", _10 as \"footerNavigationItem\", _11 as \"participant-dashboard__project__info__status__string\", _12 as \"schedule-project-participant-page__time-slots\" }\n","import React from 'react';\n\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics/constants';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\nimport { NavigationItem } from '../navigation_item';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './footer.module.scss';\n\nconst { NAVIGATION_PARTICIPANTS_CLICKED, NAVIGATION_PROJECTS_CLICKED } =\n trackingEvents;\n\nexport function Footer() {\n return (\n <footer className={styles.footer}>\n <nav>\n <NavigationItem\n className={styles.footerNavigationItem}\n event={NAVIGATION_PROJECTS_CLICKED}\n href={routes.account_dashboard_path()}\n iconSrcBase=\"/images/nav_icon_projects\"\n label=\"Projects\"\n />\n\n <Authorization to={TeamActionTypes.SEARCH_PARTICIPANTS}>\n <NavigationItem\n className={styles.footerNavigationItem}\n event={NAVIGATION_PARTICIPANTS_CLICKED}\n href={routes.search_participants_path()}\n iconSrcBase=\"/images/nav_icon_participants\"\n label=\"Participants\"\n />\n </Authorization>\n </nav>\n </footer>\n );\n}\n","/* eslint-disable camelcase */\nimport type {\n PathParameters,\n ResponseBody,\n RequestBodyAttributes,\n} from 'lib/swagger_helper';\nimport * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { ACCOUNT_HUB_CONFIGURATIONS } from 'api/tag_types';\n\nimport { headersAndCredentials } from 'api/utils';\n\nexport type AccountHubConfigurationsRawResponse =\n ResponseBody<'getAccountHubConfigurations'>;\nexport type AccountHubConfigurationsApiResponse = ReturnType<\n typeof transformResponse\n>;\n\nexport const accountHubConfigurationsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getAccountHubConfigurations: builder.query<\n AccountHubConfigurationsApiResponse,\n PathParameters<'getAccountHubConfigurations'>\n >({\n query: ({ participant_population_id }) =>\n routes.api_participant_population_hub_configs_path(\n participant_population_id,\n ),\n providesTags: (_result, _error, { participant_population_id }) => [\n { type: ACCOUNT_HUB_CONFIGURATIONS, id: participant_population_id },\n ],\n transformResponse,\n }),\n upsertAccountHubConfiguration: builder.mutation<\n AccountHubConfigurationsApiResponse,\n RequestBodyAttributes<'upsertAccountHubConfiguration'> &\n PathParameters<'upsertAccountHubConfiguration'>\n >({\n query: ({ participant_population_id, ...configurations }) => ({\n url: routes.api_participant_population_hub_configs_path(\n participant_population_id,\n ),\n method: 'PATCH',\n body: { data: { attributes: configurations } },\n ...headersAndCredentials(),\n }),\n invalidatesTags: (_result, _error, { participant_population_id }) => [\n { type: ACCOUNT_HUB_CONFIGURATIONS, id: participant_population_id },\n ],\n transformResponse,\n }),\n }),\n overrideExisting: 'throw',\n});\n\nfunction transformResponse(\n response:\n | ResponseBody<'getAccountHubConfigurations'>\n | ResponseBody<'upsertAccountHubConfiguration'>,\n) {\n const { data } = response;\n\n if (!data) return undefined;\n\n return {\n id: data.id,\n ...data.attributes,\n };\n}\n\nexport const {\n useGetAccountHubConfigurationsQuery,\n useUpsertAccountHubConfigurationMutation,\n} = accountHubConfigurationsApi;\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { PARTICIPANTS_TAG, TEAM_HUB_USAGE_TAG } from 'api/tag_types';\nimport {\n ACCEPT_V2_HEADER,\n deserializeJSONApiResponse,\n headersAndCredentials,\n} from 'api/utils';\n\nexport const participantsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n createParticipants: builder.mutation({\n query: ({ email, teamIds }) => {\n const params = { data: { attributes: { email } } };\n\n if (teamIds) params.data.team_ids = teamIds;\n\n return {\n url: routes.api_participants_path(),\n method: 'POST',\n body: params,\n ...headersAndCredentials(ACCEPT_V2_HEADER),\n };\n },\n invalidatesTags: [TEAM_HUB_USAGE_TAG],\n }),\n getParticipant: builder.query({\n query: ({ id, params }) => routes.api_participant_path(id, params),\n providesTags: (result, error, { id }) => [{ type: PARTICIPANTS_TAG, id }],\n transformResponse: deserializeJSONApiResponse,\n }),\n updateParticipant: builder.mutation({\n query: ({ id, params }) => ({\n url: routes.api_participant_path(id),\n method: 'PATCH',\n body: params,\n ...headersAndCredentials(),\n }),\n invalidatesTags: (result, error, { id }) => [\n { type: PARTICIPANTS_TAG, id },\n ],\n }),\n updateParticipantTeams: builder.mutation({\n query: ({ encodedFilterParams, teamIds, teamId }) => ({\n url: routes.api_teams_participants_path({ team_id: teamId }),\n method: 'PATCH',\n body: {\n team_ids: teamIds,\n participant_filter: encodedFilterParams,\n },\n ...headersAndCredentials(),\n }),\n }),\n upsertParticipants: builder.mutation({\n query: ({ email, teamIds, teamId, populationId }) => {\n const params = { data: { attributes: { email } } };\n\n if (teamIds) params.data.team_ids = teamIds;\n\n return {\n url: routes.api_participants_path({\n participant_population_id: populationId,\n team_id: teamId,\n }),\n method: 'PATCH',\n body: params,\n ...headersAndCredentials(ACCEPT_V2_HEADER),\n };\n },\n invalidatesTags: [TEAM_HUB_USAGE_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useGetParticipantQuery,\n useUpdateParticipantMutation,\n useUpdateParticipantTeamsMutation,\n useUpsertParticipantsMutation,\n} = participantsApi;\n","import * as backendConstants from 'lib/generated_constants/participant_attributes';\n\nexport const updateSections = {\n INFO: 'participant-info',\n PASSWORD: 'participant-password',\n};\n\nconst BROWSERS_FORM_INPUT_LABEL = 'Which internet browser(s) do you use?';\nconst COMPUTER_OS_FORM_INPUT_LABEL =\n 'What computer operating system(s) do you use?';\nconst COMPUTER_WEBCAM_FORM_INPUT_LABEL =\n 'Do you have a computer with a webcam?';\nconst DISABILITIES_FORM_INPUT_LABEL =\n 'Do you identify as having any of the following disabilities?';\nconst HOUSEHOLD_INCOME_FORM_INPUT_LABEL = 'Household income per year';\nconst LEVEL_OF_EDUCATION_FORM_INPUT_LABEL = 'Highest level of education';\nconst SMALL_BUSINESS_OWNER_FORM_INPUT_LABEL = 'Small business owner?';\nconst SMARTPHONE_OS_FORM_INPUT_LABEL =\n 'What smartphone operating system(s) do you use?';\nconst TABLET_OS_FORM_INPUT_LABEL =\n 'What tablet operating system(s) do you use?';\n\nexport const attributeSlugsToInputLabels = {\n [backendConstants.BROWSERS_SLUG]: BROWSERS_FORM_INPUT_LABEL,\n [backendConstants.COMPUTER_OS_SLUG]: COMPUTER_OS_FORM_INPUT_LABEL,\n [backendConstants.COMPUTER_WEBCAM_SLUG]: COMPUTER_WEBCAM_FORM_INPUT_LABEL,\n [backendConstants.DISABILITIES_SLUG]: DISABILITIES_FORM_INPUT_LABEL,\n [backendConstants.HOUSEHOLD_INCOME_SLUG]: HOUSEHOLD_INCOME_FORM_INPUT_LABEL,\n [backendConstants.LEVEL_OF_EDUCATION_SLUG]:\n LEVEL_OF_EDUCATION_FORM_INPUT_LABEL,\n [backendConstants.SMALL_BUSINESS_OWNER_SLUG]:\n SMALL_BUSINESS_OWNER_FORM_INPUT_LABEL,\n [backendConstants.SMARTPHONE_OS_SLUG]: SMARTPHONE_OS_FORM_INPUT_LABEL,\n [backendConstants.TABLET_OS_SLUG]: TABLET_OS_FORM_INPUT_LABEL,\n};\n\nexport const attributeSlugsToDefaultOptionNames = {\n [backendConstants.CHILDREN_SLUG]:\n backendConstants.CHILDREN_DEFAULT_OPTION_NAME,\n [backendConstants.COMPUTER_OS_SLUG]:\n backendConstants.COMPUTER_OS_DEFAULT_OPTION_NAME,\n [backendConstants.SMARTPHONE_OS_SLUG]:\n backendConstants.SMARTPHONE_OS_DEFAULT_OPTION_NAME,\n [backendConstants.TABLET_OS_SLUG]:\n backendConstants.TABLET_OS_DEFAULT_OPTION_NAME,\n [backendConstants.TYPE_OF_INCOME_SLUG]:\n backendConstants.TYPE_OF_INCOME_DEFAULT_OPTION_NAME,\n};\n\nexport * from 'lib/generated_constants/participant_attributes';\n","import React, { useState } from 'react';\nimport { JsonApiDataStore } from 'jsonapi-datastore';\nimport { LoadingOverlay } from '@user-interviews/ui-design-system';\n\nimport { AuthUserContext } from 'common/authorization';\nimport useHttp from 'hooks/use_http';\n\nimport { ErrorRenderer } from 'lib/errors';\nimport * as routes from 'lib/routes';\n\nimport { getDisplayName } from './utils';\n\n// authUserParams() takes props and returns a object of params to merge into the API call to\n// /authorization-user.\n// ex. props => ({ project_id: 17 })\n//\n// defaultValue() takes props and returns a object to use as the default value for the context\n// The object should be in the format expected by JsonAPIDataStore\n// ex. props => props.authUser\nfunction withAuthUserContext(\n WrappedComponent,\n authUserParams = () => ({}),\n defaultValue = (props) => props.authUser || {},\n) {\n function WithAuthUserContext(props) {\n const { get, loading } = useHttp();\n\n const [contextValue, setContextValue] = useState(\n new JsonApiDataStore().sync(defaultValue(props)),\n );\n const [loadingOverlayEnabled, setLoadingOverlayEnabled] = useState(true);\n\n const refreshAuthUserContext = async ({\n skipLoadingOverlay = false,\n } = {}) => {\n if (skipLoadingOverlay) {\n setLoadingOverlayEnabled(false);\n }\n\n const contextData = await get(\n routes.api_authorization_user_path(authUserParams(props)),\n { onError: ErrorRenderer.alert },\n ).finally(() => setLoadingOverlayEnabled(true));\n\n if (contextData) {\n setContextValue(contextData);\n }\n };\n\n return (\n // TODO: RS-19294\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n <AuthUserContext.Provider\n value={{ ...contextValue, refreshAuthUserContext }}\n >\n <LoadingOverlay visible={loadingOverlayEnabled && loading} />\n <WrappedComponent {...props} />\n </AuthUserContext.Provider>\n );\n }\n\n WithAuthUserContext.displayName = `withAuthUserContext(${getDisplayName(WrappedComponent)})`;\n\n return WithAuthUserContext;\n}\n\nexport default withAuthUserContext;\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\nimport { SURVEY_SECTIONS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse } from 'api/utils';\n\nexport const surveySectionsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getSurveySections: builder.query({\n query: ({ surveyId, params }) => ({\n url: routes.api_survey_survey_sections_path({\n survey_id: surveyId,\n ...params,\n }),\n }),\n providesTags: (result, _error, { surveyId }) =>\n (result?.data || [])\n .map((item) => ({ type: SURVEY_SECTIONS_TAG, id: item.id }))\n .concat([{ type: SURVEY_SECTIONS_TAG, id: `${surveyId}_LIST` }]),\n transformResponse: deserializeJSONApiResponse,\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useGetSurveySectionsQuery } = surveySectionsApi;\n","import { CardSizes } from '@user-interviews/ui-design-system';\n\nimport * as routes from 'lib/routes';\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport * as Constants from '../constants';\n\nconst MAX_SMALL_CARD_GRID_COLUMNS = 3;\nconst MAX_MEDIUM_CARD_GRID_COLUMNS = 5;\n\nexport const determineCardSize = (surveySection: {\n questions: { answers: object[]; questionGroup?: object }[];\n}) => {\n let cardSize: 'sm' | 'md' | 'lg' = CardSizes.SMALL;\n\n if (surveySection?.questions) {\n const { questions } = surveySection;\n\n for (let i = 0; i < questions.length; i++) {\n const question = questions[i];\n\n if (question.questionGroup) {\n const gridAnswerTotal = question.answers.length;\n\n if (gridAnswerTotal > MAX_MEDIUM_CARD_GRID_COLUMNS) {\n cardSize = CardSizes.LARGE;\n break;\n }\n\n if (gridAnswerTotal > MAX_SMALL_CARD_GRID_COLUMNS) {\n cardSize = CardSizes.MEDIUM;\n }\n }\n }\n }\n return cardSize;\n};\n\nexport const redirectToSuccessPage = (responseSet: { accessCode: string }) => {\n const path = routes.project_screener_form_success_path({\n responseSetCode: responseSet.accessCode,\n });\n\n window.location.assign(path);\n};\n\nexport const isOtherAnswer = (answer: { responseClass: string }) =>\n answer.responseClass === Constants.RESPONSE_CLASS_OTHER_AND_STRING;\n\nconst QUESTION_ID_KEY_REGEX = /q(\\d+)/;\nexport const parseIdFromQuestionIdKey = (attributeIdKey: string) =>\n attributeIdKey.match(QUESTION_ID_KEY_REGEX)?.[1] || null;\n\nconst parsePickOneValues = (formValues: SurveySectionFormValues) => {\n const pickOneFormValues = formValues[Constants.PICK_ONE_INPUT_GROUP_KEY];\n if (!pickOneFormValues) return [];\n\n return Object.entries(pickOneFormValues)\n .filter(([, { answerId }]) => answerId !== null)\n .map(([questionIdKey, { answerId, otherAnswerId, responseOther }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n ...(answerId === otherAnswerId && { responseOther }),\n }));\n};\n\nconst parsePickManyValues = (formValues: SurveySectionFormValues) => {\n const pickManyFormValues = formValues[Constants.PICK_MANY_INPUT_GROUP_KEY];\n if (!pickManyFormValues) return [];\n\n return Object.entries(pickManyFormValues).reduce(\n (\n pickManyResponses: {\n answerId: string;\n questionId: string | null;\n responseOther?: string;\n }[],\n [questionIdKey, { answerIds, otherAnswerId, responseOther }],\n ) => {\n const newResponses = answerIds.map((answerId) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n ...(answerId === otherAnswerId && { responseOther }),\n }));\n\n return [...pickManyResponses, ...newResponses];\n },\n [],\n );\n};\n\nconst parseShortAnswerValues = (formValues: SurveySectionFormValues) => {\n const shortAnswerFormValues =\n formValues[Constants.SHORT_ANSWER_INPUT_GROUP_KEY];\n if (!shortAnswerFormValues) return [];\n\n return Object.entries(shortAnswerFormValues)\n .filter(([, { value }]) => value !== '')\n .map(([questionIdKey, { answerId, value, responseDetailAttributes }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n stringValue: value,\n ...(responseDetailAttributes && { responseDetailAttributes }),\n }));\n};\n\nconst parseLongAnswerValues = (formValues: SurveySectionFormValues) => {\n const longAnswerFormValues =\n formValues[Constants.LONG_ANSWER_INPUT_GROUP_KEY];\n if (!longAnswerFormValues) return [];\n\n return Object.entries(longAnswerFormValues)\n .filter(([, { value }]) => value !== '')\n .map(([questionIdKey, { answerId, value, responseDetailAttributes }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n textValue: value,\n ...(responseDetailAttributes && { responseDetailAttributes }),\n }));\n};\n\nconst parseDateValues = (formValues: SurveySectionFormValues) => {\n const dateFormValues = formValues[Constants.DATE_INPUT_GROUP_KEY];\n if (!dateFormValues) return [];\n\n return Object.entries(dateFormValues)\n .filter(([, { value }]) => !!value)\n .map(([questionIdKey, { answerId, value }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n dateValue: value,\n }));\n};\n\nconst parseFloatValues = (formValues: SurveySectionFormValues) => {\n const floatFormValues = formValues[Constants.FLOAT_INPUT_GROUP_KEY];\n if (!floatFormValues) return [];\n\n return Object.entries(floatFormValues)\n .filter(([, { value }]) => !!value)\n .map(([questionIdKey, { answerId, value }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n floatValue: parseFloat(value),\n }));\n};\n\nconst parseBooleanValues = (formValues: SurveySectionFormValues) => {\n const booleanFormValues = formValues[Constants.BOOLEAN_INPUT_GROUP_KEY];\n if (!booleanFormValues) return [];\n\n return Object.entries(booleanFormValues)\n .filter(([, { answerId }]) => answerId !== null)\n .map(([questionIdKey, { answerId, value }]) => ({\n answerId,\n questionId: parseIdFromQuestionIdKey(questionIdKey),\n booleanValue: value === Constants.BOOLEAN_TRUE_VALUE,\n }));\n};\n\nexport const transformFormValuesToSubmissionParams = (\n values: SurveySectionFormValues,\n) => [\n ...parseBooleanValues(values),\n ...parseDateValues(values),\n ...parseFloatValues(values),\n ...parsePickOneValues(values),\n ...parsePickManyValues(values),\n ...parseShortAnswerValues(values),\n ...parseLongAnswerValues(values),\n];\n\ntype ProjectMetaParams = {\n participantId: string;\n participantScreenerKey: string | undefined;\n projectId: string;\n};\n\ntype OptInFormMetaParams = {\n participantId: string;\n participantOptInFormKey: string;\n optInFormId: string;\n};\n\nconst buildResponseSetCreateParams = ({\n formValues,\n meta,\n surveyId,\n}: {\n formValues: SurveySectionFormValues;\n surveyId: string;\n meta: ProjectMetaParams | OptInFormMetaParams;\n}) => ({\n surveyId,\n data: {\n type: 'responseSet',\n attributes: {\n responsesAttributes: transformFormValuesToSubmissionParams(formValues),\n },\n },\n meta,\n});\n\nexport const buildProjectResponseSetCreateParams = ({\n formValues,\n participantId,\n participantScreenerKey,\n projectId,\n surveyId,\n}: {\n formValues: SurveySectionFormValues;\n surveyId: string;\n} & ProjectMetaParams) =>\n buildResponseSetCreateParams({\n formValues,\n surveyId,\n meta: {\n participantId,\n participantScreenerKey,\n projectId,\n },\n });\n\nexport const buildOptInResponseSetCreateParams = ({\n formValues,\n optInFormId,\n participantId,\n participantOptInFormKey,\n surveyId,\n}: {\n formValues: SurveySectionFormValues;\n surveyId: string;\n} & OptInFormMetaParams) =>\n buildResponseSetCreateParams({\n formValues,\n surveyId,\n meta: {\n optInFormId,\n participantId,\n participantOptInFormKey,\n },\n });\n\nconst buildResponseSetUpdateParams = ({\n formValues,\n meta,\n responseSetId,\n}: {\n formValues: SurveySectionFormValues;\n responseSetId: string;\n meta: ProjectMetaParams | OptInFormMetaParams;\n}) => ({\n data: {\n type: 'responseSet',\n id: responseSetId,\n attributes: {\n responsesAttributes: transformFormValuesToSubmissionParams(formValues),\n },\n },\n meta,\n});\n\nexport const buildProjectResponseSetUpdateParams = ({\n formValues,\n participantId,\n participantScreenerKey,\n projectId,\n responseSetId,\n}: {\n formValues: SurveySectionFormValues;\n responseSetId: string;\n} & ProjectMetaParams) =>\n buildResponseSetUpdateParams({\n formValues,\n responseSetId,\n meta: {\n participantId,\n participantScreenerKey,\n projectId,\n },\n });\n\nexport const buildOptInResponseSetUpdateParams = ({\n formValues,\n optInFormId,\n participantId,\n participantOptInFormKey,\n responseSetId,\n}: {\n formValues: SurveySectionFormValues;\n responseSetId: string;\n} & OptInFormMetaParams) =>\n buildResponseSetUpdateParams({\n formValues,\n responseSetId,\n meta: {\n optInFormId,\n participantId,\n participantOptInFormKey,\n },\n });\n","/* eslint-disable no-param-reassign */\nimport { createSlice } from '@reduxjs/toolkit';\n\nconst initialState = {\n isActive: true,\n};\n\nexport const projectDetailsSlice = createSlice({\n name: 'projectDetails',\n initialState,\n reducers: {\n ADD_WORKSPACE_ATTRIBUTES: (state, action) => {\n const { attributes } = action.payload;\n\n state.isActive = !!attributes?.isActive;\n },\n },\n});\n\nexport const { ADD_WORKSPACE_ATTRIBUTES } = projectDetailsSlice.actions;\n\nexport const projectDetailsSliceReducer = projectDetailsSlice.reducer;\n","import { apiSlice } from 'api/base_slice';\nimport { columnConfigurationSliceReducer } from 'store/slices/column_configuration_slice';\nimport { segmentsSliceReducer } from 'store/slices/segments_slice';\nimport { participantProfileSliceReducer } from 'store/slices/participant_profile_slice';\nimport { projectDetailsSliceReducer } from 'store/slices/project_details_slice';\n\nimport { projectWorkspaceSlice } from 'researcher/project_workspace/slice';\n\nexport const rootReducer = {\n [apiSlice.reducerPath]: apiSlice.reducer,\n columnConfiguration: columnConfigurationSliceReducer,\n participantProfile: participantProfileSliceReducer,\n projectDetails: projectDetailsSliceReducer,\n projectWorkspace: projectWorkspaceSlice.reducer,\n segments: segmentsSliceReducer,\n};\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query/react';\n\nimport { apiSlice } from '../api/base_slice';\n\nimport { rootReducer } from './root_reducer';\n\nconst isDevelopmentEnv = process.env.NODE_ENV === 'development';\n\n// When unit-testing there are times when a component uses Redux state populated from\n// sibling or parent actions.\n// This is to allow our specs to optionally pass in a preloaded state and avoid the overhead of\n// manually dispatching actions w/in the spec or mocking the store itself.\nexport const buildStore = (preloadedState = {}) =>\n configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n // disable for test env to speed up specs (always disabled for prod)\n // https://redux-toolkit.js.org/api/getDefaultMiddleware#api-reference\n actionCreatorCheck: isDevelopmentEnv,\n immutableCheck: isDevelopmentEnv,\n serializableCheck: isDevelopmentEnv,\n }).concat(apiSlice.middleware),\n preloadedState,\n });\n\nconst store = buildStore();\n\nsetupListeners(store.dispatch);\n\nexport default store;\n","import {\n useState,\n useRef,\n useMemo,\n useCallback,\n useEffect,\n type RefObject,\n} from 'react';\nimport { isServer } from 'lib/ssr_utils';\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\n\nconst SidebarOpenDebounceMS = 200;\nconst SidebarCloseDebounceMS = 125;\n\ntype UseIsSidebarOpenArgs = {\n isNavItemHovered: boolean;\n isSidebarHovered: boolean;\n sidebarRef: RefObject<HTMLElement | null>;\n};\n\nexport function useIsSidebarOpen({\n sidebarRef,\n isNavItemHovered,\n isSidebarHovered,\n}: UseIsSidebarOpenArgs) {\n const [isOpen, setIsOpen] = useState(false);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n const openSidebarTimeout = useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeSidebarTimeout = useRef<ReturnType<typeof setTimeout> | null>(\n null,\n );\n\n const isMobile = useSidebarMobileBreakpoint();\n const isReducedMotion = useMemo(() => {\n if (isServer) return true;\n\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }, []);\n\n const openSidebar = useCallback(() => {\n if (isOpen || isMobile) return;\n\n if (openSidebarTimeout.current) {\n clearTimeout(openSidebarTimeout.current);\n }\n\n if (closeSidebarTimeout.current) {\n clearTimeout(closeSidebarTimeout.current);\n }\n\n openSidebarTimeout.current = setTimeout(() => {\n if (!isReducedMotion) setIsTransitioning(true);\n\n setIsOpen(true);\n }, SidebarOpenDebounceMS);\n }, [isMobile, isOpen, isReducedMotion]);\n\n const closeSidebar = useCallback(() => {\n if (!isOpen) return;\n\n if (openSidebarTimeout.current) {\n clearTimeout(openSidebarTimeout.current);\n }\n\n if (closeSidebarTimeout.current) {\n clearTimeout(closeSidebarTimeout.current);\n }\n\n closeSidebarTimeout.current = setTimeout(() => {\n if (!isReducedMotion) setIsTransitioning(true);\n\n setIsOpen(false);\n }, SidebarCloseDebounceMS);\n }, [isOpen, isReducedMotion]);\n\n // This effect sets transitioning state back to false once the css transition has completed (via open or close)\n useEffect(() => {\n if (!sidebarRef.current) return undefined;\n\n const { current: sidebar } = sidebarRef;\n\n function handleTransitionEnd(event: TransitionEvent) {\n if (event.propertyName !== 'width') return;\n\n setIsTransitioning(false);\n }\n\n sidebar.addEventListener('transitionend', handleTransitionEnd);\n\n return () => {\n sidebar.removeEventListener('transitionend', handleTransitionEnd);\n };\n }, [sidebarRef]);\n\n useEffect(() => {\n if (isTransitioning) return;\n\n if (isNavItemHovered) openSidebar();\n if (!isNavItemHovered && !isSidebarHovered) closeSidebar();\n }, [\n closeSidebar,\n isNavItemHovered,\n isSidebarHovered,\n isTransitioning,\n openSidebar,\n ]);\n\n useEffect(() => {\n setIsOpen(false);\n }, [isMobile]);\n\n return { isOpen, isTransitioning };\n}\n","import React, {\n createContext,\n useEffect,\n useMemo,\n useState,\n type RefObject,\n type ReactElement,\n} from 'react';\n\nimport { useIsSidebarOpen } from '../sidebar/hooks/use_is_sidebar_open';\n\nexport const SidebarContext = createContext<{\n isOpen: boolean;\n isTransitioning: boolean;\n isRenderingOpen: boolean;\n setIsNavItemHovered: React.Dispatch<React.SetStateAction<boolean>>;\n}>({\n isOpen: false,\n isTransitioning: false,\n isRenderingOpen: false,\n setIsNavItemHovered: () => {},\n});\n\nexport function SidebarContextProvider({\n sidebarRef,\n children,\n}: {\n sidebarRef: RefObject<HTMLElement | null>;\n children: ReactElement;\n}) {\n const [isNavItemHovered, setIsNavItemHovered] = useState(false);\n const [isSidebarHovered, setIsSidebarHovered] = useState(false);\n const { isOpen, isTransitioning } = useIsSidebarOpen({\n sidebarRef,\n isNavItemHovered,\n isSidebarHovered,\n });\n\n useEffect(() => {\n if (!sidebarRef.current) return undefined;\n const { current: sidebar } = sidebarRef;\n\n function handleMouseEnter() {\n setIsSidebarHovered(true);\n }\n\n function handleMouseLeave() {\n setIsSidebarHovered(false);\n setIsNavItemHovered(false);\n }\n\n sidebar.addEventListener('mouseenter', handleMouseEnter);\n sidebar.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n sidebar.removeEventListener('mouseenter', handleMouseEnter);\n sidebar.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, [sidebarRef]);\n\n const contextValue = useMemo(\n () => ({\n isOpen,\n isTransitioning,\n isRenderingOpen: isOpen || isTransitioning,\n setIsNavItemHovered,\n }),\n [isTransitioning, isOpen],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n {children}\n </SidebarContext.Provider>\n );\n}\n","import React, { type ReactNode } from 'react';\n\nimport { Ownership } from 'lib/generated_constants/ownership';\nimport { useAppsignal } from 'hooks/use_appsignal';\nimport { ErrorBoundary } from '@appsignal/react';\n\nimport { OwnershipProvider } from './context';\n\ntype OwnerBoundaryProps = {\n children: ReactNode;\n} & {\n [key in keyof typeof Ownership]?: boolean;\n};\n\nexport function OwnerBoundary({ children, ...props }: OwnerBoundaryProps) {\n const ownershipKey = Object.keys(props).find(\n (key) => props[key as keyof typeof props],\n );\n const owner = ownershipKey\n ? Ownership[ownershipKey as keyof typeof Ownership]\n : 'frontend';\n const appsignal = useAppsignal({ namespace: owner });\n\n return (\n <OwnershipProvider appsignal={appsignal} owner={owner}>\n {appsignal ? (\n <ErrorBoundary instance={appsignal}>{children}</ErrorBoundary>\n ) : (\n children\n )}\n </OwnershipProvider>\n );\n}\n","import { useMemo } from 'react';\nimport { Ownership } from 'lib/generated_constants/ownership';\nimport { useRailsContext } from 'hooks/use_rails_context';\n// eslint-disable-next-line no-restricted-imports\nimport {\n DEFAULT_NAMESPACE,\n initializeAppsignal,\n} from 'lib/telemetry/appsignal';\nimport { ENV } from 'lib/react_on_rails/env';\n\nexport function useAppsignal({\n namespace,\n}: {\n namespace: Ownership | typeof DEFAULT_NAMESPACE;\n}) {\n const railsContext = useRailsContext();\n const appsignal = useMemo(\n () =>\n initializeAppsignal({\n namespace,\n // Not all component trees are wrapped by rails context providers yet.\n // Particularly staff & participant pages.\n env: railsContext ? railsContext.env : ENV,\n }),\n [namespace, railsContext],\n );\n\n if (appsignal) {\n appsignal.addBreadcrumb = appsignal.addBreadcrumb.bind(appsignal);\n appsignal.addDecorator = appsignal.addDecorator.bind(appsignal);\n appsignal.addOverride = appsignal.addOverride.bind(appsignal);\n appsignal.createSpan = appsignal.createSpan.bind(appsignal);\n appsignal.demo = appsignal.demo.bind(appsignal);\n appsignal.send = appsignal.send.bind(appsignal);\n appsignal.sendError = appsignal.sendError.bind(appsignal);\n appsignal.use = appsignal.use.bind(appsignal);\n appsignal.wrap = appsignal.wrap.bind(appsignal);\n }\n\n return appsignal;\n}\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\n\nimport { SurveyBuilderConstants as Constants } from 'components/survey_builder';\n\nimport { answerPropType, questionPropType } from './prop_types';\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\nexport function QuestionSkipLogicSummaryCondition({\n conditionAnswer,\n conditionQuestion,\n conditionQuestionGroup,\n isLastCondition,\n questionId,\n skipLogicConditionOperator,\n skipLogicJoinMethod,\n}) {\n let questionReferenceName;\n if (conditionQuestion === undefined) {\n questionReferenceName = 'QUESTION NOT FOUND';\n } else if (\n conditionQuestion.uuid === questionId ||\n conditionQuestion.questionGroupId === questionId\n ) {\n questionReferenceName = 'this question';\n } else if (conditionQuestionGroup) {\n questionReferenceName = conditionQuestionGroup.text;\n } else {\n questionReferenceName = conditionQuestion.text;\n }\n\n const conditionAnswerText = !conditionAnswer\n ? 'ANSWER NOT FOUND'\n : conditionAnswer.text;\n\n const usesUnequalOperator =\n skipLogicConditionOperator === Constants.CONDITION_OPERATOR_NOT_EQL;\n\n return (\n <li>\n {conditionQuestion?.questionGroupId ? (\n <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n <strong>{conditionQuestion.text}</strong>\n - \n <strong>{conditionAnswerText}</strong>\n </Text>\n ) : (\n <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n <strong>{conditionAnswerText}</strong>\n </Text>\n )}\n <Text as=\"span\" size={TEXT_PROPS.size.sm}>\n in \n <strong>{questionReferenceName}</strong>\n is {usesUnequalOperator && 'not'} chosen\n {!isLastCondition && ` ${skipLogicJoinMethod.toUpperCase()}`}\n </Text>\n </li>\n );\n}\n\nQuestionSkipLogicSummaryCondition.propTypes = {\n conditionAnswer: answerPropType,\n conditionQuestion: questionPropType,\n conditionQuestionGroup: questionPropType,\n isLastCondition: propTypes.bool.isRequired,\n questionId: propTypes.string.isRequired,\n skipLogicConditionOperator: propTypes.string.isRequired,\n skipLogicJoinMethod: propTypes.string.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nvar _1 = \"wz6mN8n1MW2I2tCGRY0w\";\nvar _2 = \"BA3lT4gIMfopminHKDHG\";\nvar _3 = \"qMtZtIdjUyph1xzQdLJV\";\nvar _4 = \"sqn9crmdSBbuG0IxsEtU\";\nvar _5 = \"go4FkyUAHMuoE1mE9UsY\";\nexport { _1 as \"skipLogicSummary\", _2 as \"skipLogicSummaryLogic\", _3 as \"skipLogicSummaryLogicHeader\", _4 as \"skipLogicSummaryLogicList\", _5 as \"skipLogicSummaryTitle\" }\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\n\nimport { QuestionSkipLogicSummaryCondition } from './question_skip_logic_summary_condition';\n\nimport { skipLogicConditionPropType } from './prop_types';\n\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as styles from './question_skip_logic_summary.module.css';\n\nconst SURVEY_END_SECTION_TITLE = 'Finish';\n\nexport function QuestionSkipLogicSummaryConditions({\n questionId,\n skipLogicJoinMethod,\n skipLogicConditions,\n survey,\n targetSectionTitle,\n}) {\n const completedConditions = skipLogicConditions.filter(\n (condition) => condition.answerId && condition.questionId,\n );\n\n if (completedConditions.length === 0) {\n return null;\n }\n\n const sanitizedTargetSectionTitle =\n targetSectionTitle === undefined\n ? SURVEY_END_SECTION_TITLE\n : targetSectionTitle;\n\n const conditionRows = completedConditions.map((condition, index) => {\n const conditionQuestion = survey.questions[condition.questionId];\n const conditionQuestionGroup =\n conditionQuestion?.questionGroupId &&\n survey.questions[conditionQuestion.questionGroupId];\n\n return (\n <QuestionSkipLogicSummaryCondition\n conditionAnswer={survey.answers[condition.answerId]}\n conditionQuestion={conditionQuestion}\n conditionQuestionGroup={conditionQuestionGroup}\n isLastCondition={index === completedConditions.length - 1}\n key={condition.uuid}\n questionId={questionId}\n skipLogicConditionOperator={condition.operator}\n skipLogicJoinMethod={skipLogicJoinMethod}\n />\n );\n });\n\n return (\n <div className={styles.skipLogicSummaryLogic}>\n <Text\n className={styles.skipLogicSummaryLogicHeader}\n size={TEXT_PROPS.size.sm}\n >\n Skip to <strong>{sanitizedTargetSectionTitle}</strong> if:\n </Text>\n <ul className={styles.skipLogicSummaryLogicList}>{conditionRows}</ul>\n </div>\n );\n}\n\nQuestionSkipLogicSummaryConditions.propTypes = {\n questionId: propTypes.string.isRequired,\n skipLogicConditions: propTypes.arrayOf(skipLogicConditionPropType).isRequired,\n skipLogicJoinMethod: propTypes.string.isRequired,\n survey: propTypes.object.isRequired,\n targetSectionTitle: propTypes.string,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { TEXT_PROPS, Text } from '@user-interviews/ui-design-system';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { faCodeBranch } from 'lib/font_awesome/regular';\n\nimport { skipLogicPropType, surveySectionPropType } from './prop_types';\nimport { QuestionSkipLogicSummaryConditions } from './question_skip_logic_summary_conditions';\n\nimport * as styles from './question_skip_logic_summary.module.css';\n\nexport function QuestionSkipLogicSummary({\n questionId,\n screenerSections,\n skipLogics,\n survey,\n}) {\n const sectionTitlesByUuid = screenerSections\n .filter((section) => section !== undefined && section.uuid !== undefined)\n .reduce(\n (mappingById, section) => ({\n ...mappingById,\n [section.uuid]: section.title,\n }),\n {},\n );\n\n return (\n <div className={`${styles.skipLogicSummary} skip-logic-summary`}>\n <Text className={styles.skipLogicSummaryTitle} size={TEXT_PROPS.size.sm}>\n <Text as=\"span\" size={TEXT_PROPS.size.md}>\n <FontAwesomeIcon className=\"icon-left\" icon={faCodeBranch} />\n </Text>\n Applied skip logic\n </Text>\n {skipLogics.map((skipLogic) => (\n <QuestionSkipLogicSummaryConditions\n key={skipLogic.uuid}\n questionId={questionId}\n skipLogicConditions={skipLogic.skipLogicConditions}\n skipLogicJoinMethod={skipLogic.joinMethod}\n survey={survey}\n targetSectionTitle={sectionTitlesByUuid[skipLogic.targetSectionId]}\n />\n ))}\n </div>\n );\n}\n\nQuestionSkipLogicSummary.propTypes = {\n questionId: propTypes.string.isRequired,\n screenerSections: propTypes.arrayOf(surveySectionPropType).isRequired,\n skipLogics: propTypes.arrayOf(skipLogicPropType).isRequired,\n survey: propTypes.object.isRequired,\n};\n","import { useGetFirstSurveySection } from '../../hooks/use_get_first_survey_section';\nimport { useGetNextSurveySection } from '../../hooks/use_get_next_survey_section';\n\nexport const useGetSurveyPreviewSection = (\n surveyId,\n { previousSectionId = null, previousSectionResponses = null },\n) => {\n const isFirstSection = !previousSectionId;\n\n const firstSection = useGetFirstSurveySection(surveyId, {\n skip: !isFirstSection,\n });\n\n const nextSection = useGetNextSurveySection(surveyId, {\n previousSectionId,\n previousSectionResponses,\n skip: isFirstSection,\n });\n\n const queryResult = isFirstSection ? firstSection : nextSection;\n const previewCompleted =\n !isFirstSection && !nextSection.isFetching && !nextSection.data?.[0];\n\n // We want the latest loaded survey section\n // So when actively requesting \"next\" section, grab latest loaded \"next\" section\n // If there is no loaded \"next\" section, grab the first section till we finish fetching \"next\" one\n const currentSurveySection =\n (!isFirstSection && nextSection.data?.[0]) || firstSection.data?.[0];\n\n return {\n ...queryResult,\n isLoadingFirstSection: firstSection.isLoading,\n previewCompleted,\n surveySection: currentSurveySection,\n };\n};\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\nexport const useGetFirstSurveySection = (\n surveyId,\n { projectId = null, participantScreenerKey = null, skip = false } = {},\n) => {\n const queryResult = useGetSurveySectionsQuery(\n {\n surveyId,\n params: {\n limit: 1,\n meta: {\n projectId,\n participantId: participantScreenerKey?.participant_id,\n participantScreenerKey: participantScreenerKey?.key,\n },\n },\n },\n {\n skip,\n },\n );\n\n return {\n ...queryResult,\n firstSurveySection: queryResult.data?.[0],\n };\n};\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\nexport const useGetNextSurveySection = (\n surveyId,\n {\n previousSectionId = null,\n previousSectionResponses = null,\n projectId = null,\n participantScreenerKey = null,\n skip = false,\n } = {},\n) =>\n useGetSurveySectionsQuery(\n {\n surveyId,\n params: {\n limit: 1,\n submittedPreviewSectionId: previousSectionId,\n submittedPreviewResponsesAttributes: previousSectionResponses,\n meta: {\n projectId,\n participantId: participantScreenerKey?.participant_id,\n participantScreenerKey: participantScreenerKey?.key,\n },\n },\n },\n {\n skip,\n },\n );\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { useGetSurveyPreviewSection } from '../hooks/use_get_survey_preview_section';\nimport { useRequestedPreviewSectionParams } from '../hooks/use_requested_preview_section_params';\n\nimport { SurveyPreviewForm } from '../components/survey_preview_form';\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\nexport function SurveyPreview({\n logoUrl,\n projectDetails,\n publicSurvey,\n surveyId,\n teamName,\n title,\n optInForm,\n}) {\n const form = useForm({ shouldUnregister: true });\n\n const {\n requestedSectionParams,\n updateRequestedSectionParams,\n resetRequestedSectionParams: handleRestartPreview,\n } = useRequestedPreviewSectionParams();\n\n const { isFetching, isLoadingFirstSection, previewCompleted, surveySection } =\n useGetSurveyPreviewSection(surveyId, requestedSectionParams);\n\n const handleSubmitSection = form.handleSubmit((formValues) =>\n updateRequestedSectionParams(formValues, surveySection.id),\n );\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <FormProvider {...form}>\n <SurveyPreviewForm\n isLoading={isLoadingFirstSection}\n isSubmitting={isFetching}\n logoUrl={logoUrl}\n optInForm={optInForm}\n previewCompleted={previewCompleted}\n projectDetails={projectDetails}\n publicSurvey={publicSurvey}\n surveySection={surveySection}\n teamName={teamName}\n title={title}\n onRestartPreview={handleRestartPreview}\n onSubmitSection={handleSubmitSection}\n />\n </FormProvider>\n );\n}\n\nSurveyPreview.propTypes = {\n logoUrl: propTypes.string,\n optInForm: propTypes.object,\n projectDetails: propTypes.object,\n publicSurvey: propTypes.bool.isRequired,\n surveyId: propTypes.number,\n teamName: propTypes.string,\n title: propTypes.string.isRequired,\n};\n\nSurveyPreview.defaultProps = {\n optInForm: null,\n};\n","import React from 'react';\nimport propTypes from 'prop-types';\n\nimport { Page } from 'components/page';\nimport { OwnerBoundary } from 'components/owner_boundary';\n\nimport { useAlertFocus } from '../../hooks/use_alert_focus';\nimport { SurveyPreview } from './survey_preview';\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\nexport function SurveyPreviewPage({\n logoUrl,\n optInForm,\n projectDetails,\n publicSurvey,\n surveyId,\n teamName,\n title,\n}) {\n useAlertFocus();\n\n return (\n <OwnerBoundary RESEARCH_EXPERIENCE>\n <Page isPadded>\n <SurveyPreview\n logoUrl={logoUrl}\n optInForm={optInForm}\n projectDetails={projectDetails}\n publicSurvey={publicSurvey}\n surveyId={surveyId}\n teamName={teamName}\n title={title}\n />\n </Page>\n </OwnerBoundary>\n );\n}\n\nSurveyPreviewPage.propTypes = {\n logoUrl: propTypes.string,\n optInForm: propTypes.object,\n projectDetails: propTypes.object,\n publicSurvey: propTypes.bool.isRequired,\n surveyId: propTypes.number, // Because opt in form might not have a survey, this cannot be required\n teamName: propTypes.string,\n title: propTypes.string.isRequired,\n};\n\nSurveyPreviewPage.defaultProps = {\n optInForm: null,\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","// extracted by mini-css-extract-plugin\nvar _1 = \"TJi9zqadPTOyC5gz6BRu\";\nvar _2 = \"jHnNImjCVl9PvGMLs2wg\";\nvar _3 = \"JB4BkRvi_uTLHYXcQiJi\";\nvar _4 = \"ux2gkrWfKY27ZpqhxRo8\";\nvar _5 = \"K0jv5HLaqm8IdOuuUPZP\";\nvar _6 = \"PNcQrVL8GRhx2uV2JnDc\";\nvar _7 = \"k4Z4dVFkr45WyJsH8Jjj\";\nvar _8 = \"CfzV4WPD7dBdqYSoo3zJ\";\nvar _9 = \"xWlNHGUmAGfxDiaHCMMb\";\nvar _a = \"_PQr8FcZt7AYkpdesE4W\";\nvar _b = \"WGY9pgQZaDKH48nRGJAi\";\nvar _c = \"ghSRwZMPc8BUDh9B7RPr\";\nvar _d = \"ZF_hUaXPVReq1DAgQizJ\";\nvar _e = \"IASiXeOHWN0kvie4DWv9\";\nvar _f = \"C6oK68KR9JiskX06ocFo\";\nvar _10 = \"DW_HPJ0LyHgxgR3epmur\";\nvar _11 = \"KbWMn2iIgVPPqwRXLYmw\";\nvar _12 = \"cHFJeUAVz6JKDAAs_f7Y\";\nvar _13 = \"aYjbQ6OkPC_7SFBega6J\";\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 \"active\", _e as \"btn-link--neutral\", _f as \"btn-outline-secondary\", _10 as \"loadingBackground\", _11 as \"navigationItem\", _12 as \"participant-dashboard__project__info__status__string\", _13 as \"schedule-project-participant-page__time-slots\" }\n","import React, { useState, useEffect, useMemo } from 'react';\nimport type { MouseEvent as ReactMouseEvent } from 'react';\n\nimport classNames from 'classnames';\nimport { NavLink } from 'react-router';\nimport { Text } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { useSidebarContext } from '../sidebar/hooks/use_sidebar_context';\nimport { useIsActive } from './hooks/use_is_active';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './navigation_item.module.scss';\n\ntype LinkProps = {\n href: string;\n target?: string;\n};\n\ntype ReactRouterLinkProps = {\n to: string;\n};\n\ntype SidebarNavigationItemProps = {\n className?: string;\n event?: string;\n iconSrcBase: string;\n label: string;\n onHandleNavigating?: () => void;\n};\n\nexport function NavigationItem({\n className,\n event,\n iconSrcBase,\n label,\n onHandleNavigating,\n ...linkProps\n}:\n | (SidebarNavigationItemProps & LinkProps)\n | (SidebarNavigationItemProps & ReactRouterLinkProps)) {\n const { isRenderingOpen, setIsNavItemHovered } = useSidebarContext();\n const { trackEvent } = useTracking();\n const isActive = useIsActive(\n 'href' in linkProps ? linkProps.href : linkProps.to,\n );\n const [isHovered, setIsHovered] = useState(false);\n\n const SRCs = useMemo(\n () => ({\n active: `${iconSrcBase}-selected.svg`,\n hovered: `${iconSrcBase}-hover.svg`,\n default: `${iconSrcBase}.svg`,\n }),\n [iconSrcBase],\n );\n\n useEffect(() => {\n Object.values(SRCs).forEach((src) => {\n const img = new Image();\n img.src = src;\n });\n }, [SRCs]);\n\n const iconSrc = isActive\n ? SRCs.active\n : isHovered\n ? SRCs.hovered\n : SRCs.default;\n\n function handleMouseEnter() {\n setIsHovered(true);\n setIsNavItemHovered(true);\n }\n\n function handleMouseLeave() {\n setIsHovered(false);\n setIsNavItemHovered(false);\n }\n\n const baseProps = {\n 'aria-label': label,\n className: classNames(className, styles.navigationItem, {\n [styles.active]: isActive,\n }),\n onMouseEnter: handleMouseEnter,\n onFocus: handleMouseEnter,\n onBlur: handleMouseLeave,\n onMouseLeave: handleMouseLeave,\n };\n\n function handleClick(ev: ReactMouseEvent<HTMLAnchorElement>) {\n // Check if user uses CMD or Ctrl + Click to open new tab and not trigger loading animation.\n // This prevents having a persistent loading animation on current tab if no page refresh happens.\n const isCmdorCtrlPressed = ev.metaKey || ev.ctrlKey;\n\n if (onHandleNavigating && !isCmdorCtrlPressed) {\n onHandleNavigating();\n }\n\n if (!event) return;\n\n trackEvent({ event });\n }\n\n if ('href' in linkProps) {\n return (\n <a\n aria-current={isActive ? 'page' : undefined}\n href={linkProps.href}\n target={linkProps.target}\n onClick={(ev) => handleClick(ev)}\n {...baseProps}\n >\n <img alt=\"\" src={iconSrc} />\n {isRenderingOpen && <Text>{label}</Text>}\n </a>\n );\n }\n\n return (\n <NavLink to={linkProps.to} onClick={handleClick} {...baseProps}>\n <img alt=\"\" src={iconSrc} />\n {isRenderingOpen && <Text>{label}</Text>}\n </NavLink>\n );\n}\n","import { useLocation } from 'react-router';\nimport * as routes from 'lib/routes';\n\n// We have two primary navigation elements: Projects and Participants.\n// However, the pages the fall under these two categories span a number of different URL schemes.\n// For now, rather than changing our existing URL schemes to match the information architecture,\n// this hook instead just maps these URLs to their corresponding primary nav element.\n// eg:\n//\n// Project nav items:\n// - pre-builder /start\n// - builder /projects/builder/:id\n// - workspace /projects/:id\n//\n// Participant nav items:\n// - RPT /teams/:id/recruit-participants\n// - Hub /research-hub/participants\n// - Opt in forms /participant-populations/:id\n\nexport function useIsActive(path: string) {\n const { pathname } = useLocation();\n\n if (pathname === path) return true;\n\n if (path === routes.account_dashboard_path()) {\n const projectRoutes = [\n /\\/start/,\n /\\/projects\\/builder\\/\\d+/,\n /\\/projects\\/\\d+/,\n /\\/projects\\/review/,\n ];\n return projectRoutes.some((regExp) => pathname.match(regExp));\n }\n\n if (path === routes.search_participants_path()) {\n const participantRoutes = [\n /\\/teams\\/\\d+\\/recruit-participants/,\n /\\/research-hub\\/participants/,\n /\\/participant-populations\\/\\d+/,\n ];\n\n return participantRoutes.some((regExp) => pathname.match(regExp));\n }\n\n return false;\n}\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\n\nimport * as rawTagTypes from './tag_types';\n\nconst tagTypes = Object.values(rawTagTypes);\n\nexport const apiSlice = createApi({\n reducerPath: 'api',\n baseQuery: fetchBaseQuery({ baseUrl: '' }),\n tagTypes,\n endpoints: () => ({}),\n});\n","import { z } from 'zod';\nimport * as routes from 'lib/routes';\nimport { apiSlice } from 'api/base_slice';\nimport { POPULATION_ATTRIBUTES_TAG } from 'api/tag_types';\nimport {\n deserializeJSONApiResponse,\n headersAndCredentials,\n sortAlphabeticalByName,\n} from 'api/utils';\n\n// TODO: Update to use RSwag instead of explicitly declaring this\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst populationAttributesSchema = z.object({\n data: z.array(\n z.object({\n id: z.string(),\n attributes: z.object({\n name: z.string(),\n required: z.boolean(),\n type: z.string(),\n slug: z.string(),\n }),\n relationships: z.object({\n options: z.object({\n data: z.array(\n z.object({\n id: z.string(),\n }),\n ),\n }),\n }),\n meta: z.object({\n canDelete: z.boolean(),\n canUpdate: z.boolean(),\n }),\n }),\n ),\n included: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('participantPopulationAttributeSelectOption'),\n attributes: z.object({\n description: z.string().nullable(),\n isExclusive: z.boolean(),\n participantPopulationAttributeId: z.number(),\n position: z.number(),\n name: z.string(),\n }),\n }),\n )\n .optional(),\n});\n\nexport type PopulationAttributesRawResponse = z.infer<\n typeof populationAttributesSchema\n>;\nexport type PopulationAttributesAPIResponse = ReturnType<\n typeof sortAlphabeticalByName<ReturnType<typeof deserializeJSONApiResponse>>\n>;\n\ntype DeletePopulationAttributeParams = {\n participantPopulationId: string;\n participantPopulationAttributeId: string;\n};\n\ntype UpdatePopulationAttributeParams = {\n participantPopulationId: string;\n participantPopulationAttributeId: string;\n patch: string;\n};\n\ntype CreatePopulationAttributeParams = {\n participantPopulationId: string;\n name: string;\n type: string;\n};\n\nexport const populationAttributesApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n getPopulationAttributes: builder.query<\n PopulationAttributesAPIResponse,\n string\n >({\n query: (participantPopulationId: string) =>\n routes.api_participant_population_attributes_path(\n participantPopulationId,\n ),\n providesTags: [POPULATION_ATTRIBUTES_TAG],\n transformResponse: (\n response: PopulationAttributesRawResponse,\n ): PopulationAttributesAPIResponse =>\n sortAlphabeticalByName(deserializeJSONApiResponse(response)),\n }),\n deletePopulationAttribute: builder.mutation<\n void,\n DeletePopulationAttributeParams\n >({\n query: ({\n participantPopulationId,\n participantPopulationAttributeId,\n }) => ({\n url: routes.api_participant_population_attribute_path(\n participantPopulationId,\n participantPopulationAttributeId,\n ),\n method: 'DELETE',\n ...headersAndCredentials(),\n }),\n invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n }),\n updatePopulationAttribute: builder.mutation<\n PopulationAttributesRawResponse,\n UpdatePopulationAttributeParams\n >({\n query: ({\n participantPopulationId,\n participantPopulationAttributeId,\n ...patch\n }) => ({\n url: routes.api_participant_population_attribute_path(\n participantPopulationId,\n participantPopulationAttributeId,\n ),\n method: 'PATCH',\n body: {\n data: {\n attributes: patch,\n },\n },\n ...headersAndCredentials(),\n }),\n invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n }),\n createPopulationAttribute: builder.mutation<\n PopulationAttributesRawResponse,\n CreatePopulationAttributeParams\n >({\n query: ({ participantPopulationId, name, type }) => {\n const params = {\n data: {\n attributes: {\n name,\n type,\n },\n },\n };\n\n return {\n url: routes.api_participant_population_attributes_path(\n participantPopulationId,\n ),\n method: 'POST',\n body: params,\n ...headersAndCredentials(),\n };\n },\n invalidatesTags: [POPULATION_ATTRIBUTES_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useCreatePopulationAttributeMutation,\n useDeletePopulationAttributeMutation,\n useGetPopulationAttributesQuery,\n useUpdatePopulationAttributeMutation,\n} = populationAttributesApi;\n","import { useState } from 'react';\n\nimport { transformFormValuesToSubmissionParams } from '../../utils';\n\nconst EMPTY_SECTION_PARAMS = {\n previousSectionId: null,\n previousSectionResponses: [],\n};\n\nexport const useRequestedPreviewSectionParams = () => {\n const [requestedSectionParams, setRequestedSectionParams] =\n useState(EMPTY_SECTION_PARAMS);\n\n const updateRequestedSectionParams = (formValues, previousSectionId) => {\n const currentSectionResponses =\n transformFormValuesToSubmissionParams(formValues);\n\n setRequestedSectionParams({\n previousSectionId,\n previousSectionResponses: currentSectionResponses,\n });\n };\n\n const resetRequestedSectionParams = () =>\n setRequestedSectionParams(EMPTY_SECTION_PARAMS);\n\n return {\n requestedSectionParams,\n updateRequestedSectionParams,\n resetRequestedSectionParams,\n };\n};\n","import {\n createEntityAdapter,\n createSelector,\n createSlice,\n isAnyOf,\n} from '@reduxjs/toolkit';\n\nimport { participantsApi } from 'api/participants';\nimport { populationAttributesApi } from 'api/population_attributes';\n\nimport * as profileConstants from 'participant/participant_profile/constants';\n\nconst matchParticipantFetched = isAnyOf(\n participantsApi.endpoints.getParticipant.matchFulfilled,\n);\nconst matchPopulationAttributesFetched = isAnyOf(\n populationAttributesApi.endpoints.getPopulationAttributes.matchFulfilled,\n);\n\nconst populationAttributesAdapter = createEntityAdapter({\n selectId: (attribute) => attribute.slug,\n});\n\nexport const participantProfileSlice = createSlice({\n name: 'participantProfile',\n initialState: {\n dirtyPages: [],\n participant: undefined,\n populationAttributes: populationAttributesAdapter.getInitialState(),\n redirectTo: undefined,\n },\n reducers: {\n SET_DIRTY_PAGE: (state, action) => {\n state.dirtyPages = [\n ...new Set([...state.dirtyPages, action.payload.pageName]),\n ];\n },\n SET_REDIRECT_TO: (state, action) => {\n state.redirectTo = action.payload.redirectTo;\n },\n },\n extraReducers(builder) {\n builder.addMatcher(matchParticipantFetched, (state, action) => ({\n ...state,\n participant: action.payload,\n }));\n builder.addMatcher(matchPopulationAttributesFetched, (state, action) => {\n populationAttributesAdapter.setAll(\n state.populationAttributes,\n action.payload,\n );\n });\n },\n});\n\nexport const { SET_DIRTY_PAGE, SET_REDIRECT_TO } =\n participantProfileSlice.actions;\n\nexport const participantProfileSliceReducer = participantProfileSlice.reducer;\n\nexport const selectParticipant = (state) =>\n state.participantProfile.participant;\nexport const selectRedirectTo = (state) => state.participantProfile.redirectTo;\n\nexport const {\n selectAll: selectAllAttributes,\n selectById: selectAttributeBySlug,\n selectEntities: selectAttributes,\n} = populationAttributesAdapter.getSelectors(\n (state) => state.participantProfile.populationAttributes,\n);\n\nexport const selectAttributeBySlugWithMetadata = createSelector(\n [selectAttributeBySlug],\n (attribute) => ({\n ...attribute,\n defaultOptionName:\n profileConstants.attributeSlugsToDefaultOptionNames[attribute.slug],\n inputLabel:\n profileConstants.attributeSlugsToInputLabels[attribute.slug] ||\n attribute.name,\n }),\n);\n\nexport const selectEmploymentAttribute = (state) =>\n selectAttributeBySlugWithMetadata(\n state,\n profileConstants.EMPLOYMENT_STATUS_SLUG,\n );\n\nconst selectDirtyPages = (state) => state.participantProfile.dirtyPages;\n\nexport const selectPageIsDirty = createSelector(\n [selectDirtyPages, (_, pageName) => pageName],\n (dirtyPages, pageName) => dirtyPages.includes(pageName),\n);\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","/* eslint-disable camelcase */\n\nimport * as routes from 'lib/routes';\nimport {\n RequestBodyAttributes,\n RequestParameters,\n ResponseBody,\n} from 'lib/swagger_helper';\n\nimport { apiSlice } from 'api/base_slice';\nimport { PARTICIPANTS_TAG } from 'api/tag_types';\nimport { headersAndCredentials } from 'api/utils';\n\nexport type OptInFormParticipantRawResponse =\n ResponseBody<'upsertParticipantPopulationOptInFormParticipant'>;\n\nexport function transformResponse(response: OptInFormParticipantRawResponse) {\n const { data, meta } = response;\n\n if (!data) return undefined;\n\n return {\n id: data.id,\n ...data.attributes,\n optInFormKey: meta.optInFormKey,\n };\n}\n\nexport type OptInFormParticipantAPIResponse = ReturnType<\n typeof transformResponse\n>;\n\nconst participantPopulationOptInFormParticipantsApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n upsertParticipantPopulationOptInFormParticipant: builder.mutation<\n OptInFormParticipantAPIResponse,\n RequestBodyAttributes<'upsertParticipantPopulationOptInFormParticipant'> &\n RequestParameters<'upsertParticipantPopulationOptInFormParticipant'>\n >({\n query: (params) => ({\n url: routes.api_opt_in_form_participants_path(params.opt_in_form_id),\n method: 'PUT',\n body: params,\n ...headersAndCredentials(),\n }),\n invalidatesTags: [PARTICIPANTS_TAG],\n transformResponse,\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const { useUpsertParticipantPopulationOptInFormParticipantMutation } =\n participantPopulationOptInFormParticipantsApi;\n","import { useGetOptInFormQuery } from 'api/opt_in_forms';\n\nexport function useGetOptInForm(optInFormId: string) {\n return useGetOptInFormQuery({\n optInFormId,\n include: ['team'].join(','),\n });\n}\n","import React from 'react';\n\nimport {\n FlexContainer,\n Text,\n Heading,\n} from '@user-interviews/ui-design-system';\n\nimport stars from 'images/stars.png';\n\nexport function OptInSuccess() {\n return (\n <FlexContainer\n alignItems=\"center\"\n flexDirection=\"column\"\n gap={2}\n justifyContent=\"center\"\n width=\"sm\"\n >\n <img alt=\"Stars\" src={stars} />\n <Heading level={4} size=\"xxl\">\n You're all set!\n </Heading>\n <Text textAlign=\"center\">\n Thank you for joining our research panel! We'll be in touch when there\n is a study we think you'd be a good fit for.\n </Text>\n </FlexContainer>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { CardStack } from '@user-interviews/ui-design-system';\nimport { SetMessageHandler } from '@user-interviews/ui-design-system/lib/Toast/useToast';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { TitledPage } from 'common/routing';\n\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport { SurveySectionForm } from 'researcher/surveys/components/survey_section_form';\n\nimport { useGetFirstSurveySection } from '../hooks/use_get_first_survey_section';\nimport { useSurveyResponseSet } from '../hooks/use_survey_response_set';\n\ninterface SurveyProps {\n optInFormId: string;\n participantOptInFormKey: string;\n participantId: string;\n surveyId: string;\n setToastMessage: SetMessageHandler;\n onComplete: () => void;\n}\n\nexport function Survey({\n participantId,\n optInFormId,\n participantOptInFormKey,\n surveyId,\n setToastMessage,\n onComplete,\n}: SurveyProps) {\n const form = useForm<SurveySectionFormValues>({ shouldUnregister: true });\n\n const {\n currentSurveySection: responseSetSurveySection,\n handleSubmit,\n isLoading: isLoadingResponseSet,\n isSubmitting,\n responseSet,\n } = useSurveyResponseSet({\n optInFormId,\n participantId,\n participantOptInFormKey,\n surveyId,\n setToastMessage,\n });\n\n const { isLoading: isLoadingFirstSurveySection, firstSurveySection } =\n useGetFirstSurveySection({\n optInFormId,\n participantId,\n participantOptInFormKey,\n surveyId,\n skip: isLoadingResponseSet || !!responseSet,\n });\n\n const surveyCompleted = !!responseSet?.completedAt;\n useEffect(() => {\n if (surveyCompleted) onComplete();\n }, [surveyCompleted, onComplete]);\n\n const currentSurveySection = responseSetSurveySection || firstSurveySection;\n const isLoading = isLoadingResponseSet || isLoadingFirstSurveySection;\n\n const pageTitlePrefix = currentSurveySection?.title\n ? `${currentSurveySection.title} - `\n : '';\n const pageTitle = `${pageTitlePrefix}Survey`;\n\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <FormProvider {...form}>\n <TitledPage title={pageTitle}>\n <CardStack size=\"sm\">\n <SurveySectionForm\n cardSize=\"sm\"\n isLoading={isLoading || surveyCompleted}\n isSubmitting={isSubmitting}\n surveySection={currentSurveySection}\n onSubmit={form.handleSubmit(handleSubmit)}\n />\n </CardStack>\n </TitledPage>\n </FormProvider>\n );\n}\n","import { useState } from 'react';\n\nimport { MessageTypes } from '@user-interviews/ui-design-system';\nimport { SetMessageHandler } from '@user-interviews/ui-design-system/lib/Toast/useToast';\n\nimport {\n useCreateResponseSetMutation,\n useGetResponseSetsQuery,\n useUpdateResponseSetMutation,\n} from 'api/response_sets';\n\nimport { ErrorRenderer } from 'lib/errors';\n\nimport { SurveySectionFormValues } from 'participant/project_application/components/survey/types';\n\nimport {\n buildOptInResponseSetCreateParams,\n buildOptInResponseSetUpdateParams,\n} from 'researcher/surveys/utils';\n\nimport { responseSetOutdated } from '../utils';\n\ntype UseSurveyResponseSetParams = {\n optInFormId: string;\n participantId: string;\n participantOptInFormKey: string;\n surveyId: string;\n setToastMessage: SetMessageHandler;\n};\n\n// TODO Placeholder until swagger defs added to response set api endpoints\ntype SurveySection = {\n id: string;\n};\n\nexport const useSurveyResponseSet = ({\n optInFormId,\n participantId,\n participantOptInFormKey,\n surveyId,\n setToastMessage,\n}: UseSurveyResponseSetParams) => {\n const [currentSurveySection, setCurrentSurveySection] =\n useState<SurveySection | null>(null);\n\n const [\n createResponseSet,\n { data: createdResponseSetData, isLoading: createResponseSetLoading },\n ] = useCreateResponseSetMutation();\n\n const [\n updateResponseSet,\n { data: updatedResponseSetData, isLoading: updateResponseSetLoading },\n ] = useUpdateResponseSetMutation();\n\n const latestMutatedResponseSetData =\n updatedResponseSetData || createdResponseSetData;\n\n let responseSet = latestMutatedResponseSetData?.data;\n const surveyCompletedRedirect =\n latestMutatedResponseSetData?.meta.surveyCompletedRedirect;\n\n const isSubmitting = createResponseSetLoading || updateResponseSetLoading;\n\n const { data: existingResponseSetResponse, isLoading } =\n useGetResponseSetsQuery(\n {\n surveyId,\n participantId,\n limit: 1,\n meta: {\n optInFormId,\n participantId,\n participantOptInFormKey,\n },\n },\n { skip: isSubmitting || !!responseSet },\n );\n\n const existingResponseSet = existingResponseSetResponse?.[0];\n\n // only use an existing response set if it's not complete and not outdated, so P can retake survey from beginning\n const useExistingResponseSet =\n existingResponseSet &&\n !existingResponseSet.completedAt &&\n !responseSetOutdated(existingResponseSet);\n\n if (useExistingResponseSet) {\n responseSet ||= existingResponseSet; // ||= to prioritize latest mutated response set\n }\n\n const handleError = (error: Error) => {\n setToastMessage({\n type: MessageTypes.ERROR,\n message: ErrorRenderer.compileRtkQueryErrorMessage(\n error,\n 'submitting your survey responses',\n ),\n });\n };\n\n const handleSuccess = (responseSetData: {\n data: { surveySection: SurveySection };\n }) => {\n if (responseSetData.data.surveySection) {\n setCurrentSurveySection(responseSetData.data.surveySection);\n }\n };\n\n const handleUpdate = async (formValues: SurveySectionFormValues) => {\n const params = buildOptInResponseSetUpdateParams({\n formValues,\n optInFormId,\n participantId,\n participantOptInFormKey,\n responseSetId: responseSet.id,\n });\n\n await updateResponseSet(params)\n .unwrap()\n .then(handleSuccess)\n .catch(handleError);\n };\n\n const handleCreate = async (formValues: SurveySectionFormValues) => {\n const params = buildOptInResponseSetCreateParams({\n formValues,\n optInFormId,\n participantId,\n participantOptInFormKey,\n surveyId,\n });\n\n await createResponseSet(params)\n .unwrap()\n .then(handleSuccess)\n .catch(handleError);\n };\n\n const handleSubmit = async (formValues: SurveySectionFormValues) => {\n if (responseSet?.id) return handleUpdate(formValues);\n\n return handleCreate(formValues);\n };\n\n return {\n handleSubmit,\n responseSet,\n currentSurveySection:\n currentSurveySection ||\n (useExistingResponseSet && existingResponseSet?.surveySection),\n isLoading,\n isSubmitting,\n surveyCompletedRedirect,\n };\n};\n","import { differenceInDays, parseISO } from 'date-fns';\n\nconst RESPONSE_SET_TIME_LIMIT_IN_DAYS = 1;\n\nexport const responseSetOutdated = (responseSet: { updatedAt: string }) =>\n differenceInDays(new Date(), parseISO(responseSet.updatedAt)) >\n RESPONSE_SET_TIME_LIMIT_IN_DAYS;\n","import { useGetSurveySectionsQuery } from 'api/survey_sections';\n\ntype UseGetFirstSurveySectionParams = {\n optInFormId: string;\n participantId: string;\n participantOptInFormKey: string;\n skip: boolean;\n surveyId: string;\n};\n\nexport const useGetFirstSurveySection = ({\n optInFormId,\n participantId,\n participantOptInFormKey,\n skip = false,\n surveyId,\n}: UseGetFirstSurveySectionParams) => {\n const queryResult = useGetSurveySectionsQuery(\n {\n surveyId,\n params: {\n limit: 1,\n meta: {\n optInFormId,\n participantId,\n participantOptInFormKey,\n },\n },\n },\n {\n skip,\n },\n );\n\n return {\n ...queryResult,\n firstSurveySection: queryResult.data?.[0],\n };\n};\n","import React, { useEffect, useState } from 'react';\n\nimport {\n CardStack,\n Flex,\n MessageTypes,\n Toast,\n useToast,\n} from '@user-interviews/ui-design-system';\nimport { useLocation, useNavigate } from 'react-router';\n\nimport { useUpsertParticipantPopulationOptInFormParticipantMutation } from 'api/participant_population_opt_in_form_participants';\nimport { useLazyGetResponseSetsQuery } from 'api/response_sets';\n\nimport { ErrorRenderer } from 'lib/errors';\n\nimport { ProjectApplicationLoadingSkeleton } from 'participant/project_application/components/project_application_loading_skeleton';\n\nimport { useGetOptInForm } from '../hooks/use_get_opt_in_form';\nimport { useOptInFormKeyFromQueryUrl } from '../hooks/use_opt_in_form_key_from_url';\n\nimport {\n DefaultQuestionsForm,\n OptInFormFieldValues,\n} from './default_questions_form';\nimport { Header } from './header';\nimport { OptInSuccess } from './opt_in_success';\nimport { Survey } from './survey';\n\nimport * as styles from './opt_in.module.css';\n\ninterface OptInProps {\n optInFormId: string;\n}\n\n// Order of page loading:\n// - Load opt in form data\n// - If URL does not have P opt in form key data, that's it. page loaded\n// - But if there IS opt in form key data, then fetch latest existing response set\n// - Show default question form or survey depending on latest response set status\nexport function OptIn({ optInFormId }: OptInProps) {\n const [surveyComplete, setSurveyComplete] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n\n const { dismissMessage, messages, setMessage } = useToast();\n\n const {\n participantId: participantIdFromUrl,\n participantOptInFormKey: participantOptInFormKeyFromUrl,\n } = useOptInFormKeyFromQueryUrl();\n\n const location = useLocation();\n const navigate = useNavigate();\n\n const { data: optInForm } = useGetOptInForm(optInFormId);\n\n const [getExistingResponseSet, existingResponseSetResult] =\n useLazyGetResponseSetsQuery();\n\n const [\n upsertParticipant,\n { data: upsertedParticipant, isLoading: isUpsertingParticipant },\n ] = useUpsertParticipantPopulationOptInFormParticipantMutation();\n\n // Set the opt in form key data as query params in the URL for access on page refresh\n useEffect(() => {\n if (upsertedParticipant) {\n const { id: participantId, optInFormKey } = upsertedParticipant;\n navigate(\n `${location.pathname}?participant_id=${participantId}&participant_opt_in_form_key=${optInFormKey}`,\n );\n }\n }, [upsertedParticipant, navigate, location.pathname]);\n\n useEffect(() => {\n if (!optInForm) return;\n\n // No URL params so don't bother fetching existing P data\n if (!participantIdFromUrl || !participantOptInFormKeyFromUrl) {\n setIsLoading(false);\n return;\n }\n\n getExistingResponseSet({\n surveyId: optInForm.surveyId,\n participantId: participantIdFromUrl,\n limit: 1,\n meta: {\n optInFormId: optInForm.id,\n participantId: participantIdFromUrl,\n participantOptInFormKey: participantOptInFormKeyFromUrl,\n },\n }).finally(() => setIsLoading(false));\n }, [\n optInForm,\n getExistingResponseSet,\n participantIdFromUrl,\n participantOptInFormKeyFromUrl,\n ]);\n\n const handleSubmissionError = (error: Error) => {\n setMessage({\n type: MessageTypes.ERROR,\n message: ErrorRenderer.compileRtkQueryErrorMessage(\n error,\n 'submitting your responses',\n ),\n });\n };\n\n const onSubmitDefaultQuestionsForm = (formValues: OptInFormFieldValues) => {\n upsertParticipant({\n opt_in_form_id: optInForm.id,\n accept_data_consent_notice: formValues.acceptDataConsentNotice,\n accept_texts: formValues.acceptTexts,\n cloudflare_turnstile: formValues.cloudflareTurnstile,\n email: formValues.email,\n ...(formValues.firstName && { first_name: formValues.firstName }),\n ...(formValues.lastName && { last_name: formValues.lastName }),\n ...(formValues.phone?.phoneCountryCode && {\n phone_country_code: formValues.phone.phoneCountryCode,\n }),\n ...(formValues.phone?.phoneNumber && {\n phone_number: formValues.phone.phoneNumber,\n }),\n ...(formValues.timezone && { timezone_name: formValues.timezone }),\n })\n .unwrap()\n .catch(handleSubmissionError);\n };\n\n // TODO replace with own loading skeleton\n if (isLoading) return <ProjectApplicationLoadingSkeleton />;\n\n const submittedDefaultQuestionsForm = !!upsertedParticipant;\n const urlOptInFormKeyValid = existingResponseSetResult.isSuccess;\n\n const optInFormComplete =\n surveyComplete || (submittedDefaultQuestionsForm && !optInForm.surveyId);\n\n const showSurvey = submittedDefaultQuestionsForm || urlOptInFormKeyValid;\n\n const participantId =\n upsertedParticipant?.id || (urlOptInFormKeyValid && participantIdFromUrl);\n const optInFormKey =\n upsertedParticipant?.optInFormKey ||\n (urlOptInFormKeyValid && participantOptInFormKeyFromUrl);\n\n return (\n <div className={styles.optInFormPage}>\n <Toast autoDismiss messages={messages} onToastClosed={dismissMessage} />\n <Flex alignItems=\"center\" container flexDirection=\"column\">\n <CardStack size=\"sm\">\n <Header\n logoOnly={optInFormComplete}\n logoUrl={optInForm.logoUrl}\n optInFormDescription={optInForm.description}\n optInFormTitle={optInForm.title}\n teamName={optInForm.team.name}\n />\n\n {optInFormComplete ? (\n <OptInSuccess />\n ) : showSurvey ? (\n <Survey\n optInFormId={optInForm.id}\n participantId={participantId as string}\n participantOptInFormKey={optInFormKey as string}\n setToastMessage={setMessage}\n surveyId={optInForm.surveyId}\n onComplete={() => setSurveyComplete(true)}\n />\n ) : (\n <DefaultQuestionsForm\n isSubmitting={isUpsertingParticipant}\n optInForm={optInForm}\n onSubmitForm={onSubmitDefaultQuestionsForm}\n />\n )}\n </CardStack>\n </Flex>\n </div>\n );\n}\n","import { useLocation } from 'react-router';\n\nexport function useOptInFormKeyFromQueryUrl() {\n const location = useLocation();\n\n const searchParams = new URLSearchParams(location.search);\n\n const participantId = searchParams.get('participant_id');\n const participantOptInFormKey = searchParams.get(\n 'participant_opt_in_form_key',\n );\n\n return {\n participantId,\n participantOptInFormKey,\n };\n}\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport { z } from 'zod';\n\nimport { useZodSchema } from 'hooks/use_zod_schema';\nimport { useRailsContext } from 'hooks/use_rails_context';\nimport { DopeBrowserRouter } from 'components/dope_browser_router';\nimport store from 'store/store';\n\nimport { OptIn } from './components/opt_in';\n\nconst optInPageSchema = z.object({\n optInFormId: z.string(),\n});\n\nexport function OptInPage(props: unknown) {\n const { optInFormId } = useZodSchema(props, optInPageSchema);\n const railsContext = useRailsContext();\n\n return (\n <DopeBrowserRouter location={railsContext?.request.location ?? '/'}>\n <Provider store={store}>\n <OptIn optInFormId={optInFormId} />\n </Provider>\n </DopeBrowserRouter>\n );\n}\n","import React from 'react';\nimport { LoadingOverlay } from '@user-interviews/ui-design-system';\nimport { z } from 'zod';\nimport { useZodSchema } from 'hooks/use_zod_schema';\nimport { useGetOptInForm } from 'participant/opt_in/hooks/use_get_opt_in_form';\nimport { SurveyPreviewPage } from 'researcher/surveys/survey_preview/survey_preview/survey_preview_page';\n\nconst optInPreviewPageSchema = z.object({\n optInFormId: z.string(),\n});\n\nexport function OptInPreviewPage(props: unknown) {\n const { optInFormId } = useZodSchema(props, optInPreviewPageSchema);\n const { data: optInForm } = useGetOptInForm(optInFormId);\n\n return !optInForm ? (\n <LoadingOverlay />\n ) : (\n <SurveyPreviewPage\n logoUrl={optInForm.logoUrl}\n optInForm={optInForm}\n publicSurvey={false}\n surveyId={optInForm.surveyId}\n teamName={optInForm.team.name}\n title={optInForm.title}\n />\n );\n}\n","import { registerComponent } from 'lib/react_on_rails';\n\nimport withAuthUserContext from 'hoc/with_auth_user_context';\n\nimport { withPageProviders } from 'hoc/with_page_providers';\nimport { OptInPage } from './opt_in_page';\nimport { OptInPreviewPage } from './opt_in_preview_page';\n\nexport const OptInEntrypoint = withAuthUserContext(OptInPage);\nexport const OptInPreviewEntrypoint = withPageProviders(\n withAuthUserContext(OptInPreviewPage),\n);\n\nregisterComponent('OptInPage', OptInEntrypoint);\nregisterComponent('OptInPreviewPage', OptInPreviewEntrypoint);\n","// extracted by mini-css-extract-plugin\nvar _1 = \"Z5DmoCIG5yo9JljcboTA\";\nvar _2 = \"PmkMvIZViFGtxI01RESJ\";\nvar _3 = \"XSHRkeJML_qa75MgKJbX\";\nvar _4 = \"g_U2RoctRopmrOk18lzb\";\nexport { _1 as \"accountSettingsPopover\", _2 as \"link\", _3 as \"teamLink\", _4 as \"text\" }\n","import React, { forwardRef, type MouseEvent } from 'react';\nimport classNames from 'classnames';\nimport { useTracking } from 'react-tracking';\nimport { Flex } from '@user-interviews/ui-design-system';\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\n\n// eslint-disable-next-line local-rules/css_modules, local-rules/no_leaky_css_modules\nimport * as accountSettingsNavigationItemStyles from '../../account_navigation_item.module.scss';\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './account_menu_popover.module.scss';\n\nconst {\n NAVIGATION_ACCOUNT_CLICKED,\n NAVIGATION_SIGN_OUT_CLICKED,\n NAVIGATION_TEAMS_CLICKED,\n} = trackingEvents;\n\nexport const AccountMenuPopover = forwardRef<HTMLDivElement>((_props, ref) => {\n const { trackEvent } = useTracking();\n const authUserContext = useAuthUserContext();\n\n if (!authUserContext?.account) return null;\n\n const { account, team } = authUserContext;\n\n function handleLinkClick({ currentTarget }: MouseEvent<HTMLAnchorElement>) {\n const trackingEvent = currentTarget.dataset.event;\n if (!trackingEvent) return;\n\n trackEvent({ event: trackingEvent });\n }\n\n return (\n <div\n className={\n accountSettingsNavigationItemStyles.accountMenuPopoverContainer\n }\n ref={ref}\n >\n <Flex\n alignItems=\"flex-start\"\n className={classNames(styles.accountSettingsPopover)}\n container\n flexDirection=\"column\"\n >\n {team && (\n <Authorization to={TeamActionTypes.VIEW_MEMBERS}>\n <a\n className={styles.link}\n data-event={NAVIGATION_TEAMS_CLICKED}\n href={routes.team_members_path()}\n onClick={handleLinkClick}\n >\n Team settings\n </a>\n </Authorization>\n )}\n <a\n className={styles.link}\n data-event={NAVIGATION_ACCOUNT_CLICKED}\n href={routes.edit_account_path(account.id)}\n onClick={handleLinkClick}\n >\n Account settings\n </a>\n <a\n className={styles.link}\n data-event={NAVIGATION_SIGN_OUT_CLICKED}\n data-method=\"delete\"\n href=\"/accounts/signout\"\n onClick={handleLinkClick}\n >\n Sign out\n </a>\n </Flex>\n </div>\n );\n});\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ifHaWxzJApaaaXMQhaTN\";\nvar _2 = \"q_JAcmqf3jguxMUeNY2x\";\nvar _3 = \"Eilkb4fe8vxD3KkSBzo7\";\nvar _4 = \"LEac1e_DBMe4gPnVSgzf\";\nvar _5 = \"sVMmOOVIR1bZUvrJzxY2\";\nvar _6 = \"cHtrnXP35bF4gkbtPk0h\";\nvar _7 = \"t23wNS_GUoYISAyrPpBN\";\nvar _8 = \"gzgkzMNxCN6C3P5v6yaQ\";\nvar _9 = \"lQCYBtzgu7f0AU_9xRqR\";\nvar _a = \"BnI3yTU8FBuiG4dKRKYe\";\nvar _b = \"_EOjKws8kZOmafrjGJg7\";\nvar _c = \"ijdPHe4_2hyvE21Uit6y\";\nvar _d = \"IZlCPYN_dkKUeVY0df79\";\nvar _e = \"SR1QXWkIibsPWrq4Ec7u\";\nvar _f = \"x1v2t1BqrwSQ88P2Leyx\";\nvar _10 = \"XTeiZnwiDBBXGhKZ1A_Q\";\nvar _11 = \"W0vFLGpQWSRIpeTdPeGO\";\nvar _12 = \"wRIfQ3b53v1puSENjkVB\";\nvar _13 = \"CVRSr7TvXfHmouIOi1HR\";\nvar _14 = \"b2jEh17oobkfohB0ZJi_\";\nvar _15 = \"PW1VRyyHa3R9CjtVgV6a\";\nvar _16 = \"ohuJKe1pDDnppn93itwP\";\nvar _17 = \"UUKUDQBv0qTP2qEhpgta\";\nvar _18 = \"Ot5by4Zm3t1nt8d52fKL\";\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 \"accountDetails\", _e as \"accountMenuPopoverContainer\", _f as \"accountNavItemText\", _10 as \"accountSettingsNavigationItem\", _11 as \"accountSettingsNavigationItemContainer\", _12 as \"avatar\", _13 as \"boldedText\", _14 as \"btn-link--neutral\", _15 as \"btn-outline-secondary\", _16 as \"participant-dashboard__project__info__status__string\", _17 as \"schedule-project-participant-page__time-slots\", _18 as \"text\" }\n","import type { MouseEvent as ReactMouseEvent } from 'react';\n\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Text, TEXT_PROPS } from '@user-interviews/ui-design-system';\nimport { useTracking } from 'react-tracking';\n\nimport { trackingEvents } from 'lib/analytics';\n\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\n\nimport { useSidebarMobileBreakpoint } from 'hooks/use_sidebar_mobile_breakpoint';\nimport { useSidebarContext } from '../../hooks/use_sidebar_context';\nimport { AccountMenuPopover } from './components/account_menu_popover';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './account_navigation_item.module.scss';\n\nconst { NAVIGATION_ACCOUNT_POPOVER_OPENED } = trackingEvents;\n\nexport function AccountNavigationItem() {\n const { trackEvent } = useTracking();\n const ref = useRef<HTMLDivElement>(null);\n const { isRenderingOpen, setIsNavItemHovered } = useSidebarContext();\n const isMobile = useSidebarMobileBreakpoint();\n const [isAccountMenuOpen, setIsAccountMenuOpen] = useState(false);\n const authUserContext = useAuthUserContext();\n\n useEffect(() => {\n if (isRenderingOpen) return;\n\n setIsAccountMenuOpen(false);\n }, [isRenderingOpen]);\n\n useEffect(() => {\n function handleDocumentClick(event: MouseEvent) {\n if (!ref.current) return;\n const { clientX, clientY } = event;\n const { top, bottom, left, right } = ref.current.getBoundingClientRect();\n\n if (\n clientX >= left &&\n clientX <= right &&\n clientY >= top &&\n clientY <= bottom\n )\n return;\n\n setIsAccountMenuOpen(false);\n }\n\n function addEventListener() {\n window.addEventListener('click', handleDocumentClick);\n }\n\n function removeEventListener() {\n window.removeEventListener('click', handleDocumentClick);\n }\n\n addEventListener();\n\n return removeEventListener;\n }, []);\n\n function handlePopoverButtonClick(event: ReactMouseEvent) {\n event.stopPropagation();\n setIsAccountMenuOpen((prev) => !prev);\n }\n\n function handleMouseEnter() {\n setIsNavItemHovered(true);\n }\n\n function handleMouseLeave() {\n setIsNavItemHovered(false);\n }\n\n useEffect(() => {\n if (!isAccountMenuOpen) return;\n\n trackEvent({ event: NAVIGATION_ACCOUNT_POPOVER_OPENED });\n }, [isAccountMenuOpen, trackEvent]);\n\n if (!authUserContext?.account) return null;\n\n const { account, organization } = authUserContext;\n const isRenderingAccountMenu =\n isAccountMenuOpen && (isRenderingOpen || isMobile);\n\n return (\n <div className={styles.accountSettingsNavigationItemContainer}>\n <button\n aria-label=\"open account menu\"\n className={styles.accountSettingsNavigationItem}\n type=\"button\"\n onClick={handlePopoverButtonClick}\n onFocus={handleMouseEnter}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <div className={styles.avatar}>\n <span>{account.initials}</span>\n </div>\n\n {isRenderingOpen && (\n <div className={styles.accountDetails}>\n <Text className={styles.boldedText} size={TEXT_PROPS.size.sm}>\n {account.fullName}\n </Text>\n {organization && (\n <Text className={styles.text} size={TEXT_PROPS.size.sm}>\n {organization.name}\n </Text>\n )}\n </div>\n )}\n </button>\n {isRenderingAccountMenu && <AccountMenuPopover ref={ref} />}\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nvar _1 = \"GOtNPedALIgxJEGA5WKI\";\nvar _2 = \"bfLpZr2Gll2UzSE12qQ_\";\nvar _3 = \"xkGU3cvLGHrZhUtDe1_g\";\nvar _4 = \"ql7v321JNf2eCxRtYUOX\";\nvar _5 = \"cYvhDWWOpBjvIKrPy2rX\";\nvar _6 = \"ts3qwQY8yu8PnQCBayOA\";\nvar _7 = \"Vle68HDjZe4239MT898p\";\nvar _8 = \"GXuZdKLsqk7pzxiNFPce\";\nvar _9 = \"L3005TumQe0jN9S4et2g\";\nvar _a = \"afAFGGzd5i1JYG1KYhs4\";\nvar _b = \"JByjrMNXtursxRyO4Wk6\";\nvar _c = \"QFO8PDFPS5WY03w0XxQy\";\nvar _d = \"QOTnwtIOIdxn_QQZE0L8\";\nvar _e = \"W7h6R5cYtaPhbMVNuHJL\";\nvar _f = \"t2EkOKJAyRC2sJtGfCaQ\";\nvar _10 = \"yO_M6bb8Puc6XUD9skmm\";\nvar _11 = \"ZfEUB0JxyiPwMO96esDD\";\nvar _12 = \"k3fLPAhhtM7pNUCWP9S0\";\nvar _13 = \"oa5fjdCL9NS8BANEhjxQ\";\nvar _14 = \"r2khQ9dNmhqnCLt0lgQ5\";\nvar _15 = \"cBPRidm9bKMcNc6FT49U\";\nvar _16 = \"gVYnDGSxpZbIS2xRlkWm\";\nvar _17 = \"w_7XxcrTZPfV3tzW2BRL\";\nvar _18 = \"sp8XFlrb3u__HQCSh75j\";\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 \"isOpen\", _10 as \"isTransitioning\", _11 as \"logo\", _12 as \"logoWrapper\", _13 as \"mobileLogo\", _14 as \"navLeft\", _15 as \"navRight\", _16 as \"participant-dashboard__project__info__status__string\", _17 as \"schedule-project-participant-page__time-slots\", _18 as \"sidebar\" }\n","import React, { forwardRef, type ForwardedRef } from 'react';\nimport classNames from 'classnames';\n\nimport * as routes from 'lib/routes';\nimport { trackingEvents } from 'lib/analytics/constants';\nimport { useAuthUserContext } from 'hooks/use_auth_user_context';\nimport { TeamActionTypes } from 'lib/generated_constants/team_action_types';\n\nimport { Authorization } from 'common/authorization';\nimport { NavigationItem } from '../navigation_item';\nimport { AccountNavigationItem } from './components/account_navigation_item';\nimport { useSidebarContext } from './hooks/use_sidebar_context';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './sidebar.module.scss';\n\nconst {\n NAVIGATION_PARTICIPANTS_CLICKED,\n NAVIGATION_PLANS_CLICKED,\n NAVIGATION_PROJECTS_CLICKED,\n NAVIGATION_SUPPORT_CLICKED,\n} = trackingEvents;\n\ntype SidebarProps = {\n onHandlePageLoading?: () => void;\n};\n\nexport const Sidebar = forwardRef(\n (\n { onHandlePageLoading }: SidebarProps,\n sidebarRef: ForwardedRef<HTMLDivElement>,\n ) => {\n const { isOpen, isTransitioning } = useSidebarContext();\n const authContext = useAuthUserContext();\n\n const isAccount = !!authContext.account;\n const isStaff = !!authContext.user;\n const rootPath = isAccount ? routes.account_dashboard_path() : '/staff';\n\n return (\n <div\n className={classNames(\n styles.sidebar,\n { [styles.isOpen]: isOpen },\n { [styles.isTransitioning]: isTransitioning },\n )}\n ref={sidebarRef}\n >\n <a href={rootPath}>\n <img\n alt=\"User Interview logo\"\n className={styles.mobileLogo}\n src=\"/images/ui-logo-white.svg\"\n />\n </a>\n\n <nav aria-label=\"primary navigation\">\n <div className={styles.navLeft}>\n <div className={styles.logoWrapper}>\n <a href={rootPath}>\n <img\n alt=\"User Interview logo\"\n className={styles.logo}\n src={\n isOpen ? '/images/ui-logo-white.svg' : '/images/ui-icon.svg'\n }\n />\n </a>\n </div>\n\n {isAccount && (\n <>\n <NavigationItem\n event={NAVIGATION_PROJECTS_CLICKED}\n href={routes.account_dashboard_path()}\n iconSrcBase=\"/images/nav_icon_projects\"\n label=\"Projects\"\n onHandleNavigating={onHandlePageLoading}\n />\n\n <Authorization to={TeamActionTypes.SEARCH_PARTICIPANTS}>\n <NavigationItem\n event={NAVIGATION_PARTICIPANTS_CLICKED}\n href={routes.search_participants_path()}\n iconSrcBase=\"/images/nav_icon_participants\"\n label=\"Participants\"\n onHandleNavigating={onHandlePageLoading}\n />\n </Authorization>\n </>\n )}\n\n {isStaff && (\n <NavigationItem\n href=\"/staff\"\n iconSrcBase=\"/images/nav_icon_participants\"\n label=\"Staff\"\n />\n )}\n </div>\n <div className={styles.navRight}>\n {isAccount && (\n <>\n {!authContext?.teamSubscription?.paidSubscription && (\n <Authorization to={TeamActionTypes.VIEW_BILLING}>\n <NavigationItem\n event={NAVIGATION_PLANS_CLICKED}\n href={routes.team_billing_url()}\n iconSrcBase=\"/images/nav_icon_explore_plans\"\n label=\"Explore plans\"\n onHandleNavigating={onHandlePageLoading}\n />\n </Authorization>\n )}\n <NavigationItem\n event={NAVIGATION_SUPPORT_CLICKED}\n href=\"/support\"\n iconSrcBase=\"/images/nav_icon_support\"\n label=\"Support\"\n target=\"_blank\"\n />\n </>\n )}\n\n <AccountNavigationItem />\n </div>\n </nav>\n </div>\n );\n },\n);\n","import React from 'react';\n\nimport {\n Button,\n Card,\n CheckboxButton,\n FormControlLabel,\n FormGroup,\n Input,\n} from '@user-interviews/ui-design-system';\nimport { Controller, useForm } from 'react-hook-form';\n\nimport { PhoneNumber } from 'components/phone_number';\nimport { CloudflareTurnstile } from 'components/cloudflare_turnstile';\nimport { TimezoneSelect } from 'common/timezone_select';\n\nimport { useEnvVars } from 'hooks/use_env_vars';\n\nimport { Copy } from 'lib/generated_constants/recruiting';\n\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as surveyFormCardStyles from 'researcher/surveys/components/survey_section_form_card.module.css';\n// eslint-disable-next-line local-rules/no_leaky_css_modules\nimport * as styles from './opt_in.module.css';\n\nexport type OptInFormFieldValues = {\n acceptDataConsentNotice: boolean;\n acceptTexts: boolean;\n cloudflareTurnstile: string;\n email: string;\n phone: { phoneCountryCode: string; phoneNumber: string };\n firstName: string;\n lastName: string;\n timezone: string;\n};\n\ninterface Field {\n data?: { required: boolean };\n ui?: { hidden: boolean };\n}\n\ntype FieldName = 'firstName' | 'lastName' | 'phoneNumber' | 'timezoneName';\n\ninterface DefaultQuestionsFormProps {\n isSubmitting: boolean;\n optInForm: {\n team: { dataConsentNotice: { active: boolean; body: string } };\n schema: {\n fields: Record<FieldName, Field>;\n } | null;\n };\n onSubmitForm: (formValues: OptInFormFieldValues) => void;\n}\n\nexport function DefaultQuestionsForm({\n isSubmitting,\n optInForm,\n onSubmitForm,\n}: DefaultQuestionsFormProps) {\n const { cloudflareTurnstileCaptchaEnabled } = useEnvVars();\n\n const {\n register,\n control,\n handleSubmit,\n formState: { errors },\n } = useForm<OptInFormFieldValues>({\n mode: 'onChange',\n shouldUnregister: false,\n });\n\n const isFieldRequired = (fieldName: FieldName) =>\n optInForm.schema?.fields[fieldName]?.data?.required;\n const isFieldVisible = (fieldName: FieldName) =>\n !optInForm.schema?.fields[fieldName]?.ui?.hidden;\n\n const validatePhone = (value: {\n phoneCountryCode: string;\n phoneNumber: string;\n }) => {\n if (!isFieldRequired('phoneNumber')) {\n return true;\n }\n\n const { phoneCountryCode, phoneNumber } = value;\n\n if (!phoneCountryCode?.length) {\n return !phoneNumber.length\n ? 'Country code and phone number cannot be left blank.'\n : 'Country code cannot be left blank.';\n }\n\n if (!phoneNumber.length) {\n return 'Phone number cannot be left blank.';\n }\n\n return true;\n };\n\n return (\n <>\n <Card className={surveyFormCardStyles.surveyFormCard} size=\"sm\">\n <FormGroup\n errors={errors}\n inputKey=\"email\"\n label=\"Email\"\n labelHtmlFor=\"email\"\n required\n >\n <Input id=\"email\" {...register('email', { required: true })} />\n </FormGroup>\n\n {isFieldVisible('firstName') && (\n <FormGroup\n errors={errors}\n inputKey=\"firstName\"\n label=\"First name\"\n labelHtmlFor=\"firstName\"\n required={isFieldRequired('firstName')}\n >\n <Input\n id=\"firstName\"\n {...register('firstName', {\n required: isFieldRequired('firstName'),\n })}\n />\n </FormGroup>\n )}\n\n {isFieldVisible('lastName') && (\n <FormGroup\n errors={errors}\n inputKey=\"lastName\"\n label=\"Last name\"\n labelHtmlFor=\"lastName\"\n required={isFieldRequired('lastName')}\n >\n <Input\n id=\"lastName\"\n {...register('lastName', {\n required: isFieldRequired('lastName'),\n })}\n />\n </FormGroup>\n )}\n\n {isFieldVisible('phoneNumber') && (\n <>\n <Controller\n control={control}\n defaultValue={{ phoneCountryCode: '', phoneNumber: '' }}\n name=\"phone\"\n render={({ field: { value, onChange } }) => (\n <FormGroup errors={errors} inputKey=\"phone\">\n <PhoneNumber\n countryCode={{ defaultValue: '', name: 'phoneCountryCode' }}\n phoneNumber={{ defaultValue: '', name: 'phoneNumber' }}\n required={isFieldRequired('phoneNumber')}\n onCountryCodeChange={({\n value: phoneCountryCode,\n }: {\n value: string;\n }) => onChange({ ...value, phoneCountryCode })}\n onPhoneNumberChange={({\n value: phoneNumber,\n }: {\n value: string;\n }) => onChange({ ...value, phoneNumber })}\n />\n </FormGroup>\n )}\n rules={{ validate: validatePhone }}\n />\n\n <FormControlLabel\n {...register('acceptTexts')}\n Control={CheckboxButton}\n id=\"accept-texts-checkbox\"\n text={Copy.TEXT_MESSAGE_RELEASE_OPTIONAL}\n />\n </>\n )}\n\n {isFieldVisible('timezoneName') && (\n <Controller\n control={control}\n name=\"timezone\"\n render={({ field: { value, onChange } }) => (\n <FormGroup\n errors={errors}\n inputKey=\"timezone\"\n label=\"Timezone\"\n labelHtmlFor=\"timezone-select\"\n required={isFieldRequired('timezoneName')}\n >\n <TimezoneSelect\n className={undefined}\n defaultValue={undefined}\n id=\"timezone-select\"\n menuPlacement={undefined}\n modal={undefined}\n name=\"timezone select!\"\n useSystemFallback={undefined}\n value={value}\n onSelectChange={(option: { value: string }) =>\n onChange(option.value)\n }\n />\n </FormGroup>\n )}\n rules={{ required: isFieldRequired('timezoneName') }}\n />\n )}\n\n {optInForm.team.dataConsentNotice?.active && (\n <FormGroup>\n <FormControlLabel\n {...register('acceptDataConsentNotice')}\n className={styles.consentNotice}\n Control={CheckboxButton}\n id=\"accept-data-consent-notice-checkbox\"\n text={\n <div\n className={styles.consentNoticeBody}\n dangerouslySetInnerHTML={{\n __html: optInForm.team.dataConsentNotice.body,\n }}\n />\n }\n />\n </FormGroup>\n )}\n\n {cloudflareTurnstileCaptchaEnabled && (\n <Controller\n control={control}\n name=\"cloudflareTurnstile\"\n render={({ field: { onChange } }) => (\n <FormGroup errors={errors} inputKey=\"cloudflareTurnstile\">\n <CloudflareTurnstile onSuccess={onChange} />\n </FormGroup>\n )}\n rules={{ required: 'Verification cannot be left blank.' }}\n />\n )}\n </Card>\n\n <div>\n <Button\n className={styles.submitButton}\n isLoading={isSubmitting}\n loadingText=\"Submitting\"\n onClick={handleSubmit(onSubmitForm)}\n >\n Continue\n </Button>\n </div>\n </>\n );\n}\n","import { useEffect } from 'react';\n\nexport const useAlertFocus = () => {\n useEffect(() => {\n // For a11y on Safari browsers:\n // if any Toast errors are present, then use Javascript to set focus\n // to ensure the screen reader reads it first\n const alertElements = document.getElementsByClassName('Alert__message');\n if (alertElements.length) {\n alertElements[0].focus();\n }\n }, []);\n};\n","import { useTracking } from 'react-tracking';\nimport { reactTrackingEvent } from 'lib/analytics';\nimport type { TrackingHook } from 'react-tracking';\n\n// Force the Track component to be synchronous\nexport type SyncTrackingHook = Omit<TrackingHook, 'Track'> & {\n Track: React.ComponentType<{ children?: React.ReactNode }>;\n};\n\nexport const useTrackingWithDefaultDispatch = (\n trackingData = {},\n): SyncTrackingHook =>\n useTracking(trackingData, {\n dispatch: reactTrackingEvent,\n }) as SyncTrackingHook;\n","import * as BuilderConstants from 'components/survey_builder/constants';\n\nexport const PICK_ONE_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_ONE}${BuilderConstants.RESPONSE_CLASS_ANSWER}` as const;\nexport const PICK_MANY_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_ANY}${BuilderConstants.RESPONSE_CLASS_ANSWER}` as const;\nexport const SHORT_ANSWER_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_STRING}` as const;\nexport const LONG_ANSWER_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_TEXT}` as const;\nexport const BOOLEAN_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_BOOLEAN}${BuilderConstants.RESPONSE_CLASS_BOOLEAN}` as const;\nexport const DATE_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_DATE}` as const;\nexport const FLOAT_INPUT_GROUP_KEY =\n `${BuilderConstants.QUESTION_PICK_NONE}${BuilderConstants.RESPONSE_CLASS_FLOAT}` as const;\n","export const BOOLEAN_TRUE_VALUE = 'Yes';\n\nexport const REQUIRED_ERROR_MESSAGE = 'This question cannot be left blank.';\nexport const REQUIRED_OTHER_VALUE_ERROR_MESSAGE =\n 'Write-in cannot be left blank.';\n\nexport * from 'components/survey_builder/constants';\nexport * from 'participant/project_application/components/survey/constants';\n","import * as routes from 'lib/routes';\n\nimport { apiSlice } from 'api/base_slice';\n\nimport { POPULATION_INVITE_FILTERS_TAG } from 'api/tag_types';\nimport { deserializeJSONApiResponse, headersAndCredentials } from 'api/utils';\n\nexport const populationInviteFiltersApi = apiSlice.injectEndpoints({\n endpoints: (builder) => ({\n createInviteFilter: builder.mutation({\n query: ({ populationId, attributes }) => ({\n url: routes.api_participant_population_invite_filters_path({\n participant_population_id: populationId,\n }),\n method: 'POST',\n body: {\n data: { attributes },\n },\n ...headersAndCredentials(),\n }),\n invalidatesTags: [POPULATION_INVITE_FILTERS_TAG],\n }),\n getInviteFilter: builder.query({\n query: ({ populationId, id }) =>\n routes.api_participant_population_invite_filter_path(id, {\n participant_population_id: populationId,\n }),\n providesTags: (_result, _error, { id }) => [\n { type: POPULATION_INVITE_FILTERS_TAG, id },\n ],\n transformResponse: deserializeJSONApiResponse,\n }),\n updateInviteFilter: builder.mutation({\n query: ({ populationId, id, attributes }) => ({\n url: routes.api_participant_population_invite_filter_path(id, {\n participant_population_id: populationId,\n }),\n method: 'PATCH',\n body: {\n data: { attributes },\n },\n ...headersAndCredentials(),\n }),\n invalidatesTags: [POPULATION_INVITE_FILTERS_TAG],\n }),\n }),\n overrideExisting: 'throw',\n});\n\nexport const {\n useGetInviteFilterQuery,\n useCreateInviteFilterMutation,\n useUpdateInviteFilterMutation,\n} = populationInviteFiltersApi;\n"],"names":["useZodSchema","unknownProps","schema","logError","useErrorLogger","useMemo","includes","process","parse","error","firstNameAccessor","lastNameAccessor","phoneNumberAccessor","timezoneAccessor","sourceTypeAccessor","participantLabelsAccessor","createdAtAccessor","daysSinceInvitedAccessor","lastBulkEmailAccessor","daysSinceAppliedAccessor","daysSinceParticipatedAccessor","totalIncentivesEarnedAccessor","unsubscribedAccessor","populationAttributeAccessorPrefix","buildColumns","canViewPii","columnOrder","hiddenColumns","maxIncentiveYear","minIncentiveYear","populationAttributes","hiddenColumnsLookUp","buildHiddenColumnsLookUp","populationAttributesLookUp","buildPopulationAttributeColumnsLookUp","baseColumnLookUp","buildHubDefaultColumnsLookUp","columnMap","Map","order","length","completeColumnOrder","buildHubDefaultColumnOrder","columns","forEach","columnAccessor","column","get","push","yearlyIncentiveAccessors","populationAttributeAccessors","lookup","hiddenColumn","set","accessor","Header","hidden","id","meta","nonEditableMetaData","buildYearlyIncentiveColumnsLookUp","lookUp","populationAttribute","editable","name","yearlyIncentiveYears","year","missingPopulationAttributes","canDelete","canUpdate","map","rearrangeColumnOrder","activeAccessor","overAccessor","reorderColumns","activeColumnIndex","indexOf","activeColumn","splice","spliceIndex","updateHiddenColumns","index","years","currentYear","MEDIA_BREAKPOINT_LG","MEDIA_BREAKPOINT_MD","MEDIA_BREAKPOINT_SM","MEDIA_BREAKPOINT_XS","mediaQuery","mediaQueryList","isServer","window","matchMedia","_useState2","useState","matches","mediaQueryMatches","setMediaQueryMatches","handleMediaQueryChange","useCallback","useEffect","addEventListener","addListener","removeEventListener","removeListener","_f","_10","_11","CONDITION_OPERATOR_EQL","CONDITION_OPERATOR_NOT_EQL","JOIN_METHOD_OR","JOIN_METHOD_AND","OPT_IN_FORM_TYPE","SCREENER_FORM_TYPE","questionPropType","propTypes","text","isRequired","uuid","answerPropType","skipLogicConditionPropType","answerId","operator","questionId","skipLogicPropType","joinMethod","skipLogicConditions","targetSectionId","surveySectionPropType","title","useEnvVars","useClientHasRendered","ENV","billingPagePaidSubContactUrl","BILLING_PAGE_PAID_SUB_CONTACT_URL","billingPageFreeTrialContactUrl","BILLING_PAGE_FREE_TRIAL_CONTACT_URL","chiliPiperRouterKey","CHILIPIPER_TEAMS_PLANS_INBOUND_ROUTER_KEY","isWorkspaceEmailStatsEnabled","WORKSPACE_EMAIL_STATS_ENABLED","isSubscriptionSelfServeEnabled","SUBSCRIPTION_SELF_SERVE_ENABLED","isPageThemesEnabled","PAGE_THEMES_ENABLED","cloudflareTurnstileCaptchaSiteKey","CLOUDFLARE_TURNSTILE_CAPTCHA_SITE_KEY","cloudflareTurnstileCaptchaEnabled","CLOUDFLARE_TURNSTILE_CAPTCHA_ENABLED","participantQnrSignupBuffer","PARTICIPANT_QNR_SIGNUP_BUFFER","siteBaseUrl","SITE_BASE_URL","paragonConfig","PARAGON_CONFIG","_13","TEST_ID","TITLE_HEIGHT","GREETING_HEIGHT","SUB_GREETING_HEIGHT","TITLE_WIDTH","GREETING_WIDTH","SUB_GREETING_WIDTH","ProjectApplicationLoadingSkeleton","hideHeader","React","Flex","alignItems","container","flexDirection","className","styles","headerStyles","LoadingSkeleton","height","width","CardStack","size","Card","SurveySectionLoadingSkeleton","_12","Page","children","isCentered","isFullHeight","isPadded","sidebarRef","useRef","isNavigationItemTriggeringPageLoad","setIsNavigationItemTriggeringPageLoad","classNames","LoadingOverlay","visible","SidebarContextProvider","Sidebar","ref","onHandlePageLoading","handlePageLoading","Main","Footer","useSidebarMobileBreakpoint","useMediaQuery","FILTER_KEYS","email","created_at","first_name","labels","last_applied_at","last_invited_at","last_participated_at","last_name","opt_in_form","phone_number","project_participation","source","yearly_payment","unsubscribed","getParamKey","generateUUID","getDefaultParams","isNotSetOperand","key","orIsNotSet","defaultFilterRuleOperand","operands","type","defaultLabelOperand","PARTICIPANT_LABEL_OPERANDS","defaultBooleanOperand","FIELD_FILTER_OPERANDS","defaultActivityStatDateOperand","ACTIVITY_STAT_FILTER_OPERANDS","defaultDecimalOperand","INCENTIVE_OPERANDS","defaultIntegerOperand","defaultStringOperand","standardFilters","availableOperands","defaultFilterRuleShape","activityStat","field","operand","params","participantPopulationAttributeId","PROJECT_OPERANDS","addRowLabel","OPT_IN_FORM_OPERANDS","string","integer","boolean","date","isSetOperand","decimal","buildFilterList","attributes","attribute","defaultAttributeFilterRuleOperand","ATTRIBUTE_FILTER_OPERANDS","POPULATION_ATTRIBUTE_IS_NOT_SET_OPERANDS","POPULATION_ATTRIBUTE_IS_SET_OPERANDS","createPopulationAttributeFilter","_objectSpread","optInFormsApi","apiSlice","injectEndpoints","endpoints","builder","getOptInForm","query","optInFormId","include","routes","transformResponse","deserializeJSONApiResponse","providesTags","_result","_error","OPT_IN_FORMS_TAG","updateOptInForm","mutation","url","method","body","data","headersAndCredentials","invalidatesTags","overrideExisting","useGetOptInFormQuery","useUpdateOptInFormMutation","ConfirmationModal","buttonText","confirmEvent","message","openEvent","onConfirm","onRequestClose","isOpen","TrackedModal","event","ModalHeader","titleId","ModalBody","ModalFooter","Button","variant","onClick","TrackedButton","defaultProps","ConditionSelect","isReadonly","position","onUpdate","handleChange","target","value","disabled","onChange","Constants","Actions","skipLogicCondition","skipLogicId","skipLogicFunctions","useContext","SurveyContext","handleRemove","removeCondition","FontAwesomeIcon","icon","faMinus","handleAdd","addCondition","faPlus","AnswerSelect","answerIds","survey","answers","answer","errors","OperatorSelect","questionType","Controls","skipLogicOptions","handleQuestionChanged","conditionQuestion","questions","controls","pick","SingleSelect","question","inputId","modal","options","label","ConditionRow","skipLogic","_useContext$skipLogic","updateSkipLogic","update","updateSkipLogicCondition","updateCondition","handleSkipLogicUpdate","changes","handleConditionUpdate","Errors","hasConditionErrors","conditionIds","find","Object","keys","hasErrors","SkipLogic","sectionId","onRemove","handleUpdate","targetableSections","sectionIds","slice","section","sections","conditionId","getSkipLogicOptions","groupedOptions","questionIds","reduce","acc","questionGroupQuestions","questionGroupQuestionId","questionGroupQuestion","SectionSkipLogic","addSkipLogic","add","removeSkipLogic","remove","skipLogicIds","skipLogics","leadingIcon","faPlusCircle","SkipLogicModal","onRequestCancel","skipLogicsIncomplete","undefined","every","condition","Modal","MODAL_SIZES","LARGE","surveyPropType","SurveyUpgradeModal","onUpgradeClick","trackingEvents","SURVEY_UPGRADE_MODAL_SHOWN","PREMIUM_SURVEY_FEE","LegacyBundleMonthlyDisplayPrices","SubscriptionNames","CONSUMER","SURVEY_UPGRADE_ACCEPTED","isRemovableQuestion","isVisible","questionUUID","sectionUUID","onDuplicate","account","AuthUserContext","TrackedIconButton","action","ariaLabel","BUILD_PROJECT_SCREENER_QUESTION_DUPLICATED","stopPropagation","SURVEY_REMOVE_QUESTION","eventData","account_id","QualifyLogicSelect","isPickOne","onAnswerChange","handleQualifyLogicChange","selected","qualifyLogic","recruitApiEnabled","useFeatureFlag","featureName","Features","RECRUIT_API","isEnabled","option","inputKey","Editing","isEditing","isRemovableAnswer","onAdd","isBoolean","useFormContext","formState","isScreenerForm","SurveyBuilderContext","formType","answerName","answerInput","useController","defaultValue","rules","required","_useSortable","useSortable","listeners","setNodeRef","transform","transition","style","CSS","Translate","toString","handleTextChange","eventValue","split","NEW_LINE_REGEX","optionNumber","display","assign","faGripVertical","IconButton","Pick","qualifier","PickNone","responseClass","resize","OtherAnswer","Text","Answer","_useContext$answerFun","answerFunctions","addAnswer","addAnswers","addBatch","removeAnswer","updateAnswer","filter","onAddBatch","Answers","_useContext","moveAnswer","move","sensors","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","useDroppable","handleDragEnd","active","over","surveyAnswers","isOtherAnswer","answerUUIDs","DndContext","collisionDetection","closestCenter","modifiers","restrictToVerticalAxis","onDragEnd","SortableContext","items","strategy","verticalListSortingStrategy","isKey","isMandatory","isNew","_14","_16","Accept","questionGroupPick","currentOption","nextKey","justifyContent","RemoveButton","trackingEvent","trackEvent","useTracking","useAutosizeGridTextArea","textAreaRef","questionGroupId","questionGroup","useAutosizeTextArea","dependencies","resizeTextArea","scrollHeight","resizeListener","Resize","_18","_19","_1a","_1b","_1c","_1d","_1e","_1f","_20","_21","_22","GridAnswer","isRemovable","onUpdateColumn","setTextAreaRef","answerText","placeholder","rows","SURVEY_REMOVE_GRID_COLUMN","textAlign","GridQuestion","questionName","questionText","questionInput","SURVEY_REMOVE_GRID_ROW","Grid","isMobile","updateQuestion","questionFunctions","_useContext$questionG","questionGroupFunctions","addColumn","addRow","removeColumn","removeRow","updateColumn","firstQuestion","firstAnswers","answerCount","questionCount","handleAnswerChange","answerUUID","handleQuestionChange","handleAddColumn","handleAddRow","handleRemoveColumn","answerIndex","handleRemoveRow","handleUpdateColumn","Alert","removeBorderLeft","MessageTypes","INFO","boxStyle","MIN_COLUMN_COUNT","MIN_ROW_COUNT","MAX_ROW_COUNT","SURVEY_ADD_GRID_ROW","MAX_COLUMN_COUNT","SURVEY_ADD_GRID_COLUMN","fixedWidth","faBullseyePointer","Hint","FormGroup","labelHelperText","labelHtmlFor","Input","helpText","handleHintChange","iconMap","faFont","pick_one","pick_any","faDotCircle","faCalendarAlt","faHashtag","SurveyFormQuestionIconLabel","SurveyNewAttributeModal","onClose","onSave","attributeTypes","QUESTION_TYPE_BOOLEAN","QUESTION_TYPE_DATE","QUESTION_TYPE_FLOAT","defaultAttributeType","dataTypeOptions","entries","updatedAttribute","shouldCloseOnOverlayClick","MEDIUM","handleInputChange","MapAttribute","setToastMessage","_slicedToArray","newAttributeModalVisible","setNewAttributeModalVisible","_useState4","newAttribute","setNewAttribute","participantPopulationId","useParams","createParticipantPopulationAttribute","useCreatePopulationAttributeMutation","mappedAttributeIds","values","current","concat","attributeOptions","isDisabled","selectedAttribute","attributeOption","newAttr","handleAttributeModalClose","async","_await$createParticip","createdAttribute","ERROR","ErrorRenderer","compileRtkQueryErrorMessage","SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_CREATED","participant_population_attribute_id","labelTooltip","CreatableSelect","allowCreateWhileLoading","createOptionPosition","formatOptionLabel","inputValue","isSearchable","isValidNewOption","indicatorSeparator","provided","selectedOption","SURVEY_PARTICIPANT_POPULATION_ATTRIBUTE_SELECTED","onCreateOption","KeyQuestion","pageTitle","keyQuestionToggleInputId","tooltipText","ToggleInput","isChecked","labelLeft","labelText","onToggle","currentTarget","checked","SURVEY_KEY_QUESTION_SLIDER_CLICKED","is_enabled","Tooltip","OtherOptionCheckbox","otherAnswerUuid","questionUuid","_useContext2$answerFu","addOther","SURVEY_OTHER_OPTION_CHECKBOX_CLICKED","Required","SURVEY_REQUIRED_CHECKBOX_CLICKED","QuestionControls","otherAnswer","isPickOneOrAny","isQuestionGroup","serverErrors","errorMessage","whiteSpace","PropTypes","questionTypes","Type","filteredQuestionTypes","Question","questionSkipLogics","screenerSections","sectionAnswers","sectionQuestions","_useFormContext","getValues","_useContext$questionF","addQuestion","determineQuestionType","determineType","duplicateQuestion","duplicate","removeQuestion","updateQuestionType","updateType","isOptInForm","_useGetPopulationAttr","useGetPopulationAttributesQuery","skip","participantPopulationAttributes","isLoading","setEditing","hasFrontendErrors","some","isIncompletePage","formData","pageStatuses","controlsVisible","filteredAttributes","handleQuestionSelected","handleChangeType","handleEnterPress","keyCode","Keycodes","hasSkipLogic","questionNumber","count","Draggable","draggableId","isDragDisabled","snapshot","editing","dragging","isDragging","innerRef","draggableProps","role","tabIndex","onKeyDown","dragHandleProps","e","QuestionSkipLogicSummary","AddNewPageButton","onAddSection","SectionControls","_useContext2","setSurveyDuplicateBeforeEdit","handleAddQuestion","handleEditSkipLogic","edit","skipLogicCTA","SURVEY_ADD_NEW_QUESTION","SURVEY_EDIT_SKIP_LOGIC","SURVEY_ADD_SKIP_LOGIC","faCodeBranch","SectionDropdown","removeable","Dropdown","DropdownToggle","removeCaret","faEllipsisV","DropdownMenu","TrackedDropdownItem","SURVEY_DUPLICATE_PAGE_CLICKED","DropdownItem","Section","allowEmpty","sectionFunctions","setModalProps","sectionQuestion","hasSkipLogicErrors","SURVEY_DELETE_PAGE_MODAL_SHOWN","SURVEY_DELETE_PAGE_CONFIRM_CLICKED","handleAddSection","handleDuplicateSection","sectionQuestionCount","helperText","Droppable","droppableId","noPadding","CardSizes","Accordion","defaultActiveKey","flush","AccordionItem","borderless","AccordionToggle","chevronLateral","chevronLeft","collapsedText","eventKey","AccordionCollapse","getSkipLogicsInvolvingQuestion","skipLogicsInvolvingThisQuestion","hasConditionsInvolvingThisQuestion","conditions","Sections","hasSections","handleMove","result","DragDropContext","SurveyBuilder","Component","constructor","_args","state","checkPremium","this","props","upgradeModalIsOpen","modalProps","surveyDuplicateBeforeEdit","getMemoizedSurveyContextValue","memoizeOne","contextProps","handleAddAnswers","tracking","SURVEY_ANSWER_BATCH_ADDED","updates","AnswerUtilities","updateSurvey","handleAddAnswer","prevAnswerUUID","handleAddOtherAnswer","handleMoveAnswer","activeAnswerId","overAnswerId","SURVEY_ANSWER_MOVED","prevQuestionUUID","QuestionUtilities","prevSectionUUID","updatedSections","SectionUtilities","handleRemoveSection","handleUnsetModalProps","updateFn","sectionIdentifier","handleAddSectionClicked","requestPremiumAction","handleDuplicateSectionClicked","handleAddSkipLogic","newSkipLogic","buildSkipLogic","insertIntoArray","newSkipLogicCondition","buildSkipLogicCondition","handleAddSkipLogicCondition","skipLogicUUID","prevConditionUUID","setState","handleCloseSkipLogic","skipLogicSectionId","handleDuplicateQuestion","handleMoveQuestion","destination","moveWithinSection","numSkipConditions","handleSetModalProps","SURVEY_MOVE_QUESTION_CONFIRM_CLICKED","SURVEY_MOVE_QUESTION_MODAL_SHOWN","handleMoveQuestionFromSection","trackQuestionMoved","targetSection","currentSection","SURVEY_QUESTION_MOVED_FROM_PAGE","screener_section_target","screener_section_current","currentPosition","skipLogicUpdates","SkipLogicConditionUtilities","removeQuestionConditions","handleRemoveSkipLogic","SkipLogicUtilities","handleRemoveSkipLogicCondition","skipLogicConditionUUID","removeConditions","handleEditSkipLogicClicked","handleOpenSkipLogic","handleCancelSkipLogicEdit","handleRemoveAnswer","handleRemoveQuestion","handleUpdateAnswer","handleUpdateQuestion","handleUpdateQuestionType","handleAddQuestionColumn","questionGroupUUID","QuestionGroupUtilities","handleAddQuestionRow","handleRemoveQuestionColumn","handleRemoveQuestionRow","handleUpdateQuestionColumn","handleUpdateSkipLogic","handleUpdateSkipLogicCondition","handleUpgradeModalUpgradeClick","_this$state$requested","requestedPremiumAction","callback","args","apply","handleUpgradeModalRequestClose","SURVEY_UPGRADE_DISMISSED","onUpdateSurvey","render","contextValue","Provider","trackingPropsShape","track","registerComponent","_5","_6","_8","_a","PreviewBanner","HubSurveyPreviewHeader","cardSize","logoUrl","projectDetails","teamName","alt","src","Heading","level","surveyCompletionTime","StudyDetailsAccordion","description","incentive","noIncentive","requiresDocumentSignature","sessionLength","RecruitSurveyPreviewHeader","SurveyPreviewFormHeader","publicSurvey","SurveyPreviewEnd","onRestartPreview","faCircleCheck","weight","faSync","SurveyPreviewForm","isSubmitting","previewCompleted","surveySection","onSubmitSection","optInForm","titleWithDefaultName","ProjectDefaultName","pageTitlePrefix","determineCardSize","submittedDefaultQuestions","setSubmittedDefaultQuestions","showEndPage","surveyId","TitledPage","isPreview","logoOnly","optInFormDescription","optInFormTitle","team","handleRestartPreview","DefaultQuestionsForm","onSubmitForm","SurveySectionForm","onSubmit","defaultOnError","defaultOnSuccess","FormatResponse","jsonApi","buildMakeRequest","setLoading","onSuccess","onError","start","performance","now","Http","call","end","pageLocation","location","pathname","replace","request_url","timeSpent","useHttp","loading","dispatch","reactTrackingEvent","delete","patch","post","put","_1","hasRendered","setHasRendered","_2","_3","_4","useSidebarContext","SidebarContext","response","sort","a","b","localeCompare","raw","populationLabelsApi","getPopulationLabels","participant_population_id","POPULATION_LABELS_TAG","bulkPopulationLabels","operations","useGetPopulationLabelsQuery","useBulkPopulationLabelsMutation","projectsApi","getProject","projectId","merge","invalidLaunchMessages","invalidLaunchProps","firstProjectId","canEdit","PROJECT_TAG","createProject","updateProject","skipProjectInvalidation","PROJECT_COST_BREAKDOWN_TAG","PROJECT_EXPECTED_COST_DETAILS_TAG","PROJECT_PAYMENT_METHODS_TAG","PROJECT_DEMOGRAPHIC_RULES_TAG","PARTICIPANT_MANAGEMENT_SHORTLISTED_PARTICIPANTS_TAG","PROJECT_AVAILABILITY_SETTINGS_TAG","deleteProject","useGetProjectQuery","useCreateProjectMutation","useUpdateProjectMutation","useDeleteProjectMutation","ACTIVITY_STEP","DETAILS_STEP","EXPERIENCE_STEP","RECRUITMENT_STEP","SCHEDULING_DRAWER","PREPARATION_INSTRUCTIONS_DRAWER","RECRUITMENT_CRITERIA_DRAWER","SCREENER_SURVEY_DRAWER","INTERNAL_TITLE_DESCRIPTION_MODAL","URL_SECURED_REGEX","TRACKING_ID","VALID_TRACKING_ID_REGEX","COMPENSATION_TYPE_OTHER","CASH_COMPENSATION_OPTION","VISA_GIFT_CARD_COMPENSATION_OPTION","ALL_THEY_PAY_COMPENSATION_OPTIONS","THEY_PAY_IN_PERSON_DEFAULT_COMPENSATION","THEY_PAY_DEFAULT_COMPENSATION","THEY_PAY_COMPENSATION_OPTION_VALUES","THEY_PAY_COMPENSATION_IN_PERSON_OPTION_VALUES","TOAST_PROJECT_UPDATE_SUCCESS","MATCH_HANDLERS","MATCH_TYPES","ANY","permissions","bind","ALL","config","_config$matchType2","matchType","Error","context","authorization","checkAuthorization","_config$matchType","to","notTo","hasAllowlist","hasBlocklist","authorize","permissionsArray","checkPermissions","permission","authorizationList","auth","EmptySurveyNotice","SMALL","BooleanAnswerInput","bordered","formValue","hasError","onBlur","FormControlLabel","Control","RadioButton","surveyAnswerPropType","surveyQuestionPropType","BooleanAnswerInputGroup","control","Controller","RadioButtonGroup","fullWidth","validate","DateAnswerInput","DateTimePicker","dateViewMode","showPickerEnforcedInput","onChangeDate","startDate","trim","FloatAnswerInput","TextAnswerInput","isLongTextAnswer","InputComponent","inputGroupKey","onPaste","handlePaste","pastedContent","clipboardData","getData","wasValidPaste","hasValidURL","PARTICIPANT_SURVEY_RESPONSE_ANSWER_TEXT_PASTED","question_id","responseDetailAttributes","wasPasted","PickNoneInput","PickOneAnswerInput","autoComplete","responseOther","otherAnswerId","PickOneAnswerInputGroup","PickManyAnswerInput","onFormChange","CheckboxButton","PickManyAnswerInputGroup","CheckboxButtonGroup","orientation","BUTTON_GROUP_ORIENTATIONS","COLUMN","SurveyAnswerInput","_c","SurveyQuestionFormGroup","useFormState","elementType","displayErrorText","labelClassName","QuestionTitleCell","AnswerTitleCell","AnswerTitleRow","PickOneInputRow","PickManyInputRow","ROW","QuestionInputRow","InputRow","isPickOneQuestion","GridQuestionFormGroup","InputLegend","someQuestionWithError","gridHasErrors","SurveySectionFormCard","loadingSkeleton","groupQuestionsByQuestionGroup","formQuestion","QuestionEntityType","QUESTION_GROUP","loadingText","ProjectWorkspaceContext","createContext","ProjectWorkspaceProvider","connectedCalendarDetails","serverProject","authUserContext","useAuthUserContext","_useToast","useToast","dismissMessage","messages","setMessage","Track","project_id","user","user_id","Toast","autoDismiss","onToastClosed","useProjectWorkspaceContext","connectedCalendarDetailsPropType","QUESTION_TITLE_HEIGHT","QUESTION_TITLE_WIDTH","QUESTION_ANSWER_HEIGHT","QUESTION_ANSWER_WIDTH","TOTAL_QUESTION_GROUPS","Array","displayOrder","qualifyLogicDisplay","surveySkipLogicConditionPropType","surveySkipLogicPropType","participant_id","matchPopulationAttributesFetched","isAnyOf","populationAttributesApi","getPopulationAttributes","matchFulfilled","matchAccountHubConfigurationsFetched","accountHubConfigurationsApi","getAccountHubConfigurations","columnConfigurationSlice","createSlice","initialState","reducers","HIDE_ALL_COLUMNS","columnAccessors","payload","REORDER_COLUMNS","_action$payload","currentColumnOrder","reorderedColumns","SHOW_ALL_COLUMNS","TOGGLE_HIDDEN_COLUMN","updatedHiddenColumns","extraReducers","addMatcher","settings","_columnConfigurationS","actions","columnConfigurationSliceReducer","reducer","dataFormatter","Jsona","ACCEPT_V2_HEADER","accept","headers","getCSRFToken","credentials","deserialize","deserializeJSONApiResponseWithMeta","parseJSONApiResponse","parseJSONApiResponseWithMeta","sortAlphabeticalByKey","objectArray","sortAlphabeticalByName","sortAlphabeticalByTitle","OwnershipContext","fallbackErrorLogger","console","OwnershipProvider","owner","appsignal","sendError","useOwnershipContext","ownershipContext","HUB_INVITE_RULES_HEADER","PROJECT_INVITE_LIMIT_TITLE","PROJECT_INVITE_LIMIT_MIN","PROJECT_INVITE_LIMIT_MAX","PROJECT_INVITE_LIMIT_OUT_OF_RANGE_ERROR","PROJECT_INVITE_LIMIT_ENABLED_ERROR","PROJECT_INVITE_LIMIT_INPUT_LABEL","PROJECT_INVITE_LIMIT_ENABLED_LABEL","PROJECT_INVITE_LIMIT_TEXT","PROJECT_INVITE_LIMIT_LINK_TEXT","INVITE_FILTER_RULES_TITLE","PUBLISH_INVITE_RULES","PUBLISH_INVITE_RULES_SUCCESS_MESSAGE","PUBLISH_INVITE_RULES_ERROR_MESSAGE","UNSUBSCRIBED_PARTICIPANT_ALERT_MESSAGE","MULTI_TEAM_ORG_ALERT_MESSAGE","segmentsApi","createSegment","filterParams","teamId","populationPanelId","teamRoleId","filter_name","filterName","filters","team_role_id","population_panel_id","team_id","SEGMENTS_TAG","deleteSegment","populationId","segmentId","duplicateSegment","getSegments","updateSegment","useCreateSegmentMutation","useDeleteSegmentMutation","useDuplicateSegmentMutation","useGetSegmentsQuery","useUpdateSegmentMutation","participantPopulationOptInFormsApi","getParticipantPopulationOptInForms","createOptInForm","useGetParticipantPopulationOptInFormsQuery","useCreateOptInFormMutation","RailsContext","useRailsContext","RailsContextProvider","railsContext","_customContextSchema$","customContextSchema","env","request","uiState","withTrackedClick","Target","TrackedComponent","handleClick","targetProps","transferProps","displayName","getDisplayName","STEPS_REQUIRED_FIELDS_SCHEMA","projectPayload","_buildProjectState","buildProjectState","isInPersonInterview","isOnlineInterview","isUnmoderatedTask","studyTypeId","fields","compensationMethodId","_projectPayload","_buildProjectState2","isPhoneInterview","isHubProject","matchProjectFetched","calculateStepCompletionPercentage","invalidCount","totalRequiredCount","Math","round","initializePrimaryForm","stepId","initializeForm","syncedValues","isValid","initializeStep","forms","primary","metrics","researchDesign","currentStepId","steps","projectWorkspaceSlice","formPrimaryRegister","defaultValues","formPrimarySyncState","isDraft","step","requiredFields","requiredFieldsFn","_projectWorkspaceSlic","rootSelector","projectWorkspace","stepsSelector","createSelector","currentStepSelector","_state$researchDesign","currentStepFormSelector","currentStep","stepMetricsSelector","_","_steps$stepId$metrics","completionPercentage","UPDATE_PAGE_TITLE_EVENT","triggerUsePageTitleUpdate","newTitle","CustomEvent","detail","dispatchEvent","usePageTitle","initialTitle","updateTitle","document","uUIDPropType","accessCode","preferences","allowTentativeEvents","provider","tokenInvalid","tokenUpgradeRequested","adapter","createEntityAdapter","matchPopulationInviteFilterFetched","populationInviteFiltersApi","getInviteFilter","matchLabelsFetched","matchOptInFormsFetched","matchSegmentsFetched","matchTeamProjectsFetched","teamProjectsApi","getTeamProjects","appliedInitialState","filterFlags","filterKeys","filterRules","pendingInitialState","removedFilterKeys","applied","FILTER_RULE_APPLIED_SECTIONS","inviteFilter","segment","pending","FILTER_RULE_PENDING_SECTIONS","create","getInitialState","optInForms","projects","segments","activeId","segmentsSlice","ADD_FILTER_RULE_PARAM","filterKey","filterRuleSection","filterRule","newParams","newFilter","CLEAR_FILTERS","CREATE_FILTER_RULE","_action$payload2","REMOVE_FILTER_RULE","_action$payload3","REMOVE_FILTER_RULE_PARAM","_action$payload4","filterParamKey","paramIndex","findIndex","param","newFilterRule","RESET_PENDING_FILTERS","SELECT_FILTER_RULE","_action$payload5","activeFilterKey","activeFilterIndex","SELECT_FILTER_RULE_OPERAND","_action$payload6","SET_ACTIVE_SEGMENT_ID","SET_APPLIED_FILTER_RULES","_action$payload7","buildFromServerFilterRules","appliedSectionLookup","SET_FILTER_RULE","_action$payload8","pendingFilterRule","SET_INVITE_FILTER_ATTRIBUTES","SET_PENDING_FILTER_RULES","_action$payload9","SET_PENDING_FROM_APPLIED","SET_PENDING_FROM_SEGMENT","_action$payload10","entities","TOGGLE_IS_NOT_SET_CHECKED","_action$payload11","isNotSetChecked","isSetChecked","TOGGLE_IS_SET_CHECKED","_action$payload12","UPDATE_FILTER_RULE_PARAM","_action$payload13","filterRuleKey","paramKey","paramValue","newParam","setAll","_adapter$getSelectors","getSelectors","selectAllLabels","selectAll","selectLabels","selectEntities","selectOptInForms","_adapter$getSelectors3","selectAllPopulationAttributes","_adapter$getSelectors4","selectIds","selectAllSegments","selectSegments","selectSegmentsByAccessLevel","privateSegments","sharedSegments","teamPermissionRoleId","organizationPermissionRoleId","selectActiveSegmentId","selectPendingSection","sectionKey","pendingSections","selectPersistedFilterRule","editAppliedFilterRulesSection","inviteFilterAppliedFilterRulesSection","segmentFilterAppliedRulesSection","selectSegmentRoles","roles","selectFilters","selectInviteFilter","selectAppliedInviteFilter","selectAppliedInviteFilterRules","selectInviteFilterRules","selectProjectInviteMultiplierOutOfRange","projectInviteMultiplier","projectInviteMultiplierEnabled","Number","isInteger","selectFilterOptions","custom","selectAllFiltersCount","selectActiveSegment","activeSegmentId","segmentsByIds","selectSegmentName","hasApplicableFilterRule","segmentsById","_segmentsSlice$action","segmentsSliceReducer","href","UNSAFE_className","dangerouslySetInnerHTML","__html","sanitizeHtml","useGetFeatureFlagQuery","getFeatureFlag","actorType","customProperties","sendTracking","__","FEATURE_FLAG_TAG","Actors","Account","MixpanelUser","Organization","Participant","Team","User","TypeError","isFeatureCheckAlreadyPresent","FEATURES","_useGetFeatureFlagQue","_useGetFeatureFlagQue2","isEnabledViaApi","isGetFeatureFlagLoading","OPTIONAL_ROW_PARAM_KEYS","OR_IS_NOT_SET_PARAM_KEY","EMPTY_INCENTIVE_OPERANDS","INCENTIVE_IS_NOT_SET_OPERAND","INCENTIVE_IS_SET_OPERAND","INVITE_FILTER_HIDDEN_FIELDS","PII_HIDDEN_FIELDS","getIsInviteFilter","getKeylessParams","keylessParams","appliedFilterRules","appliedFilterRule","jsonRule","match","getIncentiveFilterKey","getProjectFilterKey","getOptInFormFilterKey","getParticipantLabelFilterKey","appliedFilterKeys","appliedFilterFlags","orIsNotSetParams","keyedAppliedFilterRules","appliedFilterKey","isIsNotSetOperand","defaultOperand","getHasValueSet","ceiling","days","endAt","endDate","floor","ids","startAt","valueToCheck","hasValueSet","buildFilterRulesToApply","pendingFilterRules","preparePendingFilterRule","preparedRule","emptyParams","getRowParams","parsedParams","parsedParam","DopeBrowserRouter","StaticRouter","BrowserRouter","CloudflareTurnstile","Turnstile","siteKey","code","shouldIgnoreTurnstileError","SELECT_OPTIONS","CountriesByCode","phoneCode","phone_code","formattedCountryName","PhoneNumber","countryCode","hideLabels","phoneNumber","onCountryCodeChange","onPhoneNumberChange","countryCodeAria","phoneNumberAria","isPhoneNumberOrCountryCodeErrorPresent","phoneNumberErrorPresent","phoneCountryCodeErrorPresent","InputLabel","optional","isClearable","handlePhoneNumberChange","ACCESS_GRANTS_TAG","ACCOUNT_AVAILABILITY_SETTINGS_TAG","ACCOUNT_CHECKLIST_TAG","ACCOUNT_COLLABORATORS_TAG","ACCOUNT_HUB_CONFIGURATIONS","ACCOUNT_INTEGRATIONS_TAG","ACCOUNT_PROJECT_TASK_EVENTS_TAG","ACCOUNT_PROJECTS_TAG","ACCOUNT_SIGNUP_INFO_TAG","ACCOUNTS_TAG","ACCOUNT_TEAMS_TAG","BULK_EMAIL_TAG","COMMENTERS_TAG","COMMENTS_TAG","DATA_JOB_TAG","PROJECT_AVAILABILITY_RANGES_TAG","DEFAULT_SESSION_ROLES_TAG","DOPE_TABLE_COLUMNS_TAG","EMAIL_DOMAINS_TAG","EMAIL_PROFILE_TAG","EMAIL_THEME_TAG","OPEN_RECRUIT_PERIOD_TAG","PROJECT_COLLABORATOR_CALENDAR_EVENTS_TAG","ORGANIZATION_ACCOUNTS_TAG","ORGANIZATION_EMAIL_THEMES_TAG","ORGANIZATION_PARTICIPANTS_TAG","ORGANIZATION_POPULATION_PANELS_TAG","ORGANIZATION_PROJECT_CUSTOM_EMAIL_SETS_TAG","ORGANIZATION_TEAMS_TAG","PARTICIPANT_ATTRIBUTE_VALUES_TAG","PARTICIPANT_FRAUD_REPORT_TAG","PARTICIPANT_LABELS_TAG","PARTICIPANT_MANAGEMENT_INVITED_PARTICIPANTS_TAG","PARTICIPANT_PROJECT_PARTICIPANTS_TAG","PARTICIPANT_PROJECTS_TAG","PARTICIPANT_SURVEY_RESPONSE_SETS_TAG","PARTICIPANT_TASK_EVENT_STATS_TAG","PARTICIPANTS_TAG","PARTICIPATION_DETAILS_TAG","POPULATION_ATTRIBUTES_TAG","POPULATION_INVITE_FILTERS_TAG","POPULATION_PANEL_PARTICIPANTS_TAG","PREPAID_BALANCE_ACCOUNTS_TAG","PREPAID_BALANCE_INVITATIONS_TAG","PREPAID_BALANCE_TAG","PREPAID_BALANCE_TRANSACTIONS_TAG","PREPAID_BALANCES_TAG","PROJECT_ACCOUNT_ROLES_TAG","PROJECT_CLOSE_REQUEST_TAG","PROJECT_COLLABORATORS_TAG","PROJECT_CUSTOM_EMAILS_TAG","PROJECT_EMAIL_STATS_TAG","PROJECT_FILE_UPLOADS_TAG","PROJECT_INVOICES_TAG","PROJECT_LISTINGS_TAG","PROJECT_OCCUPATION_LINKS_TAG","PROJECT_OCCUPATION_TAGS_TAG","PROJECT_PARTICIPANT_ADMIN_DATA_TAG","PROJECT_PARTICIPANT_APPLICATION_STATUSES_TAG","PROJECT_PARTICIPANT_TAG_TAG","PROJECT_PARTICIPANTS_TAG","PROJECT_PROJECT_PARTICIPANTS_TAG","PROJECT_PROJECT_SKILLS_TAG","PROJECT_PROJECT_TASKS_TAG","PROJECT_PROPOSED_AVAILABILITY_RANGE_COLLECTIONS_TAG","PROJECT_PROPOSED_AVAILABILITY_RANGES_TAG","PROJECT_SCHEDULED_INVITE_SETTINGS_TAG","PROJECT_SESSIONS_SIGNUP_PAGE_TAG","PROJECT_SESSIONS_TAG","PROJECT_SETTINGS_TAG","PROJECT_SUMMARIES_TAG","PROJECT_SURVEY_KEYS_TAG","PROJECT_SURVEYS_TAG","PROJECT_TAG_TAG","PROJECT_VIDEO_UPLOADS_TAG","PROJECT_WORKSPACE_CALENDAR_TAG","PROJECT_WORKSPACE_SESSIONS_TAG","RECRUIT_PERIOD_TAG","REPORT_TAG","REPORTS_TAG","RESEARCHER_NOTE_TAG","RESPONSE_SETS_TAG","SCHEDULABLE_RANGES_TAG","SESSION_PROJECT_PARTICIPANTS_TAG","SESSION_ROLES_TAG","SESSION_SIGNUP_PAGES_SESSIONS_TAG","SIGNATURE_REQUESTS_TAG","STRIPE_CARDS_TAG","SURVEY_PREVIEW_SECTIONS_TAG","SURVEY_SECTIONS_TAG","TEAM_BILLING_INFOS_TAG","TEAM_HUB_USAGE_TAG","TEAM_INVITES_TAG","TEAM_MEMBERS_TAG","TEAM_PARTICIPANTS_TAG","TEAM_PROJECT_TEMPLATES_TAG","TEAM_PROJECTS_TAG","TEAM_SETTINGS_TAG","TEAM_SUBSCRIPTIONS_TAG","TEAM_TAG","WORKSPACE_PARTICIPANTS_TAG","PageProviders","useTrackingWithDefaultDispatch","AppsignalErrorBoundary","fallback","APPSIGNAL_FALLBACK","instance","store","withPageProviders","WrappedComponent","WithPageProviders","_ref","rest","_objectWithoutProperties","_excluded","getUnsortedTeamProjects","_ref2","_excluded2","useGetTeamProjectsQuery","useGetUnsortedTeamProjectsQuery","computeIsAutopayEnabled","projectSettings","disableAutopay","projectSchema","z","object","additionalRecruitmentRequirementsHtml","nullable","advancedScreening","billingAccount","commenterId","initials","firstName","lastName","fullName","lookbackEnabledAt","nameLastFirst","messagerId","number","roleId","teams","array","compensationAmount","compensationType","confirmationNotesHtml","consumerFee","createdAt","currentStatus","defaultSessionLocation","deviceRequirements","summary","documentDescription","signatureRequestDataKey","documentName","draftParticipantsCount","emailProfileId","emails","allowEdit","class","enum","PARTICIPANT_EMAIL_CLASSES","purpose","slug","emailThemeId","hasDocumentSigning","internalDescription","interviewType","interviewTypeId","isActive","isEligibleForSessionObservers","isPrivate","isSystemHidden","isZeroCost","latestStatusTypeId","address","autocomplete","city","countries","googleLocationInfo","any","googleMapsUrl","latitude","locationExtraInfo","longitude","parkingAvailable","parkingInfo","regions","canView","numParticipants","organizationId","originalNumParticipants","relationshipNames","participantReferrals","professionalFee","projectCustomEmailSetId","projectStatus","publicDescription","publicTitle","remainingInviteCount","requireApproval","researcherWillCall","screenerVideo","prompt","confirmOnJoin","participantReschedulingEnabled","rptInvitesOnly","sourceType","studyLength","hours","minutes","studyType","studyTypeName","surveyDraft","surveyJson","targetProfessionals","task","externalId","repositoryUrl","providerDisplayName","taskSession","moderatorId","numScheduled","numSlots","sessionLocation","startTime","datetimeDisplay","hasPassed","hostUrl","hasZoomSessionLocation","hasMeetSessionLocation","timeDisplay","teamDomain","timezone","timezoneAbbreviation","useEmailTheme","wePay","passthrough","project","_project$meta","_project$meta2","isAutopayEnabled","isNoIncentiveTypeProject","CompensationMethods","NONE","isWePay","WE_PAY","senderId","hasIntegration","IntegrationProviders","TRACKED_PROVIDERS","isConfirmOnJoin","ProjectSettings","default","isParticipantApprovalRequired","isRptProject","isRecruitProject","PROJECT_SOURCE_TYPES","PROJECT","BYOA_PROJECT","isSourcelessProject","SOURCELESS_PROJECT","hasParticipantSource","isOneOnOne","StudyTypes","ONE_ON_ONE","isFocusGroup","FOCUS_GROUP","isMultiDay","MULTI_DAY","UNMODERATED_TASK","hasStudyType","isModerated","InterviewTypes","ONLINE","PHONE","IN_PERSON","ProjectStatuses","DRAFT","isLaunchable","isLaunched","LAUNCHED","isFirstProject","String","hasOtherCompensationType","compensationTypeOtherCustomValue","useGetProjectState","_useGetProjectQuery","join","projectState","safelyParseSchema","responseSetListTag","responseSetsApi","getResponseSets","item","createResponseSet","survey_id","updateResponseSet","deleteResponseSet","responseSetId","useGetResponseSetsQuery","useCreateResponseSetMutation","useLazyGetResponseSetsQuery","useUpdateResponseSetMutation","useDeleteResponseSetMutation","NAVIGATION_PARTICIPANTS_CLICKED","NAVIGATION_PROJECTS_CLICKED","NavigationItem","iconSrcBase","Authorization","TeamActionTypes","SEARCH_PARTICIPANTS","upsertAccountHubConfiguration","configurations","useGetAccountHubConfigurationsQuery","useUpsertAccountHubConfigurationMutation","participantsApi","createParticipants","teamIds","team_ids","getParticipant","updateParticipant","updateParticipantTeams","encodedFilterParams","participant_filter","upsertParticipants","useGetParticipantQuery","useUpdateParticipantMutation","useUpdateParticipantTeamsMutation","useUpsertParticipantsMutation","attributeSlugsToInputLabels","backendConstants","attributeSlugsToDefaultOptionNames","authUserParams","authUser","WithAuthUserContext","_useHttp","JsonApiDataStore","sync","setContextValue","loadingOverlayEnabled","setLoadingOverlayEnabled","refreshAuthUserContext","skipLoadingOverlay","contextData","alert","finally","useGetSurveySectionsQuery","getSurveySections","i","gridAnswerTotal","QUESTION_ID_KEY_REGEX","parseIdFromQuestionIdKey","attributeIdKey","parsePickOneValues","formValues","pickOneFormValues","questionIdKey","parsePickManyValues","pickManyFormValues","pickManyResponses","parseShortAnswerValues","shortAnswerFormValues","stringValue","parseLongAnswerValues","longAnswerFormValues","textValue","parseDateValues","dateFormValues","dateValue","parseFloatValues","floatFormValues","floatValue","parseFloat","parseBooleanValues","booleanFormValues","booleanValue","transformFormValuesToSubmissionParams","buildResponseSetCreateParams","responsesAttributes","buildProjectResponseSetCreateParams","participantId","participantScreenerKey","buildOptInResponseSetCreateParams","participantOptInFormKey","buildResponseSetUpdateParams","buildProjectResponseSetUpdateParams","buildOptInResponseSetUpdateParams","projectDetailsSlice","ADD_WORKSPACE_ATTRIBUTES","projectDetailsSliceReducer","rootReducer","reducerPath","columnConfiguration","participantProfile","participantProfileSliceReducer","isDevelopmentEnv","buildStore","preloadedState","configureStore","middleware","getDefaultMiddleware","actionCreatorCheck","immutableCheck","serializableCheck","setupListeners","SidebarOpenDebounceMS","SidebarCloseDebounceMS","isTransitioning","isRenderingOpen","setIsNavItemHovered","isNavItemHovered","isSidebarHovered","setIsSidebarHovered","_useIsSidebarOpen","setIsOpen","setIsTransitioning","openSidebarTimeout","closeSidebarTimeout","isReducedMotion","openSidebar","clearTimeout","setTimeout","closeSidebar","sidebar","handleTransitionEnd","propertyName","useIsSidebarOpen","handleMouseEnter","handleMouseLeave","OwnerBoundary","ownershipKey","Ownership","namespace","initializeAppsignal","addBreadcrumb","addDecorator","addOverride","createSpan","demo","send","use","wrap","useAppsignal","ErrorBoundary","QuestionSkipLogicSummaryCondition","conditionAnswer","conditionQuestionGroup","isLastCondition","skipLogicConditionOperator","skipLogicJoinMethod","questionReferenceName","conditionAnswerText","usesUnequalOperator","as","TEXT_PROPS","sm","toUpperCase","SURVEY_END_SECTION_TITLE","QuestionSkipLogicSummaryConditions","targetSectionTitle","completedConditions","sanitizedTargetSectionTitle","conditionRows","sectionTitlesByUuid","mappingById","md","useGetSurveyPreviewSection","previousSectionId","previousSectionResponses","isFirstSection","firstSection","useGetFirstSurveySection","queryResult","limit","firstSurveySection","nextSection","useGetNextSurveySection","submittedPreviewSectionId","submittedPreviewResponsesAttributes","isFetching","currentSurveySection","isLoadingFirstSection","SurveyPreview","form","useForm","shouldUnregister","_useRequestedPreviewS","useRequestedPreviewSectionParams","requestedSectionParams","updateRequestedSectionParams","resetRequestedSectionParams","_useGetSurveyPreviewS","handleSubmitSection","handleSubmit","FormProvider","SurveyPreviewPage","useAlertFocus","RESEARCH_EXPERIENCE","deadline","faBell","faClock","faGift","faFileSignature","_d","onHandleNavigating","linkProps","_useSidebarContext","path","useLocation","regExp","useIsActive","isHovered","setIsHovered","SRCs","hovered","Image","iconSrc","baseProps","onMouseEnter","onFocus","onMouseLeave","ev","isCmdorCtrlPressed","metaKey","ctrlKey","NavLink","tagTypes","rawTagTypes","createApi","baseQuery","fetchBaseQuery","baseUrl","relationships","included","literal","isExclusive","deletePopulationAttribute","updatePopulationAttribute","createPopulationAttribute","useDeletePopulationAttributeMutation","useUpdatePopulationAttributeMutation","EMPTY_SECTION_PARAMS","setRequestedSectionParams","currentSectionResponses","matchParticipantFetched","populationAttributesAdapter","selectId","participantProfileSlice","dirtyPages","participant","redirectTo","SET_DIRTY_PAGE","Set","pageName","SET_REDIRECT_TO","_participantProfileSl","selectParticipant","selectRedirectTo","_populationAttributes","selectAllAttributes","selectAttributeBySlug","selectById","selectAttributes","selectAttributeBySlugWithMetadata","defaultOptionName","profileConstants","inputLabel","selectEmploymentAttribute","selectPageIsDirty","errorMessages","ctx","expirationSeconds","APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS","lastLoggedAt","Date","optInFormKey","useUpsertParticipantPopulationOptInFormParticipantMutation","upsertParticipantPopulationOptInFormParticipant","opt_in_form_id","useGetOptInForm","OptInSuccess","FlexContainer","gap","stars","Survey","onComplete","_useSurveyResponseSet","useSurveyResponseSet","setCurrentSurveySection","_useCreateResponseSet2","_useCreateResponseSet3","createdResponseSetData","createResponseSetLoading","_useUpdateResponseSet2","_useUpdateResponseSet3","updatedResponseSetData","updateResponseSetLoading","latestMutatedResponseSetData","responseSet","surveyCompletedRedirect","_useGetResponseSetsQu","existingResponseSetResponse","existingResponseSet","useExistingResponseSet","completedAt","differenceInDays","parseISO","updatedAt","responseSetOutdated","handleError","handleSuccess","responseSetData","unwrap","then","catch","handleCreate","responseSetSurveySection","isLoadingResponseSet","_useGetFirstSurveySec","isLoadingFirstSurveySection","surveyCompleted","OptIn","surveyComplete","setSurveyComplete","setIsLoading","_useOptInFormKeyFromQ","searchParams","URLSearchParams","search","useOptInFormKeyFromQueryUrl","participantIdFromUrl","participantOptInFormKeyFromUrl","navigate","useNavigate","_useLazyGetResponseSe2","getExistingResponseSet","existingResponseSetResult","_useUpsertParticipant2","upsertParticipant","_useUpsertParticipant3","upsertedParticipant","isUpsertingParticipant","handleSubmissionError","submittedDefaultQuestionsForm","urlOptInFormKeyValid","isSuccess","optInFormComplete","showSurvey","accept_data_consent_notice","acceptDataConsentNotice","accept_texts","acceptTexts","cloudflare_turnstile","cloudflareTurnstile","phone","phoneCountryCode","phone_country_code","timezone_name","optInPageSchema","optInPreviewPageSchema","OptInEntrypoint","withAuthUserContext","OptInPreviewEntrypoint","NAVIGATION_ACCOUNT_CLICKED","NAVIGATION_SIGN_OUT_CLICKED","NAVIGATION_TEAMS_CLICKED","AccountMenuPopover","forwardRef","_props","handleLinkClick","dataset","VIEW_MEMBERS","NAVIGATION_ACCOUNT_POPOVER_OPENED","AccountNavigationItem","isAccountMenuOpen","setIsAccountMenuOpen","handleDocumentClick","clientX","clientY","_ref$current$getBound","getBoundingClientRect","top","bottom","left","right","organization","isRenderingAccountMenu","prev","NAVIGATION_PLANS_CLICKED","NAVIGATION_SUPPORT_CLICKED","authContext","isAccount","isStaff","rootPath","teamSubscription","paidSubscription","VIEW_BILLING","_useForm","mode","register","isFieldRequired","fieldName","isFieldVisible","ui","surveyFormCardStyles","Copy","TEXT_MESSAGE_RELEASE_OPTIONAL","TimezoneSelect","menuPlacement","useSystemFallback","onSelectChange","dataConsentNotice","alertElements","getElementsByClassName","focus","trackingData","PICK_ONE_INPUT_GROUP_KEY","BuilderConstants","PICK_MANY_INPUT_GROUP_KEY","SHORT_ANSWER_INPUT_GROUP_KEY","LONG_ANSWER_INPUT_GROUP_KEY","BOOLEAN_INPUT_GROUP_KEY","DATE_INPUT_GROUP_KEY","FLOAT_INPUT_GROUP_KEY","BOOLEAN_TRUE_VALUE","REQUIRED_ERROR_MESSAGE","REQUIRED_OTHER_VALUE_ERROR_MESSAGE","createInviteFilter","updateInviteFilter","useGetInviteFilterQuery","useCreateInviteFilterMutation","useUpdateInviteFilterMutation"],"sourceRoot":""}