{"version":3,"file":"413-e00b042244feccc0a44e.js","mappings":"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","sources":["webpack:///./app/javascript/admin/components/ActivitiesPage/ActivityForm/components/TurfsActivityHelpers/utils.js","webpack:///./app/javascript/admin/components/ActivitiesPage/ActivityScripts/PreviewModal/utils.js","webpack:///./app/javascript/admin/data/schema/shared.js"],"sourcesContent":["export const modes = {\n sms: {\n id: 0,\n label: 'Text',\n },\n email: { id: 1, label: 'Email' },\n phone: { id: 2, label: 'Phone Call' },\n social: { id: 3, label: 'Message' },\n};\n\nexport const setModesPermitted = (values, mode, setFieldValue, deleteScript) => {\n const scripts = values.activity_scripts_attributes;\n\n const shouldDelete = deleteScript && scripts.filter(script => script.mode === mode).length === 1;\n\n if (!values.modes_permitted.includes(modes[mode]?.id)) {\n modes[mode]?.id &&\n setFieldValue('modes_permitted', [...values.modes_permitted, modes[mode].id]);\n } else if (shouldDelete) {\n setFieldValue(\n 'modes_permitted',\n values.modes_permitted.filter(item => item !== modes[mode].id),\n );\n }\n};\n\nexport const shouldRenderScripts = values => {\n if (\n isTurfActivity(values.type) &&\n values.modes_permitted &&\n values.modes_permitted?.length !== 0\n ) {\n return true;\n }\n\n return values.type !== 'IdVotersActivity' && values.type !== 'AssignedCanvassingActivity';\n};\n\nexport const isTurfActivity = type =>\n type === 'IdVotersActivity' ||\n type === 'AssignedCanvassingActivity' ||\n type === 'assigned_list_canvassing' ||\n type === 'shared_list_canvassing' ||\n type === 'canvassing' ||\n type === 'List Canvassing' ||\n type === 'Open Canvassing' ||\n type === 'ReportActivity';\n","import React from 'react';\nimport { Tooltip } from 'antd';\nimport styled from 'styled-components';\n\nconst RedText = styled.span`\n text-decoration: underline;\n color: #f5222d;\n`;\n\n/**\n *\n * Matches anything that follows the pattern of {{custom_field_*}} and has no spaces.\n * Matches: \"{{custom_field_county_name}}\"\n * Does not match:\n * \"{{custom_county_name}}\"\n */\nconst customFieldRegex = /({{custom_field_\\S*?}})/g;\n\n/**\n *\n * Matches anything that follows the pattern of {{some-text-here}} and has no spaces.\n * Matches: \"{{user.name}}\"\n * Does not match:\n * \"{{user.name} }\"\n */\nconst varsRegex = /({{\\S*?}})/g;\n\n/**\n * Matches anything that looks like a var, but has unnecessary characters inside\n * Matches: \"{{user name}}\"\n * \"{{user.name} }\"\n * \"{asd{user.name}}\"\n * Does not match:\n * \"{{user.name}\"\n * \"{user.name}}\"\n */\nconst brokenVarsRegex = /({[^{]*?{\\s*?\\S*?\\s*?\\S*?\\s*?}[^}]*?})/g;\n\n/**\n * Matches anything, that looks like a var, but misses a parenthesis on right side\n * Matches missing right parenthesis: {{user.full_name}\n */\nconst missingRightParenthesisRegexp = /({{[^\\s}]*?}([^}]|$))/g;\n\n/**\n * Matches anything, that looks like a var, but misses a parenthesis on left side\n * Matches missing left parenthesis: {user.full_name}}\n */\nconst missingLeftParenthesisRegexp = /(([^{]|^){[^\\s{]*?}})/g;\n\n//matches emoji`s and unicode symbols\nexport const EmojiRegexp = /\\p{Extended_Pictographic}/gu;\n\n//matches anything that looks like a trackable link\n//example: {{'this-is-a-link'|trackable}}\nconst trackableLinksRegexp = /{{'(.*)'|trackable}}/g;\n\n/**\n * All broken vars regexps combined with a '|' pipe, not to call each one separately later.\n */\nconst combinedBrokenVarsRegexp = new RegExp(\n `${brokenVarsRegex.source}|${missingLeftParenthesisRegexp.source}|${missingRightParenthesisRegexp.source}`,\n);\n\nconst splitWithRegexp = (text, regexp) =>\n Array.isArray(text) ? text.flatMap(str => str.split(regexp)) : text.split(regexp);\n\nexport const generateInterpolatedSegmentsForPreview = (user, campaign, text, limit) => {\n let interpolatedText = text;\n\n const userVars = {\n 'user.email': user.email,\n 'user.first_name': user.first_name,\n 'user.full_name': `${user.first_name} ${user.last_name}`,\n 'user.last_name': user.last_name,\n 'user.phone': user.phone,\n 'user.team_code': user.supplied_state_abbrev,\n };\n\n const campaignVars = {\n broadcast_phone_number: campaign.broadcast_number,\n 'campaign.description': campaign.description,\n 'campaign.join_code': campaign.join_code,\n 'campaign.name': campaign.name,\n };\n\n const contactVars = {\n email: 'jordan@smith.com',\n first_name: 'Jordan',\n full_name: 'Jordan Smith',\n last_name: 'Doe',\n phone: '555-123-4567',\n state_abbrev: 'NC',\n };\n\n const defaultVars = {\n ...userVars,\n ...campaignVars,\n ...contactVars,\n };\n\n //split by correct vars\n interpolatedText = interpolatedText.split(varsRegex);\n\n //split by broken vars\n interpolatedText = splitWithRegexp(interpolatedText, combinedBrokenVarsRegexp);\n\n //split everything else word-by-word for dividing into segments\n interpolatedText = Array.isArray(interpolatedText)\n ? interpolatedText.flatMap(str => splitInterpolationByWords(str))\n : splitInterpolationByWords(interpolatedText);\n\n //replace interpolation with vars and add labels to errors\n interpolatedText = Array.isArray(interpolatedText)\n ? interpolatedText\n .map(str => generateVarObject(str, defaultVars))\n .filter(obj => Boolean(obj.text))\n : generateVarObject(interpolatedText);\n\n return divideIntoSegments(interpolatedText, limit);\n};\n\n//if text matches the pattern for interpolation, skip splitting\n//else, split it into words\nconst splitInterpolationByWords = text => {\n if (!varsRegex.test(text) && !combinedBrokenVarsRegexp.test(text)) return text?.split(/(\\s)/g);\n else return text;\n};\n\nconst generateVarObject = (text, defaultVars) => {\n if (trackableLinksRegexp.test(text)) {\n return {\n status: 'bold',\n text: `https://${window.location.host}/t/12345678`,\n variable: text,\n };\n }\n\n if (customFieldRegex.test(text)) {\n /*\n writing this feature fast for a bug outage and difficult to know actual\n values for whatever custom field was referenced\n */\n const interpolatedVariable = 'Sample Custom Field Value';\n return {\n status: interpolatedVariable ? 'bold' : 'unknown',\n text: interpolatedVariable ?? text,\n variable: text,\n };\n }\n\n if (varsRegex.test(text)) {\n const interpolatedVariable = defaultVars[text.slice(2, -2)];\n return {\n status: interpolatedVariable ? 'bold' : 'unknown',\n text: interpolatedVariable ?? text,\n variable: text,\n };\n }\n\n return {\n status: combinedBrokenVarsRegexp.test(text) ? 'error' : 'regular',\n text,\n };\n};\n\n//divide text into segments no more than 160 characters\nconst divideIntoSegments = (textArr, limit) => {\n if (!Array.isArray(textArr)) return [textArr];\n\n const result = [];\n let current = 0;\n textArr.forEach(elem => {\n if (current + elem.text.length > limit) {\n current = elem.text.length;\n result.push([elem]);\n } else {\n current = current + elem.text.length;\n result[result.length - 1] ? result[result.length - 1].push(elem) : result.push([elem]);\n }\n });\n\n return result;\n};\n\nexport const styleSegments = segment => {\n switch (segment.status) {\n case 'regular':\n return segment.text;\n case 'error':\n return (\n \n \n {segment.text}\n \n \n );\n case 'unknown':\n return (\n \n \n {segment.text}\n \n \n );\n case 'bold':\n return (\n \n \n {segment.text}\n \n \n );\n default:\n return segment.text;\n }\n};\n\nexport const verifyDynamicVars = script =>\n !script\n ?.split(varsRegex)\n ?.filter(word => !varsRegex.test(word))\n ?.some(word => combinedBrokenVarsRegexp.test(word));\n","import * as yup from 'yup';\n\nimport { isTurfActivity } from '@admin/components/ActivitiesPage/ActivityForm/components/TurfsActivityHelpers/utils';\nimport { isTextingActivity } from '@admin/components/ActivitiesPage/utils';\nimport { verifyDynamicVars } from '@admin/components/ActivitiesPage/ActivityScripts/PreviewModal/utils';\n\n// source: modified version of https://www.regextester.com/93652\nconst urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/;\n\nconst shouldValidateScripts = (type, modes_permitted) => {\n const turfActivity = isTurfActivity(type);\n if (turfActivity && modes_permitted && modes_permitted.length !== 0) return true;\n\n if (isTextingActivity(type) && !turfActivity) return true;\n\n return false;\n};\n\nconst ActivityScriptsAttributesSchema = yup.array().when(['type', 'modes_permitted'], {\n is: shouldValidateScripts,\n\n then: yup.array().of(\n yup\n .object()\n .shape({\n name: yup.string().required('Script Name is required!'),\n script: yup\n .string()\n .required('Script Message is required!')\n .test(\n 'has-valid-vars',\n 'Script contains invalid dynamic variable. Please double check the script',\n verifyDynamicVars,\n ),\n })\n .required('Activity scripts are required.'),\n ),\n});\n\nconst ActivityIncentivesAttributesSchema = yup.array().of(\n yup.object().shape({\n name: yup.string().required('Name is required!'),\n }),\n);\n\nconst ActivitySchema = yup.object().shape({\n activity_custom_fields_attributes: yup.array(),\n activity_incentives_attributes: ActivityIncentivesAttributesSchema,\n activity_scripts_attributes: ActivityScriptsAttributesSchema,\n activity_tags_attributes: yup.array(),\n automated_text_activity_id: yup.string().when('automated_texting_enabled', {\n is: value => !!value,\n otherwise: yup.string().nullable(),\n then: yup.string().required('Texting Automation is required!').nullable(),\n }),\n confirmRequirements: yup.bool().when('type', {\n is: value => value === 'TextAListActivity',\n otherwise: yup.bool().nullable(),\n then: yup.bool().oneOf([true], 'Confirmation is required!').required(),\n }),\n contact_list_id: yup.string().when('type', {\n is: value =>\n value === 'TextAListActivity' ||\n value === 'IdVotersActivity' ||\n value === 'DialerActivity' ||\n value === 'AssignedCanvassingActivity',\n then: yup.string().required('Contact list is required!').nullable(),\n otherwise: yup.string().nullable(),\n }),\n description: yup\n .string()\n .max(300, \"Description can't be longer than 300 characters.\")\n .required('Action Description is required!'),\n go_to_link: yup.string().when('type', {\n is: value => value === 'WebActivity',\n then: yup\n .string()\n .matches(urlRegex, {\n excludeEmptyString: true,\n message: 'Link must be a valid URL that starts with http:// or https://.',\n })\n .required('Link is required!')\n .nullable(),\n otherwise: yup.string().nullable(),\n }),\n share_link: yup.string().when('type', {\n is: value => value === 'ShareActivity',\n then: yup\n .string()\n .matches(urlRegex, {\n excludeEmptyString: true,\n message: 'Link must be a valid URL that starts with http:// or https://.',\n })\n .required('Link is required!')\n .nullable(),\n otherwise: yup.string().nullable(),\n }),\n share_text: yup.string().when('type', {\n is: value => value === 'ShareActivity',\n then: yup.string().required('Must be valid text.').nullable(),\n otherwise: yup.string().nullable(),\n }),\n title: yup\n .string()\n .max(100, \"Title can't be longer than 100 characters.\")\n .required('Action Title is required!'),\n type: yup\n .string()\n .oneOf([\n 'DialerActivity',\n 'TextAFriendActivity',\n 'TextAListActivity',\n 'ShareActivity',\n 'FormActivity',\n 'WebActivity',\n 'NewsActivity',\n 'TestimonialActivity',\n 'IdVotersActivity',\n 'AssignedCanvassingActivity',\n 'BroadcastActivity',\n 'RegistrationActivity',\n ]),\n});\n\nconst CampaignSchema = tab => {\n return yup.object().shape({\n broadcast_closed_auto_reply: yup.string().when([], {\n is: () => tab === 'broadcast',\n otherwise: yup.string().notRequired().nullable(),\n then: yup.string().notRequired().nullable(),\n }),\n\n broadcast_end_hour: yup.string().when([], {\n is: () => tab === 'broadcast',\n otherwise: yup.string().notRequired(),\n then: yup.string().required('End time is required.'),\n }),\n\n broadcast_start_hour: yup.string().when([], {\n is: () => tab === 'broadcast',\n otherwise: yup.string().notRequired(),\n then: yup.string().required('Start time is required.'),\n }),\n\n campaign_localization: yup.object().when('showSpanishBrandInfo', {\n is: true,\n otherwise: yup.object().notRequired().nullable(),\n then: yup.object().shape({\n description: yup\n .string()\n .max(1000, \"Description can't be longer than 1000 characters.\")\n .required('Description is required!'),\n slogan: yup\n .string()\n .max(100, \"Slogan can't be longer than 100 characters.\")\n .required('Slogan is required!'),\n }),\n }),\n\n description: yup.string().when([], {\n is: () => tab === 'settings',\n otherwise: yup.string().notRequired(),\n then: yup\n .string()\n .max(1000, \"Description can't be longer than 1000 characters.\")\n .required('Description is required!'),\n }),\n terms: yup.string().when('showTermsAndConditions', {\n is: true,\n then: yup.string().required('Terms and Conditions are required').nullable(),\n }),\n\n join_terms: yup.string().when('showPrivacyPolicy', {\n is: true,\n then: yup.string().required('Privacy Policy is required').nullable(),\n }),\n\n outreach_end_hour: yup.string().when([], {\n is: () => tab === 'p2p',\n otherwise: yup.string().notRequired(),\n then: yup.string().required('End time is required.'),\n }),\n\n outreach_preferred_area_codes: yup.array().when([], {\n is: () => tab === 'p2p',\n then: yup\n .array()\n .of(yup.string().matches(/^\\d{3}$/, 'Area code must be 3 digits'))\n .notRequired()\n .nullable(),\n }),\n\n outreach_start_hour: yup.string().when([], {\n is: () => tab === 'p2p',\n otherwise: yup.string().notRequired(),\n then: yup.string().required('Start time is required.'),\n }),\n\n outreach_time_zone: yup.string().when([], {\n is: () => tab === 'p2p' || tab === 'broadcast',\n otherwise: yup.string().notRequired(),\n then: yup.string().required('Time Zone is required.'),\n }),\n\n preferred_broadcast_area_codes: yup.string().when([], {\n is: () => tab === 'broadcast',\n then: yup\n .string()\n .matches(/^\\d{3}(,{1}\\s?\\d{3})*$/, {\n excludeEmptyString: true,\n message: 'Area codes separated by commas only',\n })\n .nullable(),\n }),\n\n privacy_link: yup.string().when([], {\n is: () => tab === 'legal',\n then: yup\n .string()\n .matches(urlRegex, {\n excludeEmptyString: true,\n message:\n 'You must enter a valid URL that starts with http:// or https:// for your privacy text link.',\n })\n .nullable(),\n }),\n\n slogan: yup.string().when([], {\n is: () => tab === 'settings',\n otherwise: yup.string().notRequired(),\n then: yup\n .string()\n .max(100, \"Slogan can't be longer than 100 characters.\")\n .required('Slogan is required!'),\n }),\n\n terms_link: yup.string().when([], {\n is: () => tab === 'legal',\n then: yup\n .string()\n .matches(urlRegex, {\n excludeEmptyString: true,\n message:\n 'You must enter a valid URL that starts with http:// or https:// for your terms and conditions link.',\n })\n .nullable(),\n }),\n\n website_url: yup.string().when([], {\n is: () => tab === 'settings',\n then: yup\n .string()\n .matches(urlRegex, {\n excludeEmptyString: true,\n message:\n 'You must enter a valid URL that starts with http:// or https:// for your campaign website.',\n })\n .nullable(),\n }),\n });\n};\n\nconst UserReportSchema = yup.object().shape({\n email: yup.string(),\n first_name: yup.string(),\n last_name: yup.string(),\n phone: yup.string(),\n});\n\nconst ScriptsAttributesSchema = yup.array().of(\n yup\n .object()\n .shape({\n keyword: yup.string().nullable(),\n name: yup.string().required('Script name is required!'),\n script: yup\n .string()\n .required('Script Message is required!')\n .test(\n 'has-valid-vars',\n 'Script contains invalid dynamic variable. Please double check the script',\n verifyDynamicVars,\n ),\n })\n .required('Scripts are required.'),\n);\n\nconst OptInFormSchema = yup.object().shape({\n name: yup\n .string()\n .max(100, \"Name can't be longer than 100 characters.\")\n .required('Name is required!'),\n title: yup\n .string()\n .max(100, \"Form title can't be longer than 100 characters.\")\n .required('Form title is required!'),\n subtitle: yup.string().max(500, \"Subtitle can't be longer than 500 characters.\"),\n join_keyword: yup\n .string()\n .max(50, \"Join keyword can't be longer than 50 characters.\")\n .required('Join keyword is required!'),\n button_text: yup.string().max(50, \"Button text can't be longer than 50 characters.\"),\n initial_response_text: yup.string().required('Initial response text is required!'),\n scripts_attributes: ScriptsAttributesSchema,\n});\n\nconst BroadcastFormSchema = yup.object().shape({\n activity_scripts_attributes: ScriptsAttributesSchema,\n confirmRequirements: yup.bool().oneOf([true], 'Confirmation is required!').required(),\n contact_list_id: yup.string().when('forUsers', {\n is: value => !value,\n otherwise: yup.string().nullable(),\n then: yup.string().required('Contact list is required!').nullable(),\n }),\n handlerUserListId: yup.number().nullable().required('Responder List is required!'),\n title: yup\n .string()\n .max(100, \"Name can't be longer than 100 characters.\")\n .required('Broadcast Name is required!'),\n user_list_id: yup.string().when('forUsers', {\n is: value => !!value,\n otherwise: yup.string().nullable(),\n then: yup.string().required('User list is required!').nullable(),\n }),\n});\n\nconst AutomatedTextingFormSchema = yup.object().shape({\n activity_scripts_attributes: yup.array().of(\n yup\n .object()\n .shape({\n keyword: yup.string().nullable(),\n name: yup.string().when('script_type', {\n is: scriptType => scriptType === 'response',\n otherwise: yup.string().nullable(),\n then: yup.string().required('Script name is required!'),\n }),\n script: yup\n .string()\n .required('Script Message is required!')\n .test(\n 'has-valid-vars',\n 'Script contains invalid dynamic variable. Please double check the script',\n verifyDynamicVars,\n ),\n })\n .required('Scripts are required.'),\n ),\n handlerUserListId: yup.number().nullable().required('Responder List is required!'),\n title: yup\n .string()\n .max(100, \"Name can't be longer than 100 characters.\")\n .required('Texting Automation Title is required!'),\n});\n\nexport {\n ActivitySchema,\n ActivityScriptsAttributesSchema,\n ActivityIncentivesAttributesSchema,\n AutomatedTextingFormSchema,\n BroadcastFormSchema,\n CampaignSchema,\n OptInFormSchema,\n ScriptsAttributesSchema,\n UserReportSchema,\n urlRegex,\n};\n"],"names":["modes","sms","id","label","email","phone","social","setModesPermitted","values","mode","setFieldValue","deleteScript","_modes$mode","_modes$mode2","scripts","activity_scripts_attributes","shouldDelete","filter","script","length","modes_permitted","includes","item","concat","_toConsumableArray","shouldRenderScripts","_values$modes_permitt","isTurfActivity","type","RedText","styled","span","withConfig","displayName","componentId","customFieldRegex","varsRegex","trackableLinksRegexp","combinedBrokenVarsRegexp","RegExp","source","generateInterpolatedSegmentsForPreview","user","campaign","text","limit","interpolatedText","userVars","first_name","last_name","supplied_state_abbrev","campaignVars","broadcast_phone_number","broadcast_number","description","join_code","name","defaultVars","_objectSpread","full_name","state_abbrev","regexp","Array","isArray","flatMap","str","split","splitWithRegexp","splitInterpolationByWords","map","generateVarObject","obj","Boolean","divideIntoSegments","test","status","window","location","host","variable","interpolatedVariable","slice","textArr","result","current","forEach","elem","push","styleSegments","segment","React","_Tooltip","title","verifyDynamicVars","_script$split","_script$split$filter","word","some","urlRegex","ActivityScriptsAttributesSchema","yup","when","is","turfActivity","isTextingActivity","then","of","shape","required","ActivityIncentivesAttributesSchema","ActivitySchema","activity_custom_fields_attributes","activity_incentives_attributes","activity_tags_attributes","automated_text_activity_id","value","otherwise","nullable","confirmRequirements","oneOf","contact_list_id","max","go_to_link","matches","excludeEmptyString","message","share_link","share_text","CampaignSchema","tab","broadcast_closed_auto_reply","notRequired","broadcast_end_hour","broadcast_start_hour","campaign_localization","slogan","terms","join_terms","outreach_end_hour","outreach_preferred_area_codes","outreach_start_hour","outreach_time_zone","preferred_broadcast_area_codes","privacy_link","terms_link","website_url","UserReportSchema","ScriptsAttributesSchema","keyword","BroadcastFormSchema","subtitle","join_keyword","button_text","initial_response_text","scripts_attributes","handlerUserListId","user_list_id","AutomatedTextingFormSchema","scriptType"],"sourceRoot":""}