{"version":3,"file":"static/js/application.async.landing~c2eb9e23.76815355.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});\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 } = 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 return (\r\n
\r\n { renderPreview() }\r\n
\r\n );\r\n};\r\n\r\nUrlRulesPreview.propTypes = {\r\n urlRules: PropTypes.arrayOf(PropTypes.shape({})).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 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, 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","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","OverflowPlaceholder","_useOverflowMenu","useOverflowMenu","isOverflowing","UrlRulesPreview","renderPreview","Overflow","overflowAxis","minimumVisible","OverflowItem","Tag","MIN_VISIBLE_ROWS","JSON","stringify","useUrlRulesStyles","title","urlRulesEditButton","UrlRulesImpl","isUrlRulesEditorOn","setIsUrlRulesEditorOn","onOpenUrlRulesEditor","onCloseUrlRulesEditor","renderEditor","renderCreateRulesButton","UrlRules","activity","ActivityContext","newData","signal","ValidatedUrlRules","getSummaryStyle","advancedUrlOptionsSummaryContainer","finalUrls","path1","path2","mobileFinalUrls","finalUrl","first","mobileFinalUrl","displayUrl","finalUrlDomain","getDomain","noDisplayUrl","noMboileUrl","noUrlRules","noSettingsApplied","urlPathText","_extractTargetsFromVi","targetMapping","get","Boolean","pageTitleTargets","pageContentTargets","categoryTargets","customLabelTargets","renderRulesSummary","URL_RULES_OPTIONS","All","Rules","Labels","INPUT_VALIDATION_SCHEMA","name","properties","ruleInput1","ruleInput2","ruleInput3","getUrlRulesOption","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","renderPreviewRow","iconImg","description","src","alt","renderPreviewRows","UrlsImage","radioGroupContainer","radioOptionContainer","radioOptionLabelContainer","isCustomLabelEditorOn","setIsCustomLabelEditorOn","onOpenCustomLabelEditor","onCloseCustomLabelEditor","renderTargetAllOption","Radio","renderUrlRulesOption","mergeClasses","renderCustomLabelsOption","onRadioChange","UrlRulesOption","RadioGroup","_validationProps$data","UrlOptionsDetailsWithRules","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":""}