{"version":3,"file":"static/js/application.async.landing~c2eb9e23.a3570e34.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/url-options/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/validators.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/error.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/legacy-i18n.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/url-options-parameters.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/url-options.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/validated-url-options-parameters.js","../../../node_modules/@bingads-webui-campaign-react/url-options/src/get-url-options-details.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/helpers/constants.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/helpers/utils.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/side-panel/url-rules-editor.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/url-rules-preview.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/url-rules-impl.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/url-rules.js","../../../node_modules/@bingads-webui-campaign-react/url-rules-v2/src/url-options-details-with-rules.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/helpers/constants.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/helpers/utils.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/side-panel/tag-with-tooltips.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/side-panel/custom-label-editor.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/side-panel/url-rules-editor.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/url-rules-preview.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/url-rules-impl.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/url-rules.js","../../../node_modules/@bingads-webui-campaign-react/url-rules/src/url-options-details-with-rules.js","../../../node_modules/@bingads-webui-campaign-react/validated-text-collection/src/dummy-is-optional-validation-item.js","../../../node_modules/@bingads-webui-campaign-react/validated-text-collection/src/shared.js","../../../node_modules/@bingads-webui-campaign-react/validated-text-collection/src/text-asset-collection.js","../../../node_modules/@bingads-webui-campaign-react/validated-text-collection/src/style.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input-fluent-v2/src/validated-final-url.tsx","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/validated-url-path.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/style.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/validated-mobile-url.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/validated-final-url.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/url-cards-details.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/validated-url-options.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/mobile-url-with-custom-validation.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/mobile-url-section.js","../../../node_modules/@bingads-webui-campaign-react/validated-url-input/src/url-options-section.js","../../../node_modules/@bingads-webui-campaign-react/vanity-url-option/src/options.js","../../../node_modules/@bingads-webui-campaign-react/vanity-url-option/src/styles.js","../../../node_modules/@bingads-webui-campaign-react/vanity-url-option/src/index.js"],"sourcesContent":["import { getTheme } from '@fluentui/react';\r\n\r\nconst { palette } = getTheme();\r\n\r\nexport const styles = {\r\n root: {\r\n selectors: {\r\n '& .url-options-toggle-button': {\r\n color: palette.themePrimary,\r\n fontWeight: 'bold',\r\n paddingLeft: 0,\r\n\r\n '& .ms-Icon': {\r\n marginLeft: 0,\r\n },\r\n },\r\n\r\n '& .url-options-parameters--read-only': {\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 1fr auto 1fr 0px',\r\n },\r\n\r\n '& .url-options-parameters__param_label--read-only': {\r\n paddingRight: 6,\r\n },\r\n\r\n '& .url-options-parameters__param_value--read-only': {\r\n gridColumn: '2 / span 4',\r\n width: '100%',\r\n overflowWrap: 'break-word',\r\n },\r\n\r\n '& .custom-parameters-entry': {\r\n display: 'grid',\r\n gridTemplateColumns: 'auto 1fr auto 1fr 0px',\r\n },\r\n\r\n '& .custom-parameters-entry > div': {\r\n paddingRight: 6,\r\n },\r\n\r\n '& .custom-parameters-entry > .right-input': {\r\n paddingRight: 'unset',\r\n },\r\n\r\n '& .custom-parameters-entry > :not(:first-child)': {\r\n marginTop: 6,\r\n },\r\n\r\n '& .custom-parameters-entry > .left-label': {\r\n gridColumnStart: '1',\r\n },\r\n\r\n '& .custom-parameters-entry > .custom-parameter-value': {\r\n gridColumn: '2 / span 4',\r\n width: '100%',\r\n },\r\n\r\n '& .custom-parameters-entry > .errors': {\r\n gridColumn: '1 / span 5',\r\n },\r\n\r\n '& .custom-parameters-entry > .left-label, & .custom-parameters-entry > .right-label': {\r\n marginTop: 10,\r\n },\r\n\r\n '& .remove-url-parameter': {\r\n color: palette.neutralPrimary,\r\n },\r\n\r\n '& .remove-url-parameter:hover': {\r\n color: palette.neutralPrimary,\r\n backgroundColor: 'transparent',\r\n },\r\n\r\n '& .errors': {\r\n color: '#A80000',\r\n fontSize: 12,\r\n\r\n '& .error': {\r\n margin: '0 0 4px 0',\r\n },\r\n },\r\n\r\n '& .add-url-parameter': {\r\n color: palette.themePrimary,\r\n },\r\n '& .add-url-parameter:hover': {\r\n color: palette.themeDarker,\r\n },\r\n },\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport { hasScheme } from '@bingads-webui/url-util';\r\n\r\nexport const adFieldLengthLimitMap = {\r\n TrackingUrlTemplate: 2048,\r\n FinalUrlSuffix: 1024,\r\n UrlCustomParametersKey: 16,\r\n UrlCustomParametersValue: 2048,\r\n};\r\n\r\nexport function checkAdFieldLengthLimit(value, key) {\r\n return _.size(value) <= adFieldLengthLimitMap[key];\r\n}\r\n\r\nexport function isUrlCustomParametersEmpty(customParameters) {\r\n return !_.some(customParameters, ({ Key, Value }) => !_.isEmpty(Key) || !_.isEmpty(Value));\r\n}\r\n\r\nexport function validateFinalUrlSuffix(finalUrlSuffix, i18n) {\r\n const errors = [];\r\n const invalidFirstChars = ['#', '?', '&'];\r\n const firstChar = _.first(finalUrlSuffix);\r\n\r\n if (_.size(finalUrlSuffix) > adFieldLengthLimitMap.FinalUrlSuffix) {\r\n errors.push({\r\n Property: 'FinalUrlSuffix',\r\n Message: i18n.getString(_TL_('Field should not exceed {{maxlength}} characters'), { maxlength: adFieldLengthLimitMap.FinalUrlSuffix }),\r\n });\r\n }\r\n\r\n if (_.contains(invalidFirstChars, firstChar) || /\\s|\\r|\\n/g.test(finalUrlSuffix)) {\r\n errors.push({\r\n Property: 'FinalUrlSuffix',\r\n Message: i18n.getString(_TL_('Value contains invalid characters.')),\r\n });\r\n }\r\n\r\n // Parameters reserved for tracking template can not be used here.\r\n if (!_.isEmpty(finalUrlSuffix) && _.find(\r\n ['{lpurl}',\r\n '{lpurl+2}',\r\n '{lpurl+3}',\r\n '{unescapedlpurl}',\r\n '{ignore}',\r\n '{escapedlpurl}',\r\n '{escapedlpurl+2}',\r\n '{escapedlpurl+3}',\r\n '{ignore}',\r\n ],\r\n tag => finalUrlSuffix.indexOf(tag) === 0\r\n )) {\r\n errors.push({\r\n Property: 'FinalUrlSuffix',\r\n Message: i18n.getString(_TL_('Value contains invalid tag.')),\r\n });\r\n }\r\n\r\n return errors;\r\n}\r\n\r\nexport function validateTrackingUrlTemplate(trackingUrlTemplate, i18n) {\r\n const errors = [];\r\n if (_.size(trackingUrlTemplate) > adFieldLengthLimitMap.TrackingUrlTemplate) {\r\n errors.push({\r\n Property: 'TrackingUrlTemplate',\r\n Message: i18n.getString(_TL_('Field should not exceed {{maxlength}} characters'), { maxlength: adFieldLengthLimitMap.TrackingUrlTemplate }),\r\n });\r\n }\r\n\r\n if (!_.isEmpty(trackingUrlTemplate) &&\r\n !hasScheme(trackingUrlTemplate) &&\r\n !_.find(\r\n ['{lpurl}', '{unescapedlpurl}'],\r\n tag => trackingUrlTemplate.indexOf(tag) === 0\r\n )) {\r\n errors.push({\r\n Property: 'TrackingUrlTemplate',\r\n Message: i18n.getString(_TL_('The URL entered is invalid. A valid URL must start with http:// or https:// or {lpurl} or {unescapedlpurl}.')),\r\n });\r\n }\r\n\r\n return errors;\r\n}\r\n\r\nexport function validateTrackingUrlTemplateStringOnly(trackingUrlTemplate, i18n, isTrackingUrlTemplateRequired = false) {\r\n const errors = [];\r\n if (_.size(trackingUrlTemplate) > adFieldLengthLimitMap.TrackingUrlTemplate) {\r\n errors.push(i18n.getString(_TL_('Field should not exceed {{maxlength}} characters'), { maxlength: adFieldLengthLimitMap.TrackingUrlTemplate }));\r\n }\r\n\r\n if (!_.isEmpty(trackingUrlTemplate) &&\r\n !hasScheme(trackingUrlTemplate) &&\r\n !_.find(\r\n ['{lpurl}', '{unescapedlpurl}'],\r\n tag => trackingUrlTemplate.indexOf(tag) === 0\r\n )) {\r\n errors.push(i18n.getString(_TL_('The URL entered is invalid. A valid URL must start with http:// or https:// or {lpurl} or {unescapedlpurl}.')));\r\n }\r\n\r\n if (isTrackingUrlTemplateRequired && _.isEmpty(trackingUrlTemplate)) {\r\n errors.push(i18n.getString(_TL_('Please add a tracking template.')));\r\n }\r\n\r\n return errors;\r\n}\r\n\r\nconst invalidChars = ['#', '/', ' '];\r\n\r\nexport function validateUrlCustomParameters(urlCustomParameters, i18n) {\r\n const errors = [];\r\n\r\n _.each(urlCustomParameters, ({ Key, Value }, index) => {\r\n if (_.size(Key) > adFieldLengthLimitMap.UrlCustomParametersKey) {\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('Name should not exceed {{maxlength}} characters'), { maxlength: adFieldLengthLimitMap.UrlCustomParametersKey }),\r\n Index: index,\r\n });\r\n }\r\n if (_.size(Value) > adFieldLengthLimitMap.UrlCustomParametersValue) {\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('Value should not exceed {{maxlength}} characters'), { maxlength: adFieldLengthLimitMap.UrlCustomParametersValue }),\r\n Index: index,\r\n });\r\n }\r\n\r\n if (Value && !Key) {\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('Custom parameter requires a name.')),\r\n Index: index,\r\n });\r\n }\r\n if (_.some(invalidChars, c => _.contains(Key, c))) {\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('The name of a custom parameter can only contain alphanumeric characters (e.g., 0-9 a-z A-Z).')),\r\n Index: index,\r\n });\r\n }\r\n if (/\\s/.test(Value)) { // Validate value against white spaces\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('Value contains invalid characters.')),\r\n Index: index,\r\n });\r\n }\r\n });\r\n\r\n const keys = _.compact(_.map(urlCustomParameters, ({ Key }) => Key.toLowerCase()));\r\n if (_.unique(keys).length !== keys.length) {\r\n errors.push({\r\n Property: 'UrlCustomParameters',\r\n Message: i18n.getString(_TL_('Custom parameter names must be unique.')),\r\n Index: -1,\r\n });\r\n }\r\n\r\n return errors;\r\n}\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport function Error(props) {\r\n const {\r\n errors,\r\n property,\r\n index,\r\n } = props;\r\n\r\n const filteredErrors = useMemo(() => {\r\n if (!_.isEmpty(property)) {\r\n return _.filter(errors, error => error.Property === property &&\r\n (index === error.Index || (index === -1 && error.Index === undefined)));\r\n }\r\n return errors;\r\n }, [errors, index, property]);\r\n\r\n return filteredErrors && filteredErrors.length > 0 ? (\r\n \r\n { _.map(filteredErrors, (error, key) => (\r\n
\r\n {error.Message || error.Code}\r\n
\r\n ))}\r\n \r\n ) : null;\r\n}\r\n\r\nError.propTypes = {\r\n errors: PropTypes.arrayOf({\r\n Code: PropTypes.string,\r\n Message: PropTypes.string,\r\n Property: PropTypes.string,\r\n Index: PropTypes.number,\r\n }),\r\n\r\n property: PropTypes.string,\r\n\r\n index: PropTypes.number,\r\n};\r\n\r\nError.defaultProps = {\r\n errors: [],\r\n property: null,\r\n index: -1,\r\n};\r\n","export const legacyStrings = {\r\n UURLTestTool_Url_Expand_Button: _TL_('Expand'),\r\n UURLTestTool_Url_Collapse_Button: _TL_('Collapse'),\r\n LearnMore: _TL_('Learn more'),\r\n UURLTestTool_Title_ServingURL: _TL_('Click URL'),\r\n UURLTestTool_Title_TrackingTemplate: _TL_('Tracking Template'),\r\n UURLTestTool_Title_FinalURLSuffix: _TL_('Final URL suffix'),\r\n UURLTestTool_Title_FinalURL: _TL_('Final URL'),\r\n UURLTestTool_Title_AttributeUsed: _TL_('Attribute Used'),\r\n UURLTestTool_Note_Title: _TL_('Note'),\r\n UURLTestTool_Note: _TL_('This test does not check for Microsoft Advertising policy violations.'),\r\n UURLTestTool_With_ParallelTracking: _TL_('With parallel tracking:'),\r\n UURLTestTool_LandingPage_URL: _TL_('Landing page URL:'),\r\n UURLTestTool_Tracking_URL: _TL_('Tracking URL:'),\r\n UURLTestTool_When_ParallelTracking_Is_Not_Supported: _TL_('When parallel tracking is not supported:'),\r\n UURLTestTool_Title_TrackingTemplate_Colon: _TL_('Tracking template:'),\r\n UURLTestTool_Title_TrackingTemplate_None: _TL_('(None)'),\r\n UURLTestTool_ClickURLs: _TL_('Click URLs'),\r\n UURLTestTool_Status: _TL_('Status'),\r\n UURLTestTool_AdGroup: _TL_('Ad Group'),\r\n UURLTestTool_Test_Button: _TL_('Test'),\r\n UURLTestTool_Test_Inprogress: _TL_('Testing in progress. We’ll have the results for you shortly.'),\r\n UURLTestTool_Result_ShowDetails: _TL_('Click to show details of test result'),\r\n UURLTestTool_From: _TL_(' (from {0})'),\r\n UURLTestTool_NA: _TL_('N/A'),\r\n UURLTestTool_Result_Found: _TL_('Landing page found'),\r\n UURLTestTool_Result_NotFound: _TL_('Page not found'),\r\n UURLTestTool_Result_Mismatch: _TL_('Final URL mismatch'),\r\n UURLTestTool_Result_Unreachable: _TL_('Unreachable'),\r\n UURLTestTool_Result_Unknown: _TL_('Unknown/Tool failure'),\r\n UURLTestTool_Result_UserInputError: _TL_('In order to use URL options (tracking template and custom parameters), a final URL must be used.'),\r\n UURLTestTool_Result_NoEligibleUrlsFound: _TL_('No eligible URLs found'),\r\n UURLTestTool_Result_TestComplete: _TL_('Test complete'),\r\n UURLTestTool_TrackingCall_Successful: _TL_('Tracking call successful'),\r\n UURLTestTool_TrackingCall_Unsuccessful: _TL_('Tracking call unsuccessful'),\r\n Unkown: _TL_('Unkown'),\r\n Entity_Account: _TL_('Account'),\r\n Entity_Campaign: _TL_('Campaign'),\r\n Entity_Adgroup: _TL_('Ad group'),\r\n Entity_Ads: _TL_('Ad'),\r\n Entity_Keywords: _TL_('Keyword'),\r\n Entity_SitelinkExtensions: _TL_('Sitelink Extension'),\r\n Popup_Close: _TL_('Close'),\r\n};\r\n","import { filter, identity, isEmpty, map, noop, size } from 'underscore';\r\nimport React, { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ActionButton, IconButton, Label, Stack, TextField, getId } from '@fluentui/react';\r\nimport { cloneDeep } from '@bingads-webui-universal/primitive-utilities';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { UrlTestTool } from '@bingads-webui-campaign/url-test-tool';\r\nimport { Error } from './error';\r\nimport {\r\n validateTrackingUrlTemplate,\r\n validateTrackingUrlTemplateStringOnly,\r\n validateFinalUrlSuffix,\r\n validateUrlCustomParameters,\r\n checkAdFieldLengthLimit,\r\n} from './validators';\r\nimport { legacyStrings } from './legacy-i18n';\r\nimport { styles as defaultStyles } from './styles';\r\n\r\nconst MAX_CUSTOM_PARAMETERS_COUNT = 8;\r\nconst TRACKING_URL_TEMPLATE = 'TrackingUrlTemplate';\r\nconst FINAL_URL_SUFFIX = 'FinalUrlSuffix';\r\nconst URL_CUSTOM_PARAMETERS = 'UrlCustomParameters';\r\nconst URL_CUSTOM_PARAMETERS_KEY = 'UrlCustomParametersKey';\r\nconst URL_CUSTOM_PARAMETERS_VALUE = 'UrlCustomParametersValue';\r\nconst Validators = {\r\n [TRACKING_URL_TEMPLATE]: validateTrackingUrlTemplate,\r\n [FINAL_URL_SUFFIX]: validateFinalUrlSuffix,\r\n [URL_CUSTOM_PARAMETERS]: validateUrlCustomParameters,\r\n};\r\nconst ValidatorsStringOnly = {\r\n [TRACKING_URL_TEMPLATE]: validateTrackingUrlTemplateStringOnly,\r\n};\r\n\r\nconst TrackingUrlTemplateControls = ({\r\n i18n, id, value, onChange, formErrors,\r\n}) => (\r\n <>\r\n \r\n
{i18n.getString(_TL_('Example: http://www.trackingtool.com/tracking?url={lpurl}&type=1'))}
\r\n \r\n \r\n);\r\n\r\nTrackingUrlTemplateControls.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n id: PropTypes.string,\r\n value: PropTypes.string,\r\n onChange: PropTypes.func,\r\n formErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nTrackingUrlTemplateControls.defaultProps = {\r\n id: undefined,\r\n value: '',\r\n onChange: undefined,\r\n formErrors: [],\r\n};\r\n\r\nconst FinalUrlSuffixControls = ({\r\n i18n, id, value, onChange, formErrors,\r\n}) => (\r\n <>\r\n \r\n
{i18n.getString(_TL_('Example: param1=values1¶m2=value2'))}
\r\n \r\n \r\n);\r\n\r\nFinalUrlSuffixControls.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n id: PropTypes.string,\r\n value: PropTypes.string,\r\n onChange: PropTypes.func,\r\n formErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nFinalUrlSuffixControls.defaultProps = {\r\n id: undefined,\r\n value: '',\r\n onChange: undefined,\r\n formErrors: [],\r\n};\r\n\r\nconst UrlCustomParametersControls = ({\r\n i18n, customParameters, onCustomParameterKeyChange, onCustomParameterValueChange, onRemoveUrlParameter, onAddUrlParameter, formErrors,\r\n}) => (\r\n <>\r\n \r\n {map(customParameters, ({ Key, Value }, index) => (\r\n
\r\n
{'{ _'}
\r\n onCustomParameterKeyChange(index, value)}\r\n />\r\n
{'} ='}
\r\n onCustomParameterValueChange(index, value)}\r\n />\r\n {index !== 0 && onRemoveUrlParameter(index)}\r\n />}\r\n \r\n
\r\n ))}\r\n \r\n {size(customParameters) < MAX_CUSTOM_PARAMETERS_COUNT &&\r\n \r\n {i18n.getString(_TL_('Add another'))}\r\n \r\n }\r\n \r\n \r\n);\r\n\r\nUrlCustomParametersControls.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onCustomParameterKeyChange: PropTypes.func.isRequired,\r\n onCustomParameterValueChange: PropTypes.func.isRequired,\r\n onRemoveUrlParameter: PropTypes.func.isRequired,\r\n onAddUrlParameter: PropTypes.func.isRequired,\r\n customParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n formErrors: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nUrlCustomParametersControls.defaultProps = {\r\n customParameters: [],\r\n formErrors: [],\r\n};\r\n\r\nexport const UrlOptionsParameters = ({\r\n i18n, styles, instrumentation, errors, enableSelfValidation, disableLengthConstraints, trackingUrlTemplate, finalUrlSuffix, urlCustomParameters,\r\n onChange, showFinalUrlSuffix, showCustomParameters, showUurlTestTool, token, triggerTestUurl, isControlledOutside,\r\n trackingUrlTemplateControlsWrapper, finalUrlSuffixControlsWrapper, urlCustomParametersControlsWrapper, isTrackingUrlTemplateRequired, isWithError,\r\n}) => {\r\n const legacyI18n = useMemo(\r\n () => buildLegacyI18n(i18n, [\r\n legacyStrings,\r\n ]),\r\n [i18n]\r\n );\r\n\r\n const trackingUrlTemplateId = useMemo(() => getId(TRACKING_URL_TEMPLATE), []);\r\n const finalUrlSuffixId = useMemo(() => getId(FINAL_URL_SUFFIX), []);\r\n\r\n const [cachedTrackingUrlTemplate, setCachedTrackingUrlTemplate] = useState(trackingUrlTemplate);\r\n const [cachedFinalUrlSuffix, setCachedFinaUrlSuffix] = useState(finalUrlSuffix);\r\n const [cachedCustomeParameters, setCachedCustomParameters] = useState(urlCustomParameters);\r\n\r\n const [formErrors, setFormErrors] = useState(errors);\r\n useEffect(() => {\r\n setFormErrors(errors);\r\n }, [errors]);\r\n\r\n const onValidate = useCallback((value, key) => {\r\n let newErrors = [];\r\n if (enableSelfValidation) {\r\n newErrors = filter(formErrors, error => error.Property !== key);\r\n\r\n if (key === TRACKING_URL_TEMPLATE) {\r\n const errorsArray = isWithError ? ValidatorsStringOnly[key](value, i18n, isTrackingUrlTemplateRequired) : Validators[key](value, i18n);\r\n newErrors.push(...errorsArray);\r\n } else {\r\n newErrors.push(...Validators[key](value, i18n));\r\n }\r\n\r\n if (!isWithError) setFormErrors(newErrors);\r\n }\r\n onChange(value, key, newErrors);\r\n }, [enableSelfValidation, formErrors, i18n, isTrackingUrlTemplateRequired, onChange, isWithError]);\r\n\r\n const onTrackingUrlTemplateChange = useCallback((event, value) => {\r\n if (disableLengthConstraints || checkAdFieldLengthLimit(value, TRACKING_URL_TEMPLATE)) {\r\n setCachedTrackingUrlTemplate(value);\r\n onValidate(value, TRACKING_URL_TEMPLATE);\r\n }\r\n }, [onValidate, disableLengthConstraints]);\r\n\r\n const onFinalUrlSuffixChange = useCallback((event, value) => {\r\n if (disableLengthConstraints || checkAdFieldLengthLimit(value, FINAL_URL_SUFFIX)) {\r\n setCachedFinaUrlSuffix(value);\r\n onValidate(value, FINAL_URL_SUFFIX);\r\n }\r\n }, [onValidate, disableLengthConstraints]);\r\n\r\n const onCustomParameterKeyChange = useCallback((index, key) => {\r\n if (disableLengthConstraints || checkAdFieldLengthLimit(key, URL_CUSTOM_PARAMETERS_KEY)) {\r\n const customParameters = cloneDeep(isControlledOutside ? urlCustomParameters : cachedCustomeParameters);\r\n customParameters[index].Key = key;\r\n setCachedCustomParameters(customParameters);\r\n onValidate(customParameters, URL_CUSTOM_PARAMETERS);\r\n }\r\n }, [disableLengthConstraints, isControlledOutside, urlCustomParameters, cachedCustomeParameters, onValidate]);\r\n\r\n const onCustomParameterValueChange = useCallback((index, value) => {\r\n if (disableLengthConstraints || checkAdFieldLengthLimit(value, URL_CUSTOM_PARAMETERS_VALUE)) {\r\n const customParameters = cloneDeep(isControlledOutside ? urlCustomParameters : cachedCustomeParameters);\r\n customParameters[index].Value = value;\r\n setCachedCustomParameters(customParameters);\r\n onValidate(customParameters, URL_CUSTOM_PARAMETERS);\r\n }\r\n }, [disableLengthConstraints, isControlledOutside, urlCustomParameters, cachedCustomeParameters, onValidate]);\r\n\r\n const onAddUrlParameter = useCallback(() => {\r\n const customParameters = [\r\n ...cloneDeep(isControlledOutside ? urlCustomParameters : cachedCustomeParameters),\r\n { Key: '', Value: '' },\r\n ];\r\n setCachedCustomParameters(customParameters);\r\n onValidate(customParameters, URL_CUSTOM_PARAMETERS);\r\n }, [cachedCustomeParameters, isControlledOutside, onValidate, urlCustomParameters]);\r\n\r\n const onRemoveUrlParameter = useCallback((index) => {\r\n const customParameters = cloneDeep(isControlledOutside ? urlCustomParameters : cachedCustomeParameters);\r\n customParameters.splice(index, 1);\r\n setCachedCustomParameters(customParameters);\r\n onValidate(customParameters, URL_CUSTOM_PARAMETERS);\r\n }, [cachedCustomeParameters, isControlledOutside, onValidate, urlCustomParameters]);\r\n\r\n useEffect(() => {\r\n if (isEmpty(cachedCustomeParameters)) {\r\n setCachedCustomParameters([{ Key: '', Value: '' }]);\r\n }\r\n }, [cachedCustomeParameters, urlCustomParameters]);\r\n\r\n useEffect(() => {\r\n if (isControlledOutside && isEmpty(urlCustomParameters)) {\r\n onValidate([{ Key: '', Value: '' }], URL_CUSTOM_PARAMETERS);\r\n }\r\n }, [isControlledOutside, onValidate, urlCustomParameters]);\r\n\r\n\r\n const urlTestTool = useMemo(() => new UrlTestTool({\r\n token,\r\n triggerTestUurl,\r\n instrumentation,\r\n i18n: legacyI18n,\r\n }), [legacyI18n, instrumentation, token, triggerTestUurl]);\r\n\r\n const urlTestToolContainerRef = useCallback((node) => {\r\n if (node !== null) {\r\n node.append(urlTestTool.render().el);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const TrackingUrlTemplateControlsWrapped = useMemo(() => trackingUrlTemplateControlsWrapper(TrackingUrlTemplateControls), [trackingUrlTemplateControlsWrapper]);\r\n const FinalUrlSuffixControlsWrapped = useMemo(() => finalUrlSuffixControlsWrapper(FinalUrlSuffixControls), [finalUrlSuffixControlsWrapper]);\r\n const UrlCustomParametersControlsWrapped = useMemo(() => urlCustomParametersControlsWrapper(UrlCustomParametersControls), [urlCustomParametersControlsWrapper]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n\r\n {showFinalUrlSuffix &&\r\n \r\n \r\n \r\n }\r\n {\r\n showCustomParameters &&\r\n \r\n \r\n \r\n \r\n }\r\n {\r\n showUurlTestTool ?\r\n \r\n
\r\n : null\r\n }\r\n \r\n );\r\n};\r\n\r\nUrlOptionsParameters.propTypes = {\r\n styles: PropTypes.shape({}),\r\n\r\n trackingUrlTemplate: PropTypes.string,\r\n\r\n finalUrlSuffix: PropTypes.string,\r\n\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({\r\n Key: PropTypes.string,\r\n Value: PropTypes.string,\r\n })),\r\n\r\n errors: PropTypes.arrayOf(PropTypes.shape({\r\n Code: PropTypes.string,\r\n Message: PropTypes.string,\r\n Property: PropTypes.string,\r\n Index: PropTypes.number,\r\n })),\r\n\r\n enableSelfValidation: PropTypes.bool,\r\n disableLengthConstraints: PropTypes.bool,\r\n\r\n onChange: PropTypes.func,\r\n\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n\r\n showUurlTestTool: PropTypes.bool,\r\n\r\n showFinalUrlSuffix: PropTypes.bool,\r\n\r\n showCustomParameters: PropTypes.bool,\r\n\r\n token: PropTypes.string,\r\n\r\n triggerTestUurl: PropTypes.func,\r\n\r\n instrumentation: PropTypes.shape({}),\r\n\r\n trackingUrlTemplateControlsWrapper: PropTypes.func,\r\n finalUrlSuffixControlsWrapper: PropTypes.func,\r\n urlCustomParametersControlsWrapper: PropTypes.func,\r\n\r\n isControlledOutside: PropTypes.bool,\r\n\r\n isTrackingUrlTemplateRequired: PropTypes.bool.isRequired,\r\n\r\n isWithError: PropTypes.bool.isRequired,\r\n};\r\n\r\nUrlOptionsParameters.defaultProps = {\r\n styles: defaultStyles,\r\n trackingUrlTemplate: '',\r\n finalUrlSuffix: '',\r\n urlCustomParameters: [],\r\n errors: [],\r\n enableSelfValidation: false,\r\n disableLengthConstraints: false,\r\n onChange: noop,\r\n showUurlTestTool: false,\r\n showFinalUrlSuffix: false,\r\n showCustomParameters: true,\r\n token: '',\r\n triggerTestUurl: noop,\r\n instrumentation: {},\r\n trackingUrlTemplateControlsWrapper: identity,\r\n finalUrlSuffixControlsWrapper: identity,\r\n urlCustomParametersControlsWrapper: identity,\r\n isControlledOutside: false,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ActionButton, Stack } from '@fluentui/react';\r\n\r\nimport { styles as defaultStyles } from './styles';\r\nimport { isUrlCustomParametersEmpty } from './validators';\r\nimport { UrlOptionsParameters } from './url-options-parameters';\r\n\r\nexport function UrlOptions(props) {\r\n const {\r\n i18n,\r\n styles,\r\n onChange,\r\n trackingUrlTemplate,\r\n finalUrlSuffix,\r\n urlCustomParameters,\r\n errors,\r\n enableSelfValidation,\r\n showUurlTestTool,\r\n showFinalUrlSuffix,\r\n token,\r\n triggerTestUurl,\r\n instrumentation,\r\n } = props;\r\n\r\n const [editMode, setEditMode] = useState(false);\r\n const onToggleButtonClick = useCallback(() => {\r\n setEditMode(_.negate(Boolean));\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n
\r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n
\r\n {editMode ?\r\n \r\n :\r\n \r\n
\r\n {i18n.getString(_TL_('Tracking template:'))}\r\n
\r\n
\r\n {_.isEmpty(trackingUrlTemplate) ? i18n.getString(_TL_('None')) : trackingUrlTemplate}\r\n
\r\n {showFinalUrlSuffix &&\r\n \r\n
\r\n {i18n.getString(_TL_('Final URL suffix:'))}\r\n
\r\n
\r\n {_.isEmpty(finalUrlSuffix) ? i18n.getString(_TL_('None')) : finalUrlSuffix}\r\n
\r\n
\r\n }\r\n
\r\n {i18n.getString(_TL_('Custom parameters:'))}\r\n
\r\n
\r\n {isUrlCustomParametersEmpty(urlCustomParameters) ? i18n.getString(_TL_('None')) :\r\n _.map(urlCustomParameters, ({ Key, Value }) => (\r\n _.isEmpty(Key) ? null :
{`{_${Key}} = ${Value}`}
\r\n ))\r\n }\r\n
\r\n
\r\n }\r\n \r\n );\r\n}\r\n\r\nUrlOptions.propTypes = {\r\n styles: PropTypes.shape({}),\r\n\r\n trackingUrlTemplate: PropTypes.string,\r\n\r\n finalUrlSuffix: PropTypes.string,\r\n\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({\r\n Key: PropTypes.string,\r\n Value: PropTypes.string,\r\n })),\r\n\r\n errors: PropTypes.arrayOf(PropTypes.shape({\r\n Code: PropTypes.string,\r\n Message: PropTypes.string,\r\n Property: PropTypes.string,\r\n Index: PropTypes.number,\r\n })),\r\n\r\n enableSelfValidation: PropTypes.bool,\r\n\r\n onChange: PropTypes.func,\r\n\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n\r\n showUurlTestTool: PropTypes.bool,\r\n\r\n showFinalUrlSuffix: PropTypes.bool,\r\n\r\n token: PropTypes.string,\r\n\r\n triggerTestUurl: PropTypes.func,\r\n\r\n instrumentation: PropTypes.shape({}),\r\n};\r\n\r\nUrlOptions.defaultProps = {\r\n styles: defaultStyles,\r\n trackingUrlTemplate: '',\r\n finalUrlSuffix: '',\r\n urlCustomParameters: [],\r\n errors: [],\r\n enableSelfValidation: false,\r\n onChange: _.noop,\r\n showUurlTestTool: false,\r\n showFinalUrlSuffix: false,\r\n token: '',\r\n triggerTestUurl: _.noop,\r\n instrumentation: {},\r\n};\r\n","import { isFunction } from 'underscore';\r\nimport React, { useCallback, useEffect, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { UrlOptionsParameters } from './url-options-parameters';\r\n\r\n\r\nconst UrlOptionsParametersWithCustomValidation = ({\r\n onChange: onChangeFromProps, updateValidation, validationProps, ...restProps\r\n}) => {\r\n const { data } = validationProps;\r\n const onChange = useCallback((value, key, errors) => {\r\n const newValue = {\r\n ...data,\r\n [key]: value,\r\n };\r\n if (isFunction(onChangeFromProps)) {\r\n onChangeFromProps(value, key, errors);\r\n }\r\n updateValidation(errors, newValue);\r\n }, [data, onChangeFromProps, updateValidation]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nUrlOptionsParametersWithCustomValidation.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.arrayOf(PropTypes.shape({\r\n Key: PropTypes.string,\r\n Value: PropTypes.string,\r\n })),\r\n }),\r\n }).isRequired,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nUrlOptionsParametersWithCustomValidation.defaultProps = {\r\n onChange: undefined,\r\n};\r\n\r\nexport const ValidatedUrlOptionsParameters = withCustomValidation(UrlOptionsParametersWithCustomValidation);\r\n\r\nconst UrlOptionsParametersWithError = ({\r\n onChange: onChangeFromProps, updateValidation, validationProps, isTrackingUrlTemplateRequired, isWithError, ...restProps\r\n}) => {\r\n const { data } = validationProps;\r\n const i18n = useContext(I18nContext);\r\n\r\n const onChange = useCallback((value, key, errors) => {\r\n const newValue = {\r\n ...data,\r\n [key]: value,\r\n };\r\n if (isFunction(onChangeFromProps)) {\r\n onChangeFromProps(value, key, errors);\r\n }\r\n updateValidation(errors, newValue);\r\n }, [data, onChangeFromProps, updateValidation]);\r\n\r\n useEffect(() => {\r\n if (isTrackingUrlTemplateRequired && data && !data.TrackingUrlTemplate) {\r\n const error = [i18n.getString(_TL_('Please add a tracking template.'))];\r\n updateValidation(error, data, false);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nUrlOptionsParametersWithError.propTypes = {\r\n updateValidation: PropTypes.func.isRequired,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n TrackingUrlTemplate: PropTypes.string,\r\n FinalUrlSuffix: PropTypes.string,\r\n UrlCustomParameters: PropTypes.arrayOf(PropTypes.shape({\r\n Key: PropTypes.string,\r\n Value: PropTypes.string,\r\n })),\r\n }),\r\n }).isRequired,\r\n onChange: PropTypes.func,\r\n isTrackingUrlTemplateRequired: PropTypes.bool.isRequired,\r\n isWithError: PropTypes.bool.isRequired,\r\n};\r\n\r\nUrlOptionsParametersWithError.defaultProps = {\r\n onChange: undefined,\r\n};\r\n\r\nexport const ValidatedUrlOptionsParametersWithError = withError(withCustomValidation(UrlOptionsParametersWithError));\r\n","import { isEmpty } from 'underscore';\r\n\r\nexport const getUrlOptionsDetails = (i18n, urlOptions) => {\r\n const details = [];\r\n if (urlOptions.TrackingUrlTemplate) {\r\n details.push(`${i18n.getString(_TL_('Tracking template'))}: ${urlOptions.TrackingUrlTemplate}`);\r\n }\r\n if (urlOptions.FinalUrlSuffix) {\r\n details.push(`${i18n.getString(_TL_('Final URL suffix'))}: ${urlOptions.FinalUrlSuffix}`);\r\n }\r\n if (urlOptions.UrlCustomParameters && urlOptions.UrlCustomParameters.length > 0) {\r\n const params = urlOptions.UrlCustomParameters\r\n .filter(({ Key }) => Key)\r\n .map(({ Key, Value }) => `{_${Key}} = ${Value}`)\r\n .join('; ');\r\n\r\n if (params) {\r\n details.push(`${i18n.getString(_TL_('Custom parameters'))}: ${params}`);\r\n }\r\n }\r\n\r\n if (isEmpty(details)) {\r\n return i18n.getString(_TL_('No settings applied'));\r\n }\r\n\r\n return details.join(', ');\r\n};\r\n","export const TARGET_TYPE = {\r\n Url: 'URL',\r\n PageTitle: 'PAGE_TITLE',\r\n PageContent: 'PAGE_CONTENT',\r\n Category: 'CATEGORY',\r\n CustomLabel: 'CUSTOM_LABEL',\r\n};\r\n\r\nexport const TARGET_TYPE_MAP = {\r\n URL: 'URL',\r\n PAGE_TITLE: 'Page title',\r\n PAGE_CONTENT: 'Page content',\r\n CATEGORY: 'Category',\r\n CUSTOM_LABEL: 'Custom label',\r\n};\r\n\r\nexport const CONDITION_OPERATOR = {\r\n Contains: 'Contains',\r\n Equals: 'Equals',\r\n};\r\n\r\nexport const RULE_SEPERATOR = ' ・ ';\r\n\r\nexport const MAX_VALUE_LENGTH = 2048;\r\n\r\nexport const RULE_TYPE = {\r\n Url: 'URL',\r\n CustomLabel: 'CUSTOM_LABEL',\r\n};\r\n","import { TARGET_TYPE, TARGET_TYPE_MAP } from '../helpers/constants';\r\n\r\nexport const getTargetStrings = (rule) => {\r\n const firstTarget = rule.TargetCondition1;\r\n const isCustomLabel = firstTarget === TARGET_TYPE.CustomLabel;\r\n const values = isCustomLabel ? [`${TARGET_TYPE_MAP[firstTarget]}`] : [];\r\n\r\n [1, 2, 3].forEach((id) => {\r\n const target = rule[`TargetCondition${id}`];\r\n if (target) {\r\n const formattedValue = isCustomLabel ? `(${rule[`TargetValue${id}`]})` : `${TARGET_TYPE_MAP[target]} (${rule[`TargetValue${id}`]}) `;\r\n values.push(formattedValue);\r\n }\r\n });\r\n\r\n return isCustomLabel ? [values.join(' ')] : values;\r\n};\r\n\r\nexport const extractTargetsFromViewModel = assetGroupUrlRules => ({ urlTargets: assetGroupUrlRules.map(rule => getTargetStrings(rule)) });\r\n\r\nexport const isCategoryOrCustomLabel = (target) => target === TARGET_TYPE.Category || target === TARGET_TYPE.CustomLabel;\r\n\r\nexport const getPlaceHolderText = (i18n, selectedTargetType) => {\r\n switch (selectedTargetType) {\r\n case TARGET_TYPE.Url:\r\n return i18n.getString(_TL_('Enter URL rule'));\r\n case TARGET_TYPE.PageTitle:\r\n return i18n.getString(_TL_('Enter page title'));\r\n case TARGET_TYPE.PageContent:\r\n return i18n.getString(_TL_('Enter page content'));\r\n case TARGET_TYPE.Category:\r\n return i18n.getString(_TL_('Enter category'));\r\n case TARGET_TYPE.CustomLabel:\r\n return i18n.getString(_TL_('Enter custom label'));\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\n","/* eslint-disable react/no-array-index-key, function-paren-newline, react/no-unused-prop-types */\r\nimport React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport {\r\n Field,\r\n tokens,\r\n Button,\r\n Text,\r\n Input,\r\n Combobox,\r\n Option,\r\n Card,\r\n CardHeader,\r\n CardFooter,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { Drawer, DrawerHeader, DrawerHeaderTitle, DrawerBody, DrawerFooter } from '@fluentui/react-drawer';\r\nimport { MessageBar, MessageBarBody } from '@fluentui/react-message-bar';\r\nimport { Dismiss24Regular, Add24Regular, Delete24Regular, Delete16Regular } from '@fluentui/react-icons';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n TARGET_TYPE,\r\n TARGET_TYPE_MAP,\r\n CONDITION_OPERATOR,\r\n RULE_SEPERATOR,\r\n MAX_VALUE_LENGTH,\r\n RULE_TYPE,\r\n} from '../helpers/constants';\r\nimport { extractTargetsFromViewModel, getPlaceHolderText, getTargetStrings, isCategoryOrCustomLabel } from '../helpers/utils';\r\n\r\nexport const getUrlRulesEditorStyle = () => ({\r\n rulesInputInnerContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n padding: '0px',\r\n '& .target-dropdown': {\r\n minWidth: '161px',\r\n height: '32px',\r\n },\r\n '& .conditions': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-end',\r\n gap: '12px',\r\n marginLeft: '12px',\r\n },\r\n '& .condition': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '12px',\r\n '& .operator': {\r\n paddingTop: '6px',\r\n minWidth: '60px',\r\n },\r\n },\r\n '& .validated-input': {\r\n width: '231px',\r\n '& .ms-TextField-fieldGroup': {\r\n borderRadius: '4px',\r\n },\r\n },\r\n },\r\n\r\n cardHeader: {\r\n borderBottom: '1px solid var(--colorNeutralStroke1)',\r\n paddingBottom: tokens.spacingVerticalS,\r\n marginBottom: tokens.spacingVerticalS,\r\n },\r\n\r\n verticalSpacing: {\r\n ...shorthands.margin(tokens.spacingVerticalS, '0'),\r\n },\r\n\r\n rulesListItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: tokens.spacingHorizontalXS,\r\n },\r\n\r\n ruleCard: {\r\n flex: 1,\r\n width: '100%',\r\n },\r\n});\r\n\r\nexport const UrlRulesEditor = ({ i18n, urlRules, onChange, isOpen, onClose }) => {\r\n const styles = useDefaultStyles(getUrlRulesEditorStyle);\r\n\r\n const [newAssetGroupUrlRules, setNewAssetGroupUrlRules] = useState(urlRules || []);\r\n const [conditions, setConditions] = useState([{ target: TARGET_TYPE.Url }]);\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n\r\n const { urlTargets } = useMemo(() => extractTargetsFromViewModel(newAssetGroupUrlRules), [newAssetGroupUrlRules]);\r\n const isCustomLabelType = useMemo(() => conditions[0].target === TARGET_TYPE.CustomLabel, [conditions[0].target]);\r\n const isAnyConditionEmpty = useMemo(() => conditions.some(({ condition = '' }) => !condition.trim().length), [conditions]);\r\n\r\n const onAddRuleButtonClick = useCallback(() => {\r\n setConditions([...conditions, { target: isCustomLabelType ? TARGET_TYPE.CustomLabel : TARGET_TYPE.Url }]);\r\n }, [conditions, setConditions, isCustomLabelType]);\r\n\r\n const onCreateRuleButtonClick = useCallback(() => {\r\n setConditions([{ target: TARGET_TYPE.Url, condition: '' }]);\r\n\r\n const rule = {};\r\n conditions.forEach(({ target, condition }, index) => {\r\n const trimmedCondition = condition.trim();\r\n if (!trimmedCondition) return;\r\n rule[`TargetCondition${index + 1}`] = target;\r\n rule[`TargetConditionOperator${index + 1}`] = isCategoryOrCustomLabel(target) ? CONDITION_OPERATOR.Equals : CONDITION_OPERATOR.Contains;\r\n rule[`TargetValue${index + 1}`] = trimmedCondition;\r\n });\r\n\r\n const ruleAlreadyExists = newAssetGroupUrlRules.some((existingRule) =>\r\n Object.keys(rule).length === Object.keys(existingRule).length &&\r\n Object.keys(rule).every((key) => existingRule[key] === rule[key])\r\n );\r\n if (ruleAlreadyExists) return;\r\n\r\n setNewAssetGroupUrlRules([...newAssetGroupUrlRules, rule]);\r\n }, [conditions, newAssetGroupUrlRules]);\r\n\r\n const targetTypeDropdownOptions = useMemo(() => [\r\n { key: TARGET_TYPE.Url, text: i18n.getString(_TL_('URL')), type: RULE_TYPE.Url },\r\n { key: TARGET_TYPE.PageTitle, text: i18n.getString(_TL_('Page title')), type: RULE_TYPE.Url },\r\n { key: TARGET_TYPE.PageContent, text: i18n.getString(_TL_('Page content')), type: RULE_TYPE.Url },\r\n { key: TARGET_TYPE.Category, text: i18n.getString(_TL_('Category')), type: RULE_TYPE.Url },\r\n { key: TARGET_TYPE.CustomLabel, text: i18n.getString(_TL_('Custom Label')), type: RULE_TYPE.CustomLabel },\r\n ], [i18n]);\r\n\r\n const updateValue = (value, index) => {\r\n const newConditions = [...conditions];\r\n newConditions[index] = { ...newConditions[index], condition: value };\r\n setConditions(newConditions);\r\n\r\n let validationMessage = '';\r\n if (value.length > MAX_VALUE_LENGTH) {\r\n validationMessage = i18n.getString(_TL_('Field should not exceed {{maxLength}} characters'), { maxLength: MAX_VALUE_LENGTH });\r\n }\r\n\r\n setErrorMessages((prevMessages) => {\r\n const newErrorMessages = [...prevMessages];\r\n newErrorMessages[index] = validationMessage;\r\n return newErrorMessages;\r\n });\r\n };\r\n\r\n const renderMessageBar = useCallback(() => (\r\n \r\n \r\n { i18n.getString(_TL_(\"URL condition types and custom labels can't be combined in the same rule.\")) }\r\n \r\n \r\n ), [i18n]);\r\n\r\n const renderTargetTypeDropdownOptions = useCallback(() => targetTypeDropdownOptions.map((option) => (\r\n \r\n )), [targetTypeDropdownOptions]);\r\n\r\n const renderTargetTypeDropdownOptionsByType = useCallback((type) => targetTypeDropdownOptions.map((option) => (\r\n \r\n )), [targetTypeDropdownOptions]);\r\n\r\n const renderRulesInput = useCallback(() => {\r\n const conditionInput = conditions.map(({ target, condition = '' }, index) => (\r\n
\r\n {\r\n const newConditions = [...conditions];\r\n newConditions[index] = { ...newConditions[index], target: data.optionValue };\r\n setConditions(newConditions);\r\n }}\r\n >\r\n {conditions.length === 1 && renderTargetTypeDropdownOptions()}\r\n {conditions.length > 1 && renderTargetTypeDropdownOptionsByType(isCustomLabelType ? RULE_TYPE.CustomLabel : RULE_TYPE.Url)}\r\n \r\n\r\n {isCategoryOrCustomLabel(target) ? i18n.getString(_TL_('is')) : i18n.getString(_TL_('contains'))}\r\n\r\n
\r\n \r\n updateValue(event.target.value, index)}\r\n />\r\n \r\n
\r\n\r\n }\r\n onClick={() => {\r\n if (conditions.length === 1) {\r\n setConditions([{ target: TARGET_TYPE.Url }]);\r\n } else {\r\n const newConditions = [...conditions];\r\n newConditions.splice(index, 1);\r\n setConditions(newConditions);\r\n }\r\n }}\r\n />\r\n
\r\n ));\r\n\r\n return (\r\n
\r\n
\r\n { conditionInput }\r\n
\r\n
\r\n );\r\n }, [conditions, styles.rulesInputInnerContainer, targetTypeDropdownOptions, renderTargetTypeDropdownOptions, isCustomLabelType, i18n, errorMessages]);\r\n\r\n const removeTargetTag = useCallback((targetString) => {\r\n const newRules = newAssetGroupUrlRules.filter((rule) => {\r\n return getTargetStrings(rule).join(RULE_SEPERATOR) !== targetString;\r\n });\r\n\r\n setNewAssetGroupUrlRules(newRules);\r\n }, [newAssetGroupUrlRules]);\r\n\r\n const renderTargets = useCallback((targets) => (\r\n <>\r\n {targets.map((target) => {\r\n const targetString = target.join(RULE_SEPERATOR);\r\n\r\n return (\r\n <>\r\n
\r\n \r\n {targetString}} />\r\n \r\n }\r\n onClick={() => removeTargetTag(targetString)}\r\n />\r\n
\r\n {i18n.getString(_TL_('Or'))}\r\n \r\n );\r\n })}\r\n \r\n ), [i18n, removeTargetTag]);\r\n\r\n const onSave = useCallback(() => {\r\n onChange({ AssetGroupUrlTargets: [...newAssetGroupUrlRules] });\r\n onClose();\r\n }, [newAssetGroupUrlRules, onChange, onClose]);\r\n\r\n const renderDrawerFooter = useCallback(() => (\r\n <>\r\n \r\n \r\n \r\n ), [i18n, onClose, onSave]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n }\r\n onClick={onClose}\r\n />\r\n }\r\n >\r\n {i18n.getString(_TL_('Create URL rules'))}\r\n \r\n \r\n {i18n.getString(_TL_('Specify pages with URLs that contain a certain piece of text to target specific content, and use custom labels to define subsets of your page feeds for more precise and effective advertising campaigns.'))}\r\n \r\n
{renderMessageBar()}
\r\n
\r\n \r\n {renderTargets(urlTargets)}\r\n\r\n \r\n {i18n.getString(_TL_('Rule'))}} />\r\n {renderRulesInput()}\r\n \r\n }\r\n onClick={onAddRuleButtonClick}\r\n disabled={conditions.length > 2}\r\n >\r\n {i18n.getString(_TL_('And'))}\r\n \r\n \r\n \r\n\r\n
\r\n }\r\n onClick={onCreateRuleButtonClick}\r\n disabled={isAnyConditionEmpty || errorMessages.some(messages => messages?.length > 0)}\r\n >\r\n {i18n.getString(_TL_('Create another rule'))}\r\n \r\n
\r\n
\r\n \r\n {renderDrawerFooter()}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nUrlRulesEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.string,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n onChange: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRulesEditor.defaultProps = {\r\n urlRules: [],\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Overflow,\r\n OverflowItem,\r\n tokens,\r\n useOverflowMenu,\r\n makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { Tag } from '@fluentui/react-tags';\r\nimport { RULE_SEPERATOR } from './helpers/constants';\r\nimport { extractTargetsFromViewModel } from './helpers/utils';\r\n\r\n/**\r\n * There's a known bug that fluentui/react-overflow doesn't take gap of the overflow container\r\n * and margin of overflow item into account and cause weird styling issues.\r\n * https://github.com/microsoft/fluentui/issues/23066\r\n */\r\nconst useUrlRulesPreviewStyles = makeStyles({\r\n overflowItem: {\r\n marginBottom: tokens.spacingVerticalXS,\r\n },\r\n overflowCount: {\r\n marginLeft: tokens.spacingHorizontalXS,\r\n },\r\n tag: {\r\n marginRight: tokens.spacingHorizontalXS,\r\n },\r\n});\r\n\r\nconst MIN_VISIBLE_ROWS = 3;\r\n\r\nconst OverflowPlaceholder = () => {\r\n const styles = useUrlRulesPreviewStyles();\r\n const { ref, overflowCount, isOverflowing } = useOverflowMenu();\r\n if (!isOverflowing) {\r\n return null;\r\n }\r\n\r\n return (+{overflowCount});\r\n};\r\n\r\nexport const UrlRulesPreview = (props) => {\r\n const { urlRules, isSingleRow } = props;\r\n\r\n const styles = useUrlRulesPreviewStyles();\r\n\r\n const { urlTargets } = useMemo(() => extractTargetsFromViewModel(urlRules), [urlRules]);\r\n\r\n const renderPreview = useCallback(() => {\r\n return (\r\n \r\n
\r\n { urlTargets.map((target, index) => {\r\n const targetString = target.join(RULE_SEPERATOR);\r\n return (\r\n \r\n
\r\n {targetString}\r\n { (index === MIN_VISIBLE_ROWS - 1) && }\r\n
\r\n
\r\n );\r\n }) }\r\n
\r\n
\r\n );\r\n }, [styles, urlTargets]);\r\n\r\n const renderPreviewRow = useCallback(() => (\r\n \r\n
\r\n { urlTargets.map((target) => {\r\n const targetString = target.join(RULE_SEPERATOR);\r\n return (\r\n \r\n {targetString}\r\n \r\n );\r\n }) }\r\n \r\n
\r\n
\r\n ), [styles, urlTargets]);\r\n\r\n return (\r\n
\r\n { isSingleRow ? renderPreviewRow() : renderPreview() }\r\n
\r\n );\r\n};\r\n\r\nUrlRulesPreview.propTypes = {\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isSingleRow: PropTypes.bool,\r\n};\r\n\r\n\r\nUrlRulesPreview.defaultProps = {\r\n isSingleRow: false,\r\n};\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Label,\r\n Text,\r\n tokens,\r\n makeStyles,\r\n} from '@fluentui/react-components';\r\nimport { UrlRulesEditor } from './side-panel/url-rules-editor';\r\nimport { UrlRulesPreview } from './url-rules-preview';\r\nimport { extractTargetsFromViewModel } from './helpers/utils';\r\n\r\nconst useUrlRulesStyles = makeStyles({\r\n title: {\r\n marginBottom: tokens.spacingVerticalXS,\r\n },\r\n urlRulesEditButton: {\r\n marginTop: tokens.spacingVerticalXS,\r\n },\r\n});\r\n\r\nexport const UrlRulesImpl = (props) => {\r\n const {\r\n i18n,\r\n urlRules,\r\n onChange,\r\n enableSpecialCharactersValidation,\r\n } = props;\r\n const styles = useUrlRulesStyles();\r\n\r\n const { urlTargets } = useMemo(() => extractTargetsFromViewModel(urlRules), [urlRules]);\r\n\r\n const [isUrlRulesEditorOn, setIsUrlRulesEditorOn] = useState(false);\r\n const onOpenUrlRulesEditor = useCallback(() => setIsUrlRulesEditorOn(true), []);\r\n const onCloseUrlRulesEditor = useCallback(() => setIsUrlRulesEditorOn(false), []);\r\n\r\n const renderEditor = useCallback(() => {\r\n if (isUrlRulesEditorOn) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return null;\r\n }, [isUrlRulesEditorOn, i18n, urlRules, onChange, onCloseUrlRulesEditor, enableSpecialCharactersValidation]);\r\n\r\n const renderCreateRulesButton = useCallback(() => (\r\n
\r\n \r\n \r\n {(urlTargets.length > 0)\r\n ? i18n.getString(_TL_('Manage URL rules'))\r\n : i18n.getString(_TL_('Create URL rules'))}\r\n \r\n
\r\n ), [i18n, urlTargets.length, urlRules, onOpenUrlRulesEditor]);\r\n\r\n return (\r\n
\r\n \r\n { urlRules.length === 0 && {i18n.getString(_TL_('Your campaign will target all webpages'))} }\r\n {renderCreateRulesButton()}\r\n {renderEditor()}\r\n
\r\n );\r\n};\r\n\r\nUrlRulesImpl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n onChange: PropTypes.func.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRulesImpl.defaultProps = {\r\n urlRules: [],\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { UrlRulesImpl } from './url-rules-impl';\r\n\r\nconst UrlRules = ({ validationProps, updateValidation, enableSpecialCharactersValidation }) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { data: { urlRules } } = validationProps;\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n if (activity) {\r\n activity.signal(`onAssetGroupUrlRulesChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation, activity]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nUrlRules.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRules.defaultProps = {\r\n enableSpecialCharactersValidation: false,\r\n};\r\n\r\nexport const ValidatedUrlRules = withCustomValidation(UrlRules);\r\n","import React, { useCallback } from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { first, isEmpty } from 'underscore';\r\nimport { getDomain } from '@bingads-webui/url-util';\r\nimport { extractTargetsFromViewModel } from './helpers/utils';\r\nimport { UrlRulesPreview } from './url-rules-preview';\r\n\r\nconst getSummaryStyle = () => ({\r\n advancedUrlOptionsSummaryContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n },\r\n});\r\n\r\nexport const UrlOptionsDetailsWithRules = ({\r\n i18n, finalUrls, path1, path2, mobileFinalUrls, urlRules,\r\n}) => {\r\n const styles = useDefaultStyles(getSummaryStyle);\r\n\r\n const finalUrl = first(finalUrls);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n let displayUrl = '';\r\n if (!isEmpty(path1)) {\r\n const finalUrlDomain = getDomain(finalUrl) || 'www.example.com';\r\n displayUrl = `${finalUrlDomain}/${path1}`;\r\n if (!isEmpty(path2)) {\r\n displayUrl = `${displayUrl}/${path2}`;\r\n }\r\n }\r\n const noDisplayUrl = isEmpty(displayUrl);\r\n const noMboileUrl = isEmpty(mobileFinalUrl);\r\n const noUrlRules = isEmpty(urlRules);\r\n const noSettingsApplied = noDisplayUrl && noMboileUrl && noUrlRules;\r\n\r\n let urlPathText = '';\r\n if (noSettingsApplied) {\r\n urlPathText = i18n.getString(_TL_('No URL settings applied'));\r\n } else {\r\n if (!noDisplayUrl) {\r\n urlPathText += `${i18n.getString(_TL_('Display URL'))}: ${displayUrl}`;\r\n }\r\n if (!noMboileUrl) {\r\n if (urlPathText.length > 0) {\r\n urlPathText += '; '; // Add separator if there are details before\r\n }\r\n urlPathText += `${i18n.getString(_TL_('Mobile URL'))}: ${mobileFinalUrl}`;\r\n }\r\n }\r\n\r\n const { urlTargets } = extractTargetsFromViewModel(urlRules || []);\r\n\r\n const renderRulesSummary = useCallback(() => {\r\n if (urlRules.length === 0) {\r\n return ({i18n.getString(_TL_('No URL rules set'))});\r\n }\r\n return (\r\n <>\r\n {i18n.getString(_TL_('URL rules and custom labels'))}:\r\n \r\n \r\n );\r\n }, [urlRules, i18n, urlTargets]);\r\n\r\n return (\r\n
\r\n {urlPathText}\r\n { !noSettingsApplied && renderRulesSummary() }\r\n
\r\n );\r\n};\r\n\r\nUrlOptionsDetailsWithRules.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n finalUrls: PropTypes.arrayOf(PropTypes.string),\r\n path1: PropTypes.string,\r\n path2: PropTypes.string,\r\n mobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nUrlOptionsDetailsWithRules.defaultProps = {\r\n finalUrls: [],\r\n path1: '',\r\n path2: '',\r\n mobileFinalUrls: [],\r\n urlRules: [],\r\n};\r\n","export const URL_RULES_OPTIONS = {\r\n All: 'all',\r\n Rules: 'rules',\r\n Labels: 'labels',\r\n};\r\n\r\nexport const TARGET_TYPE = {\r\n Url: 'URL',\r\n PageTitle: 'PAGE_TITLE',\r\n PageContent: 'PAGE_CONTENT',\r\n Category: 'CATEGORY',\r\n CustomLabel: 'CUSTOM_LABEL',\r\n};\r\n\r\nexport const CONDITION_OPERATOR = {\r\n Contains: 'Contains',\r\n};\r\n\r\nexport const INPUT_VALIDATION_SCHEMA = {\r\n name: 'Url Rule Input',\r\n type: 'object',\r\n properties: {\r\n ruleInput1: {\r\n type: 'string',\r\n maxLength: 2048,\r\n },\r\n ruleInput2: {\r\n type: 'string',\r\n maxLength: 2048,\r\n },\r\n ruleInput3: {\r\n type: 'string',\r\n maxLength: 2048,\r\n },\r\n },\r\n};\r\n","import { get } from 'underscore';\r\nimport { TARGET_TYPE, URL_RULES_OPTIONS } from '../helpers/constants';\r\n\r\nexport const extractTargetsFromViewModel = (assetGroupUrlRules) => {\r\n const targetMapping = {\r\n [TARGET_TYPE.Url]: [],\r\n [TARGET_TYPE.PageTitle]: [],\r\n [TARGET_TYPE.PageContent]: [],\r\n [TARGET_TYPE.Category]: [],\r\n [TARGET_TYPE.CustomLabel]: [],\r\n };\r\n\r\n assetGroupUrlRules.forEach((rule) => {\r\n const type = get(rule, 'TargetCondition1', '');\r\n const values = [get(rule, 'TargetValue1', ''), get(rule, 'TargetValue2', ''), get(rule, 'TargetValue3', '')]\r\n .filter(Boolean);\r\n\r\n if (targetMapping[type]) {\r\n targetMapping[type].push(values);\r\n }\r\n });\r\n\r\n return {\r\n urlTargets: targetMapping[TARGET_TYPE.Url],\r\n pageTitleTargets: targetMapping[TARGET_TYPE.PageTitle],\r\n pageContentTargets: targetMapping[TARGET_TYPE.PageContent],\r\n categoryTargets: targetMapping[TARGET_TYPE.Category],\r\n customLabelTargets: targetMapping[TARGET_TYPE.CustomLabel],\r\n };\r\n};\r\n\r\nexport const getPlaceHolderText = (i18n, selectedTargetType) => {\r\n switch (selectedTargetType) {\r\n case TARGET_TYPE.Url:\r\n return i18n.getString(_TL_('Enter URL rule'));\r\n case TARGET_TYPE.PageTitle:\r\n return i18n.getString(_TL_('Enter page title'));\r\n case TARGET_TYPE.PageContent:\r\n return i18n.getString(_TL_('Enter page content'));\r\n case TARGET_TYPE.Category:\r\n return i18n.getString(_TL_('Enter category'));\r\n case TARGET_TYPE.CustomLabel:\r\n return i18n.getString(_TL_('Enter custom label'));\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nexport const getUrlRulesOption = (assetGroupUrlRules) => {\r\n const {\r\n urlTargets,\r\n pageTitleTargets,\r\n pageContentTargets,\r\n categoryTargets,\r\n customLabelTargets,\r\n } = extractTargetsFromViewModel(assetGroupUrlRules);\r\n\r\n let urlRulesOption = URL_RULES_OPTIONS.All;\r\n if (urlTargets.length > 0 || pageTitleTargets.length > 0 || pageContentTargets.length > 0 || categoryTargets.length > 0) {\r\n urlRulesOption = URL_RULES_OPTIONS.Rules;\r\n } else if (customLabelTargets.length > 0) {\r\n urlRulesOption = URL_RULES_OPTIONS.Labels;\r\n }\r\n return urlRulesOption;\r\n};\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport Proptypes from 'prop-types';\r\nimport { Tooltip } from '@fluentui/react-components';\r\n\r\nexport const TagWithTooltip = ({ content }) => {\r\n const [isOverflow, setIsOverflow] = useState(false);\r\n const [isTooltipVisible, setIsTooltipVisible] = useState(false);\r\n\r\n const tagRef = useRef();\r\n\r\n useEffect(() => {\r\n if (tagRef.current) {\r\n setIsOverflow(tagRef.current.clientWidth < tagRef.current.scrollWidth);\r\n }\r\n }, []);\r\n\r\n return (\r\n setIsTooltipVisible(data.visible)}\r\n >\r\n \r\n {content}\r\n \r\n \r\n );\r\n};\r\n\r\nTagWithTooltip.propTypes = {\r\n content: Proptypes.string.isRequired,\r\n};\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { get } from 'underscore';\r\nimport {\r\n DefaultButton,\r\n PrimaryButton,\r\n IconButton,\r\n Panel,\r\n PanelType,\r\n Text,\r\n TextField,\r\n} from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, withValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n TARGET_TYPE,\r\n CONDITION_OPERATOR,\r\n INPUT_VALIDATION_SCHEMA,\r\n} from '../helpers/constants';\r\nimport { extractTargetsFromViewModel } from '../helpers/utils';\r\nimport { TagWithTooltip } from './tag-with-tooltips';\r\n\r\nconst ValidatedInput = withValidation(TextField);\r\n\r\nexport const getCustomLabelsEditorStyle = (_, { palette = {} }) => ({\r\n sectionsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .description': {\r\n marginTop: '12px',\r\n marginBottom: '12px',\r\n },\r\n '& .footer': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '8px',\r\n },\r\n '& .create-rule-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n marginTop: '16px',\r\n marginBottom: '16px',\r\n border: '1px solid rgba(209, 209, 209, 1)',\r\n borderRadius: '4px',\r\n },\r\n '& button[disabled]': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n rulesInputOuterContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n border: '1px solid rgba(225, 223, 221, 1)',\r\n borderRadius: '4px',\r\n padding: '16px',\r\n '& .add-rule-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n borderWidth: '0px',\r\n },\r\n },\r\n rulesInputInnerContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n padding: '0px',\r\n '& .conditions': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-end',\r\n gap: '12px',\r\n width: '100%',\r\n },\r\n '& .condition': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '12px',\r\n width: '100%',\r\n '& .operator': {\r\n paddingTop: '6px',\r\n minWidth: '100px',\r\n textAlign: 'right',\r\n flexShrink: 0,\r\n },\r\n },\r\n '& .input-container': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n '& .validated-input': {\r\n width: '100%',\r\n '& .ms-TextField-fieldGroup': {\r\n borderRadius: '4px',\r\n },\r\n },\r\n '& .error-message': {\r\n color: palette.redDark,\r\n },\r\n },\r\n rulesResultContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n borderTop: '1px solid rgba(237, 235, 233, 1)',\r\n '& .top-row': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'flex-start',\r\n marginTop: '12px',\r\n '& .title': {\r\n fontSize: '18px',\r\n fontWeight: '600',\r\n lineHeight: '24px',\r\n },\r\n '& .delete-all-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n borderWidth: '0px',\r\n },\r\n },\r\n '& .result-row': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n },\r\n '& .result-items': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '4px',\r\n '& .result-item': {\r\n alignItems: 'normal',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 3,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n fontWeight: 600,\r\n '& button': {\r\n color: palette.neutralSecondary,\r\n height: 'auto',\r\n '& .ms-Icon': {\r\n fontSize: 12,\r\n },\r\n },\r\n '& .tagText': {\r\n maxWidth: '488px',\r\n overflow: 'hidden',\r\n textWrap: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n padding: '4px 0px 4px 10px',\r\n },\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const CustomLabelsEditor = (props) => {\r\n const {\r\n i18n,\r\n urlRules,\r\n onChange,\r\n isOpen,\r\n onClose,\r\n } = props;\r\n\r\n const styles = useDefaultStyles(getCustomLabelsEditorStyle);\r\n\r\n const [newAssetGroupUrlRules, setNewAssetGroupUrlRules] = useState(urlRules || []);\r\n\r\n const { customLabelTargets } = useMemo(() => extractTargetsFromViewModel(newAssetGroupUrlRules), [newAssetGroupUrlRules]);\r\n\r\n const [conditions, setConditions] = useState(['']);\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n\r\n const onAddRuleButtonClick = useCallback(() => {\r\n setConditions([...conditions, '']);\r\n }, [conditions, setConditions]);\r\n\r\n const onCreateRuleButtonClick = useCallback(() => {\r\n setConditions(['']);\r\n if (customLabelTargets.some(target => target.join(', ') === conditions.join(', '))) return;\r\n\r\n const rule = {};\r\n conditions.forEach((condition, index) => {\r\n const trimmedCondition = condition.trim();\r\n if (!trimmedCondition) return;\r\n rule[`TargetCondition${index + 1}`] = TARGET_TYPE.CustomLabel;\r\n rule[`TargetConditionOperator${index + 1}`] = CONDITION_OPERATOR.Contains;\r\n rule[`TargetValue${index + 1}`] = trimmedCondition;\r\n });\r\n setNewAssetGroupUrlRules([...newAssetGroupUrlRules, rule]);\r\n }, [conditions, customLabelTargets, newAssetGroupUrlRules]);\r\n\r\n const renderRulesInput = useCallback(() => {\r\n const conditionInput = conditions.map((condition, index) => (\r\n // eslint-disable-next-line react/no-array-index-key\r\n
\r\n { index === 0 ? i18n.getString(_TL_('Custom label is')) : i18n.getString(_TL_('And')) }\r\n
\r\n {\r\n const { data, messages } = result;\r\n const newInput = get(data, [`ruleInput${index + 1}`], '');\r\n const newConditions = [...conditions];\r\n newConditions[index] = newInput;\r\n setConditions(newConditions);\r\n const newErrorMessages = [...errorMessages];\r\n newErrorMessages[index] = messages;\r\n setErrorMessages(newErrorMessages);\r\n },\r\n }}\r\n placeholder={i18n.getString(_TL_('Enter custom label'))}\r\n value={condition}\r\n />\r\n { errorMessages[index] && errorMessages[index].map(message => ({message}))}\r\n
\r\n {\r\n if (conditions.length === 1) {\r\n setConditions(['']);\r\n } else {\r\n const newConditions = [...conditions];\r\n newConditions.splice(index, 1);\r\n setConditions(newConditions);\r\n }\r\n }}\r\n />\r\n
\r\n ));\r\n\r\n return (\r\n
\r\n
\r\n { conditionInput }\r\n
\r\n
\r\n );\r\n }, [conditions, errorMessages, i18n, styles.rulesInputInnerContainer]);\r\n\r\n const removeTargetTag = useCallback((targetType, targetString) => {\r\n const newRules = newAssetGroupUrlRules.filter((rule) => {\r\n const values = [\r\n get(rule, 'TargetValue1', ''),\r\n get(rule, 'TargetValue2', ''),\r\n get(rule, 'TargetValue3', ''),\r\n ].filter(Boolean).join(', ');\r\n return get(rule, 'TargetCondition1', '') !== targetType || values !== targetString;\r\n });\r\n setNewAssetGroupUrlRules(newRules);\r\n }, [newAssetGroupUrlRules]);\r\n\r\n const renderCustomLabelTargetTags = useCallback(() => (\r\n
\r\n {i18n.getString(_TL_('Label is:'))}\r\n
\r\n { customLabelTargets.map((target) => {\r\n const targetString = target.join(', ');\r\n return (\r\n
\r\n \r\n removeTargetTag(TARGET_TYPE.CustomLabel, targetString)}\r\n />\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n ), [i18n, removeTargetTag, customLabelTargets]);\r\n\r\n const onSave = useCallback(() => {\r\n const customLabelRules = newAssetGroupUrlRules.filter((rule) => {\r\n const type = get(rule, 'TargetCondition1', '');\r\n return type === TARGET_TYPE.CustomLabel;\r\n });\r\n onChange({ AssetGroupUrlTargets: customLabelRules });\r\n onClose();\r\n }, [newAssetGroupUrlRules, onChange, onClose]);\r\n\r\n const renderPanelFooter = useCallback(() => (\r\n
\r\n \r\n \r\n
\r\n ), [i18n, onClose, onSave]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n {i18n.getString(_TL_('Add custom labels from your page feeds.'))}\r\n
\r\n
\r\n { renderRulesInput() }\r\n 2}\r\n />\r\n
\r\n messages.length > 0)}\r\n />\r\n { customLabelTargets.length > 0 && (\r\n
\r\n
\r\n {i18n.getString(_TL_('Custom labels'))}\r\n setNewAssetGroupUrlRules([])}\r\n />\r\n
\r\n { renderCustomLabelTargetTags() }\r\n
\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nCustomLabelsEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.string,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n onChange: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n};\r\n\r\nCustomLabelsEditor.defaultProps = {\r\n urlRules: [],\r\n};\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport { get } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport {\r\n DefaultButton,\r\n PrimaryButton,\r\n IconButton,\r\n Panel,\r\n PanelType,\r\n Dropdown,\r\n Text,\r\n TextField,\r\n} from '@fluentui/react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { ValidationGroup, withValidation } from '@bingads-webui-react/validation';\r\nimport {\r\n TARGET_TYPE,\r\n CONDITION_OPERATOR,\r\n INPUT_VALIDATION_SCHEMA,\r\n} from '../helpers/constants';\r\nimport { extractTargetsFromViewModel, getPlaceHolderText } from '../helpers/utils';\r\nimport { TagWithTooltip } from './tag-with-tooltips';\r\n\r\nconst ValidatedInput = withValidation(TextField);\r\n\r\nexport const getUrlRulesEditorStyle = (_, { palette = {} }) => ({\r\n sectionsContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n '& .description': {\r\n marginTop: '12px',\r\n marginBottom: '12px',\r\n },\r\n '& .footer': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '8px',\r\n },\r\n '& .create-rule-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n marginTop: '16px',\r\n marginBottom: '16px',\r\n border: '1px solid rgba(209, 209, 209, 1)',\r\n borderRadius: '4px',\r\n },\r\n '& button[disabled]': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n rulesInputOuterContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n border: '1px solid rgba(225, 223, 221, 1)',\r\n borderRadius: '4px',\r\n padding: '16px',\r\n '& .add-rule-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n borderWidth: '0px',\r\n },\r\n },\r\n rulesInputInnerContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n padding: '0px',\r\n '& .target-dropdown': {\r\n minWidth: '161px',\r\n height: '32px',\r\n },\r\n '& .conditions': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-end',\r\n gap: '12px',\r\n marginLeft: '12px',\r\n },\r\n '& .condition': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '12px',\r\n '& .operator': {\r\n paddingTop: '6px',\r\n },\r\n },\r\n '& .input-container': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n '& .validated-input': {\r\n width: '231px',\r\n '& .ms-TextField-fieldGroup': {\r\n borderRadius: '4px',\r\n },\r\n },\r\n '& .operator-text': {\r\n alignSelf: 'center',\r\n },\r\n '& .error-message': {\r\n color: palette.redDark,\r\n },\r\n },\r\n rulesResultContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n borderTop: '1px solid rgba(237, 235, 233, 1)',\r\n '& .top-row': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'flex-start',\r\n marginTop: '12px',\r\n '& .title': {\r\n fontSize: '18px',\r\n fontWeight: '600',\r\n lineHeight: '24px',\r\n },\r\n '& .delete-all-button': {\r\n width: 'fit-content',\r\n padding: '6px 12px',\r\n borderWidth: '0px',\r\n },\r\n },\r\n '& .result-row': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n },\r\n '& .result-items': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '4px',\r\n '& .result-item': {\r\n alignItems: 'normal',\r\n backgroundColor: '#F3F2F1',\r\n borderRadius: 3,\r\n display: 'flex',\r\n flexDirection: 'row',\r\n fontWeight: 600,\r\n '& button': {\r\n color: palette.neutralSecondary,\r\n height: 'auto',\r\n '& .ms-Icon': {\r\n fontSize: 12,\r\n },\r\n },\r\n '& .tagText': {\r\n maxWidth: '488px',\r\n overflow: 'hidden',\r\n textWrap: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n padding: '4px 0px 4px 10px',\r\n },\r\n },\r\n },\r\n },\r\n optionText: {\r\n paddingLeft: '16px',\r\n },\r\n});\r\n\r\nexport const UrlRulesEditor = (props) => {\r\n const {\r\n i18n,\r\n urlRules,\r\n onChange,\r\n isOpen,\r\n onClose,\r\n enableSpecialCharactersValidation,\r\n } = props;\r\n\r\n const unsafeCharacterErrorMessage = i18n.getString(_TL_('Field should not contain invalid characters'));\r\n const doesUrlContainUnsafeCharacters = (url) => {\r\n const specialCharactersRegex = /[\\s<>{}]/;\r\n return specialCharactersRegex.test(url);\r\n };\r\n\r\n const styles = useDefaultStyles(getUrlRulesEditorStyle);\r\n\r\n const [newAssetGroupUrlRules, setNewAssetGroupUrlRules] = useState(urlRules || []);\r\n\r\n const {\r\n urlTargets,\r\n pageTitleTargets,\r\n pageContentTargets,\r\n categoryTargets,\r\n } = useMemo(() => extractTargetsFromViewModel(newAssetGroupUrlRules), [newAssetGroupUrlRules]);\r\n\r\n const [selectedTargetType, setSelectedTargetType] = useState(TARGET_TYPE.Url);\r\n const [conditions, setConditions] = useState(['']);\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n\r\n const onAddRuleButtonClick = useCallback(() => {\r\n setConditions([...conditions, '']);\r\n }, [conditions, setConditions]);\r\n\r\n const onCreateRuleButtonClick = useCallback(() => {\r\n setConditions(['']);\r\n if (selectedTargetType === TARGET_TYPE.Url && urlTargets.some(target => target.join(', ') === conditions.join(', '))) return;\r\n if (selectedTargetType === TARGET_TYPE.PageTitle && pageTitleTargets.some(target => target.join(', ') === conditions.join(', '))) return;\r\n if (selectedTargetType === TARGET_TYPE.PageContent && pageContentTargets.some(target => target.join(', ') === conditions.join(', '))) return;\r\n if (selectedTargetType === TARGET_TYPE.Category && categoryTargets.some(target => target.join(', ') === conditions.join(', '))) return;\r\n\r\n const rule = {};\r\n conditions.forEach((condition, index) => {\r\n const trimmedCondition = condition.trim();\r\n if (!trimmedCondition) return;\r\n rule[`TargetCondition${index + 1}`] = selectedTargetType;\r\n rule[`TargetConditionOperator${index + 1}`] = CONDITION_OPERATOR.Contains;\r\n rule[`TargetValue${index + 1}`] = trimmedCondition;\r\n });\r\n\r\n setNewAssetGroupUrlRules([...newAssetGroupUrlRules, rule]);\r\n }, [categoryTargets, conditions, newAssetGroupUrlRules, pageContentTargets, pageTitleTargets, selectedTargetType, urlTargets]);\r\n\r\n const targetTypeDropdownOptions = useMemo(() => [\r\n { key: TARGET_TYPE.Url, text: i18n.getString(_TL_('URL')) },\r\n { key: TARGET_TYPE.PageTitle, text: i18n.getString(_TL_('Page title')) },\r\n { key: TARGET_TYPE.PageContent, text: i18n.getString(_TL_('Page content')) },\r\n { key: TARGET_TYPE.Category, text: i18n.getString(_TL_('Category')) },\r\n ], [i18n]);\r\n\r\n const renderTargetTypeDropdownOptions = useCallback(option => (\r\n {option.text}\r\n ), [styles.optionText]);\r\n\r\n const renderRulesInput = useCallback(() => {\r\n const conditionInput = conditions.map((condition, index) => (\r\n // eslint-disable-next-line react/no-array-index-key\r\n
\r\n { index === 0 ? i18n.getString(_TL_('contains')) : i18n.getString(_TL_('And')) }\r\n
\r\n {\r\n const { data, messages } = result;\r\n const newInput = get(data, [`ruleInput${index + 1}`], '');\r\n const newConditions = [...conditions];\r\n newConditions[index] = newInput;\r\n setConditions(newConditions);\r\n const newErrorMessages = [...errorMessages];\r\n enableSpecialCharactersValidation && doesUrlContainUnsafeCharacters(newInput) ? newErrorMessages[index] = [...messages, unsafeCharacterErrorMessage] : newErrorMessages[index] = messages;\r\n setErrorMessages(newErrorMessages);\r\n },\r\n }}\r\n placeholder={getPlaceHolderText(i18n, selectedTargetType)}\r\n value={condition}\r\n />\r\n { errorMessages[index] && errorMessages[index].map(message => ({message}))}\r\n
\r\n {\r\n if (conditions.length === 1) {\r\n setConditions(['']);\r\n } else {\r\n const newConditions = [...conditions];\r\n newConditions.splice(index, 1);\r\n setConditions(newConditions);\r\n }\r\n }}\r\n />\r\n
\r\n ));\r\n\r\n return (\r\n
\r\n setSelectedTargetType(data.key)}\r\n />\r\n
\r\n { conditionInput }\r\n
\r\n
\r\n );\r\n }, [conditions, styles.rulesInputInnerContainer, targetTypeDropdownOptions, renderTargetTypeDropdownOptions, selectedTargetType, i18n, errorMessages, enableSpecialCharactersValidation, unsafeCharacterErrorMessage]);\r\n\r\n const removeTargetTag = useCallback((targetType, targetString) => {\r\n const newRules = newAssetGroupUrlRules.filter((rule) => {\r\n const values = [\r\n get(rule, 'TargetValue1', ''),\r\n get(rule, 'TargetValue2', ''),\r\n get(rule, 'TargetValue3', ''),\r\n ].filter(Boolean).join(', ');\r\n return get(rule, 'TargetCondition1', '') !== targetType || values !== targetString;\r\n });\r\n setNewAssetGroupUrlRules(newRules);\r\n }, [newAssetGroupUrlRules]);\r\n\r\n const renderTargetTags = useCallback((label, targets, targetType) => (\r\n
\r\n {i18n.getString(_TL_('{{label}}'), { label })}\r\n
\r\n {targets.map((target) => {\r\n const targetString = target.join(', ');\r\n return (\r\n
\r\n \r\n removeTargetTag(targetType, targetString)}\r\n />\r\n
\r\n );\r\n })}\r\n
\r\n
\r\n ), [i18n, removeTargetTag]);\r\n\r\n const onSave = useCallback(() => {\r\n const newUrlRules = newAssetGroupUrlRules.filter((rule) => {\r\n const type = get(rule, 'TargetCondition1', '');\r\n return type !== TARGET_TYPE.CustomLabel;\r\n });\r\n onChange({ AssetGroupUrlTargets: newUrlRules });\r\n onClose();\r\n }, [newAssetGroupUrlRules, onChange, onClose]);\r\n\r\n const renderPanelFooter = useCallback(() => (\r\n
\r\n \r\n \r\n
\r\n ), [i18n, onClose, onSave]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n {i18n.getString(_TL_('Enter URLs or create rules to include non-commercial pages or sections of your website.'))}\r\n
\r\n
\r\n { renderRulesInput() }\r\n 2}\r\n />\r\n
\r\n messages.length > 0)}\r\n />\r\n {(urlTargets.length > 0 || pageTitleTargets.length > 0 || pageContentTargets.length > 0 || categoryTargets.length > 0)\r\n && (\r\n
\r\n
\r\n Included URL Rules\r\n setNewAssetGroupUrlRules([])}\r\n />\r\n
\r\n { urlTargets.length > 0 && renderTargetTags('URL includes:', urlTargets, TARGET_TYPE.Url) }\r\n { pageTitleTargets.length > 0 && renderTargetTags('Page title is:', pageTitleTargets, TARGET_TYPE.PageTitle) }\r\n { pageContentTargets.length > 0 && renderTargetTags('Page content is:', pageContentTargets, TARGET_TYPE.PageContent) }\r\n { categoryTargets.length > 0 && renderTargetTags('Category is:', categoryTargets, TARGET_TYPE.Category) }\r\n
\r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nUrlRulesEditor.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.string,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n onChange: PropTypes.func.isRequired,\r\n onClose: PropTypes.func.isRequired,\r\n isOpen: PropTypes.bool.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRulesEditor.defaultProps = {\r\n urlRules: [],\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Overflow,\r\n OverflowItem,\r\n useOverflowMenu,\r\n makeStyles,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { TARGET_TYPE } from './helpers/constants';\r\nimport { extractTargetsFromViewModel } from './helpers/utils';\r\nimport UrlsImage from './media/url.svg';\r\n\r\n/**\r\n * There's a known bug that fluentui/react-overflow doesn't take gap of the overflow container\r\n * and margin of overflow item into account and cause weird styling issues.\r\n * https://github.com/microsoft/fluentui/issues/23066\r\n */\r\nconst useUrlRulesPreviewStyles = makeStyles({\r\n previewContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.margin('8px', '28px'),\r\n ...shorthands.gap('8px'),\r\n },\r\n previewRow: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n ...shorthands.gap('4px'),\r\n flexWrap: 'nowrap',\r\n maxWidth: '95%',\r\n '& .icon': {\r\n paddingTop: '2px',\r\n },\r\n '& .row-label': {\r\n ...shorthands.padding('2px', '0px', '2px', '0px'),\r\n textWrap: 'nowrap',\r\n },\r\n },\r\n overflowContainer: {\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n flexGrow: 1,\r\n minWidth: 0,\r\n maxWidth: '100%',\r\n overflowX: 'hidden',\r\n ...shorthands.gap('4px'),\r\n '& .tag': {\r\n flexShrink: 0,\r\n ...shorthands.padding('2px', '6px', '2px', '6px'),\r\n ...shorthands.borderRadius('4px'),\r\n backgroundColor: 'rgba(243, 242, 241, 1)',\r\n maxWidth: '160px',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflowX: 'hidden',\r\n },\r\n },\r\n});\r\n\r\nconst OverflowPlaceholder = () => {\r\n const { ref, overflowCount, isOverflowing } = useOverflowMenu();\r\n if (!isOverflowing) {\r\n return null;\r\n }\r\n return (+{overflowCount});\r\n};\r\n\r\nexport const UrlRulesPreview = (props) => {\r\n const {\r\n i18n,\r\n urlRules,\r\n conditions,\r\n titleText,\r\n } = props;\r\n\r\n const styles = useUrlRulesPreviewStyles();\r\n\r\n const {\r\n urlTargets,\r\n pageTitleTargets,\r\n pageContentTargets,\r\n categoryTargets,\r\n customLabelTargets,\r\n } = useMemo(() => extractTargetsFromViewModel(urlRules), [urlRules]);\r\n\r\n const renderPreviewRow = useCallback(({\r\n iconImg,\r\n description,\r\n targets,\r\n }) => (\r\n
\r\n { iconImg && \"Link }\r\n { description && {i18n.getString(_TL_('{{description}}'), { description })} }\r\n \r\n
\r\n { targets.map((target) => {\r\n const targetString = target.join(', ');\r\n return (\r\n \r\n {targetString}\r\n \r\n );\r\n }) }\r\n \r\n
\r\n
\r\n
\r\n ), [styles, i18n]);\r\n\r\n const renderPreviewRows = useCallback(() => conditions.map((condition) => {\r\n switch (condition) {\r\n case TARGET_TYPE.Url:\r\n return urlTargets.length > 0 ? renderPreviewRow({ iconImg: UrlsImage, description: 'URL contains', targets: urlTargets }) : null;\r\n case TARGET_TYPE.PageTitle:\r\n return pageTitleTargets.length > 0 ? renderPreviewRow({ iconImg: UrlsImage, description: 'Page title is', targets: pageTitleTargets }) : null;\r\n case TARGET_TYPE.PageContent:\r\n return pageContentTargets.length > 0 ? renderPreviewRow({ iconImg: UrlsImage, description: 'Page content contains', targets: pageContentTargets }) : null;\r\n case TARGET_TYPE.Category:\r\n return categoryTargets.length > 0 ? renderPreviewRow({ iconImg: UrlsImage, description: 'Category is', targets: categoryTargets }) : null;\r\n case TARGET_TYPE.CustomLabel:\r\n return customLabelTargets.length > 0 ? renderPreviewRow({ targets: customLabelTargets }) : null;\r\n default:\r\n return null;\r\n }\r\n }), [categoryTargets, conditions, customLabelTargets, pageContentTargets, pageTitleTargets, renderPreviewRow, urlTargets]);\r\n\r\n return (\r\n
\r\n {titleText}\r\n { renderPreviewRows() }\r\n
\r\n );\r\n};\r\n\r\nUrlRulesPreview.propTypes = {\r\n classes: PropTypes.shape({\r\n previewContainer: PropTypes.string,\r\n previewRow: PropTypes.string,\r\n overflowContainer: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n conditions: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n titleText: PropTypes.string.isRequired,\r\n};\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Button,\r\n Label,\r\n Radio,\r\n RadioGroup,\r\n Text,\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { CustomLabelsEditor } from './side-panel/custom-label-editor';\r\nimport { UrlRulesEditor } from './side-panel/url-rules-editor';\r\nimport { UrlRulesPreview } from './url-rules-preview';\r\nimport { extractTargetsFromViewModel } from './helpers/utils';\r\nimport { URL_RULES_OPTIONS, TARGET_TYPE } from './helpers/constants';\r\n\r\nconst useUrlRulesStyles = makeStyles({\r\n title: {\r\n marginBottom: '4px',\r\n },\r\n radioGroupContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('8px'),\r\n '& input[type=\"radio\"]': {\r\n height: '20px',\r\n width: '20px',\r\n ...shorthands.margin('0px'),\r\n },\r\n '& .fui-Radio__indicator': {\r\n height: '20px',\r\n width: '20px',\r\n ...shorthands.margin('0px'),\r\n },\r\n '& label': {\r\n ...shorthands.padding('0px', '0px', '0px', '8px'),\r\n },\r\n },\r\n radioOptionContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('4px'),\r\n '& .editButton': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n marginLeft: '16px',\r\n width: 'fit-content',\r\n color: 'var(--colorCompoundBrandForeground1, #0F6CBD)',\r\n },\r\n },\r\n radioOptionLabelContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ...shorthands.gap('4px'),\r\n },\r\n});\r\n\r\nexport const UrlRulesImpl = (props) => {\r\n const {\r\n i18n,\r\n urlRules,\r\n urlRulesOption,\r\n onChange,\r\n enableSpecialCharactersValidation,\r\n } = props;\r\n const styles = useUrlRulesStyles();\r\n\r\n const targets = useMemo(() => extractTargetsFromViewModel(urlRules || []), [urlRules]);\r\n const {\r\n urlTargets,\r\n pageTitleTargets,\r\n pageContentTargets,\r\n categoryTargets,\r\n customLabelTargets,\r\n } = targets;\r\n\r\n const [isUrlRulesEditorOn, setIsUrlRulesEditorOn] = useState(false);\r\n const onOpenUrlRulesEditor = useCallback(() => setIsUrlRulesEditorOn(true), []);\r\n const onCloseUrlRulesEditor = useCallback(() => setIsUrlRulesEditorOn(false), []);\r\n const [isCustomLabelEditorOn, setIsCustomLabelEditorOn] = useState(false);\r\n const onOpenCustomLabelEditor = useCallback(() => setIsCustomLabelEditorOn(true), []);\r\n const onCloseCustomLabelEditor = useCallback(() => setIsCustomLabelEditorOn(false), []);\r\n\r\n const renderTargetAllOption = useCallback(() => (\r\n \r\n {i18n.getString(_TL_('Target all webpages'))}\r\n \r\n }\r\n />\r\n ), [i18n]);\r\n\r\n const renderUrlRulesOption = useCallback(() => (\r\n
\r\n \r\n {i18n.getString(_TL_('Specify URL rules to include'))}\r\n { urlRulesOption === URL_RULES_OPTIONS.Rules && {i18n.getString(_TL_('Send traffic to the most relevant URLs on your site when it’s likely to result in better performance.'))} }\r\n
\r\n }\r\n />\r\n { urlRulesOption === URL_RULES_OPTIONS.Rules && (urlTargets.length > 0 || pageTitleTargets.length > 0 || pageContentTargets.length > 0 || categoryTargets.length > 0) && (\r\n \r\n )}\r\n { urlRulesOption === URL_RULES_OPTIONS.Rules && (\r\n \r\n {(urlTargets.length > 0 || pageTitleTargets.length > 0 || pageContentTargets.length > 0 || categoryTargets.length > 0)\r\n ? i18n.getString(_TL_('Edit URL rules'))\r\n : i18n.getString(_TL_('Include URL rules'))}\r\n \r\n )}\r\n
\r\n ), [styles.radioOptionContainer, styles.radioOptionLabelContainer, i18n, urlRulesOption, urlTargets.length, pageTitleTargets.length, pageContentTargets.length, categoryTargets.length, urlRules, onOpenUrlRulesEditor]);\r\n\r\n const renderCustomLabelsOption = useCallback(() => (\r\n
\r\n \r\n {i18n.getString(_TL_('Add custom labels to your URLs'))}\r\n { urlRulesOption === URL_RULES_OPTIONS.Labels && {i18n.getString(_TL_('Add custom labels from your page feeds to focus your ads on specific categories of pages.'))} }\r\n
\r\n }\r\n />\r\n { urlRulesOption === URL_RULES_OPTIONS.Labels && customLabelTargets.length > 0 && (\r\n \r\n )}\r\n { urlRulesOption === URL_RULES_OPTIONS.Labels && (\r\n \r\n {(customLabelTargets.length > 0)\r\n ? i18n.getString(_TL_('Edit custom labels'))\r\n : i18n.getString(_TL_('Include custom labels'))}\r\n \r\n )}\r\n \r\n ), [styles.radioOptionContainer, styles.radioOptionLabelContainer, i18n, urlRulesOption, customLabelTargets.length, urlRules, onOpenCustomLabelEditor]);\r\n\r\n const renderEditor = useCallback(() => {\r\n if (isUrlRulesEditorOn) {\r\n return (\r\n \r\n );\r\n } else if (isCustomLabelEditorOn) {\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n }, [isUrlRulesEditorOn, isCustomLabelEditorOn, i18n, urlRules, onChange, onCloseUrlRulesEditor, onCloseCustomLabelEditor, enableSpecialCharactersValidation]);\r\n\r\n const onRadioChange = useCallback((_, data) => onChange({ UrlRulesOption: data.value }), [onChange]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {renderTargetAllOption()}\r\n {renderUrlRulesOption()}\r\n {renderCustomLabelsOption()}\r\n {renderEditor()}\r\n \r\n
\r\n );\r\n};\r\n\r\nUrlRulesImpl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })).isRequired,\r\n urlRulesOption: PropTypes.string,\r\n onChange: PropTypes.func.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRulesImpl.defaultProps = {\r\n urlRulesOption: URL_RULES_OPTIONS.All,\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { UrlRulesImpl } from './url-rules-impl';\r\n\r\nconst UrlRules = ({ validationProps, updateValidation, enableSpecialCharactersValidation }) => {\r\n const activity = useContext(ActivityContext);\r\n const i18n = useContext(I18nContext);\r\n const { data: { urlRules, urlRulesOption } } = validationProps;\r\n const onChange = useCallback((newData) => {\r\n updateValidation([], newData);\r\n if (activity) {\r\n activity.signal(`onAssetGroupUrlRulesChange - ${JSON.stringify(newData)}`);\r\n }\r\n }, [updateValidation, activity]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nUrlRules.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n TargetCondition1: PropTypes.string,\r\n TargetConditionOperator1: PropTypes.string,\r\n TargetValue1: PropTypes.string,\r\n TargetCondition2: PropTypes.string,\r\n TargetConditionOperator2: PropTypes.string,\r\n TargetValue2: PropTypes.string,\r\n TargetCondition3: PropTypes.string,\r\n TargetConditionOperator3: PropTypes.string,\r\n TargetValue3: PropTypes.string,\r\n })),\r\n urlRulesOption: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nUrlRules.defaultProps = {\r\n enableSpecialCharactersValidation: false,\r\n};\r\n\r\nexport const ValidatedUrlRules = withCustomValidation(UrlRules);\r\n","import React, { useCallback } from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { first, get, isEmpty } from 'underscore';\r\nimport { getDomain } from '@bingads-webui/url-util';\r\n\r\nconst getSummaryStyle = () => ({\r\n advancedUrlOptionsSummaryContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n },\r\n});\r\n\r\nconst TARGET_TYPE = {\r\n Url: 'URL',\r\n PageTitle: 'PAGE_TITLE',\r\n PageContent: 'PAGE_CONTENT',\r\n Category: 'CATEGORY',\r\n CustomLabel: 'CUSTOM_LABEL',\r\n};\r\n\r\nconst extractTargetsFromViewModel = (assetGroupUrlRules) => {\r\n const targetMapping = {\r\n [TARGET_TYPE.Url]: [],\r\n [TARGET_TYPE.PageTitle]: [],\r\n [TARGET_TYPE.PageContent]: [],\r\n [TARGET_TYPE.Category]: [],\r\n [TARGET_TYPE.CustomLabel]: [],\r\n };\r\n\r\n assetGroupUrlRules.forEach((rule) => {\r\n const type = get(rule, 'TargetCondition1', '');\r\n const values = [get(rule, 'TargetValue1', ''), get(rule, 'TargetValue2', ''), get(rule, 'TargetValue3', '')]\r\n .filter(Boolean);\r\n\r\n if (targetMapping[type]) {\r\n targetMapping[type].push(values);\r\n }\r\n });\r\n\r\n return {\r\n urlTargets: targetMapping[TARGET_TYPE.Url],\r\n pageTitleTargets: targetMapping[TARGET_TYPE.PageTitle],\r\n pageContentTargets: targetMapping[TARGET_TYPE.PageContent],\r\n categoryTargets: targetMapping[TARGET_TYPE.Category],\r\n customLabelTargets: targetMapping[TARGET_TYPE.CustomLabel],\r\n };\r\n};\r\n\r\nexport const UrlOptionsDetailsWithRules = ({\r\n i18n, finalUrls, path1, path2, mobileFinalUrls, urlRules,\r\n}) => {\r\n const styles = useDefaultStyles(getSummaryStyle);\r\n\r\n const finalUrl = first(finalUrls);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n let displayUrl = '';\r\n if (!isEmpty(path1)) {\r\n const finalUrlDomain = getDomain(finalUrl) || 'www.example.com';\r\n displayUrl = `${finalUrlDomain}/${path1}`;\r\n if (!isEmpty(path2)) {\r\n displayUrl = `${displayUrl}/${path2}`;\r\n }\r\n }\r\n const noDisplayUrl = isEmpty(displayUrl);\r\n const noMboileUrl = isEmpty(mobileFinalUrl);\r\n const noUrlRules = isEmpty(urlRules);\r\n const noSettingsApplied = noDisplayUrl && noMboileUrl && noUrlRules;\r\n\r\n let urlPathText = '';\r\n if (noSettingsApplied) {\r\n urlPathText = i18n.getString(_TL_('No URL settings applied'));\r\n } else {\r\n if (!noDisplayUrl) {\r\n urlPathText += `${i18n.getString(_TL_('Display URL'))}: ${displayUrl}`;\r\n }\r\n if (!noMboileUrl) {\r\n if (urlPathText.length > 0) {\r\n urlPathText += '; '; // Add separator if there are details before\r\n }\r\n urlPathText += `${i18n.getString(_TL_('Mobile URL'))}: ${mobileFinalUrl}`;\r\n }\r\n }\r\n\r\n const {\r\n urlTargets, pageTitleTargets, pageContentTargets, categoryTargets, customLabelTargets,\r\n } = extractTargetsFromViewModel(urlRules || []);\r\n const renderRulesSummary = useCallback(() => {\r\n if (urlRules.length === 0) {\r\n return ({i18n.getString(_TL_('No URL rules set'))});\r\n }\r\n return (\r\n <>\r\n {urlTargets.length > 0 && {i18n.getString(_TL_('URL contains'))}: {urlTargets.map(target => target.join(', ')).join('; ')}; }\r\n {pageTitleTargets.length > 0 && {i18n.getString(_TL_('Page title is'))}: {pageTitleTargets.map(target => target.join(', ')).join('; ')}; }\r\n {pageContentTargets.length > 0 && {i18n.getString(_TL_('Page content contains'))}: {pageContentTargets.map(target => target.join(', ')).join('; ')}; }\r\n {categoryTargets.length > 0 && {i18n.getString(_TL_('Category is'))}: {categoryTargets.map(target => target.join(', ')).join('; ')}; }\r\n {customLabelTargets.length > 0 && {i18n.getString(_TL_('Custom label is'))}: {customLabelTargets.map(target => target.join(', ')).join('; ')}; }\r\n \r\n );\r\n }, [urlRules, i18n, urlTargets, pageTitleTargets, pageContentTargets, categoryTargets, customLabelTargets]);\r\n\r\n return (\r\n
\r\n {urlPathText}\r\n { !noSettingsApplied && renderRulesSummary() }\r\n
\r\n );\r\n};\r\n\r\nUrlOptionsDetailsWithRules.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n finalUrls: PropTypes.arrayOf(PropTypes.string),\r\n path1: PropTypes.string,\r\n path2: PropTypes.string,\r\n mobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({})),\r\n};\r\n\r\nUrlOptionsDetailsWithRules.defaultProps = {\r\n finalUrls: [],\r\n path1: '',\r\n path2: '',\r\n mobileFinalUrls: [],\r\n urlRules: [],\r\n};\r\n","import { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withValidation } from '@bingads-webui-react/validation';\r\n\r\nconst DummyIsOptionalComponent = ({ value, onChange }) => {\r\n const [isOptional, setIsOptional] = useState(value);\r\n\r\n if (value !== isOptional) {\r\n onChange({ target: { value } });\r\n setIsOptional(value);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nDummyIsOptionalComponent.propTypes = {\r\n value: PropTypes.bool.isRequired,\r\n onChange: PropTypes.number.isRequired,\r\n};\r\n\r\nexport const DummyIsOptionalValidationItem = withValidation(DummyIsOptionalComponent);\r\n\r\nexport const createValidationPropsForDummyItem = isOptionalValue => ({\r\n schema: {\r\n properties: {\r\n type: 'object',\r\n IsOptional: {\r\n type: 'bool',\r\n },\r\n },\r\n },\r\n field: 'IsOptional',\r\n data: { IsOptional: isOptionalValue },\r\n});\r\n","import { chain, isEmpty } from 'underscore';\r\n\r\nexport const countTextAssets = ({ collectionObj, countEmpty = false }) => chain(collectionObj).values().filter(textValue => countEmpty || !isEmpty(textValue)).value().length;\r\n\r\nexport const hasTextAssets = (headlines, longHeadlines, descriptions) => countTextAssets({ collectionObj: headlines }) + countTextAssets({ collectionObj: longHeadlines }) + countTextAssets({ collectionObj: descriptions }) > 0;\r\n\r\nconst collectionSummary = (element, i18n) => {\r\n const { collection, displayText, displayTextSingular } = element;\r\n\r\n const count = countTextAssets({ collectionObj: collection });\r\n const itemText = count === 1 && displayTextSingular ? displayTextSingular : displayText;\r\n\r\n return (i18n.getString(_TL_('{{collectionCount}} {{displayText}}', { comment: 'Collection Count can be 2 and Display Text can be headlines' }), { displayText: itemText, collectionCount: count }));\r\n};\r\n\r\nexport const getTextCardSummaryDetails = (collectionsSummary, i18n) => {\r\n const summaryDetails = [];\r\n collectionsSummary.forEach((element) => {\r\n summaryDetails.push(collectionSummary(element, i18n));\r\n });\r\n return summaryDetails.join(' ');\r\n};\r\n\r\nexport const getTextCardSummaryDetailsForCollection = (i18n, collection, displayText, displayTextSingular) => collectionSummary({ collection, displayText, displayTextSingular }, i18n);\r\n\r\nexport const getHeadlinesCardSummaryDetails = (i18n, headlines) => getTextCardSummaryDetailsForCollection(i18n, headlines, i18n.getString(_TL_('short headlines')), i18n.getString(_TL_('short headline')));\r\nexport const getLongHeadlinesCardSummaryDetails = (i18n, longHeadlines) => getTextCardSummaryDetailsForCollection(i18n, longHeadlines, i18n.getString(_TL_('long headlines')), i18n.getString(_TL_('long headline')));\r\nexport const getDescriptionsCardSummaryDetails = (i18n, descriptions) => getTextCardSummaryDetailsForCollection(i18n, descriptions, i18n.getString(_TL_('descriptions')), i18n.getString(_TL_('description')));\r\n","import React, { useCallback, useMemo, useContext, useRef } from 'react';\r\nimport { result, filter, isFunction, reduce, map, isEmpty, chain, uniq, size, noop } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { ValidationGroup, withError, withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Label } from '@bingads-webui-react/primitive';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { ActionButton, CommandButton } from '@fluentui/react';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport { withContainerErrors, withControlErrorHandling } from '@bingads-webui-campaign-react/error-handling';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\nimport { RemainingCharsValidatedTextField } from '@bingads-webui-campaign-react/remaining-chars-hint';\r\nimport { ValidatedTextFieldWithAdCustomizer } from '@bingads-webui-campaign-react/responsive-search-ad-editor';\r\n\r\nimport { getStyles } from './style';\r\nimport { DummyIsOptionalValidationItem, createValidationPropsForDummyItem } from './dummy-is-optional-validation-item';\r\nimport { countTextAssets } from './shared';\r\n\r\nregisterIcons({\r\n icons: {\r\n 'delete-svg': (\r\n \r\n \r\n \r\n ),\r\n },\r\n});\r\n\r\nconst ValidationGroupWithMessage = withControlErrorHandling(withContainerErrors(withError(ValidationGroup)));\r\nconst hasEnoughNonEmptyValues = (list, min) => filter(list.items, item => item.value && result(item.value, 'length', 0) > 0).length >= min;\r\nconst hasDuplicateValues = (list) => {\r\n const values = chain(list.items).filter(item => item.value && result(item.value, 'length', 0) > 0).map(item => item.value).value();\r\n return size(values) !== size(uniq(values));\r\n};\r\n\r\nconst deriveValue = (data, minCollectionSize, singleAssetValidationPropsField, validationPropsField) => {\r\n const initialValue = {};\r\n\r\n const collectionObj = result(data, validationPropsField, {});\r\n const numberOfPreloadedAssets = countTextAssets({ collectionObj, countEmpty: true });\r\n\r\n for (let i = 0; i < (numberOfPreloadedAssets || minCollectionSize || 1); i += 1) {\r\n const fieldName = `${singleAssetValidationPropsField}${i}`;\r\n initialValue[fieldName] = collectionObj[fieldName] || '';\r\n }\r\n return initialValue;\r\n};\r\n\r\nexport const UnvalidatedTextAssetCollection = React.memo((props) => {\r\n const {\r\n labelAction,\r\n overrideInputNode,\r\n minCollectionSize,\r\n maxCollectionSize,\r\n isOptional,\r\n labelText,\r\n labelId,\r\n helpPopupTopic,\r\n helpPopupAriaLabel,\r\n placeholderText,\r\n fieldName,\r\n singleAssetValidationPropsField,\r\n validationPropsField,\r\n addButtonText,\r\n formErrorProps,\r\n renderWrapperFunction,\r\n updateValidation,\r\n errorMessage,\r\n duplicateErrorMessage,\r\n validationProps,\r\n externalErrorMessages,\r\n showAddButton,\r\n hideAddButtonWhenLimitReached,\r\n getCustomErrorMessage,\r\n styleOverrides,\r\n alwaysShowError,\r\n showDeleteButton,\r\n onDeleteTextAsset,\r\n deleteButtonLabel,\r\n renderInlineCopilot,\r\n enableCustomizer,\r\n withDeleteIconDisabled,\r\n } = props;\r\n const getStylesWithOverrides = useMemo(() => getStyles(styleOverrides), [styleOverrides]);\r\n const classes = useDefaultStyles(getStylesWithOverrides);\r\n const i18n = useContext(I18nContext);\r\n const activity = useContext(ActivityContext);\r\n\r\n const { data, schema } = validationProps;\r\n\r\n const value = { [validationPropsField]: deriveValue(data, minCollectionSize, singleAssetValidationPropsField, validationPropsField) };\r\n\r\n const assetsToRender = value[validationPropsField];\r\n\r\n const onDeleteAsset = useCallback((key) => {\r\n const deletedValue = value[validationPropsField][key];\r\n\r\n const newValidationPropsField = {};\r\n let index = 0;\r\n Object.keys(value[validationPropsField]).forEach((itemKey) => {\r\n if (itemKey !== key) {\r\n newValidationPropsField[`${singleAssetValidationPropsField}${index}`] = value[validationPropsField][itemKey];\r\n index += 1;\r\n }\r\n });\r\n for (let i = Object.keys(newValidationPropsField).length; i < minCollectionSize; i += 1) {\r\n newValidationPropsField[`${singleAssetValidationPropsField}${index}`] = '';\r\n index += 1;\r\n }\r\n const newValue = value;\r\n newValue[validationPropsField] = newValidationPropsField;\r\n\r\n onDeleteTextAsset(key, deletedValue);\r\n\r\n updateValidation(undefined, newValue);\r\n }, [minCollectionSize, onDeleteTextAsset, singleAssetValidationPropsField, updateValidation, validationPropsField, value]);\r\n\r\n const renderItem = useCallback((key, itemValue, additionalTextFieldProps) => (\r\n
\r\n {\r\n enableCustomizer ?\r\n :\r\n \r\n }\r\n {additionalTextFieldProps && additionalTextFieldProps.renderInlineCopilot && additionalTextFieldProps.renderInlineCopilot(key, itemValue)}\r\n {showDeleteButton &&\r\n { onDeleteAsset(key); }}\r\n ariaLabel={deleteButtonLabel}\r\n disabled={Object.keys(assetsToRender).length === 1 && withDeleteIconDisabled}\r\n />\r\n }\r\n
\r\n ), [classes.TextAssetContainer, classes.WithFlexButtons, showDeleteButton, renderInlineCopilot, enableCustomizer, withDeleteIconDisabled, i18n, validationPropsField, schema, placeholderText, deleteButtonLabel, assetsToRender, onDeleteAsset]);\r\n\r\n const textAssetFields = useMemo(() => map(assetsToRender, (itemValue, key) => {\r\n if (isFunction(renderWrapperFunction)) {\r\n return renderWrapperFunction(key, additionalTextFieldProps => renderItem(key, itemValue, additionalTextFieldProps), itemValue);\r\n }\r\n\r\n return renderItem(key);\r\n }), [assetsToRender, renderWrapperFunction, renderItem]);\r\n\r\n const hideAddButton = hideAddButtonWhenLimitReached && textAssetFields.length >= maxCollectionSize;\r\n\r\n const onAddAsset = useCallback(() => {\r\n const newValue = {\r\n [validationPropsField]: {\r\n ...value[`${validationPropsField}`],\r\n [`${singleAssetValidationPropsField}${textAssetFields.length}`]: '',\r\n },\r\n };\r\n\r\n updateValidation(undefined, newValue);\r\n }, [updateValidation, singleAssetValidationPropsField, textAssetFields.length, validationPropsField, value]);\r\n\r\n const onValidate = useCallback((validationResult) => {\r\n if (activity) {\r\n activity.signal(`onTextAssetsCollectionValidate- ${validationResult.data}`);\r\n }\r\n let customErrors = [];\r\n const newData = {\r\n ...validationResult.data,\r\n [validationPropsField]: {\r\n ...value[validationPropsField],\r\n ...validationResult.data[validationPropsField],\r\n },\r\n };\r\n if (getCustomErrorMessage) {\r\n const assets = newData[validationPropsField];\r\n\r\n customErrors = getCustomErrorMessage(assets, validationPropsField);\r\n }\r\n updateValidation([...validationResult.messages, ...customErrors], newData);\r\n }, [activity, getCustomErrorMessage, updateValidation, validationPropsField, value]);\r\n\r\n const isOptionalRef = useRef();\r\n isOptionalRef.current = isOptional;\r\n\r\n const collectionValidator = (changed, list) => {\r\n let groupErrors = hasEnoughNonEmptyValues(list, isOptionalRef.current ? 0 : minCollectionSize) ? [] : [errorMessage];\r\n if (isEmpty(groupErrors) && duplicateErrorMessage) {\r\n groupErrors = hasDuplicateValues(list) ? [duplicateErrorMessage] : [];\r\n }\r\n return reduce(list.items, (errors, item) => [...errors, ...item.messages], groupErrors);\r\n };\r\n\r\n const dummyItemValidationProps = useMemo(() => createValidationPropsForDummyItem(isOptional), [isOptional]);\r\n\r\n return (\r\n
\r\n error === errorMessage || (duplicateErrorMessage && (error === duplicateErrorMessage)),\r\n stopPropagation: true,\r\n passiveMessages: externalErrorMessages,\r\n showErrorOnPassiveMessages: true,\r\n ...(alwaysShowError && { alwaysShowError }),\r\n }}\r\n formErrorProps={formErrorProps}\r\n >\r\n
\r\n \r\n {labelAction}\r\n
\r\n {overrideInputNode}\r\n \r\n {textAssetFields}\r\n
\r\n \r\n \r\n {showAddButton && !hideAddButton &&\r\n = maxCollectionSize}\r\n onClick={onAddAsset}\r\n >\r\n {addButtonText}\r\n \r\n }\r\n \r\n );\r\n});\r\n\r\nUnvalidatedTextAssetCollection.propTypes = {\r\n minCollectionSize: PropTypes.number,\r\n maxCollectionSize: PropTypes.number.isRequired,\r\n isOptional: PropTypes.bool,\r\n labelText: PropTypes.string,\r\n labelId: PropTypes.string,\r\n helpPopupTopic: PropTypes.string,\r\n helpPopupAriaLabel: PropTypes.string,\r\n placeholderText: PropTypes.string,\r\n fieldName: PropTypes.string.isRequired,\r\n validationPropsField: PropTypes.string.isRequired,\r\n singleAssetValidationPropsField: PropTypes.string.isRequired,\r\n addButtonText: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n formErrorProps: PropTypes.shape({}),\r\n renderWrapperFunction: PropTypes.func,\r\n updateValidation: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string.isRequired,\r\n duplicateErrorMessage: PropTypes.string,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({}).isRequired,\r\n schema: PropTypes.shape({}).isRequired,\r\n }).isRequired,\r\n alwaysShowError: PropTypes.bool,\r\n externalErrorMessages: PropTypes.arrayOf(PropTypes.string),\r\n showAddButton: PropTypes.bool,\r\n hideAddButtonWhenLimitReached: PropTypes.bool,\r\n getCustomErrorMessage: PropTypes.func,\r\n styleOverrides: PropTypes.shape({}),\r\n showDeleteButton: PropTypes.bool,\r\n onDeleteTextAsset: PropTypes.func,\r\n deleteButtonLabel: PropTypes.string,\r\n renderInlineCopilot: PropTypes.func,\r\n enableCustomizer: PropTypes.bool,\r\n withDeleteIconDisabled: PropTypes.bool,\r\n labelAction: PropTypes.node,\r\n overrideInputNode: PropTypes.node,\r\n};\r\n\r\nUnvalidatedTextAssetCollection.defaultProps = {\r\n minCollectionSize: 1,\r\n isOptional: false,\r\n withDeleteIconDisabled: false,\r\n labelText: undefined,\r\n labelId: undefined,\r\n placeholderText: undefined,\r\n formErrorProps: undefined,\r\n renderWrapperFunction: undefined,\r\n helpPopupTopic: undefined,\r\n helpPopupAriaLabel: undefined,\r\n alwaysShowError: undefined,\r\n externalErrorMessages: [],\r\n showAddButton: true,\r\n hideAddButtonWhenLimitReached: false,\r\n getCustomErrorMessage: undefined,\r\n duplicateErrorMessage: undefined,\r\n styleOverrides: {},\r\n showDeleteButton: false,\r\n onDeleteTextAsset: noop,\r\n deleteButtonLabel: undefined,\r\n renderInlineCopilot: null,\r\n enableCustomizer: false,\r\n labelAction: null,\r\n overrideInputNode: null,\r\n};\r\n\r\nexport const TextAssetCollection = withCustomValidation(UnvalidatedTextAssetCollection);\r\n\r\n","import { merge } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nexport const getStyles = styleOverrides => () => merge({\r\n TextAssetContainer: {\r\n marginBottom: '5px',\r\n\r\n '&:not(:first-child)': {\r\n marginTop: '16px',\r\n },\r\n\r\n '& .remaining-hint': {\r\n marginBottom: '5px',\r\n },\r\n },\r\n\r\n labelContainer: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n },\r\n\r\n WithFlexButtons: {\r\n display: 'flex',\r\n\r\n '& .text-asset-copilot > button': {\r\n height: '30px',\r\n\r\n '&:first-of-type': {\r\n marginLeft: '8px',\r\n },\r\n },\r\n\r\n '& > button': {\r\n height: '30px',\r\n },\r\n },\r\n\r\n TextAssetsCollectionContainer: {\r\n width: '552px',\r\n '& div .error': {\r\n color: '#A80000',\r\n },\r\n },\r\n\r\n AddAssetButton: {\r\n marginBottom: '15px',\r\n },\r\n}, styleOverrides);\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { first, result, noop, isEmpty } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Label } from '@fluentui/react-components';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst FinalURlKey = 'FinalUrls';\r\n\r\nexport const ValidatedFinalUrl = ({\r\n i18n,\r\n validationOnUrlChange,\r\n updateValidation,\r\n prepopulateUrl,\r\n validationProps,\r\n validateOnRender,\r\n helpTopicId,\r\n hideLabel,\r\n additionalProperties,\r\n customUrlProtocol,\r\n}) => {\r\n const { data } = validationProps;\r\n const finalUrls = result(data, FinalURlKey, undefined);\r\n const finalUrl = first(finalUrls);\r\n const createFinalUrlsViewModel = urls => ({ [FinalURlKey]: urls });\r\n\r\n const activity: any = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((errors, value) => {\r\n updateValidation(errors, createFinalUrlsViewModel([value]), (!isEmpty(errors) && !!finalUrl));\r\n\r\n if (activity) {\r\n activity.signal(`onFinalUrlChanged - ${JSON.stringify(createFinalUrlsViewModel([value]))}`);\r\n }\r\n }, [activity, finalUrl, updateValidation]);\r\n\r\n return (\r\n \r\n {!hideLabel &&\r\n \r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nValidatedFinalUrl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationOnUrlChange: PropTypes.func,\r\n prepopulateUrl: PropTypes.string,\r\n hideLabel: PropTypes.bool,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n validateOnRender: PropTypes.bool,\r\n helpTopicId: PropTypes.string,\r\n additionalProperties: PropTypes.shape({}),\r\n customUrlProtocol: PropTypes.bool,\r\n};\r\n\r\nValidatedFinalUrl.defaultProps = {\r\n validationOnUrlChange: noop,\r\n prepopulateUrl: '',\r\n hideLabel: false,\r\n validateOnRender: false,\r\n helpTopicId: 'pop_BA_NewAdCreate_FinalURL',\r\n additionalProperties: {},\r\n customUrlProtocol: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport { result, first } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { UrlPathFluent as UrlPathFluentV1 } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { UrlPathFluent as UrlPathFluentV2 } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\n\r\nconst UrlPathFluent = withFluentSwitcher(UrlPathFluentV1, UrlPathFluentV2);\r\n\r\nconst UrlPathWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const urlPath1 = result(data, 'Path1', '');\r\n const urlPath2 = result(data, 'Path2', '');\r\n const finalUrl = first(result(data, 'FinalUrls', ['']));\r\n\r\n const onChange = useCallback((errors, value) => {\r\n updateValidation(errors, value);\r\n }, [updateValidation]);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nUrlPathWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n Path1: PropTypes.string,\r\n Path2: PropTypes.string,\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedUrlPath = withError(withCustomValidation(UrlPathWithCustomValidation));\r\n","export const getStyles = () => ({\r\n UrlContainer: {\r\n width: '435px',\r\n\r\n '& .store-url-text-container': {\r\n marginBottom: '10px',\r\n },\r\n },\r\n MobileUrlContainer: {\r\n width: '435px',\r\n marginTop: '20px',\r\n },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport { isEmpty, first, result } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Stack, Checkbox } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { UrlInputFluent as UrlInputFluentV1, getUrlPrefixAndDestination } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { UrlInputFluent as UrlInputFluentV2 } from '@bingads-webui-campaign-react/url-input-fluent-v2';\r\nimport { withFluentSwitcher } from '@bingads-webui-react/fluent-version-switcher';\r\n\r\nimport { getStyles } from './style';\r\n\r\nconst MobileUrlKey = 'MobileFinalUrls';\r\n\r\nconst UrlInputFluent = withFluentSwitcher(UrlInputFluentV1, UrlInputFluentV2);\r\n\r\nconst MobileUrlWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n helpTopicId,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const mobileFinalUrls = result(data, MobileUrlKey, [undefined]);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n const [isMobileUrlChecked, setIsMobileUrlChecked] = useState(!!mobileFinalUrl);\r\n const [cachedValue, setCachedValue] = useState(mobileFinalUrl);\r\n const [cachedErrors, setCachedErrors] = useState([]);\r\n\r\n const onCheckboxChange = useCallback((ev, checked) => {\r\n setIsMobileUrlChecked(checked);\r\n\r\n if (!checked) {\r\n setCachedValue(mobileFinalUrl);\r\n const [, urlWithoutPrefix] = getUrlPrefixAndDestination(mobileFinalUrl);\r\n updateValidation([], { [MobileUrlKey]: [] }, !isEmpty(urlWithoutPrefix));\r\n } else {\r\n // If the user never touched the Mobile Final URL fields and only flipping the checkbox,\r\n // we will not be setting isDirty. It is mostly important for the scenario where it initial value\r\n // of the URL is empty - this will avoid showing the validation error when checkbox is checked.\r\n const [, urlWithoutPrefix] = getUrlPrefixAndDestination(cachedValue);\r\n updateValidation(cachedErrors, { [MobileUrlKey]: [cachedValue] }, !isEmpty(urlWithoutPrefix));\r\n }\r\n }, [cachedErrors, cachedValue, mobileFinalUrl, updateValidation]);\r\n\r\n\r\n const onInputChange = useCallback((errors, value) => {\r\n if (mobileFinalUrl !== value) {\r\n updateValidation(errors, { [MobileUrlKey]: [value] });\r\n setCachedErrors(errors);\r\n }\r\n }, [mobileFinalUrl, updateValidation]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n
\r\n \r\n {isMobileUrlChecked && (\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nMobileUrlWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n MobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n helpTopicId: PropTypes.string,\r\n};\r\n\r\nMobileUrlWithCustomValidation.defaultProps = {\r\n helpTopicId: 'pop_BA_NewCampaignCreate_Ad_MobileURL',\r\n};\r\n\r\nexport const ValidatedMobileUrl = withError(withCustomValidation(MobileUrlWithCustomValidation));\r\n","import React, { useCallback, useContext } from 'react';\r\nimport { first, result, noop, isEmpty } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport { ActivityContext } from '@bingads-webui-react/hoc-with-signal';\r\n\r\nconst FinalURlKey = 'FinalUrls';\r\n\r\nexport const ValidatedFinalUrl= ({\r\n i18n,\r\n validationOnUrlChange,\r\n updateValidation,\r\n prepopulateUrl,\r\n validationProps,\r\n validateOnRender,\r\n helpTopicId,\r\n hideLabel,\r\n additionalProperties,\r\n customUrlProtocol,\r\n enableSpecialCharactersValidation,\r\n}) => {\r\n const { data } = validationProps;\r\n const finalUrls = result(data, FinalURlKey, undefined);\r\n const finalUrl = first(finalUrls);\r\n const createFinalUrlsViewModel = urls => ({ [FinalURlKey]: urls });\r\n\r\n const activity = useContext(ActivityContext);\r\n\r\n const onChange = useCallback((errors, value) => {\r\n updateValidation(errors, createFinalUrlsViewModel([value]), (!isEmpty(errors) && !!finalUrl));\r\n\r\n if (activity) {\r\n activity.signal(`onFinalUrlChanged - ${JSON.stringify(createFinalUrlsViewModel([value]))}`);\r\n }\r\n }, [activity, finalUrl, updateValidation]);\r\n\r\n return (\r\n \r\n {!hideLabel &&\r\n \r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nValidatedFinalUrl.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n validationOnUrlChange: PropTypes.func,\r\n prepopulateUrl: PropTypes.string,\r\n hideLabel: PropTypes.bool,\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n FinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n updateOnMount: PropTypes.bool,\r\n }).isRequired,\r\n validateOnRender: PropTypes.bool,\r\n helpTopicId: PropTypes.string,\r\n additionalProperties: PropTypes.shape({}),\r\n customUrlProtocol: PropTypes.bool,\r\n enableSpecialCharactersValidation: PropTypes.bool,\r\n};\r\n\r\nValidatedFinalUrl.defaultProps = {\r\n validationOnUrlChange: noop,\r\n prepopulateUrl: '',\r\n hideLabel: false,\r\n validateOnRender: false,\r\n helpTopicId: 'pop_BA_NewAdCreate_FinalURL',\r\n additionalProperties: {},\r\n customUrlProtocol: false,\r\n enableSpecialCharactersValidation: false,\r\n};\r\n","import { isEmpty, first } from 'underscore';\r\nimport { getDomain } from '@bingads-webui/url-util';\r\nimport { isEmptyUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\n\r\nexport const getFinalUrlCardSummaryDetails = (i18n, finalUrls) => (isEmptyUrl(finalUrls) ? i18n.getString(_TL_('No URL')) : first(finalUrls));\r\n\r\nexport const getFinalUrlWithPath = (finalUrls, path1, path2) => {\r\n const finalUrlDomain = getDomain(first(finalUrls)) || 'www.example.com';\r\n return !isEmpty(path1) && !isEmpty(path2) ? `${finalUrlDomain}/${path1}/${path2}` : finalUrlDomain;\r\n};\r\n\r\nexport const getAdvancedUrlOptionsCardSummaryDetails = (i18n, finalUrls, path1, path2, mobileFinalUrls) => {\r\n const finalUrl = first(finalUrls);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n let displayUrl = '';\r\n if (!isEmpty(path1)) {\r\n const finalUrlDomain = getDomain(finalUrl) || 'www.example.com';\r\n displayUrl = `${finalUrlDomain}/${path1}`;\r\n if (!isEmpty(path2)) {\r\n displayUrl = `${displayUrl}/${path2}`;\r\n }\r\n }\r\n const noDisplayUrl = isEmpty(displayUrl);\r\n const noMboileUrl = isEmpty(mobileFinalUrl);\r\n\r\n if (noDisplayUrl && noMboileUrl) {\r\n return i18n.getString(_TL_('No settings applied'));\r\n }\r\n\r\n const displayUrlDetails = `${i18n.getString(_TL_('Display URL'))}: ${displayUrl}`;\r\n const mobileUrlDetails = `${i18n.getString(_TL_('Mobile URL'))}: ${mobileFinalUrl}`;\r\n\r\n return `${noDisplayUrl ? '' : displayUrlDetails}${noDisplayUrl || noMboileUrl ? '' : '; '}${noMboileUrl ? '' : mobileUrlDetails}`;\r\n};\r\n","import _, { compose, partial } from 'underscore';\r\nimport { withProps } from '@bingads-webui-react/with-props';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { propertyIs, StandardControlAdapter } from '@bingads-webui-campaign-react/form-error';\r\nimport { ValidatedUrlOptionsParameters, ValidatedUrlOptionsParametersWithError } from '@bingads-webui-campaign-react/url-options';\r\n\r\nconst campaignTrackingUrlTemplate = propertyIs('TrackingUrlTemplate');\r\nconst campaignFinalUrlSuffix = propertyIs('FinalUrlSuffix');\r\nconst campaignUrlCustomParameters = propertyIs('UrlCustomParameters');\r\nconst trackingUrlTemplateControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignTrackingUrlTemplate, Adapter: StandardControlAdapter() })\r\n);\r\nconst finalUrlSuffixControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignFinalUrlSuffix, Adapter: StandardControlAdapter() })\r\n);\r\nconst urlCustomParametersControlsWrapper = compose(\r\n withControlErrorHandling,\r\n partial(withUnvalidatedControlErrors, _, { filter: campaignUrlCustomParameters, Adapter: StandardControlAdapter({ functionsToInject: ['onCustomParameterKeyChange', 'onCustomParameterValueChange', 'onRemoveUrlParameter', 'onAddUrlParameter'] }) })\r\n);\r\n\r\nexport const ValidatedUrlOptionsParameter = withControlErrorHandling(withProps({\r\n trackingUrlTemplateControlsWrapper,\r\n finalUrlSuffixControlsWrapper,\r\n urlCustomParametersControlsWrapper,\r\n}, ValidatedUrlOptionsParameters));\r\n\r\nexport const ValidatedUrlOptionsParameterWithError = withControlErrorHandling(withProps({\r\n trackingUrlTemplateControlsWrapper,\r\n finalUrlSuffixControlsWrapper,\r\n urlCustomParametersControlsWrapper,\r\n}, ValidatedUrlOptionsParametersWithError));\r\n","import React, { useCallback } from 'react';\r\nimport { first, result } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Label, Stack } from '@fluentui/react';\r\nimport { HelpPopupInline } from '@bingads-webui-react/help-popup';\r\nimport { withCustomValidation, withError } from '@bingads-webui-react/validation';\r\nimport { UrlInputFluent } from '@bingads-webui-campaign-react/url-input-fluent';\r\n\r\nconst MobileUrlKey = 'MobileFinalUrls';\r\nconst valuePrefix = ['http://', 'https://'];\r\n\r\nconst MobileUrlWithCustomValidation = ({\r\n validationProps,\r\n updateValidation,\r\n i18n,\r\n helpTopicId,\r\n validateOnRender,\r\n customizedValidation,\r\n isControlledOutside,\r\n validateOnDomain,\r\n}) => {\r\n const { data } = validationProps;\r\n\r\n const mobileFinalUrls = result(data, MobileUrlKey, [undefined]);\r\n const mobileFinalUrl = first(mobileFinalUrls);\r\n\r\n const onInputChange = useCallback((errors, value) => {\r\n const formattedValue = valuePrefix.includes(value) && validateOnDomain ? '' : value;\r\n const updatedErrors = valuePrefix.includes(value) && validateOnDomain ? [] : errors;\r\n if (mobileFinalUrl !== formattedValue || isControlledOutside) {\r\n updateValidation(updatedErrors, { [MobileUrlKey]: [formattedValue] });\r\n }\r\n }, [isControlledOutside, mobileFinalUrl, updateValidation, validateOnDomain]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nMobileUrlWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n MobileFinalUrls: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n helpTopicId: PropTypes.string,\r\n validateOnRender: PropTypes.bool,\r\n customizedValidation: PropTypes.func,\r\n isControlledOutside: PropTypes.bool,\r\n validateOnDomain: PropTypes.bool,\r\n};\r\n\r\nMobileUrlWithCustomValidation.defaultProps = {\r\n helpTopicId: 'pop_BA_NewCampaignCreate_Ad_MobileURL',\r\n validateOnRender: false,\r\n validateOnDomain: false,\r\n customizedValidation: null,\r\n isControlledOutside: false,\r\n};\r\n\r\nexport const ValidatedMobileUrlWithoutCheckbox = withError(withCustomValidation(MobileUrlWithCustomValidation));\r\n","import React, { useMemo, useContext } from 'react';\r\nimport { first } from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ValidatedPanel,\r\n TextTitle,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { propertyIs } from '@bingads-webui-campaign-react/form-error';\r\nimport { withControlErrorHandling, withUnvalidatedControlErrors } from '@bingads-webui-campaign-react/error-handling';\r\nimport { isEmptyUrl, validateAdUrl } from '@bingads-webui-campaign-react/url-input-fluent';\r\nimport MobileFinalUrlImg from '../media/mobile-url.svg';\r\nimport { ValidatedMobileUrlWithoutCheckbox } from './mobile-url-with-custom-validation';\r\n\r\nconst nativeAdMobileFinalUrlsProp = propertyIs('MobileFinalUrls');\r\nconst ServerValidatedMobileFinalUrl = withControlErrorHandling(withUnvalidatedControlErrors(ValidatedMobileUrlWithoutCheckbox, { filter: nativeAdMobileFinalUrlsProp }));\r\nconst customizedValidation = (url, requiredUrlProtocolAndDomain, i18n, urlLengthLimit, customUrlProtocol) => {\r\n if (isEmptyUrl([url])) {\r\n return null;\r\n }\r\n return validateAdUrl(url, requiredUrlProtocolAndDomain, i18n, urlLengthLimit, customUrlProtocol);\r\n};\r\n\r\nexport const MobileUrlSection = ({\r\n expand,\r\n mobileFinalUrls,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const mobileFinalUrlValidationProps = useMemo(() => ({\r\n data: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n initialValue: {\r\n MobileFinalUrls: mobileFinalUrls,\r\n },\r\n }), [mobileFinalUrls]);\r\n const mobileFinalUrlDetails = useMemo(() => (isEmptyUrl(mobileFinalUrls) ? i18n.getString(_TL_('Mobile URL: None')) : first(mobileFinalUrls)), [i18n, mobileFinalUrls]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'mobile-final-url',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n};\r\n\r\nMobileUrlSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n mobileFinalUrls: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n};\r\n","import React, { useMemo, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n ValidatedPanel,\r\n TextTitle,\r\n getPanelErrorProps,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getUrlOptionsDetails } from '@bingads-webui-campaign-react/url-options';\r\nimport { ValidatedUrlOptionsParameter } from './validated-url-options';\r\nimport UrlOptionsImg from '../media/campaign-url-options.svg';\r\n\r\nexport const URLOptionsSection = ({\r\n expand,\r\n trackingUrlTemplate,\r\n finalUrlSuffix,\r\n urlCustomParameters,\r\n token,\r\n triggerTestUurl,\r\n ...rest\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const urlOptions = useMemo(() => ({\r\n TrackingUrlTemplate: trackingUrlTemplate,\r\n FinalUrlSuffix: finalUrlSuffix,\r\n UrlCustomParameters: urlCustomParameters,\r\n }), [finalUrlSuffix, trackingUrlTemplate, urlCustomParameters]);\r\n const urlOptionsDetails = useMemo(() => getUrlOptionsDetails(i18n, urlOptions), [urlOptions, i18n]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'advanced-url-options',\r\n }}\r\n {...rest}\r\n >\r\n \r\n {i18n.getString(_TL_('Set up the tracking and redirect information for your ads.'))}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nURLOptionsSection.propTypes = {\r\n expand: PropTypes.func.isRequired,\r\n finalUrlSuffix: PropTypes.string,\r\n trackingUrlTemplate: PropTypes.string,\r\n urlCustomParameters: PropTypes.arrayOf(PropTypes.shape({})),\r\n token: PropTypes.string.isRequired,\r\n triggerTestUurl: PropTypes.func.isRequired,\r\n};\r\n\r\nURLOptionsSection.defaultProps = {\r\n finalUrlSuffix: undefined,\r\n trackingUrlTemplate: undefined,\r\n urlCustomParameters: undefined,\r\n};\r\n","import { findIndex, filter, isEmpty } from 'underscore';\r\n\r\nexport const DisplayUrlModes = [\r\n 'ManufacturerWebsiteUrl',\r\n 'WebsiteDescription',\r\n];\r\n\r\nexport const WebsiteDescriptionLanguages = [\r\n _TL_('English'),\r\n _TL_('Spanish'),\r\n];\r\n\r\nexport const WebsiteDescriptionOptions = [\r\n {\r\n key: 'PrescriptionTreatmentWebsite_Es',\r\n value: 'Sitio de tratamientos con receta',\r\n },\r\n {\r\n key: 'PrescriptionTreatmentWebsite_En',\r\n value: 'Prescription treatment website',\r\n },\r\n {\r\n key: 'PrescriptionDeviceWebsite_Es',\r\n value: 'Sitio de dispositivos con receta',\r\n },\r\n {\r\n key: 'PrescriptionDeviceWebsite_En',\r\n value: 'Prescription device website',\r\n },\r\n {\r\n key: 'MedicalDeviceWebsite_Es',\r\n value: 'Sitio de dispositivos médicos',\r\n },\r\n {\r\n key: 'MedicalDeviceWebsite_En',\r\n value: 'Medical device website',\r\n },\r\n {\r\n key: 'PreventativeTreatmentWebsite_Es',\r\n value: 'Sitio de tratamientos preventivos',\r\n },\r\n {\r\n key: 'PreventativeTreatmentWebsite_En',\r\n value: 'Preventative treatment website',\r\n },\r\n {\r\n key: 'PrescriptionContraceptionWebsite_Es',\r\n value: 'Sitio de anticonceptivos con receta',\r\n },\r\n {\r\n key: 'PrescriptionContraceptionWebsite_En',\r\n value: 'Prescription contraception website',\r\n },\r\n {\r\n key: 'PrescriptionVaccineWebsite_Es',\r\n value: 'Sitio de vacunas con receta',\r\n },\r\n {\r\n key: 'PrescriptionVaccineWebsite_En',\r\n value: 'Prescription vaccine website',\r\n },\r\n];\r\n\r\nexport const getWebsiteDescriptionList = (key) => {\r\n const index = findIndex(WebsiteDescriptionOptions, option => option.key === key);\r\n const mod = (index + 1) % 2;\r\n return {\r\n language: WebsiteDescriptionLanguages[mod],\r\n websiteDescriptions: filter(WebsiteDescriptionOptions, (option, idx) => (idx % 2) !== mod),\r\n };\r\n};\r\n\r\nexport const getWebsiteDescriptionInAnotherLanguage = (key, langIndex = 0) => {\r\n let index = findIndex(WebsiteDescriptionOptions, option => option.key === key);\r\n if (index === -1) {\r\n index = langIndex;\r\n }\r\n return WebsiteDescriptionOptions[index + ((-1) ** (index % 2))].key;\r\n};\r\n\r\nexport const isWebsiteDescriptionUnspecified = key => isEmpty(key) || key === 'Unspecified';\r\n","export const getStyles = () => ({\r\n vanityUrlOption: {\r\n '& .form-group-subset': {\r\n paddingLeft: '28px',\r\n\r\n '& .form-control-static': {\r\n marginTop: '0px',\r\n minHeight: 'unset',\r\n },\r\n },\r\n\r\n '& .website-description-options': {\r\n display: 'inline-flex',\r\n flexDirection: 'row',\r\n gap: '16px',\r\n\r\n '& select.form-control': {\r\n width: 'fit-content',\r\n paddingRight: '100px',\r\n },\r\n },\r\n\r\n '& .website-description-info': {\r\n margin: '8px 0 12px 0',\r\n },\r\n\r\n '& .language-disclaimer': {\r\n marginTop: '12px',\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/label-has-for */\r\nimport { map, result } from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { MessageBar, MessageBarType } from '@fluentui/react';\r\nimport { registerIcons } from '@fluentui/style-utilities';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive-unthemed';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n DisplayUrlModes,\r\n WebsiteDescriptionLanguages,\r\n getWebsiteDescriptionList,\r\n getWebsiteDescriptionInAnotherLanguage,\r\n isWebsiteDescriptionUnspecified,\r\n} from './options';\r\nimport { getStyles } from './styles';\r\n\r\nregisterIcons({\r\n icons: {\r\n Insights: ,\r\n },\r\n});\r\n\r\nconst messageBarStyle = {\r\n root: {\r\n background: '#EFF6FC',\r\n '& span.iconba': {\r\n fontSize: '16px',\r\n color: '#0078D4',\r\n verticalAlign: 'top',\r\n },\r\n },\r\n};\r\n\r\nexport const VanityUrlOption = ({\r\n i18n,\r\n vanityUrlSettings,\r\n onChange,\r\n}) => {\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const [displayUrlMode, setDisplayUrlMode] = useState(result(vanityUrlSettings, 'DisplayUrlMode', DisplayUrlModes[0]));\r\n const [websiteDescription, setWebsiteDescription] = useState(result(vanityUrlSettings, 'WebsiteDescription', 'Unspecified'));\r\n\r\n const languages = useMemo(() => map(WebsiteDescriptionLanguages, language => ({ key: language, value: i18n.getString(language) })), [i18n]);\r\n const { language, websiteDescriptions } = useMemo(() => getWebsiteDescriptionList(websiteDescription), [websiteDescription]);\r\n\r\n const onDisplayUrlModeChange = useCallback((e) => {\r\n setDisplayUrlMode(e.target.value);\r\n if (e.target.value === DisplayUrlModes[1] && isWebsiteDescriptionUnspecified(websiteDescription)) {\r\n setWebsiteDescription(websiteDescriptions[0].key);\r\n }\r\n }, [websiteDescription, websiteDescriptions]);\r\n\r\n const onLanguageChange = useCallback((e) => {\r\n setWebsiteDescription(getWebsiteDescriptionInAnotherLanguage(websiteDescription, e.target.selectedIndex));\r\n }, [websiteDescription]);\r\n\r\n const onWebsiteDescriptionChange = useCallback((e) => {\r\n setWebsiteDescription(e.target.value);\r\n }, []);\r\n\r\n useEffect(() => {\r\n onChange({\r\n DisplayUrlMode: displayUrlMode,\r\n WebsiteDescription: displayUrlMode === DisplayUrlModes[0] ? 'Unspecified' : websiteDescription,\r\n });\r\n }, [displayUrlMode, onChange, websiteDescription]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
{i18n.getString(_TL_('The Final URL will appear in your ad.'))}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
{i18n.getString(_TL_('A description of your website will appear in your ad instead of a URL. When potential customers click the website description, they will be taken to your Final URL. Choose a website description from the dropdown menu.'))}
\r\n \r\n {i18n.getString(_TL_('Recommended for pharmaceutical ads.'))}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nVanityUrlOption.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n vanityUrlSettings: PropTypes.shape({\r\n DisplayUrlMode: PropTypes.oneOf(DisplayUrlModes),\r\n WebsiteDescription: PropTypes.string,\r\n }),\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n\r\nVanityUrlOption.defaultProps = {\r\n vanityUrlSettings: {\r\n DisplayUrlMode: DisplayUrlModes[0],\r\n WebsiteDescription: 'Unspecified',\r\n },\r\n};\r\n"],"names":["palette","getTheme","styles","root","selectors","color","themePrimary","fontWeight","paddingLeft","marginLeft","display","gridTemplateColumns","paddingRight","gridColumn","width","overflowWrap","marginTop","gridColumnStart","neutralPrimary","backgroundColor","fontSize","margin","themeDarker","adFieldLengthLimitMap","TrackingUrlTemplate","FinalUrlSuffix","UrlCustomParametersKey","UrlCustomParametersValue","checkAdFieldLengthLimit","value","key","_","validateFinalUrlSuffix","finalUrlSuffix","i18n","errors","firstChar","push","Property","Message","getString","_TL_","maxlength","test","tag","indexOf","validateTrackingUrlTemplate","trackingUrlTemplate","hasScheme","invalidChars","validateUrlCustomParameters","urlCustomParameters","_ref2","index","Key","Value","Index","c","keys","_ref3","toLowerCase","length","Error","props","property","filteredErrors","useMemo","error","undefined","_jsx","role","className","children","Code","defaultProps","legacyStrings","UURLTestTool_Url_Expand_Button","UURLTestTool_Url_Collapse_Button","LearnMore","UURLTestTool_Title_ServingURL","UURLTestTool_Title_TrackingTemplate","UURLTestTool_Title_FinalURLSuffix","UURLTestTool_Title_FinalURL","UURLTestTool_Title_AttributeUsed","UURLTestTool_Note_Title","UURLTestTool_Note","UURLTestTool_With_ParallelTracking","UURLTestTool_LandingPage_URL","UURLTestTool_Tracking_URL","UURLTestTool_When_ParallelTracking_Is_Not_Supported","UURLTestTool_Title_TrackingTemplate_Colon","UURLTestTool_Title_TrackingTemplate_None","UURLTestTool_ClickURLs","UURLTestTool_Status","UURLTestTool_AdGroup","UURLTestTool_Test_Button","UURLTestTool_Test_Inprogress","UURLTestTool_Result_ShowDetails","UURLTestTool_From","UURLTestTool_NA","UURLTestTool_Result_Found","UURLTestTool_Result_NotFound","UURLTestTool_Result_Mismatch","UURLTestTool_Result_Unreachable","UURLTestTool_Result_Unknown","UURLTestTool_Result_UserInputError","UURLTestTool_Result_NoEligibleUrlsFound","UURLTestTool_Result_TestComplete","UURLTestTool_TrackingCall_Successful","UURLTestTool_TrackingCall_Unsuccessful","Unkown","Entity_Account","Entity_Campaign","Entity_Adgroup","Entity_Ads","Entity_Keywords","Entity_SitelinkExtensions","Popup_Close","TRACKING_URL_TEMPLATE","FINAL_URL_SUFFIX","URL_CUSTOM_PARAMETERS","Validators","_defineProperty","ValidatorsStringOnly","isTrackingUrlTemplateRequired","arguments","TrackingUrlTemplateControls","_ref","id","onChange","formErrors","_jsxs","_Fragment","TextField","FinalUrlSuffixControls","UrlCustomParametersControls","customParameters","onCustomParameterKeyChange","onCustomParameterValueChange","onRemoveUrlParameter","onAddUrlParameter","Stack","tokens","childrenGap","map","_ref4","concat","ariaLabel","event","IconButton","iconProps","iconName","onClick","size","ActionButton","UrlOptionsParameters","_ref5","instrumentation","enableSelfValidation","disableLengthConstraints","showFinalUrlSuffix","showCustomParameters","showUurlTestTool","token","triggerTestUurl","isControlledOutside","trackingUrlTemplateControlsWrapper","finalUrlSuffixControlsWrapper","urlCustomParametersControlsWrapper","isWithError","legacyI18n","buildLegacyI18n","trackingUrlTemplateId","getId","finalUrlSuffixId","_useState","useState","_useState2","_slicedToArray","cachedTrackingUrlTemplate","setCachedTrackingUrlTemplate","_useState3","_useState4","cachedFinalUrlSuffix","setCachedFinaUrlSuffix","_useState5","_useState6","cachedCustomeParameters","setCachedCustomParameters","_useState7","_useState8","setFormErrors","useEffect","onValidate","useCallback","newErrors","filter","_newErrors","errorsArray","apply","_toConsumableArray","_newErrors2","onTrackingUrlTemplateChange","onFinalUrlSuffixChange","cloneDeep","splice","isEmpty","urlTestTool","UrlTestTool","urlTestToolContainerRef","node","append","render","el","TrackingUrlTemplateControlsWrapped","FinalUrlSuffixControlsWrapped","UrlCustomParametersControlsWrapped","Label","htmlFor","horizontal","HelpPopupInline","topic","ref","defaultStyles","noop","identity","UrlOptionsParametersWithCustomValidation","onChangeFromProps","updateValidation","validationProps","restProps","_objectWithoutProperties","_excluded","data","newValue","_objectSpread","isFunction","UrlCustomParameters","ValidatedUrlOptionsParameters","withCustomValidation","UrlOptionsParametersWithError","_excluded2","useContext","I18nContext","ValidatedUrlOptionsParametersWithError","withError","getUrlOptionsDetails","urlOptions","details","params","join","TARGET_TYPE","TARGET_TYPE_MAP","URL","PAGE_TITLE","PAGE_CONTENT","CATEGORY","CUSTOM_LABEL","CONDITION_OPERATOR","RULE_SEPERATOR","RULE_TYPE","getTargetStrings","rule","firstTarget","TargetCondition1","isCustomLabel","values","forEach","target","formattedValue","extractTargetsFromViewModel","assetGroupUrlRules","urlTargets","isCategoryOrCustomLabel","getPlaceHolderText","selectedTargetType","getUrlRulesEditorStyle","rulesInputInnerContainer","flexDirection","padding","minWidth","height","alignItems","gap","paddingTop","borderRadius","cardHeader","borderBottom","paddingBottom","spacingVerticalS","marginBottom","verticalSpacing","shorthands","rulesListItem","spacingHorizontalXS","ruleCard","flex","UrlRulesEditor","urlRules","isOpen","onClose","useDefaultStyles","newAssetGroupUrlRules","setNewAssetGroupUrlRules","conditions","setConditions","errorMessages","setErrorMessages","isCustomLabelType","isAnyConditionEmpty","some","_ref2$condition","condition","trim","onAddRuleButtonClick","onCreateRuleButtonClick","trimmedCondition","existingRule","Object","every","targetTypeDropdownOptions","text","type","renderMessageBar","MessageBar","MessageBarBody","renderTargetTypeDropdownOptions","option","Option","renderTargetTypeDropdownOptionsByType","disabled","renderRulesInput","conditionInput","_ref4$condition","classnames","Combobox","selectedOptions","onOptionSelect","newConditions","optionValue","Text","inputContainer","Field","validationState","validationMessage","Input","placeholder","maxLength","prevMessages","newErrorMessages","updateValue","Button","appearance","icon","Delete24Regular","removeTargetTag","targetString","newRules","renderTargets","targets","Card","CardHeader","header","Delete16Regular","weight","onSave","AssetGroupUrlTargets","renderDrawerFooter","Drawer","open","onOpenChange","position","DrawerHeader","DrawerHeaderTitle","action","Dismiss24Regular","DrawerBody","CardFooter","Add24Regular","messages","DrawerFooter","enableSpecialCharactersValidation","useUrlRulesPreviewStyles","makeStyles","overflowItem","spacingVerticalXS","overflowCount","marginRight","OverflowPlaceholder","_useOverflowMenu","useOverflowMenu","isOverflowing","UrlRulesPreview","isSingleRow","renderPreview","Overflow","overflowAxis","minimumVisible","OverflowItem","Tag","MIN_VISIBLE_ROWS","JSON","stringify","renderPreviewRow","useUrlRulesStyles","title","urlRulesEditButton","UrlRulesImpl","isUrlRulesEditorOn","setIsUrlRulesEditorOn","onOpenUrlRulesEditor","onCloseUrlRulesEditor","renderEditor","renderCreateRulesButton","UrlRules","activity","ActivityContext","newData","signal","ValidatedUrlRules","getSummaryStyle","advancedUrlOptionsSummaryContainer","UrlOptionsDetailsWithRules","finalUrls","path1","path2","mobileFinalUrls","finalUrl","first","mobileFinalUrl","displayUrl","finalUrlDomain","getDomain","noDisplayUrl","noMboileUrl","noUrlRules","noSettingsApplied","urlPathText","renderRulesSummary","URL_RULES_OPTIONS","All","Rules","Labels","INPUT_VALIDATION_SCHEMA","name","properties","ruleInput1","ruleInput2","ruleInput3","targetMapping","get","Boolean","pageTitleTargets","pageContentTargets","categoryTargets","customLabelTargets","getUrlRulesOption","_extractTargetsFromVi","urlRulesOption","TagWithTooltip","content","isOverflow","setIsOverflow","isTooltipVisible","setIsTooltipVisible","tagRef","useRef","current","clientWidth","scrollWidth","Tooltip","relationship","withArrow","visible","onVisibleChange","ev","ValidatedInput","withValidation","getCustomLabelsEditorStyle","_ref$palette","sectionsContainer","border","rulesInputOuterContainer","borderWidth","textAlign","flexShrink","flexGrow","redDark","rulesResultContainer","borderTop","justifyContent","lineHeight","flexWrap","neutralSecondary","maxWidth","overflow","textWrap","textOverflow","CustomLabelsEditor","field","result","newInput","message","targetType","renderCustomLabelTargetTags","customLabelRules","renderPanelFooter","PrimaryButton","DefaultButton","Panel","headerText","closeButtonAriaLabel","onDismiss","onRenderFooterContent","isFooterAtBottom","PanelType","medium","ValidationGroup","schema","alignSelf","optionText","unsafeCharacterErrorMessage","_useMemo","setSelectedTargetType","Dropdown","options","onRenderOption","selectedKey","renderTargetTags","label","newUrlRules","previewContainer","previewRow","overflowContainer","overflowX","whiteSpace","titleText","iconImg","description","src","alt","renderPreviewRows","UrlsImage","radioGroupContainer","radioOptionContainer","radioOptionLabelContainer","isCustomLabelEditorOn","setIsCustomLabelEditorOn","onOpenCustomLabelEditor","onCloseCustomLabelEditor","renderTargetAllOption","Radio","renderUrlRulesOption","mergeClasses","renderCustomLabelsOption","onRadioChange","UrlRulesOption","RadioGroup","_validationProps$data","DummyIsOptionalComponent","isOptional","setIsOptional","propTypes","PropTypes","isRequired","DummyIsOptionalValidationItem","countTextAssets","collectionObj","_ref$countEmpty","countEmpty","chain","textValue","hasTextAssets","headlines","longHeadlines","descriptions","collectionSummary","element","collection","displayText","displayTextSingular","count","itemText","collectionCount","getTextCardSummaryDetails","collectionsSummary","summaryDetails","getTextCardSummaryDetailsForCollection","getHeadlinesCardSummaryDetails","getLongHeadlinesCardSummaryDetails","getDescriptionsCardSummaryDetails","registerIcons","icons","viewBox","fill","xmlns","d","ValidationGroupWithMessage","withControlErrorHandling","withContainerErrors","UnvalidatedTextAssetCollection","React","labelAction","overrideInputNode","minCollectionSize","maxCollectionSize","labelText","labelId","helpPopupTopic","helpPopupAriaLabel","placeholderText","fieldName","singleAssetValidationPropsField","validationPropsField","addButtonText","formErrorProps","renderWrapperFunction","errorMessage","duplicateErrorMessage","externalErrorMessages","showAddButton","hideAddButtonWhenLimitReached","getCustomErrorMessage","styleOverrides","alwaysShowError","showDeleteButton","onDeleteTextAsset","deleteButtonLabel","renderInlineCopilot","enableCustomizer","withDeleteIconDisabled","getStylesWithOverrides","merge","TextAssetContainer","labelContainer","WithFlexButtons","TextAssetsCollectionContainer","AddAssetButton","getStyles","classes","initialValue","numberOfPreloadedAssets","i","deriveValue","assetsToRender","onDeleteAsset","deletedValue","newValidationPropsField","itemKey","renderItem","itemValue","additionalTextFieldProps","ValidatedTextFieldWithAdCustomizer","configProps","RemainingCharsValidatedTextField","CommandButton","textAssetFields","hideAddButton","onAddAsset","validationResult","customErrors","assets","isOptionalRef","dummyItemValidationProps","IsOptional","validator","changed","list","groupErrors","min","items","item","hasEnoughNonEmptyValues","uniq","hasDuplicateValues","reduce","errorFilter","stopPropagation","passiveMessages","showErrorOnPassiveMessages","HelpPopup","style","allowDisabledFocus","FinalURlKey","ValidatedFinalUrl","validationOnUrlChange","prepopulateUrl","validateOnRender","helpTopicId","hideLabel","additionalProperties","customUrlProtocol","createFinalUrlsViewModel","urls","url","additionalValidation","dropdownOptionAriaLabel","propertyKey","containerClassName","textFieldAriaLabel","FinalUrls","updateOnMount","UrlPathFluent","withFluentSwitcher","UrlPathFluentV1","UrlPathFluentV2","ValidatedUrlPath","urlPath1","urlPath2","verticalAlign","UrlContainer","MobileUrlContainer","MobileUrlKey","UrlInputFluent","UrlInputFluentV1","UrlInputFluentV2","MobileUrlWithCustomValidation","isMobileUrlChecked","setIsMobileUrlChecked","cachedValue","setCachedValue","cachedErrors","setCachedErrors","onCheckboxChange","checked","_getUrlPrefixAndDesti3","getUrlPrefixAndDestination","urlWithoutPrefix","_getUrlPrefixAndDesti","onInputChange","classNames","Checkbox","ValidatedMobileUrl","getFinalUrlCardSummaryDetails","isEmptyUrl","getFinalUrlWithPath","getAdvancedUrlOptionsCardSummaryDetails","displayUrlDetails","mobileUrlDetails","campaignTrackingUrlTemplate","propertyIs","campaignFinalUrlSuffix","campaignUrlCustomParameters","compose","partial","withUnvalidatedControlErrors","Adapter","StandardControlAdapter","functionsToInject","ValidatedUrlOptionsParameter","withProps","ValidatedUrlOptionsParameterWithError","valuePrefix","customizedValidation","validateOnDomain","includes","updatedErrors","ValidatedMobileUrlWithoutCheckbox","nativeAdMobileFinalUrlsProp","ServerValidatedMobileFinalUrl","requiredUrlProtocolAndDomain","urlLengthLimit","validateAdUrl","MobileUrlSection","expand","rest","mobileFinalUrlValidationProps","MobileFinalUrls","mobileFinalUrlDetails","ValidatedPanel","TextTitle","titleKey","topicKey","MobileFinalUrlImg","attentionBeaconProps","getExtraProps","getPanelErrorProps","actuationProps","expandKey","URLOptionsSection","urlOptionsDetails","UrlOptionsImg","DisplayUrlModes","WebsiteDescriptionLanguages","WebsiteDescriptionOptions","vanityUrlOption","minHeight","Insights","Glyphicon","glyph","messageBarStyle","background","VanityUrlOption","vanityUrlSettings","displayUrlMode","setDisplayUrlMode","websiteDescription","setWebsiteDescription","languages","language","mod","findIndex","websiteDescriptions","idx","getWebsiteDescriptionList","onDisplayUrlModeChange","e","onLanguageChange","langIndex","Math","pow","getWebsiteDescriptionInAnotherLanguage","selectedIndex","onWebsiteDescriptionChange","DisplayUrlMode","WebsiteDescription","messageBarIconProps","messageBarType","MessageBarType","info","hidden","lang"],"sourceRoot":""}