{"version":3,"file":"static/js/application.async.landing~4eda942d.e2f5795c.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign/hooks/src/use-did-update.js","../../../node_modules/@bingads-webui-campaign/hooks/src/use-constructor.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/campaign-name.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/adgroup-name.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/base-bid.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/adgroup-basic.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/default-value.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/get-targets-criterion.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/util.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/advanced-settings.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/adgroup-targets.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/components/title.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/shared.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/style.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/creation.js","../../../node_modules/@bingads-webui-campaign/hotel-adgroup-upsert/src/settings.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/bid-strategy/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/bid-strategy/bid-strategy.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/budget/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/budget/budget.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/default-value.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/campaign-basic.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/advanced-settings.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/campaign-targets.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/components/title.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/get-targets-criterion.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/util.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/shared.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/style.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/creation.js","../../../node_modules/@bingads-webui-campaign/hotel-campaign-upsert/src/settings.js","../../../node_modules/@bingads-webui-campaign/hotel-center-service/src/bulk-edit-params.js","../../../node_modules/@bingads-webui-campaign/hotel-center-service/src/grid-option-utils.js","../../../node_modules/@bingads-webui-campaign/hotel-center-service/index.js","../../../node_modules/@bingads-webui-campaign/hotel-center-service/src/account-service.js","../../../node_modules/@bingads-webui-campaign/hotel-center-service/src/bulk-edit-service.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/light-dismissible/light-dismissible.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/single-multiplier-view/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/bid-multipliers-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/check-in-day/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/device-type/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/length-of-stay/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/user-country/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/date-filter/projection-grid-date-filter.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/option.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/selector.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/pagination.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/search.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/dropdown-search-selector.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/instrumentation/schema.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/instrumentation/error-codes.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/instrumentation/setup.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/instrumentation/perf-timing.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/js-data-bhc/edm-bhc.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/js-data-bhc/js-data-extension.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/index.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/account-information-view/account-information-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-cap-view/bid-cap-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-strategy-view/bid-strategy-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/edit-panel-view/edit-panel-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/service/fetch-preference-config.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/hotel-group-information-view/information-view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/hotel-group-model/hotel-group-model.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/hotel-model/hotel-model.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/instrumentation/index.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/user-country/user-country-service.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/sub-account-model/sub-account-model.js","../../../node_modules/@bingads-webui-campaign/hotel-center-utils/src/bid-multiplier-utils.js","../../../node_modules/@bingads-webui-campaign/hotel-center-utils/index.js","../../../node_modules/@bingads-webui-campaign/hotel-center-utils/src/bid-utils.js","../../../node_modules/@bingads-webui-campaign/hotel-center-utils/src/date-utils.js","../../../node_modules/@bingads-webui-campaign/hotel-center-utils/src/inline-download-utils.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/shared.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/advanced-booking-window-target-setting/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/length-of-stay-target-setting/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/check-in-date-target-setting/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/bid-adjustment.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/common-textfield.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/generate-column.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/components/detail-list.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/style.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/grid-target-base.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/advanced-booking-window-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/advanced-booking-window-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/check-in-day-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/check-in-day-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/user-set-dates-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/user-set-dates-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/check-in-date-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/check-in-date-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/length-of-stay-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/length-of-stay-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/device-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/device-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/location-target-setting/basic-config.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/location-target-setting/grid.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/location-target-setting/index.js","../../../node_modules/@bingads-webui-campaign/hotel-common-targets/src/location-target-setting/data-converter.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/shared.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/ad-schedule/ad-schedule.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/override-error.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/audience-ads/utility.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/audience-ads/audience-ads.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/base-exclusions/base-exclusions.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/url-options/style.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/url-options/url-options.js","../../../node_modules/@bingads-webui-campaign/hotel-common-upsert/src/components/ad-format/ad-format.js","../../../node_modules/@bingads-webui-campaign/image-experience-proptypes/src/image-model-proptypes.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-cropped-image.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/validate-crop-settings.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-smart-cropped-image.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-generic-image-object.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-media-placement-type.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/update-placement-with-bulk-crop-settings.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/image-size-validation.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-expanded-image.js","../../../node_modules/@bingads-webui-campaign/image-experience-utils/src/get-asset-enhancement-settings.js","../../../node_modules/@bingads-webui-campaign/image-odata/src/bulkify.js","../../../node_modules/@bingads-webui-campaign/image-odata/src/image-odata.js","../../../node_modules/@bingads-webui-campaign/inline-chart-service/src/constants.js","../../../node_modules/@bingads-webui-campaign/inline-chart-service/src/inline-chart-request.js","../../../node_modules/@bingads-webui-campaign/inline-chart-service/src/inline-chart-service.js","../../../node_modules/@bingads-webui-campaign/inline-chart-wrapper/src/inline-chart-wrapper.js","../../../node_modules/@bingads-webui-campaign/inline-chart-wrapper/src/inline-chart-view.js","../../../node_modules/@bingads-webui-campaign/inline-download-base-download-v1/src/js/view/baseDownload.js","../../../node_modules/@bingads-webui-campaign/inline-download-base-download-v1/src/js/viewmodel/gridDownload.js","../../../node_modules/@bingads-webui-campaign/inline-download-campaign-odata-repository/src/util.js","../../../node_modules/@bingads-webui-campaign/inline-download-campaign-odata-repository/src/download-report.js","../../../node_modules/@bingads-webui-campaign/inline-download-campaign-odata-repository/src/poller.js","../../../node_modules/@bingads-webui-campaign/inline-download-campaign-odata-repository/src/repository.js","../../../node_modules/@bingads-webui-campaign/inline-download-campaign-odata-repository/src/update-report.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/util.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/frequency.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/hour.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/daily-extra.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/day-of-week.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/weekly-extra.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/day-of-month.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/monthly-extra.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/extra.js","../../../node_modules/@bingads-webui-campaign/inline-download-cron-editor/src/cron-editor.js","../../../node_modules/@bingads-webui-campaign/inline-download-email-frequency-editor/src/email-frequency-editor.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/form-group.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/v1-part.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/email-and-schedule-report.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/save-as-custom-report.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/form.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/v2-part.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/js/view/baseDownload.js","../../../node_modules/@bingads-webui-campaign/inline-download-form/src/js/view/baseDownloadReact.js","../../../node_modules/@bingads-webui-campaign/inline-download-select/src/dropdown.js","../../../node_modules/@bingads-webui-campaign/inline-download-select/src/select.js","../../../node_modules/@bingads-webui-campaign/inline-download-select/src/multi-level-select.js","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/base-location-recommendation-model.js","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/model.js","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/view.js","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/inline-location-recommendation-dialog.js","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/inline-location-recommendation-panel.js","../../../node_modules/@bingads-webui-campaign/inline-opportunity-style/src/style.js","../../../node_modules/@bingads-webui-campaign/invest-image-data-service/src/invest-image-data-service.js","../../../node_modules/@bingads-webui-campaign/ko-stop-binding/src/ko-stop-binding.js","../../../node_modules/@bingads-webui-campaign/linkedin-delivery-status-column/src/request-permission.js","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/location.js","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/impression.js","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/dismiss.js","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/campaign.js","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/view.js","../../../node_modules/@bingads-webui-campaign/media-common-utils/src/aspect-ratio-config.js","../../../node_modules/@bingads-webui-campaign/media-common-utils/src/effect-options-config.js","../../../node_modules/@bingads-webui-campaign/media-common-utils/src/editor-title.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/base-validator.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/type-validator.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/custom/validate-color.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/custom-validator.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/index.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/enum-validator.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/property-validators/effect-key-validator.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/image-metadata-schema.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/validate-schema.js","../../../node_modules/@bingads-webui-campaign/media-metadata-model/src/image-metadata.js","../../../node_modules/@bingads-webui-campaign/media-repository/src/data-service.js","../../../node_modules/@bingads-webui-campaign/media-repository/src/generate-schema.js","../../../node_modules/@bingads-webui-campaign/media-repository/src/repository.js","../../../node_modules/@bingads-webui-campaign/media-repository/src/poller.js","../../../node_modules/@bingads-webui-campaign/media-repository/src/response-util.js","../../../node_modules/@bingads-webui-campaign/multi-language-selector/src/viewmodel.js","../../../node_modules/@bingads-webui-campaign/multi-language-selector/src/view.js","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/account-information-view/account-information-view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-cap-view/bid-cap-view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/bid-multipliers-view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/check-in-day/view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/device-type/view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/length-of-stay/view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/single-multiplier-view/view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-multipliers-view/user-country/view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/bid-strategy-view/bid-strategy-view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/dropdown-search-selector-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/option-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/pagination-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/search-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/dropdown-search-selector/selector-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/edit-panel-view/edit-panel-view-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/hotel-group-information-view/information-template.pug","../../../node_modules/@bingads-webui-campaign/hotel-center-shared/src/template/toolbar-template.pug","../../../node_modules/@bingads-webui-campaign/inline-download-base-download-v1/src/template/gridDownload.pug","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/inline-template.pug","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/location-grid-account-template.pug","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/location-grid-campaign-template.pug","../../../node_modules/@bingads-webui-campaign/inline-location-recommendation/src/location-grid-template.pug","../../../node_modules/@bingads-webui-campaign/linkedin-delivery-status-column/src/request-permission-template.pug","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/dismiss-column-template.pug","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/column/location-column-template.pug","../../../node_modules/@bingads-webui-campaign/location-recommendation-grid/src/template.pug","../../../node_modules/@bingads-webui-campaign/multi-language-selector/src/template.pug","../../../node_modules/@bingads-webui-campaign/hotel-column-chooser/src/style.js","../../../node_modules/@bingads-webui-campaign/hotel-column-chooser/src/BackboneWrapper.js","../../../node_modules/@bingads-webui-campaign/hotel-column-chooser/src/ColumnChooser.tsx","../../../node_modules/@bingads-webui-campaign/hotel-column-chooser/src/RemoveDialog.tsx","../../../node_modules/@bingads-webui-campaign/hotel-column-chooser/src/useColumnChooser.tsx"],"sourcesContent":["import { useRef, useEffect } from 'react';\r\n\r\nexport function useDidUpdate(callback, deps) {\r\n const isMounted = useRef();\r\n\r\n useEffect(() => {\r\n if (!isMounted.current) {\r\n // do componentDidMount logic\r\n isMounted.current = true;\r\n } else {\r\n // do componentDidUpdate logic\r\n callback();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, deps);\r\n}\r\n","import { useState } from 'react';\r\n\r\nexport function useConstructor(callback) {\r\n const [v, setV] = useState(() => callback());\r\n return [v, setV];\r\n}\r\n","\r\nimport React, { useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Label } from '@bingads-webui-react/fabric-control';\r\n\r\nconst getStyles = () => ({\r\n CampaignName: {\r\n },\r\n});\r\n\r\nexport const CampaignName = React.memo((props) => {\r\n const {\r\n campaignName,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getStyles);\r\n return (\r\n
\r\n \r\n
\r\n {campaignName}\r\n
\r\n
);\r\n});\r\n\r\nCampaignName.propTypes = {\r\n campaignName: PropTypes.string.isRequired,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { globalErrorMsg, isAdFormatValid } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { withVerticalAlignCenterSpan, Errors, getNameErrorMsg, ErrorString, validateName, checkShouldShowError, checkShouldShowErrors } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nconst maxLength = 256;\r\nexport const isAdgroupNameValid = name => validateName({ name, maxLength }) == null;\r\n\r\nexport const getAdGroupNameErrorMessage = (name, adFormat) => {\r\n if (checkShouldShowErrors(name)) {\r\n return globalErrorMsg;\r\n }\r\n if (!isAdgroupNameValid(name.value)) {\r\n if (checkShouldShowError(name)) {\r\n return globalErrorMsg;\r\n }\r\n }\r\n if (!isAdFormatValid(adFormat)) {\r\n if (checkShouldShowError(adFormat)) {\r\n return globalErrorMsg;\r\n }\r\n }\r\n return '';\r\n};\r\n\r\nexport const defaultName = undefined;\r\n\r\nexport const AdgroupName = React.memo((props) => {\r\n const {\r\n adgroupName,\r\n setAdgroupName,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const adgroupNameText = i18n.getString(_TL_('Ad group name'));\r\n const error = getNameErrorMsg({ code: validateName({ name: adgroupName.value, maxLength }), i18n, maxLength });\r\n const shouldShowError = checkShouldShowError(adgroupName);\r\n return (\r\n
\r\n ())}\r\n onChange={(e, value) => {\r\n setAdgroupName({\r\n value,\r\n isDirty: true,\r\n });\r\n }}\r\n styles={{ fieldGroup: { width: 461, marginTop: '8px' } }}\r\n />\r\n {shouldShowError && error && }\r\n {checkShouldShowErrors(adgroupName) && x.message)} />}\r\n
\r\n );\r\n});\r\n\r\nAdgroupName.propTypes = {\r\n adgroupName: PropTypes.string,\r\n setAdgroupName: PropTypes.func.isRequired,\r\n};\r\n\r\nAdgroupName.defaultProps = {\r\n adgroupName: undefined,\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useContext, Fragment } from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { TextField, Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport { getBidErrorMsg, validateNumber, getAccountCurrencyCode, globalErrorMsg, bidStrategyOptionKeys, Disclaimer } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ErrorString, checkShouldShowError, } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nexport const bidFields = {\r\n commissionRate: 'commissionRate',\r\n percentCpcBid: 'percentCpcBid',\r\n searchBid: 'searchBid',\r\n};\r\n\r\nexport const getBaseBidMinMax = ({ bidStrategyType, serverContext }) => {\r\n const min = (serverContext && serverContext.KeywordBidRange && serverContext.KeywordBidRange.FloorValue) || 0.01;\r\n const max = (serverContext && serverContext.KeywordBidRange && serverContext.KeywordBidRange.CeilingValue) || 1000;\r\n // align the range with search ad group campaign as MT create it with the same flow.\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.Commission:\r\n return { min: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').FloorValue, max: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').CeilingValue };\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return { min: appConfig.get('KeywordPercentCpcBidRange') && appConfig.get('KeywordPercentCpcBidRange').FloorValue, max: appConfig.get('KeywordPercentCpcBidRange') && appConfig.get('KeywordPercentCpcBidRange').CeilingValue };\r\n case bidStrategyOptionKeys.ManualCpc:\r\n default:\r\n return { min, max };\r\n }\r\n};\r\n\r\nexport const validateBaseBid = ({\r\n baseBid, bidStrategyType, min, max,\r\n}) => {\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.Commission:\r\n return validateNumber({\r\n value: baseBid.commissionRate, min, max, notRequired: true, digitLength: 2, notIncludeMin: true,\r\n });\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return validateNumber({\r\n value: baseBid.percentCpcBid, min, max, digitLength: 2, notIncludeMin: true,\r\n });\r\n case bidStrategyOptionKeys.ManualCpc:\r\n default:\r\n return validateNumber({\r\n value: baseBid.searchBid, min, max, digitLength: 2,\r\n });\r\n }\r\n};\r\n\r\nexport const isBaseBidValid = ({ baseBid, bidStrategyType, serverContext }) => validateBaseBid({ baseBid, bidStrategyType, ...getBaseBidMinMax({ bidStrategyType, serverContext }) }) == null;\r\nexport const getBaseBidErrorMessage = ({ baseBid, bidStrategy, serverContext }) => {\r\n const bidStrategyType = bidStrategy && bidStrategy.option;\r\n if (!isBaseBidValid({ baseBid, bidStrategyType, serverContext }) && checkShouldShowError(baseBid)) {\r\n return globalErrorMsg;\r\n }\r\n return '';\r\n};\r\n\r\nexport const getBaseBidTitleDetails = (i18n, baseBid, bidStrategy, accountCurrencyCode) => {\r\n const bidStrategyType = bidStrategy && bidStrategy.option;\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.Commission:\r\n return `${i18n.getString(_TL_('Commission rate: '))}${baseBid.commissionRate || bidStrategy.Commission || ''}%`;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return `${i18n.getString(_TL_('Percent bid: '))}${baseBid.percentCpcBid || ''}%`;\r\n case bidStrategyOptionKeys.ManualCpc:\r\n default:\r\n return `${i18n.getString(_TL_('Bid: '))}${baseBid.searchBid || ''} ${accountCurrencyCode}`;\r\n }\r\n};\r\n\r\nconst getStyles = () => ({\r\n baseBid: {\r\n '& .subtitle': {\r\n marginBottom: '28px',\r\n fontSize: '20px',\r\n },\r\n '& .dashline': {\r\n borderBottom: '1px solid',\r\n width: '100%',\r\n margin: '24px 0',\r\n },\r\n '& .alert': {\r\n marginTop: '8px',\r\n },\r\n },\r\n});\r\n\r\nconst BidOrPercent = (props) => {\r\n const {\r\n title,\r\n field,\r\n baseBid,\r\n setBaseBid,\r\n childPart,\r\n } = props;\r\n return (\r\n \r\n \r\n \r\n {\r\n setBaseBid({\r\n [field]: value,\r\n isDirty: true,\r\n });\r\n }}\r\n styles={{ fieldGroup: { width: 110 } }}\r\n className={field}\r\n />\r\n {childPart()}\r\n \r\n \r\n );\r\n};\r\n\r\nBidOrPercent.propTypes = {\r\n baseBid: PropTypes.shape({}),\r\n setBaseBid: PropTypes.func.isRequired,\r\n title: PropTypes.string.isRequired,\r\n field: PropTypes.string.isRequired,\r\n childPart: PropTypes.func.isRequired,\r\n};\r\n\r\nBidOrPercent.defaultProps = {\r\n baseBid: {\r\n value: undefined,\r\n isDirty: false,\r\n },\r\n};\r\n\r\nconst CampaignBidInput = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n bidStrategy,\r\n } = props;\r\n const bidStrategyType = bidStrategy && bidStrategy.option;\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.Commission:\r\n return (\r\n
\r\n \r\n
\r\n {`${bidStrategy.Commission}%`}\r\n
\r\n
\r\n );\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\n\r\nCampaignBidInput.propTypes = {\r\n bidStrategy: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nCampaignBidInput.defaultProps = {\r\n};\r\n\r\n\r\nconst BidInput = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n const {\r\n baseBid,\r\n setBaseBid,\r\n bidStrategyType,\r\n } = props;\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.Commission:\r\n return (\r\n (%)\r\n }\r\n />);\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return (\r\n (%)\r\n }\r\n />);\r\n case bidStrategyOptionKeys.ManualCpc:\r\n default:\r\n return (\r\n ({i18n.getString(_TL_('{{item}}'), { item: accountCurrencyCode })})\r\n }\r\n />);\r\n }\r\n};\r\n\r\nBidInput.propTypes = {\r\n baseBid: PropTypes.shape({}),\r\n setBaseBid: PropTypes.func.isRequired,\r\n bidStrategyType: PropTypes.string.isRequired,\r\n};\r\n\r\nBidInput.defaultProps = {\r\n baseBid: {\r\n value: undefined,\r\n isDirty: false,\r\n },\r\n};\r\n\r\n\r\nexport const BaseBid = React.memo((props) => {\r\n const {\r\n baseBid,\r\n setBaseBid,\r\n bidStrategy,\r\n } = props;\r\n const bidStrategyType = bidStrategy && bidStrategy.option;\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const minMax = getBaseBidMinMax({ bidStrategyType, serverContext });\r\n const error = getBidErrorMsg({\r\n code: validateBaseBid({ baseBid, bidStrategyType, ...minMax }),\r\n i18n,\r\n ...minMax,\r\n isPercent: bidStrategyType === bidStrategyOptionKeys.PercentCpc || bidStrategyType === bidStrategyOptionKeys.Commission,\r\n });\r\n const shouldShowError = checkShouldShowError(baseBid);\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n {shouldShowError && error && }\r\n {(bidStrategyType === bidStrategyOptionKeys.Commission) && }\r\n
\r\n );\r\n});\r\n\r\nBaseBid.propTypes = {\r\n baseBid: PropTypes.shape({}),\r\n setBaseBid: PropTypes.func.isRequired,\r\n bidStrategy: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nBaseBid.defaultProps = {\r\n baseBid: {\r\n searchBid: undefined,\r\n percentCpcBid: undefined,\r\n commissionRate: undefined,\r\n isDirty: false,\r\n },\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useContext } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { usePatch, getAccountCurrencyCode, AdFormat } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { Collapse, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Link, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { CampaignName } from './campaign-name';\r\nimport { AdgroupName, getAdGroupNameErrorMessage } from './adgroup-name';\r\nimport { BaseBid, getBaseBidErrorMessage, getBaseBidTitleDetails } from './base-bid';\r\n\r\nconst getStyles = () => ({\r\n AdgroupBasic: {\r\n '& .section ~ .section': {\r\n marginTop: '32px',\r\n },\r\n },\r\n});\r\n\r\n\r\nexport const AdgroupBasic = (props) => {\r\n const {\r\n adgroup,\r\n bidStrategy,\r\n campaignName,\r\n patchAdgroup,\r\n scenario,\r\n permissions,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getStyles);\r\n const setAdgroupName = usePatch(patchAdgroup, 'name');\r\n const setAdFormat = usePatch(patchAdgroup, 'adFormat');\r\n const setBaseBid = usePatch(patchAdgroup, 'baseBid');\r\n\r\n const allPanelItems = ['adGroup', 'bidTargets'];\r\n const [activeKeys, setActiveKeys] = useState(allPanelItems);\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n const getAdGroupTitleDetail = () => {\r\n const details = [];\r\n if (adgroup.name.value) {\r\n details.push(`${i18n.getString(_TL_('Ad group name'))}: ${adgroup.name.value}`);\r\n }\r\n if (adgroup.adFormat) {\r\n const entries = ['HPA', 'PPA'];\r\n const adFormatValue = _.compact(entries.map((entry) => { if (adgroup.adFormat[entry]) { return entry; } return false; })).join(', ');\r\n if (adFormatValue) {\r\n const IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n const detailsString = IsRenameHotelToLodgingEnabled ? `${i18n.getString(_TL_('Property ad format'))}: ${adFormatValue}` : `${i18n.getString(_TL_('Hotel ad format'))}: ${adFormatValue}`;\r\n details.push(detailsString);\r\n }\r\n }\r\n return details.join(', ');\r\n };\r\n const serverContext = useContext(ServerContext);\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n\r\n return (\r\n
\r\n \r\n {activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n }\r\n error={getAdGroupNameErrorMessage(adgroup.name, adgroup.adFormat)}\r\n >\r\n \r\n \r\n \r\n \r\n }\r\n error={getBaseBidErrorMessage({ baseBid: adgroup.baseBid, bidStrategy, serverContext })}\r\n >\r\n \r\n \r\n \r\n
);\r\n};\r\n\r\nAdgroupBasic.propTypes = {\r\n campaignName: PropTypes.string.isRequired,\r\n adgroup: PropTypes.shape({}),\r\n patchAdgroup: PropTypes.func.isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n bidStrategy: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsRenameHotelToLodgingEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nAdgroupBasic.defaultProps = {\r\n adgroup: {},\r\n permissions: {\r\n dynamic: {\r\n IsRenameHotelToLodgingEnabled: false,\r\n },\r\n },\r\n};\r\n","import {\r\n deviceDefaultSetting,\r\n advancedBookingDefaultSetting,\r\n checkinDayDefaultSetting,\r\n userSetDatesDefaultSetting,\r\n checkinDateDefaultSetting,\r\n lengthOfStayDefaultSetting,\r\n defaultLocationData,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { audienceAdsOptionKeys, defaultAdFormat } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { defaultName } from './adgroup-name';\r\n\r\nconst fields = {\r\n name: 'name',\r\n adFormat: 'adFormat',\r\n baseBid: 'baseBid',\r\n urlOptions: 'urlOptions',\r\n device: 'device',\r\n ABW: 'ABW',\r\n checkinDay: 'checkinDay',\r\n lengthOfStay: 'lengthOfStay',\r\n checkinDate: 'checkinDate',\r\n userSetDates: 'userSetDates',\r\n location: 'location',\r\n adSchedule: 'adSchedule',\r\n audienceAds: 'audienceAds',\r\n};\r\n\r\nconst {\r\n name,\r\n adFormat,\r\n baseBid,\r\n urlOptions,\r\n device,\r\n location,\r\n adSchedule,\r\n ABW,\r\n checkinDay,\r\n lengthOfStay,\r\n checkinDate,\r\n userSetDates,\r\n audienceAds,\r\n} = fields;\r\n\r\nexport const fieldsToCheck = [name, adFormat, adSchedule, audienceAds, location, baseBid, urlOptions, device, ABW, checkinDay, lengthOfStay, checkinDate, userSetDates];\r\n\r\nexport const defaultAdgroupBasicData = {\r\n name: {\r\n value: defaultName,\r\n },\r\n adSchedule: {\r\n useParentLevel: true,\r\n },\r\n dayTimeRanges: [],\r\n AdDistribution: 'BingYahooAndSearchPartners',\r\n adFormat: defaultAdFormat,\r\n baseBid: { value: '1.00' },\r\n exclusions: {},\r\n urlOptions: {},\r\n audienceAds: {\r\n parentLevelSettings: { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n currentLevelSettings: { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n useParentLevel: true,\r\n },\r\n location: {\r\n ...defaultLocationData,\r\n useParentLevel: true,\r\n },\r\n device: {\r\n parentLevelSettings: [...deviceDefaultSetting],\r\n currentLevelSettings: [...deviceDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n ABW: {\r\n parentLevelSettings: [],\r\n currentLevelSettings: [...advancedBookingDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n checkinDay: {\r\n parentLevelSettings: [...checkinDayDefaultSetting],\r\n currentLevelSettings: [...checkinDayDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n userSetDates: {\r\n parentLevelSettings: [...userSetDatesDefaultSetting],\r\n currentLevelSettings: [...userSetDatesDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n checkinDate: {\r\n parentLevelSettings: [],\r\n currentLevelSettings: [...checkinDateDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n lengthOfStay: {\r\n parentLevelSettings: [],\r\n currentLevelSettings: [...lengthOfStayDefaultSetting],\r\n useParentLevel: true,\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport moment from 'moment';\r\nimport {\r\n converODataObjectToDeviceState, converODataObjectToABWState, converODataObjectToLengthOfStayState, converODataObjectToCheckinDayState, converODataObjectToCheckinDateState, converODataObjectToUserSetDatesState,\r\n getCampaignTargetsCriterions, getAdGroupTargetsCriterions,\r\n updateDeviceByResponse, updateABWByResponse, updateCheckinDayByResponse, updateLengthOfStayByResponse, updateCheckinDateByResponse, updateUserSetDatesByResponse,\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\n\r\n\r\n/* eslint-disable no-plusplus */\r\nfunction commonConvertTargetStateToTargetSchema({\r\n campaign, adgroup, target, CriterionType, targetCriterion,\r\n}) {\r\n const { useParentLevel } = target;\r\n const currentLevelSettings = [...target.currentLevelSettings];\r\n let newCurrentLevelSettings = [];\r\n const targetSchema = [];\r\n if (useParentLevel) {\r\n for (let i = 0; i < currentLevelSettings.length; i++) {\r\n const item = { ...currentLevelSettings[i] };\r\n if (item.Id) {\r\n item.Status = 'Deleted';\r\n newCurrentLevelSettings.push(item);\r\n } else {\r\n currentLevelSettings.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n } else {\r\n newCurrentLevelSettings = currentLevelSettings;\r\n }\r\n newCurrentLevelSettings.sort(a => (a.Status === 'Deleted' ? -1 : 1)); // Place the deleted item in front of the array\r\n const parentParams = {};\r\n if (adgroup.Id) {\r\n parentParams.AdGroup = { Id: adgroup.Id };\r\n } else {\r\n parentParams.AdGroupName = adgroup.name.value;\r\n }\r\n parentParams.CampaignName = campaign.Name;\r\n for (let i = 0; i < newCurrentLevelSettings.length; i++) {\r\n const item = newCurrentLevelSettings[i];\r\n if (item) {\r\n targetSchema.push({\r\n Id: item.Id,\r\n CriterionType,\r\n ...parentParams,\r\n Status: item.Status,\r\n Criterion: {\r\n BidAdjustment: item.bidAdjustmentDropdown === 'Increase by' ? item.bidAdjustmentInput - 0 : -(item.bidAdjustmentInput - 0),\r\n Type: CriterionType,\r\n ...targetCriterion(item),\r\n },\r\n });\r\n }\r\n }\r\n return { targetSchema, currentLevelSettings: newCurrentLevelSettings };\r\n}\r\n\r\nexport const convertDeviceStateToDeviceSchema = (adgroup, campaign, initTargets) => {\r\n const DeviceMap = {\r\n Tablet: 'Tablets',\r\n Computer: 'Computers',\r\n Smartphone: 'Smartphones',\r\n };\r\n const currentDeviceSchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.device,\r\n CriterionType: 'Device',\r\n targetCriterion(item) {\r\n return { DeviceCriterion: { DeviceName: DeviceMap[item.device] } };\r\n },\r\n });\r\n let currentDeviceSchemaResult = [];\r\n if (!_.isEqual(initTargets, currentDeviceSchema.currentLevelSettings)) {\r\n currentDeviceSchemaResult = currentDeviceSchema.targetSchema;\r\n }\r\n return currentDeviceSchemaResult;\r\n};\r\n\r\nexport const convertABWStateToABWSchema = (adgroup, campaign, initTargets) => {\r\n const currentABWSchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.ABW,\r\n CriterionType: 'AdvanceBookingWindow',\r\n targetCriterion(item) {\r\n return { AdvanceBookingWindowCriterion: { MinDays: item.minimumDays, MaxDays: item.maximumDays } };\r\n },\r\n });\r\n let currentABWSchemaResult = [];\r\n if (!_.isEqual(initTargets, currentABWSchema.currentLevelSettings)) {\r\n currentABWSchemaResult = currentABWSchema.targetSchema;\r\n }\r\n return currentABWSchemaResult;\r\n};\r\n\r\nexport const convertCheckInDayStateToCheckInDaySchema = (adgroup, campaign, initTargets) => {\r\n const currentCheckinDaySchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.checkinDay,\r\n CriterionType: 'CheckInDay',\r\n targetCriterion(item) {\r\n return { CheckInDayCriterion: { CheckInDay: item.day } };\r\n },\r\n });\r\n let currentCheckinDaySchemaResult = [];\r\n if (!_.isEqual(initTargets, currentCheckinDaySchema.currentLevelSettings)) {\r\n currentCheckinDaySchemaResult = currentCheckinDaySchema.targetSchema;\r\n }\r\n return currentCheckinDaySchemaResult;\r\n};\r\n\r\nexport const convertLengthofStayStateToLengthofStaySchema = (adgroup, campaign, initTargets) => {\r\n const currentLengthOfStaySchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.lengthOfStay,\r\n CriterionType: 'LengthofStay',\r\n targetCriterion(item) {\r\n return { LengthofStayCriterion: { MinNights: item.minimumNumber, MaxNights: item.maximumNumber } };\r\n },\r\n });\r\n let currentLengthofStaySchemaResult = [];\r\n if (!_.isEqual(initTargets, currentLengthOfStaySchema.currentLevelSettings)) {\r\n currentLengthofStaySchemaResult = currentLengthOfStaySchema.targetSchema;\r\n }\r\n return currentLengthofStaySchemaResult;\r\n};\r\n\r\nexport const convertCheckInDateStateToCheckInDateSchema = (adgroup, campaign, initTargets) => {\r\n const currentCheckinDateSchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.checkinDate,\r\n CriterionType: 'CheckInDate',\r\n targetCriterion(item) {\r\n return { CheckInDateCriterion: { StartDate: moment(item.startDate).format('yyyy-MM-DD'), EndDate: moment(item.endDate).format('yyyy-MM-DD') } };\r\n },\r\n });\r\n let currentCheckinDateSchemaResult = [];\r\n if (!_.isEqual(initTargets, currentCheckinDateSchema.currentLevelSettings)) {\r\n currentCheckinDateSchemaResult = currentCheckinDateSchema.targetSchema;\r\n }\r\n return currentCheckinDateSchemaResult;\r\n};\r\n\r\nexport const convertUserSetDatesStateToUserSetDatesSchema = (adgroup, campaign, initTargets) => {\r\n const UserSetDatesMap = {\r\n 'Selected date': 'UserSelection',\r\n 'Default date': 'DefaultSelection',\r\n };\r\n\r\n const currentUserSetDatesSchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n adgroup,\r\n target: adgroup.userSetDates,\r\n CriterionType: 'DateSelectionType',\r\n targetCriterion(item) {\r\n return { DateSelectionTypeCriterion: { HotelDateSelectionType: UserSetDatesMap[item.dates] } };\r\n },\r\n });\r\n let currentUserSetDatesSchemaResult = [];\r\n if (!_.isEqual(initTargets, currentUserSetDatesSchema.currentLevelSettings)) {\r\n currentUserSetDatesSchemaResult = currentUserSetDatesSchema.targetSchema;\r\n }\r\n return currentUserSetDatesSchemaResult;\r\n};\r\n\r\n\r\nexport const renderAdGroupTargets = (cid, aid, campaignId, adGroupId, patchAdgroup, adgroup, context) => {\r\n const getCampaignDeviceCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DeviceCriterion')\", cid, aid, campaignId,\r\n });\r\n\r\n if (adGroupId) {\r\n const adgroupTargetsPromises = [];\r\n const getAdGroupDeviceCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DeviceCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getCampaignDeviceCriterionsPromise, getAdGroupDeviceCriterionsPromise]).then(([campaignTargets, adGroupTargets]) => {\r\n const deviceCriterion = converODataObjectToDeviceState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, device: adGroupTargets.length > 0 ? deviceCriterion : [] } }));\r\n patchAdgroup('device', {\r\n parentLevelSettings: converODataObjectToDeviceState(campaignTargets),\r\n currentLevelSettings: deviceCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }));\r\n\r\n\r\n const getAdGroupABWCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.AdvanceBookingWindowCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getAdGroupABWCriterionsPromise]).then(([adGroupTargets]) => {\r\n const ABWCriterion = converODataObjectToABWState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, ABW: adGroupTargets.length > 0 ? ABWCriterion : [] } }));\r\n if (adGroupTargets.length > 0) {\r\n patchAdgroup('ABW', {\r\n ...adgroup.ABW,\r\n currentLevelSettings: ABWCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }\r\n }));\r\n\r\n\r\n const getAdGroupLengthOfStayCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LengthOfStayCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getAdGroupLengthOfStayCriterionsPromise]).then(([adGroupTargets]) => {\r\n const lengthOfStayCriterion = converODataObjectToLengthOfStayState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, lengthOfStay: adGroupTargets.length > 0 ? lengthOfStayCriterion : [] } }));\r\n if (adGroupTargets.length > 0) {\r\n patchAdgroup('lengthOfStay', {\r\n ...adgroup.lengthOfStay,\r\n currentLevelSettings: lengthOfStayCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }\r\n }));\r\n\r\n\r\n const getAdGroupCheckinDayCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.CheckInDayCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getAdGroupCheckinDayCriterionsPromise]).then(([adGroupTargets]) => {\r\n const checkinDayCriterion = converODataObjectToCheckinDayState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, checkinDay: adGroupTargets.length > 0 ? checkinDayCriterion : [] } }));\r\n if (adGroupTargets.length > 0) {\r\n patchAdgroup('checkinDay', {\r\n ...adgroup.checkinDay,\r\n currentLevelSettings: checkinDayCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }\r\n }));\r\n\r\n\r\n const getAdGroupCheckinDateCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.CheckInDateCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getAdGroupCheckinDateCriterionsPromise]).then(([adGroupTargets]) => {\r\n const checkinDateCriterion = converODataObjectToCheckinDateState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, checkinDate: adGroupTargets.length > 0 ? checkinDateCriterion : [] } }));\r\n if (adGroupTargets.length > 0) {\r\n patchAdgroup('checkinDate', {\r\n ...adgroup.checkinDate,\r\n currentLevelSettings: checkinDateCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }\r\n }));\r\n\r\n\r\n const getAdGroupUserSetDatesCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DateSelectionTypeCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n adgroupTargetsPromises.push(Promise.all([getAdGroupUserSetDatesCriterionsPromise]).then(([adGroupTargets]) => {\r\n const userSetDatesCriterion = converODataObjectToUserSetDatesState(adGroupTargets);\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, userSetDates: adGroupTargets.length > 0 ? userSetDatesCriterion : [] } }));\r\n patchAdgroup('userSetDates', {\r\n ...adgroup.userSetDates,\r\n currentLevelSettings: userSetDatesCriterion,\r\n useParentLevel: adGroupTargets.length === 0,\r\n reset: true,\r\n });\r\n }));\r\n return Promise.all(adgroupTargetsPromises);\r\n }\r\n return Promise.all([getCampaignDeviceCriterionsPromise]).then(([campaignTargets]) => {\r\n context.setState(prev => ({ initTargets: { ...prev.initTargets, device: [] } }));\r\n patchAdgroup('device', {\r\n ...adgroup.device,\r\n parentLevelSettings: converODataObjectToDeviceState(campaignTargets),\r\n reset: true,\r\n });\r\n });\r\n};\r\n\r\n\r\nexport const updateAllTargets = (resources, context) => {\r\n const DeviceCriterion = [];\r\n const ServerDeviceCriterion = [];\r\n const ABWCriterion = [];\r\n const ServerABWCriterion = [];\r\n const CheckinDayCriterion = [];\r\n const ServerCheckinDayCriterion = [];\r\n const LengthOfStayCriterion = [];\r\n const ServerLengthOfStayCriterion = [];\r\n const CheckinDateCriterion = [];\r\n const ServerCheckinDateCriterion = [];\r\n const UserSetDatesCriterion = [];\r\n const ServerUserSetDatesCriterion = [];\r\n _.each(resources, (criterion) => {\r\n switch (criterion.CriterionType) {\r\n case 'Device':\r\n case 'OriginalDevice':\r\n DeviceCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerDeviceCriterion.push(criterion);\r\n }\r\n break;\r\n case 'AdvanceBookingWindow':\r\n ABWCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerABWCriterion.push(criterion);\r\n }\r\n break;\r\n case 'CheckInDay':\r\n CheckinDayCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerCheckinDayCriterion.push(criterion);\r\n }\r\n break;\r\n case 'LengthofStay':\r\n LengthOfStayCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerLengthOfStayCriterion.push(criterion);\r\n }\r\n break;\r\n case 'CheckInDate':\r\n CheckinDateCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerCheckinDateCriterion.push(criterion);\r\n }\r\n break;\r\n case 'DateSelectionType':\r\n UserSetDatesCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerUserSetDatesCriterion.push(criterion);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n const currentCriterionMap = {};\r\n if (DeviceCriterion.length > 0) {\r\n updateDeviceByResponse(DeviceCriterion, context.state.adgroup.device, context.patchAdgroup);\r\n }\r\n if (ServerDeviceCriterion.length > 0) {\r\n const currentDeviceCriterion = updateDeviceByResponse(ServerDeviceCriterion, context.state.adgroup.device);\r\n currentCriterionMap.device = currentDeviceCriterion;\r\n }\r\n if (ABWCriterion.length > 0) {\r\n updateABWByResponse(ABWCriterion, context.state.adgroup.ABW, context.patchAdgroup);\r\n }\r\n if (ServerABWCriterion.length > 0) {\r\n const currentABWCriterion = updateABWByResponse(ServerABWCriterion, context.state.adgroup.ABW);\r\n currentCriterionMap.ABW = currentABWCriterion;\r\n }\r\n if (CheckinDayCriterion.length > 0) {\r\n updateCheckinDayByResponse(CheckinDayCriterion, context.state.adgroup.checkinDay, context.patchAdgroup);\r\n }\r\n if (ServerCheckinDayCriterion.length > 0) {\r\n const currentCheckinDayCriterion = updateCheckinDayByResponse(ServerCheckinDayCriterion, context.state.adgroup.checkinDay);\r\n currentCriterionMap.checkinDay = currentCheckinDayCriterion;\r\n }\r\n if (LengthOfStayCriterion.length > 0) {\r\n updateLengthOfStayByResponse(LengthOfStayCriterion, context.state.adgroup.lengthOfStay, context.patchAdgroup);\r\n }\r\n if (ServerLengthOfStayCriterion.length > 0) {\r\n const currentLengthOfStayCriterion = updateLengthOfStayByResponse(ServerLengthOfStayCriterion, context.state.adgroup.lengthOfStay);\r\n currentCriterionMap.lengthOfStay = currentLengthOfStayCriterion;\r\n }\r\n if (CheckinDateCriterion.length > 0) {\r\n updateCheckinDateByResponse(CheckinDateCriterion, context.state.adgroup.checkinDate, context.patchAdgroup);\r\n }\r\n if (ServerCheckinDateCriterion.length > 0) {\r\n const currentCheckinDateCriterion = updateCheckinDateByResponse(ServerCheckinDateCriterion, context.state.adgroup.checkinDate);\r\n currentCriterionMap.checkinDate = currentCheckinDateCriterion;\r\n }\r\n if (UserSetDatesCriterion.length > 0) {\r\n updateUserSetDatesByResponse(UserSetDatesCriterion, context.state.adgroup.userSetDates, context.patchAdgroup);\r\n }\r\n if (ServerUserSetDatesCriterion.length > 0) {\r\n const currentUserSetDatesCriterion = updateUserSetDatesByResponse(ServerUserSetDatesCriterion, context.state.adgroup.userSetDates);\r\n currentCriterionMap.userSetDates = currentUserSetDatesCriterion;\r\n }\r\n context.setState(prev => ({\r\n initTargets: {\r\n ...prev.initTargets,\r\n ...currentCriterionMap,\r\n },\r\n }));\r\n};\r\n","import decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport {\r\n isDeviceTargetValid,\r\n isABWTargetValid,\r\n isCheckinDayTargetValid,\r\n isLengthOfStayTargetValid,\r\n isCheckinDateTargetValid,\r\n isUserSetDatesTargetValid,\r\n isLocationValid,\r\n notifyTargetsShowError,\r\n convertIntentOption,\r\n compareAndProcessLocations,\r\n physicalIntentOptions\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport {\r\n isAdFormatValid,\r\n bidStrategyOptionKeys,\r\n collectCriterions,\r\n getAudienceAds,\r\n isAudienceAdsValid\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport {\r\n convertDeviceStateToDeviceSchema,\r\n convertABWStateToABWSchema,\r\n convertCheckInDayStateToCheckInDaySchema,\r\n convertLengthofStayStateToLengthofStaySchema,\r\n convertCheckInDateStateToCheckInDateSchema,\r\n convertUserSetDatesStateToUserSetDatesSchema\r\n} from './get-targets-criterion';\r\nimport { fieldsToCheck } from './components';\r\nimport { isBaseBidValid } from './components/base-bid';\r\nimport { isAdgroupNameValid } from './components/adgroup-name';\r\n\r\nexport function getUnSupportedBidAdjustmentFeatures(CampaignBidStrategyType) {\r\n switch (CampaignBidStrategyType) {\r\n case 'Commission':\r\n return ['location', 'adSchedule', 'device', 'ABW', 'checkinDay', 'lengthOfStay', 'checkinDate', 'userSetDates'];\r\n default:\r\n return ['location', 'adSchedule'];\r\n }\r\n}\r\n\r\nexport function isUnSupported(feature, unSupportedFeatures, callback) {\r\n if (unSupportedFeatures.includes(feature)) {\r\n return true;\r\n }\r\n return callback();\r\n}\r\n\r\nfunction getAdSchedule(adgroup, campaign) {\r\n const targets = adgroup.adScheduleData;\r\n return targets.map((criterion) => {\r\n if (adgroup.Id) {\r\n return {\r\n ...criterion,\r\n AdGroup: {\r\n Id: adgroup.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n CampaignName: campaign.Name,\r\n AdGroupName: adgroup.name.value,\r\n };\r\n });\r\n}\r\n\r\nfunction setParent(targets, adgroup, campaign) {\r\n return targets.map((criterion) => {\r\n if (adgroup.Id) {\r\n return {\r\n ...criterion,\r\n AdGroup: {\r\n Id: adgroup.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n CampaignName: campaign.Name,\r\n AdGroupName: adgroup.name.value,\r\n };\r\n });\r\n}\r\n\r\nfunction convertLocationStateToLocationSchema(location, adgroup, campaign) {\r\n const {\r\n useParentLevel,\r\n currentLevelSettings,\r\n } = location;\r\n\r\n const {\r\n currentLocations,\r\n initLocations,\r\n } = currentLevelSettings;\r\n\r\n const noLocations = useParentLevel === true || (currentLocations == null || currentLocations.length === 0);\r\n let finalLocations = [];\r\n const intent = {\r\n Id: location.currentLevelSettings.intentId,\r\n CriterionType: 'LocationIntentCriterion',\r\n Criterion: {\r\n Type: 'LocationIntentCriterion',\r\n LocationIntentCriterion: {\r\n IntentOption: convertIntentOption(location.currentLevelSettings),\r\n },\r\n },\r\n };\r\n\r\n if (noLocations) {\r\n finalLocations = [];\r\n intent.Criterion.LocationIntentCriterion.IntentOption = physicalIntentOptions.PeopleInOrSearchingForOrViewingPages;\r\n } else {\r\n finalLocations = currentLocations;\r\n }\r\n\r\n finalLocations = compareAndProcessLocations(initLocations, finalLocations);\r\n\r\n finalLocations = finalLocations.concat([intent]);\r\n\r\n finalLocations = setParent(finalLocations, adgroup, campaign);\r\n\r\n return finalLocations;\r\n}\r\n\r\n\r\nfunction getHotelAdGroupType(adgroup) {\r\n const HotelAdGroupType = [];\r\n const { adFormat } = adgroup;\r\n if (adFormat.HPA) {\r\n HotelAdGroupType.push('HotelAd');\r\n }\r\n if (adFormat.PPA) {\r\n HotelAdGroupType.push('PropertyAd');\r\n }\r\n return HotelAdGroupType;\r\n}\r\n\r\nexport function getAdGroupBid(baseBid, bidStrategyType) {\r\n switch (bidStrategyType) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return {\r\n SearchBid: baseBid.searchBid && decimal.fromLocalToFloat(baseBid.searchBid),\r\n };\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return {\r\n AdGroupPercentCpcBid: baseBid.percentCpcBid && decimal.fromLocalToFloat(baseBid.percentCpcBid),\r\n };\r\n case bidStrategyOptionKeys.Commission:\r\n return {\r\n AdGroupCommissionRate: baseBid.commissionRate && decimal.fromLocalToFloat(baseBid.commissionRate),\r\n };\r\n default:\r\n return {\r\n SearchBid: baseBid.searchBid && decimal.fromLocalToFloat(baseBid.searchBid),\r\n };\r\n }\r\n}\r\n\r\nfunction getAdScheduleUseSearcherTimeZone(adgroup) {\r\n const { AdScheduleUseSearcherTimeZone } = adgroup;\r\n return { AdScheduleUseSearcherTimeZone };\r\n}\r\n\r\nexport function convertAdgroupStateToAdgroupJSONSchemaData(adgroup, campaign, initTargets) {\r\n const {\r\n device: initDevice, ABW: initABW, checkinDay: initCheckinDay, lengthOfStay: initLengthOfStay, checkinDate: initCheckinDate, userSetDates: initUserSetDates,\r\n } = initTargets;\r\n const adScheduleUseSearcherTimeZone = getAdScheduleUseSearcherTimeZone(adgroup);\r\n const deviceSettings = convertDeviceStateToDeviceSchema(adgroup, campaign, initDevice);\r\n const ABWSettings = convertABWStateToABWSchema(adgroup, campaign, initABW);\r\n const checkinDaySettings = convertCheckInDayStateToCheckInDaySchema(adgroup, campaign, initCheckinDay);\r\n const lengthOfStaySettings = convertLengthofStayStateToLengthofStaySchema(adgroup, campaign, initLengthOfStay);\r\n const checkinDateSettings = convertCheckInDateStateToCheckInDateSchema(adgroup, campaign, initCheckinDate);\r\n const userSetDatesSettings = convertUserSetDatesStateToUserSetDatesSchema(adgroup, campaign, initUserSetDates);\r\n const locationTargets = convertLocationStateToLocationSchema(adgroup.location, adgroup, campaign);\r\n const adschedules = getAdSchedule(adgroup, campaign);\r\n const audienceAds = getAudienceAds(adgroup.audienceAds);\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(campaign.BiddingScheme.Type);\r\n\r\n // could reference mt-entity-tapi or client-data package\r\n const jsonSchemaData = {\r\n Name: adgroup.name.value,\r\n ...adScheduleUseSearcherTimeZone,\r\n ...audienceAds,\r\n Campaign: { Id: campaign.Id },\r\n CampaignName: campaign.Name,\r\n BiddingScheme: {\r\n Type: 'InheritFromParent',\r\n },\r\n ...getAdGroupBid(adgroup.baseBid, campaign.BiddingScheme.Type),\r\n AdGroupType: 'HotelAds',\r\n HotelAdGroupType: getHotelAdGroupType(adgroup),\r\n ...adgroup.dateSettings,\r\n ...adgroup.netWorkOptions,\r\n TrackingUrlTemplate: adgroup.urlOptions.TrackingUrlTemplate,\r\n FinalUrlSuffix: adgroup.urlOptions.FinalUrlSuffix,\r\n UrlCustomParameters: adgroup.urlOptions.UrlCustomParameters,\r\n AdGroupCriterions: [ // new targetings waiting for api\r\n ...collectCriterions('adSchedule', unSupportedFeatures, adschedules),\r\n ...collectCriterions('device', unSupportedFeatures, deviceSettings),\r\n ...collectCriterions('ABW', unSupportedFeatures, ABWSettings),\r\n ...collectCriterions('checkinDay', unSupportedFeatures, checkinDaySettings),\r\n ...collectCriterions('lengthOfStay', unSupportedFeatures, lengthOfStaySettings),\r\n ...collectCriterions('checkinDate', unSupportedFeatures, checkinDateSettings),\r\n ...collectCriterions('userSetDates', unSupportedFeatures, userSetDatesSettings),\r\n ...collectCriterions('location', unSupportedFeatures, locationTargets),\r\n ],\r\n };\r\n\r\n if (adgroup.Id) {\r\n return {\r\n Id: adgroup.Id,\r\n ...jsonSchemaData,\r\n };\r\n }\r\n return {\r\n Status: 'Active',\r\n ...jsonSchemaData,\r\n };\r\n}\r\n\r\nexport function validateAdGroupState(adgroup, serverContext, bidStrategyType, patchAdgroup, patchErrMsg) {\r\n notifyTargetsShowError(adgroup, patchAdgroup);\r\n\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(bidStrategyType);\r\n return {\r\n name: isAdgroupNameValid(adgroup.name.value),\r\n adFormat: isAdFormatValid(adgroup.adFormat),\r\n baseBid: isBaseBidValid({ baseBid: adgroup.baseBid, bidStrategyType, serverContext }),\r\n audienceAds: isAudienceAdsValid(adgroup.audienceAds),\r\n device: isUnSupported('device', unSupportedFeatures, () => (adgroup.device.useParentLevel ? true : isDeviceTargetValid(adgroup.device.currentLevelSettings, patchErrMsg))),\r\n ABW: isUnSupported('ABW', unSupportedFeatures, () => (adgroup.ABW.useParentLevel ? true : isABWTargetValid(adgroup.ABW.currentLevelSettings, patchErrMsg))),\r\n checkinDay: isUnSupported('checkinDay', unSupportedFeatures, () => (adgroup.checkinDay.useParentLevel ? true : isCheckinDayTargetValid(adgroup.checkinDay.currentLevelSettings, patchErrMsg))),\r\n lengthOfStay: isUnSupported('lengthOfStay', unSupportedFeatures, () => (adgroup.lengthOfStay.useParentLevel ? true : isLengthOfStayTargetValid(adgroup.lengthOfStay.currentLevelSettings, patchErrMsg))),\r\n checkinDate: isUnSupported('checkinDate', unSupportedFeatures, () => (adgroup.checkinDate.useParentLevel ? true : isCheckinDateTargetValid(adgroup.checkinDate.currentLevelSettings, patchErrMsg))),\r\n userSetDates: isUnSupported('userSetDates', unSupportedFeatures, () => (adgroup.userSetDates.useParentLevel ? true : isUserSetDatesTargetValid(adgroup.userSetDates.currentLevelSettings, patchErrMsg))),\r\n location: isUnSupported('location', unSupportedFeatures, () => isLocationValid(adgroup.location)),\r\n };\r\n}\r\n\r\nexport function generateDataToInvalidState(validationData, adgroup) {\r\n let data = { ...adgroup };\r\n fieldsToCheck.forEach((field) => {\r\n if (validationData[field] === false) {\r\n data = {\r\n ...data,\r\n [field]: {\r\n ...data[field],\r\n isInvalid: true,\r\n },\r\n };\r\n }\r\n });\r\n return data;\r\n}\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { Link, Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useContext, useMemo, useState, useEffect } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AdSchedule, AudienceAds, BaseExclusion, UrlOptions, usePatch, isAudienceAdsValid,\r\n getUrlOptionsDetails, getExclusionsDetails, globalErrorMsg, getAudienceAdsDetails } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { AdDistribution } from '@bingads-webui-campaign/ad-distribution';\r\nimport { checkShouldShowError, getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { useCurrentCampaign, useCurrentAdGroup } from '@bingads-webui-campaign-react/use-current-scope-entity';\r\nimport { Collapse, ToggleTitle, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { getUnSupportedBidAdjustmentFeatures } from '../util';\r\n\r\nconst getStyles = () =>\r\n ({\r\n advancedSettingsSection: {\r\n marginTop: '19px',\r\n '& .displayNone': {\r\n display: 'none',\r\n },\r\n '& .expandedImage:before, .expanderImage:before': {\r\n marginRight: '12px',\r\n },\r\n '& .urloptions-wraper': {\r\n '& h5.control-label': {\r\n display: 'none',\r\n },\r\n },\r\n },\r\n advancedSettingsContainer: {\r\n },\r\n });\r\n\r\nfunction getAdDistributionOption(adgroup) {\r\n return {\r\n AdDistribution: adgroup.AdDistribution,\r\n Medium: adgroup.Medium,\r\n Languages: ['All'],\r\n campaignType: 'hotel',\r\n };\r\n}\r\n\r\nfunction getAdScheduleOption(campaign, adgroup) {\r\n const model = {\r\n dayTimeRanges: adgroup.dayTimeRanges,\r\n timeZone: adgroup.TimeZone,\r\n adScheduleUseSearcherTimeZone: adgroup.AdScheduleUseSearcherTimeZone,\r\n startDate: adgroup.StartDate,\r\n endDate: adgroup.EndDate,\r\n adGroupStatus: adgroup.Status,\r\n };\r\n return {\r\n model,\r\n level: 'adgroup',\r\n campaignDayTimeRanges: campaign && campaign.dayTimeRanges,\r\n showDateSettings: true,\r\n hideAdScheduleBidAdjustments: true,\r\n campaignAdScheduleUseSearcherTimeZone: campaign && campaign.AdScheduleUseSearcherTimeZone,\r\n };\r\n}\r\n\r\nexport const AdvancedSettings = (props) => {\r\n const {\r\n scenario,\r\n errMsg,\r\n patchErrMsg,\r\n getAdScheduleView,\r\n setAdScheduleView,\r\n setAdDistributionView,\r\n getAdDistributionView,\r\n setUrlOptionsView,\r\n setSiteExclusionView,\r\n patchAdgroup,\r\n adgroup,\r\n campaign,\r\n getUrlOptionsValues,\r\n getExclusionsValues,\r\n advancedSettinsApiErrors,\r\n isDataFetched,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getStyles);\r\n const currentCampaign = useCurrentCampaign();\r\n const currentAdgroup = useCurrentAdGroup();\r\n const campaignId = currentCampaign ? currentCampaign.Id : null;\r\n const adgroupId = currentAdgroup ? currentAdgroup.Id : null;\r\n\r\n const campaignBidStrategyType = campaign && campaign.bidStrategy && campaign.bidStrategy.option;\r\n // We still need to support start & end date in the adSchedule view\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(campaignBidStrategyType).filter(x => x !== 'adSchedule');\r\n const allPanelItems = _.reject(['adSchedule', 'adDistribution', 'audienceAds', 'urlOptions', 'baseExclusion'], x => unSupportedFeatures.includes(x));\r\n const [activeKeys, setActiveKeys] = useState(_.reject(['adSchedule', 'audienceAds', 'adDistribution'], x => unSupportedFeatures.includes(x)));\r\n\r\n useEffect(() => {\r\n const hasApiErrorKeys = Object.keys(advancedSettinsApiErrors);\r\n const needToExpandKeys = [];\r\n allPanelItems.forEach((key) => {\r\n if (hasApiErrorKeys.includes(key) && advancedSettinsApiErrors[key] && advancedSettinsApiErrors[key].length) {\r\n patchErrMsg(key, globalErrorMsg);\r\n needToExpandKeys.push(key);\r\n }\r\n });\r\n setActiveKeys(activeKeys.concat(needToExpandKeys));\r\n }, [advancedSettinsApiErrors]);\r\n\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n const setAdSchedule = usePatch(patchAdgroup, 'adSchedule');\r\n const setAudienceAds = usePatch(patchAdgroup, 'audienceAds');\r\n\r\n const {\r\n adSchedule,\r\n audienceAds,\r\n } = adgroup;\r\n // Turn off --- you set nothing, you use default settings 0 0 0\r\n // Turn on --- you override 0 0 0\r\n const onChangeToggle = (fn, key, value) => {\r\n fn({ ...adgroup[key], useParentLevel: !value });\r\n };\r\n\r\n const adScheduleTitle = ( {\r\n onChangeToggle(setAdSchedule, 'adSchedule', value);\r\n const adScheduleView = getAdScheduleView();\r\n if (adScheduleView) {\r\n adScheduleView.koModel.useCampaignSettingsChecked(!value);\r\n }\r\n }}\r\n />);\r\n\r\n // After collecting the needed data, need to ensure the view is created once.\r\n const adScheduleOption = useMemo(\r\n () => (getAdScheduleOption(campaign, adgroup)),\r\n [campaign.dayTimeRanges, adgroup.dayTimeRanges, campaign.AdScheduleUseSearcherTimeZone, adgroup.adScheduleUseSearcherTimeZone]\r\n );\r\n\r\n\r\n const audienceAdsTitle =\r\n ( { onChangeToggle(setAudienceAds, 'audienceAds', value); }}\r\n />);\r\n\r\n\r\n const adDistributionOption = useMemo(\r\n () => getAdDistributionOption(adgroup),\r\n [adgroup.AdDistribution, adgroup.Medium]\r\n );\r\n\r\n const setUrlOptionsActiveCallback = () => { patchAdgroup('urlOptions', getUrlOptionsValues()); };\r\n const setExclusionsActiveCallback = () => { patchAdgroup('exclusions', getExclusionsValues()); };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n {activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n \r\n {isDataFetched &&\r\n \r\n \r\n }\r\n \r\n \r\n \r\n {\r\n const view = getAdDistributionView();\r\n return view ? view.getTranslatedOption() : '';\r\n })()}\r\n />}\r\n error={errMsg.adDistribution}\r\n >\r\n \r\n \r\n {\r\n scenario === 'settings' &&\r\n } error={errMsg.urlOptions} setActiveCallback={setUrlOptionsActiveCallback}>\r\n \r\n \r\n }\r\n {\r\n scenario === 'settings' &&\r\n } error={errMsg.baseExclusion} setActiveCallback={setExclusionsActiveCallback}>\r\n \r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nAdvancedSettings.propTypes = {\r\n isDataFetched: PropTypes.string.isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n errMsg: PropTypes.shape({}),\r\n patchErrMsg: PropTypes.func.isRequired,\r\n campaign: PropTypes.shape({}).isRequired,\r\n adgroup: PropTypes.shape({}).isRequired,\r\n patchAdgroup: PropTypes.func.isRequired,\r\n setAdScheduleView: PropTypes.func.isRequired,\r\n setAdDistributionView: PropTypes.func.isRequired,\r\n getAdDistributionView: PropTypes.func.isRequired,\r\n setUrlOptionsView: PropTypes.func.isRequired,\r\n setSiteExclusionView: PropTypes.func.isRequired,\r\n getAdScheduleView: PropTypes.func.isRequired,\r\n getUrlOptionsValues: PropTypes.func.isRequired,\r\n getExclusionsValues: PropTypes.func.isRequired,\r\n advancedSettinsApiErrors: PropTypes.shape({}),\r\n};\r\nAdvancedSettings.defaultProps = {\r\n errMsg: {},\r\n advancedSettinsApiErrors: {},\r\n};\r\n\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable no-plusplus */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useContext, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { usePatch,\r\n getGridTargetTitleDetails,\r\n getLocationTargetErrorMessage,\r\n getLocationTargetTitleDetails,\r\n globalErrorMsg, } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ErrorString } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Collapse, ToggleTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Link, Stack, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport {\r\n AdvancedBookingWindowTargetSetting,\r\n CheckinDayTargetSetting,\r\n UserSetDatesTargetSetting,\r\n CheckinDateTargetSetting,\r\n LengthOfStayTargetSetting,\r\n DeviceTargetSetting,\r\n LocationTargetSetting,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nimport { getUnSupportedBidAdjustmentFeatures } from '../util';\r\nimport { defaultAdgroupBasicData } from './default-value';\r\n\r\nconst getStyles = () => ({\r\n AdgroupTargets: {\r\n marginTop: '40px',\r\n },\r\n title: {\r\n fontWeight: 600,\r\n fontSize: '20px',\r\n },\r\n subtitle: {\r\n marginBottom: '16px',\r\n fontSize: '20px',\r\n },\r\n mt33: {\r\n marginTop: '33px',\r\n },\r\n});\r\n\r\n\r\nexport const AdgroupTargets = (props) => {\r\n const {\r\n adgroup,\r\n campaign,\r\n errMsg,\r\n patchAdgroup,\r\n patchErrMsg,\r\n targetsApiErrors,\r\n patchTargetsApiErrMsg,\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n\r\n const campaignBidStrategyType = campaign && campaign.bidStrategy && campaign.bidStrategy.option;\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(campaignBidStrategyType);\r\n\r\n const allPanelItems = _.reject(['location', 'device', 'ABW', 'checkinDay', 'lengthOfStay', 'checkinDate', 'userSetDates'], x => unSupportedFeatures.includes(x));\r\n\r\n const [activeKeys, setActiveKeys] = useState(_.reject(['location', 'device'], x => unSupportedFeatures.includes(x)));\r\n useEffect(() => {\r\n const hasApiErrorKeys = Object.keys(targetsApiErrors);\r\n const needToExpandKeys = [];\r\n allPanelItems.forEach((key) => {\r\n if (hasApiErrorKeys.includes(key) && targetsApiErrors[key] && targetsApiErrors[key].length) {\r\n patchErrMsg(key, globalErrorMsg);\r\n needToExpandKeys.push(key);\r\n }\r\n });\r\n setActiveKeys(activeKeys.concat(needToExpandKeys));\r\n }, [targetsApiErrors]);\r\n\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n const setLocation = usePatch(patchAdgroup, 'location');\r\n const setDevice = usePatch(patchAdgroup, 'device');\r\n const setABW = usePatch(patchAdgroup, 'ABW');\r\n const setCheckinDay = usePatch(patchAdgroup, 'checkinDay');\r\n const setUserSetDates = usePatch(patchAdgroup, 'userSetDates');\r\n const setCheckinDate = usePatch(patchAdgroup, 'checkinDate');\r\n const setLengthOfStay = usePatch(patchAdgroup, 'lengthOfStay');\r\n\r\n const {\r\n device, ABW, checkinDay, lengthOfStay, checkinDate, userSetDates, location,\r\n } = adgroup;\r\n\r\n const {\r\n device: { currentLevelSettings: deviceDefaultCurrentLevelSettings },\r\n ABW: { currentLevelSettings: ABWDefaultCurrentLevelSettings },\r\n checkinDay: { currentLevelSettings: checkinDayDefaultCurrentLevelSettings },\r\n lengthOfStay: { currentLevelSettings: lengthOfStayDefaultCurrentLevelSettings },\r\n checkinDate: { currentLevelSettings: checkinDateDefaultCurrentLevelSettings },\r\n userSetDates: { currentLevelSettings: userSetDatesDefaultCurrentLevelSettings },\r\n } = defaultAdgroupBasicData;\r\n\r\n // Turn off --- you set nothing, you use default settings inherited from campaign\r\n // Turn on --- you override the campaign settings\r\n const onChangeToggle = (fn, key, value) => {\r\n fn({ ...adgroup[key], useParentLevel: !value });\r\n };\r\n\r\n const resetTarget = (setFn, targetData, targetDefaultCurrentLevelSettings, targetName) => {\r\n let tempCurrentLevelSettings = [...targetData.currentLevelSettings];\r\n for (let i = 0; i < tempCurrentLevelSettings.length; i++) {\r\n if (tempCurrentLevelSettings[i]) {\r\n const tempId = tempCurrentLevelSettings[i].Id;\r\n const tempObj = { ...targetDefaultCurrentLevelSettings[i] };\r\n if (tempCurrentLevelSettings[i].Id) {\r\n tempCurrentLevelSettings[i] = tempObj;\r\n tempCurrentLevelSettings[i].Id = tempId;\r\n tempCurrentLevelSettings[i].Status = 'Deleted';\r\n } else {\r\n tempCurrentLevelSettings.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n tempCurrentLevelSettings = targetDefaultCurrentLevelSettings.concat(tempCurrentLevelSettings);\r\n setFn({ ...targetData, currentLevelSettings: tempCurrentLevelSettings, reset: true });\r\n patchTargetsApiErrMsg(targetName, []);\r\n };\r\n\r\n const locationTitle = ( {\r\n const isTargetEverywhere = adgroup.location.currentLevelSettings.currentLocations == null ||\r\n adgroup.location.currentLevelSettings.currentLocations.length === 0;\r\n if (adgroup.location.useParentLevel === true &&\r\n isTargetEverywhere) {\r\n const campaignLocations = _.deepClone(location.parentLevelSettings.currentLocations);\r\n _.map(campaignLocations, (campaignLocation) => {\r\n const target = campaignLocation;\r\n target.Campaign = null;\r\n delete target.Id;\r\n return target;\r\n });\r\n setLocation({\r\n ...adgroup.location,\r\n currentLevelSettings: {\r\n ...adgroup.location.currentLevelSettings,\r\n currentLocations: campaignLocations,\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n },\r\n useParentLevel: false,\r\n bidMode: true,\r\n errors: undefined,\r\n });\r\n } else if (adgroup.location.useParentLevel === true) {\r\n setLocation({\r\n ...adgroup.location,\r\n useParentLevel: false,\r\n bidMode: true,\r\n errors: undefined,\r\n });\r\n } else {\r\n setLocation({\r\n ...adgroup.location,\r\n useParentLevel: !value,\r\n errors: undefined,\r\n });\r\n }\r\n }}\r\n />);\r\n\r\n const formatDateValue = value => i18n.formatDate(value, { raw: serverContext.CurrentUser.CultureDateTimeFormat.ShortDatePattern });\r\n const deviceTitle = { onChangeToggle(setDevice, 'device', value); }} />;\r\n const abwTitle = { onChangeToggle(setABW, 'ABW', value); }} />;\r\n const checkinDayTitle = { onChangeToggle(setCheckinDay, 'checkinDay', value); }} />;\r\n const lengthOfStayTitle = { onChangeToggle(setLengthOfStay, 'lengthOfStay', value); }} />;\r\n const checkinDateTitle = { onChangeToggle(setCheckinDate, 'checkinDate', value); }} />;\r\n const userSetDatesTitle = { onChangeToggle(setUserSetDates, 'userSetDates', value); }} />;\r\n\r\n return allPanelItems.length <= 0 ? null : (\r\n
\r\n
\r\n
\r\n {i18n.getString(_TL_('Ad group targets'))}\r\n
\r\n \r\n {i18n.getString(_TL_('Who do you want to target for this ad group? You can select any combination of the criteria below. '))}\r\n {activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!device.useParentLevel && targetsApiErrors.device && targetsApiErrors.device.map(item => ())}\r\n \r\n { resetTarget(setDevice, device, deviceDefaultCurrentLevelSettings, 'device'); }} />\r\n \r\n \r\n \r\n \r\n {!ABW.useParentLevel && targetsApiErrors.ABW && targetsApiErrors.ABW.map(item => ())}\r\n \r\n { resetTarget(setABW, ABW, ABWDefaultCurrentLevelSettings, 'ABW'); }} />\r\n \r\n \r\n \r\n \r\n {!checkinDay.useParentLevel && targetsApiErrors.checkinDay && targetsApiErrors.checkinDay.map(item => ())}\r\n \r\n { resetTarget(setCheckinDay, checkinDay, checkinDayDefaultCurrentLevelSettings, 'checkinDay'); }} />\r\n \r\n \r\n \r\n \r\n {!lengthOfStay.useParentLevel && targetsApiErrors.lengthOfStay && targetsApiErrors.lengthOfStay.map(item => ())}\r\n \r\n { resetTarget(setLengthOfStay, lengthOfStay, lengthOfStayDefaultCurrentLevelSettings, 'lengthOfStay'); }} />\r\n \r\n \r\n \r\n \r\n {!checkinDate.useParentLevel && targetsApiErrors.checkinDate && targetsApiErrors.checkinDate.map(item => ())}\r\n \r\n { resetTarget(setCheckinDate, checkinDate, checkinDateDefaultCurrentLevelSettings, 'checkinDate'); }} />\r\n \r\n \r\n \r\n \r\n {!userSetDates.useParentLevel && targetsApiErrors.userSetDates && targetsApiErrors.userSetDates.map(item => ())}\r\n \r\n { resetTarget(setUserSetDates, userSetDates, userSetDatesDefaultCurrentLevelSettings, 'userSetDates'); }} />\r\n \r\n \r\n \r\n
);\r\n};\r\n\r\nAdgroupTargets.propTypes = {\r\n adgroup: PropTypes.shape({}),\r\n campaign: PropTypes.shape({}).isRequired,\r\n errMsg: PropTypes.shape({}),\r\n patchAdgroup: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func.isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n targetsApiErrors: PropTypes.shape({}),\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n};\r\n\r\nAdgroupTargets.defaultProps = {\r\n adgroup: {},\r\n errMsg: {},\r\n targetsApiErrors: {},\r\n patchTargetsApiErrMsg() {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nconst getStyles = () => ({\r\n AdGroupTitle: {\r\n marginTop: '16px',\r\n '& .title': {\r\n fontWeight: 600,\r\n },\r\n '& .subtitle': {\r\n marginBottom: '16px',\r\n },\r\n '& .title, .subtitle': {\r\n fontSize: '20px',\r\n },\r\n '& .description': {\r\n },\r\n },\r\n});\r\n\r\nexport const Title = ({ permissions }) => {\r\n const i18n = useContext(I18nContext);\r\n const IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n const classes = useDefaultStyles(getStyles);\r\n return (\r\n
\r\n
\r\n {IsRenameHotelToLodgingEnabled ? i18n.getString(_TL_('Create a property ad group')) : i18n.getString(_TL_('Create a hotel ad group'))}\r\n
\r\n
);\r\n};\r\nTitle.propTypes = {\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsRenameHotelToLodgingEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nTitle.defaultProps = {\r\n permissions: {\r\n dynamic: {\r\n IsRenameHotelToLodgingEnabled: false,\r\n },\r\n },\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-param-reassign */\r\n/* eslint-disable react/prefer-stateless-function */\r\nimport React from 'react';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport { PrimaryButton, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport {\r\n globalErrorMsg, bidStrategyOptionKeys,\r\n getCampaignTargetsCriterions, getAdGroupTargetsCriterions, getCampaignData, getAdGroupData, handleApiErrors, clearSubViewApiErrors, scrollToErrors,\r\n invalidateCache, subscribeUrlOptions, subscribeSiteExclusion, mergeAdGroupStateWithErrors, showWarning, createDefaultHotelGroup, audienceAdsOptionKeys,\r\n send, sendErrors,\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { Errors, modelToViewModelDayTimeTargets, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n parseLocationTargets\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { AdgroupBasic, defaultAdgroupBasicData, AdvancedSettings, AdgroupTargets, fieldsToCheck, Title } from './components';\r\nimport { convertAdgroupStateToAdgroupJSONSchemaData, validateAdGroupState, generateDataToInvalidState } from './util';\r\nimport { renderAdGroupTargets, updateAllTargets } from './get-targets-criterion';\r\n\r\nexport const scenarios = {\r\n settings: 'settings',\r\n creation: 'creation',\r\n};\r\n\r\nexport const HotelAdGroupBase = class HotelAdGroupBase extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.isCreation = this.props.scenario === scenarios.creation;\r\n this.initializeTheInstrumentation();\r\n\r\n this.state = {\r\n adgroup: {\r\n ...defaultAdgroupBasicData,\r\n },\r\n campaign: {\r\n },\r\n initTargets: {},\r\n isLoading: true,\r\n isDataFetched: false,\r\n errMsg: {},\r\n adgroupApiErrors: [],\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: {},\r\n };\r\n this.subViews = {};\r\n this.adScheduleView = undefined;\r\n this.adDistributionView = undefined;\r\n this.siteExclusionView = undefined;\r\n this.urlOptionsView = undefined;\r\n this.defaultHotelGroupCreated = props.scenario === scenarios.settings;\r\n this.setAdScheduleView = (view) => {\r\n this.adScheduleView = view;\r\n this.adScheduleView.koModel.hasErrors.subscribe((x) => {\r\n if (x) {\r\n this.patchErrMsg('adSchedule', globalErrorMsg);\r\n return;\r\n }\r\n this.patchErrMsg('adSchedule', '');\r\n });\r\n };\r\n this.setAdDistributionView = (view) => { this.adDistributionView = view; };\r\n this.getAdDistributionView = () => this.adDistributionView;\r\n this.setSiteExclusionView = (view) => { this.siteExclusionView = view; subscribeSiteExclusion(this); };\r\n this.setUrlOptionsView = (view) => {\r\n this.urlOptionsView = view;\r\n this.subViews.urlOptionsView = view;\r\n subscribeUrlOptions(this, globalErrorMsg);\r\n };\r\n const adgroupEDM = edmCampaign.types.resolve('Model.AdGroup');\r\n this.adgroupResource = new adgroupEDM.ResourceIdentifier();\r\n }\r\n\r\n // eslint-disable-next-line react/sort-comp\r\n handleCreateOrUpdateSuccess = (response, resolve) => {\r\n const {\r\n scope,\r\n siteMap,\r\n } = this.props;\r\n if (this.isCreation) {\r\n const adGroupId = this.getCreatedAdGroupId(response);\r\n send(this.activity, 'adgroup_creation_succeeded', { adGroupId });\r\n this.createDefaultHotelGroupAfterAdGroupCreation(response, () => {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.save(getRoutePathById(siteMap, 'adgroups'));\r\n }).finally(() => resolve(true));\r\n } else {\r\n send(this.activity, 'adgroup_update_succeeded');\r\n // we backfill advanced settings models here, so we have correct model if the saveExtensions call fails.\r\n this.updateResponseData({ entity: response }, resolve);\r\n\r\n if (this.isExclusionsUpdated()) {\r\n this.saveExtensions().then(() => {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.remove('adGroupId');\r\n scope.save('/campaign/vnext/adgroups');\r\n });\r\n } else {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.remove('adGroupId');\r\n scope.save('/campaign/vnext/adgroups');\r\n }\r\n }\r\n };\r\n\r\n getCreatedAdGroupId = (response) => {\r\n let entity = response;\r\n if (response && response.entity) {\r\n // eslint-disable-next-line prefer-destructuring\r\n entity = response.entity;\r\n }\r\n return entity.Id;\r\n };\r\n\r\n scrollAndShowWarning() {\r\n this.removeWarningInterval = showWarning('adgroup', this.props.i18n, this.removeWarningInterval);\r\n scrollToErrors('adgroup');\r\n }\r\n\r\n createDefaultHotelGroupAfterAdGroupCreation = (response, callback) => {\r\n if (!this.defaultHotelGroupCreated) {\r\n const adGroupId = this.getCreatedAdGroupId(response);\r\n\r\n if (adGroupId) {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n } = this.props.scope.values;\r\n let bid = 0.05;\r\n let type = 'FixedBid';\r\n const {\r\n bidStrategy,\r\n } = this.state.campaign;\r\n const {\r\n baseBid,\r\n } = this.state.adgroup;\r\n switch (bidStrategy.option) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n bid = baseBid.searchBid;\r\n type = 'FixedBid';\r\n break;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n bid = baseBid.percentCpcBid;\r\n type = 'RateBid';\r\n break;\r\n case bidStrategyOptionKeys.Commission:\r\n bid = baseBid.commissionRate;\r\n if (bid == null || bid.length === 0) {\r\n bid = bidStrategy.Commission;\r\n }\r\n type = 'RateBid';\r\n break;\r\n default:\r\n bid = 0.05;\r\n type = 'FixedBid';\r\n break;\r\n }\r\n return createDefaultHotelGroup(cid, aid, campaignId, adGroupId, type, bid).then(() => {\r\n send(this.activity, 'hotel_group_creation_succeeded');\r\n this.defaultHotelGroupCreated = true;\r\n if (callback) {\r\n callback();\r\n }\r\n }).catch((res) => {\r\n send(this.activity, 'hotel_group_creation_failed');\r\n sendErrors(this.activity, 'hotel_group_creation_error', res);\r\n // TODO: should not get here.\r\n let errors;\r\n if (res.errors) {\r\n errors = i18nErrors.getODataErrors(res.errors);\r\n }\r\n if (errors && errors.length) {\r\n this.setState(prevState => ({\r\n adgroupApiErrors: prevState.adgroupApiErrors.concat(errors),\r\n }));\r\n this.scrollAndShowWarning();\r\n }\r\n });\r\n }\r\n }\r\n return new Promise((resolve) => {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve(true);\r\n });\r\n };\r\n\r\n handleCreateOrUpdateError = (response, resolve) => {\r\n if (this.isCreation) {\r\n send(this.activity, 'adgroup_creation_failed');\r\n sendErrors(this.activity, 'adgroup_creation_error', response);\r\n } else {\r\n send(this.activity, 'adgroup_update_failed');\r\n sendErrors(this.activity, 'adgroup_update_error', response);\r\n }\r\n const allApiErrors = handleApiErrors(response, this.props.i18n, this.subViews, 'adgroup');\r\n this.setState(prevState => ({\r\n adgroup: {\r\n ...mergeAdGroupStateWithErrors(prevState.adgroup, allApiErrors),\r\n },\r\n adgroupApiErrors: allApiErrors.entityApiErrors.General || [],\r\n targetsApiErrors: allApiErrors.targetsApiErrors,\r\n advancedSettinsApiErrors: allApiErrors.advancedSettinsApiErrors,\r\n }));\r\n this.updateResponseData(response, resolve); // we backfill models here\r\n };\r\n\r\n createOrUpdateAdgroup = (data) => {\r\n const createOrUpdateCall = this.isCreation ? this.adgroupResource.bulkCreate.bind(this.adgroupResource) : this.adgroupResource.bulkUpdate.bind(this.adgroupResource);\r\n return new Promise(resolve => createOrUpdateCall(data)\r\n .then(response => this.handleCreateOrUpdateSuccess(response, resolve))\r\n .catch(response => this.handleCreateOrUpdateError(response, resolve)));\r\n };\r\n\r\n getCurrentCampaign() {\r\n const {\r\n currentCampaign,\r\n } = this.props;\r\n return currentCampaign;\r\n }\r\n\r\n validate = () => {\r\n const {\r\n serverContext,\r\n } = this.props;\r\n const campaignBidStrategyType = this.state.campaign && this.state.campaign.bidStrategy && this.state.campaign.bidStrategy.option;\r\n let validationData = validateAdGroupState(this.state.adgroup, serverContext, campaignBidStrategyType, this.patchAdgroup, this.patchErrMsg);\r\n validationData = Object.assign(\r\n validationData,\r\n { urlOptions: this.urlOptionsView ? this.urlOptionsView.validate() : true },\r\n { adSchedule: this.adScheduleView ? this.adScheduleView.validate() : true }\r\n );\r\n const isValid = fieldsToCheck.every(x => validationData[x] === true);\r\n\r\n if (isValid !== true) {\r\n this.setState(prevState => ({\r\n adgroup: {\r\n ...generateDataToInvalidState(validationData, prevState.adgroup),\r\n },\r\n }));\r\n }\r\n return isValid;\r\n };\r\n\r\n fetchCampaignDayTimeCriterions(cid, aid, campaignId) {\r\n const getCampaignDayTimeCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\", cid, aid, campaignId,\r\n });\r\n return Promise.all([getCampaignDayTimeCriterionsPromise]).then(([rawCampaignDayTimeRanges]) => {\r\n const campaignDayTimeRanges = modelToViewModelDayTimeTargets(rawCampaignDayTimeRanges);\r\n this.setState(prevState => ({\r\n campaign: { ...prevState.campaign, dayTimeRanges: campaignDayTimeRanges },\r\n }));\r\n });\r\n }\r\n\r\n fetchCampaignLocationCriterions(cid, aid, campaignId) {\r\n const getCampaignLocationCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\", cid, aid, campaignId,\r\n });\r\n return Promise.all([getCampaignLocationCriterionsPromise]).then(([rawCampaignLocations]) => {\r\n const {\r\n locations: campaignLocations,\r\n } = parseLocationTargets(rawCampaignLocations, 'campaign', campaignId);\r\n this.setState(prevState => ({\r\n adgroup: {\r\n ...prevState.adgroup,\r\n location: {\r\n ...prevState.adgroup.location,\r\n parentLevelSettings: {\r\n initLocations: campaignLocations,\r\n currentLocations: campaignLocations,\r\n },\r\n bidMode: true,\r\n },\r\n },\r\n }));\r\n });\r\n }\r\n\r\n fetchDayTimeCriterions(cid, aid, campaignId, adGroupId) {\r\n const getCampaignDayTimeCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\", cid, aid, campaignId,\r\n });\r\n const getAdGroupDayTimeCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n return Promise.all([getCampaignDayTimeCriterionsPromise, getAdGroupDayTimeCriterionsPromise]).then(([rawCampaignDayTimeRanges, rawAdGroupDayTimeRanges]) => {\r\n const campaignDayTimeRanges = modelToViewModelDayTimeTargets(rawCampaignDayTimeRanges);\r\n const adGroupDayTimeRanges = modelToViewModelDayTimeTargets(rawAdGroupDayTimeRanges);\r\n this.setState(prevState => ({\r\n campaign: { ...prevState.campaign, dayTimeRanges: campaignDayTimeRanges },\r\n adgroup: { ...prevState.adgroup, dayTimeRanges: adGroupDayTimeRanges, adSchedule: { useParentLevel: _.isEmpty(adGroupDayTimeRanges) } },\r\n }));\r\n });\r\n }\r\n\r\n syncAdGroupLocationCriterions(cid, aid, campaignId, adGroupId) {\r\n invalidateCache('Model.AdGroupCriterion');\r\n const getAdGroupLocationCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n return getAdGroupLocationCriterionsPromise.then((rawLocations) => {\r\n const {\r\n locations,\r\n } = parseLocationTargets(rawLocations, 'campaign', campaignId);\r\n this.setState(prevState => ({\r\n adgroup: {\r\n ...prevState.adgroup,\r\n location: {\r\n ...prevState.adgroup.location,\r\n currentLevelSettings: {\r\n ...prevState.adgroup.location.currentLevelSettings,\r\n initLocations: locations,\r\n },\r\n },\r\n },\r\n }));\r\n });\r\n }\r\n\r\n fetchLocationCriterions(cid, aid, campaignId, adGroupId) {\r\n const getCampaignLocationCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\", cid, aid, campaignId,\r\n });\r\n const getAdGroupLocationCriterionsPromise = getAdGroupTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\", cid, aid, campaignId, adGroupId,\r\n });\r\n return Promise.all([getCampaignLocationCriterionsPromise, getAdGroupLocationCriterionsPromise]).then(([rawCampaignLocations, rawAdGroupLocations]) => {\r\n const {\r\n locations: campaignLocations,\r\n } = parseLocationTargets(rawCampaignLocations, 'campaign', campaignId);\r\n const {\r\n locations: adGroupLocations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(rawAdGroupLocations, 'adgroup', adGroupId);\r\n const targetOption = campaignLocations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n this.patchAdgroup('location', {\r\n parentLevelSettings: {\r\n initLocations: campaignLocations,\r\n currentLocations: campaignLocations,\r\n targetOption,\r\n },\r\n currentLevelSettings: {\r\n initLocations: adGroupLocations,\r\n currentLocations: adGroupLocations,\r\n intentId,\r\n intentOption,\r\n },\r\n bidMode: true,\r\n useParentLevel: adGroupLocations.length === 0,\r\n });\r\n });\r\n }\r\n\r\n fetchCampaignAdGroupData(cid, aid, campaignId, adGroupId) {\r\n const getCampaignDataPromise = getCampaignData(cid, aid, campaignId);\r\n const getAdGroupDataPromise = getAdGroupData(cid, aid, campaignId, adGroupId);\r\n\r\n return Promise.all([getCampaignDataPromise, getAdGroupDataPromise]).then(([CampaignData, AdGroupData]) => {\r\n const {\r\n useParentLevel = true,\r\n currentLevelSettings: currentAdGroupSettings = { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n } = AdGroupData.audienceAds;\r\n const {\r\n currentLevelSettings: currentCampaignSettings = { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n } = CampaignData.audienceAds;\r\n const currentLevelSettings = useParentLevel ?\r\n currentCampaignSettings : currentAdGroupSettings;\r\n\r\n const audienceAds = {\r\n currentLevelSettings,\r\n parentLevelSettings: currentCampaignSettings,\r\n useParentLevel,\r\n };\r\n this.setState(prevState => ({\r\n campaign: { ...prevState.campaign, ...CampaignData },\r\n adgroup: { ...prevState.adgroup, ...AdGroupData, audienceAds },\r\n }));\r\n });\r\n }\r\n\r\n fetchCampaignData(cid, aid, campaignId) {\r\n const getCampaignDataPromise = getCampaignData(cid, aid, campaignId);\r\n\r\n return Promise.all([getCampaignDataPromise]).then(([CampaignData]) => {\r\n const {\r\n currentLevelSettings: currentCampaignSettings = { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n } = CampaignData.audienceAds;\r\n this.setState(prevState => ({\r\n campaign: { ...prevState.campaign, ...CampaignData },\r\n adgroup: {\r\n ...prevState.adgroup,\r\n audienceAds: {\r\n currentLevelSettings: currentCampaignSettings,\r\n parentLevelSettings: currentCampaignSettings,\r\n useParentLevel: true,\r\n },\r\n },\r\n }));\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n this.perfMarker.willFetchData();\r\n\r\n const {\r\n scenario,\r\n } = this.props;\r\n\r\n if (scenario === scenarios.creation) {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n } = this.props.scope.values;\r\n\r\n Promise.all([\r\n renderAdGroupTargets(cid, aid, campaignId, undefined, this.patchAdgroup, this.state.adgroup, this),\r\n this.fetchCampaignData(cid, aid, campaignId),\r\n this.fetchCampaignLocationCriterions(cid, aid, campaignId),\r\n this.fetchCampaignDayTimeCriterions(cid, aid, campaignId),\r\n ]).finally(() => {\r\n this.perfMarker.willRender();\r\n this.setState(() => ({ isLoading: false, isDataFetched: true }));\r\n });\r\n\r\n this.handlePopState = () => {\r\n this.cancel();\r\n };\r\n\r\n window.addEventListener('popstate', this.handlePopState);\r\n } else if (scenario === scenarios.settings) {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n } = this.props.scope.values;\r\n\r\n Promise.all([\r\n renderAdGroupTargets(cid, aid, campaignId, adGroupId, this.patchAdgroup, this.state.adgroup, this),\r\n this.fetchCampaignAdGroupData(cid, aid, campaignId, adGroupId),\r\n this.fetchLocationCriterions(cid, aid, campaignId, adGroupId),\r\n this.fetchDayTimeCriterions(cid, aid, campaignId, adGroupId),\r\n ]).finally(() => {\r\n this.perfMarker.willRender();\r\n this.setState(() => ({ isLoading: false, isDataFetched: true }));\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.isLoading === false && this.state.isDataFetched === true && this.perfMarker.isDone === false) {\r\n this.durationActivity.startSignal();\r\n this.perfMarker.done();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.activity.stop();\r\n if (this.state.adgroup && this.state.adgroup.Id) {\r\n invalidateCache('Model.AdGroup', [this.state.adgroup.Id]);\r\n }\r\n if (this.removeWarningInterval) {\r\n this.removeWarningInterval();\r\n }\r\n if (this.adScheduleView) {\r\n this.adScheduleView.undelegateEvents().off().remove();\r\n }\r\n if (this.isCreation) {\r\n window.removeEventListener('popstate', this.handlePopState);\r\n }\r\n }\r\n\r\n getAdScheduleValues = () => {\r\n const deletedDayTimeCb = (deletedDayTimeCriterions) => {\r\n _.each(deletedDayTimeCriterions, (criterion) => {\r\n criterion.Status = 'Deleted';\r\n });\r\n };\r\n\r\n return this.adScheduleView ? this.adScheduleView.getValues(deletedDayTimeCb) : [];\r\n };\r\n\r\n getUrlOptionsValues = () => {\r\n const urlOptionsData = this.urlOptionsView ? this.urlOptionsView.toObject() : {};\r\n\r\n if (_.isEmpty(urlOptionsData.TrackingUrlTemplate)) {\r\n urlOptionsData.TrackingUrlTemplate = null;\r\n }\r\n if (_.isEmpty(urlOptionsData.UrlCustomParameters)) {\r\n urlOptionsData.UrlCustomParameters = null;\r\n }\r\n return urlOptionsData;\r\n };\r\n\r\n getExclusionsValues = () => {\r\n const siteExclusionData = this.siteExclusionView ? this.siteExclusionView.getValues() : {};\r\n const ExcludedSites = siteExclusionData;\r\n return { ExcludedSites };\r\n };\r\n\r\n getValues = () => {\r\n const values = {\r\n ...this.state.adgroup,\r\n adScheduleData: this.getAdScheduleValues(),\r\n dateSettings: this.adScheduleView ? this.adScheduleView.getDateSettings() : {},\r\n netWorkOptions: this.adDistributionView ? this.adDistributionView.toObject() : {},\r\n urlOptions: this.getUrlOptionsValues(),\r\n };\r\n\r\n if (this.adScheduleView && this.adScheduleView.getAdScheduleUseSearcherTimeZone) {\r\n values.AdScheduleUseSearcherTimeZone = this.adScheduleView.getAdScheduleUseSearcherTimeZone();\r\n }\r\n\r\n return values;\r\n };\r\n\r\n initializeTheInstrumentation = () => {\r\n if (this.isCreation) {\r\n const scenario = instrumentation.hotelAdGroupCreation.create();\r\n\r\n this.activity = scenario.hotelAdGroupCreation.create();\r\n // duration activity, from user could edit & all successeed/completed\r\n this.durationActivity = scenario.duration.create();\r\n this.perfMarker = this.props.perfMarker.createChild('HotelAdGroupBaseCreation');\r\n } else {\r\n const scenario = instrumentation.hotelAdGroupSettings.create();\r\n\r\n this.activity = scenario.hotelAdGroupSettings.create();\r\n this.durationActivity = scenario.duration.create();\r\n this.perfMarker = this.props.perfMarker.createChild('HotelAdGroupBaseSettings');\r\n }\r\n // the component life time\r\n this.activity.start();\r\n send(this.activity, 'enter_page');\r\n\r\n this.perfMarker.willInit();\r\n };\r\n\r\n syncAdGroupLocationCriterionsPromise = (payload) => {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n adGroupId,\r\n } = this.props.scope.values;\r\n if (adGroupId) {\r\n return this.syncAdGroupLocationCriterions(cid, aid, campaignId, adGroupId);\r\n } else if (payload && payload.entity && payload.entity.Id) {\r\n return this.syncAdGroupLocationCriterions(cid, aid, campaignId, payload.entity.Id);\r\n } else if (payload && payload.Id) {\r\n return this.syncAdGroupLocationCriterions(cid, aid, campaignId, payload.Id);\r\n }\r\n return Promise.resolve(true);\r\n };\r\n\r\n updateResponseData = (payload, resolve) => {\r\n if (!payload) {\r\n resolve(true);\r\n return;\r\n }\r\n // Fill back the data to the view;\r\n if (payload.entity && payload.entity.Id) { this.patchAdgroup('Id', payload.entity.Id); }\r\n const resourceName = 'AdGroupCriterions';\r\n\r\n if (this.adScheduleView) {\r\n this.adScheduleView.backFillItems(payload.entity ? payload : { entity: payload });\r\n if (payload.entity && payload.errors) {\r\n this.adScheduleView.handleErrors(payload);\r\n }\r\n }\r\n\r\n let resources = [];\r\n if (_.has(payload, 'entity') && _.has(payload.entity, resourceName)) {\r\n resources = payload.entity[resourceName];\r\n } else if (_.has(payload, resourceName)) {\r\n resources = payload[resourceName];\r\n }\r\n updateAllTargets(resources, this);\r\n\r\n if (payload && payload.errors) {\r\n this.removeWarningInterval = showWarning('adgroup', this.props.i18n, this.removeWarningInterval);\r\n }\r\n\r\n Promise.all([this.syncAdGroupLocationCriterionsPromise(payload), this.createDefaultHotelGroupAfterAdGroupCreation(payload)])\r\n .finally(() => resolve(true));\r\n };\r\n\r\n isExclusionsUpdated() {\r\n if (!this.siteExclusionView) {\r\n return false;\r\n }\r\n const siteExclusionsUpdated = this.siteExclusionView &&\r\n !_.isEqual(this.siteExclusionView.options.exclusions, this.siteExclusionView.getValues());\r\n return siteExclusionsUpdated;\r\n }\r\n\r\n saveExtensions() {\r\n const { campaignId, adGroupId } = this.props.scope.values;\r\n const data = {\r\n AdGroupId: adGroupId,\r\n CampaignId: campaignId,\r\n AdvancedSettings: {\r\n ...this.getExclusionsValues(),\r\n },\r\n };\r\n const that = this;\r\n return exclusionRepository.saveExtensions(data, 'adgroup')\r\n .then(() => {\r\n send(this.activity, 'adgroup_extensions_update_succeeded');\r\n that.siteExclusionView.clearApiErrors();\r\n that.patchErrMsg('baseExclusion', '');\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', []);\r\n })\r\n .catch((response) => {\r\n send(this.activity, 'adgroup_extensions_update_failed');\r\n if (response.NegativeSitesResult || response.NegativeIPsResult) {\r\n const { NegativeSitesResult: siteErrors, NegativeIPsResult: ipErrors } = response;\r\n if (siteErrors || ipErrors) {\r\n if (that.siteExclusionView && siteErrors) {\r\n that.siteExclusionView.showErrors(siteErrors);\r\n }\r\n that.patchErrMsg('baseExclusion', globalErrorMsg);\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', [{ siteErrors }]);\r\n scrollToErrors('adgroup');\r\n } else {\r\n that.siteExclusionView.clearApiErrors();\r\n that.patchErrMsg('baseExclusion', '');\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', []);\r\n }\r\n // eslint-disable-next-line no-throw-literal\r\n throw 'exclusion error';\r\n }\r\n });\r\n }\r\n\r\n clearAllApiErrors() {\r\n clearSubViewApiErrors(this.subViews);\r\n this.setState(prev => ({\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: { baseExclusions: prev.advancedSettinsApiErrors.baseExclusions },\r\n }));\r\n }\r\n\r\n save = () => {\r\n send(this.activity, 'save_clicked');\r\n // If something is wrong, you want show error message in the titlebar, you can patchErrMsg like below.\r\n // this.patchErrMsg('campaign', '*Required field'); // The two parameters are the key of Collapse.Panel, and the error message displayed.\r\n const isValid = this.validate();\r\n\r\n if (isValid) {\r\n const data = this.getValues();\r\n this.setState(() => ({ isLoading: true }));\r\n // TODO: which campaign (from props or api calls), should we use?\r\n const createOrUpdatePromise = this.createOrUpdateAdgroup(convertAdgroupStateToAdgroupJSONSchemaData(data, this.getCurrentCampaign(), this.state.initTargets));\r\n createOrUpdatePromise.finally(() => this.setState(() => ({ isLoading: false })));\r\n } else {\r\n scrollToErrors('adgroup');\r\n }\r\n };\r\n\r\n cancel = () => {\r\n send(this.activity, 'cancel_clicked');\r\n this.durationActivity.stopSignal('canceled');\r\n const {\r\n scope,\r\n siteMap,\r\n } = this.props;\r\n scope.save(getRoutePathById(siteMap, 'adgroups'));\r\n };\r\n\r\n patchAdgroup = (key, value) => {\r\n this.setState(prevState => ({\r\n adgroup: {\r\n ...prevState.adgroup,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchErrMsg = (key, value) => {\r\n this.setState(prevState => ({\r\n errMsg: {\r\n ...prevState.errMsg,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchTargetsApiErrMsg = (key, value) => {\r\n this.setState(prevState => ({\r\n targetsApiErrors: {\r\n ...prevState.targetsApiErrors,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchAdvancedSettinsApiErrors = (key, value) => {\r\n this.setState(prevState => ({\r\n advancedSettinsApiErrors: {\r\n ...prevState.advancedSettinsApiErrors,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n render() {\r\n const {\r\n classes,\r\n i18n,\r\n scenario,\r\n currentCampaign,\r\n } = this.props;\r\n\r\n const campaignName = currentCampaign && currentCampaign.Name;\r\n const campaignBidStrategy = this.state.campaign && this.state.campaign.bidStrategy;\r\n\r\n return (\r\n { if (!_.isEmpty(this.state.adgroupApiErrors)) { _.delay(() => this.setState(() => ({ adgroupApiErrors: [] })), 200); } }}\r\n >\r\n \r\n
\r\n {this.isCreation && }\r\n <Errors errors={!_.isEmpty(this.state.adgroupApiErrors) && this.state.adgroupApiErrors.map(x => x.message)} />\r\n <AdgroupBasic\r\n campaignName={campaignName}\r\n patchAdgroup={this.patchAdgroup}\r\n adgroup={this.state.adgroup}\r\n bidStrategy={campaignBidStrategy}\r\n scenario={scenario}\r\n permissions={this.props.permissions}\r\n />\r\n <AdvancedSettings\r\n campaign={this.state.campaign}\r\n adgroup={this.state.adgroup}\r\n patchAdgroup={this.patchAdgroup}\r\n setAdScheduleView={this.setAdScheduleView}\r\n getAdScheduleView={() => this.adScheduleView}\r\n setAdDistributionView={this.setAdDistributionView}\r\n getAdDistributionView={this.getAdDistributionView}\r\n setSiteExclusionView={this.setSiteExclusionView}\r\n setUrlOptionsView={this.setUrlOptionsView}\r\n scenario={scenario}\r\n errMsg={this.state.errMsg}\r\n patchErrMsg={this.patchErrMsg}\r\n getUrlOptionsValues={this.getUrlOptionsValues}\r\n getExclusionsValues={this.getExclusionsValues}\r\n advancedSettinsApiErrors={this.state.advancedSettinsApiErrors}\r\n isDataFetched={this.state.isDataFetched}\r\n />\r\n <AdgroupTargets\r\n patchAdgroup={this.patchAdgroup}\r\n adgroup={this.state.adgroup}\r\n campaign={this.state.campaign}\r\n errMsg={this.state.errMsg}\r\n patchErrMsg={this.patchErrMsg}\r\n scope={this.props.scope}\r\n targetsApiErrors={this.state.targetsApiErrors}\r\n patchTargetsApiErrMsg={this.patchTargetsApiErrMsg}\r\n />\r\n <div className=\"dashline\" />\r\n <PrimaryButton text={i18n.getString(_TL_('Save'))} onClick={this.save} />\r\n <DefaultButton className=\"cancel-btn\" text={i18n.getString(_TL_('Cancel'))} onClick={this.cancel} />\r\n </div>\r\n </UiBlocker>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nHotelAdGroupBase.propTypes = {\r\n currentCampaign: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n scenario: PropTypes.string,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n adGroupId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n siteMap: PropTypes.shape([]).isRequired,\r\n perfMarker: perfMarkerPropTypes.isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nHotelAdGroupBase.defaultProps = {\r\n scenario: scenarios.creation,\r\n};\r\n","import { helpbuttonStyle, convertToLocalStyle, glyphIconStyle, getBlockerStyle, spinnerKeyframe } from '@bingads-webui-campaign-react/common-styles';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const sharedStyles = core => ({\r\n hotelAdGroupBase: {\r\n padding: '32px 32px 48px 24px',\r\n minWidth: '1032px',\r\n backgroundColor: `${core && core.palette && core.palette.neutralLighterAlt}`,\r\n '& .helpbutton': helpbuttonStyle(core)['.helpbutton'],\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n ...convertToLocalStyle(glyphIconStyle(core)),\r\n ...creationCommonStyle(core),\r\n '& .dashline': {\r\n borderBottom: `1px solid ${core && core.palette && core.palette.neutralLight}`,\r\n width: '100%',\r\n margin: '24px 0 16px 0',\r\n },\r\n '& span': {\r\n verticalAlign: 'unset',\r\n },\r\n '& .jumbo-card-control-all-btn': {\r\n color: '#323230',\r\n },\r\n '& .campaign-rate-bid': {\r\n marginBottom: '16px',\r\n },\r\n '& .hotel-ad-format label': {\r\n display: 'inherit',\r\n },\r\n '& .intent-target': {\r\n marginTop: '8px',\r\n },\r\n '& .cancel-btn': {\r\n marginLeft: '8px',\r\n },\r\n '& .react-block-ui': {\r\n '& > div:last-child > div > div': {\r\n backgroundColor: 'unset',\r\n },\r\n '& > div:last-child': {\r\n alignItems: 'center',\r\n backgroundColor: 'rgba(256, 256, 256, 0.5)',\r\n color: core.palette.themePrimary,\r\n display: 'flex',\r\n outline: 'none',\r\n padding: 10,\r\n '& .blocker-text': {\r\n fontWeight: 'normal',\r\n top: '23.5px',\r\n display: 'inline-block',\r\n position: 'absolute',\r\n },\r\n '& .blocker-image': {\r\n ...getBlockerStyle(28, core.palette),\r\n display: 'inline-block',\r\n },\r\n },\r\n },\r\n '& table tbody .col-sm-9': {\r\n width: 'unset',\r\n paddingLeft: 'unset',\r\n },\r\n '& table tbody .item-label.schedule-item-label.form-control-static': {\r\n fontWeight: '600',\r\n color: '#323130',\r\n paddingTop: '10px',\r\n display: 'block',\r\n },\r\n '& table tbody .radio .col-sm-3': {\r\n width: 'unset',\r\n },\r\n '& table tbody .radio .col-sm-9': {\r\n paddingLeft: '8px',\r\n },\r\n '& table tbody .col-sm-9 input.k-input.form-control': {\r\n width: '100px !important',\r\n },\r\n '& .adschedule-targets-container .ba-backbone-instance-wrapper .advanced-scheduling-grid .ad-scheduling-panel table tr:nth-child(3) td .radio-inline:nth-child(2)': {\r\n top: 'unset',\r\n },\r\n '& .form-horizontal table tbody .radio': {\r\n paddingTop: 'unset',\r\n },\r\n '& .scheduling-grid .advanced-scheduling-grid': {\r\n marginTop: '16px',\r\n },\r\n '& #ad-schedule-use-campaign-settings': {\r\n display: 'none',\r\n },\r\n '& .adschedule-targets-container .toggle-campaign-settings-switch.form-control-static[data-bind]': {\r\n display: 'none',\r\n },\r\n '& .hotel-adgroup-shared': {\r\n width: '62.5%',\r\n minWidth: '968px',\r\n },\r\n '& .location-target-options .specific-location-targets-editor': {\r\n marginLeft: 'unset',\r\n },\r\n '& .location-target-options label': {\r\n display: 'inherit',\r\n },\r\n '& .intent-target-options label': {\r\n display: 'inherit',\r\n },\r\n '& .adGroup': {\r\n '& .collapse-content.content-show': {\r\n marginTop: '-4px',\r\n marginLeft: '-4px',\r\n '& .campaign-name': {\r\n marginTop: '4px',\r\n marginLeft: '4px',\r\n },\r\n '& .adgroup-name': {\r\n marginLeft: '4px',\r\n },\r\n '& .hotel-ad-format': {\r\n marginLeft: '4px',\r\n marginBottom: '4px',\r\n },\r\n },\r\n },\r\n },\r\n '@global': {\r\n '.floating-banner.warnFloatingBanner': {\r\n bottom: 'unset',\r\n top: '10%',\r\n background: '#A80000',\r\n '& .iconba, [role=\"alert\"], [role=\"button\"]': {\r\n color: 'white',\r\n },\r\n },\r\n '.app-shell .app-content-body div.settings-page': {\r\n overflow: 'visible',\r\n },\r\n '.app-shell .app-content-container-col': {\r\n backgroundColor: `${core && core.palette && core.palette.neutralLighterAlt}`,\r\n '& .ba-content-footer, .back-to-campaign': {\r\n minWidth: '1032px',\r\n },\r\n },\r\n ...spinnerKeyframe,\r\n },\r\n});\r\n","import { compose } from 'underscore';\r\nimport React from 'react';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { HotelAdGroupBase, scenarios } from './shared';\r\nimport { sharedStyles } from './style';\r\n\r\nconst getStyles = (_, theme) => ({\r\n ...mergeStyles(\r\n { theme },\r\n sharedStyles\r\n ),\r\n});\r\n\r\nexport const HotelAdGroupCreation = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, getStyles)\r\n)(props => (<HotelAdGroupBase {...props} scenario={scenarios.creation} />));\r\n","import { compose } from 'underscore';\r\nimport React from 'react';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { HotelAdGroupBase, scenarios } from './shared';\r\nimport { sharedStyles } from './style';\r\n\r\nconst getStyles = (_, theme) => ({\r\n ...mergeStyles(\r\n { theme },\r\n sharedStyles\r\n ),\r\n});\r\n\r\nexport const HotelAdGroupSettings = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, getStyles)\r\n)(props => (<HotelAdGroupBase {...props} scenario={scenarios.settings} />));\r\n","import { validateNumber, numberErrorCode, getNumberErrorMsg, bidStrategyOptionKeys } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\n\r\nexport const fields = {\r\n ManualCpc: 'ManualCpc',\r\n PercentCpc: 'PercentCpc',\r\n Commission: 'Commission',\r\n AdGroupBid: 'AdGroupBid',\r\n AdGroupPercentBid: 'AdGroupPercentBid',\r\n AdGroupCommissionRate: 'AdGroupCommissionRate',\r\n};\r\n\r\nexport const bidStrategyTypeValueMap = {\r\n ManualCpc: '',\r\n PercentCpc: 'PercentMaxCpc',\r\n Commission: 'CommissionRate',\r\n};\r\n\r\nexport const bidStrategyOptions = (i18n, isPayPerStayEnabled) => [\r\n {\r\n key: bidStrategyOptionKeys.ManualCpc, text: i18n.getString(_TL_('Fixed bid per night (per click)')),\r\n },\r\n {\r\n key: bidStrategyOptionKeys.PercentCpc, text: i18n.getString(_TL_('Percentage of room price (per click)')),\r\n },\r\n ...(isPayPerStayEnabled ? [{ key: bidStrategyOptionKeys.Commission, text: i18n.getString(_TL_('Percentage of room price (per stay)')) }] : []),\r\n];\r\n\r\nconst percentageOrBidConst = {\r\n min: 0,\r\n max: 1000,\r\n};\r\n\r\n\r\nexport const getAdGroupBidMinMax = ({ selectedKey, bidStrategy, serverContext }) => {\r\n const key = selectedKey || bidStrategy.option;\r\n // align the range with search ad group campaign as MT create it with the same flow.\r\n const min = (serverContext && serverContext.KeywordBidRange && serverContext.KeywordBidRange.FloorValue) || 0.01;\r\n const max = (serverContext && serverContext.KeywordBidRange && serverContext.KeywordBidRange.CeilingValue) || 1000;\r\n switch (key) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return { min, max };\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return { min: appConfig.get('KeywordPercentCpcBidRange') && appConfig.get('KeywordPercentCpcBidRange').FloorValue, max: appConfig.get('KeywordPercentCpcBidRange') && appConfig.get('KeywordPercentCpcBidRange').CeilingValue };\r\n case bidStrategyOptionKeys.Commission:\r\n return { min: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').FloorValue, max: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').CeilingValue };\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateAdGroupBid = ({\r\n selectedKey, bidStrategy, min, max,\r\n}) => {\r\n const key = selectedKey || bidStrategy.option;\r\n switch (key) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return validateNumber({\r\n value: bidStrategy[fields.AdGroupBid], min, max, digitLength: 2,\r\n });\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return validateNumber({\r\n value: bidStrategy[fields.AdGroupPercentBid], min, max, digitLength: 2, notIncludeMin: true,\r\n });\r\n case bidStrategyOptionKeys.Commission:\r\n return validateNumber({\r\n value: bidStrategy[fields.AdGroupCommissionRate], min, max, notRequired: true, digitLength: 2, notIncludeMin: true,\r\n });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const getBidStrategyMinMax = ({ selectedKey, bidStrategy, serverContext }) => {\r\n const key = selectedKey || bidStrategy.option;\r\n const min = (serverContext && serverContext.ProductGroupBidRange && serverContext.ProductGroupBidRange.FloorValue) || 0.01;\r\n const max = (serverContext && serverContext.ProductGroupBidRange && serverContext.ProductGroupBidRange.CeilingValue) || 1000;\r\n switch (key) {\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return { min, max };\r\n case bidStrategyOptionKeys.Commission:\r\n return { min: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').FloorValue, max: appConfig.get('KeywordCommissionRateRange') && appConfig.get('KeywordCommissionRateRange').CeilingValue };\r\n case bidStrategyOptionKeys.ManualCpc:\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateBidStrategy = ({\r\n selectedKey, bidStrategy, min, max,\r\n}) => {\r\n const key = selectedKey || bidStrategy.option;\r\n switch (key) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return null;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return validateNumber({\r\n value: bidStrategy[key],\r\n min,\r\n max,\r\n notRequired: true,\r\n digitLength: 2,\r\n });\r\n case bidStrategyOptionKeys.Commission:\r\n return validateNumber({\r\n value: bidStrategy[key], min, max, digitLength: 2, notIncludeMin: true,\r\n });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const isBidStrategyValid = ({\r\n selectedKey, bidStrategy, serverContext, isCreation,\r\n}) => {\r\n const valid = validateBidStrategy({ selectedKey, bidStrategy, ...getBidStrategyMinMax({ selectedKey, bidStrategy, serverContext }) }) == null;\r\n if (valid && isCreation) {\r\n return validateAdGroupBid({ selectedKey, bidStrategy, ...getAdGroupBidMinMax({ selectedKey, bidStrategy, serverContext }) }) == null;\r\n }\r\n return valid;\r\n};\r\n\r\nexport const getPercentageOrBidErrorMsg = ({\r\n code, i18n, min = percentageOrBidConst.min, max = percentageOrBidConst.max, isPercent,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n if (isPercent) {\r\n return i18n.getString(_TL_('Enter a percentage'));\r\n }\r\n return i18n.getString(_TL_('Enter a bid'));\r\n default:\r\n return getNumberErrorMsg({\r\n code, i18n, min, max,\r\n });\r\n }\r\n};\r\n","import React, { Fragment, useContext, useCallback } from 'react';\r\nimport classnames from 'classnames';\r\nimport { Dropdown, Label, Stack, TextField } from '@bingads-webui-react/fabric-control';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport PropTypes from 'prop-types';\r\nimport { getAccountCurrencyCode, bidStrategyOptionKeys, Disclaimer } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ErrorString, SpanWithComponent, checkShouldShowError } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { validateBidStrategy, getPercentageOrBidErrorMsg, fields, bidStrategyOptions, validateAdGroupBid, getBidStrategyMinMax, getAdGroupBidMinMax } from './utility';\r\n\r\nconst Bid = React.memo((props) => {\r\n const {\r\n content,\r\n field,\r\n bidStrategy,\r\n setBidStrategy,\r\n isPercent,\r\n selectedKey,\r\n } = props;\r\n const serverContext = useContext(ServerContext);\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n const i18n = useContext(I18nContext);\r\n const shouldShowError = checkShouldShowError(bidStrategy);\r\n const minMax = getAdGroupBidMinMax({ selectedKey, bidStrategy, serverContext });\r\n const error = getPercentageOrBidErrorMsg({\r\n code: validateAdGroupBid({ selectedKey, bidStrategy, ...minMax }),\r\n i18n,\r\n ...minMax,\r\n isPercent,\r\n });\r\n return (\r\n <div className=\"bid\">\r\n <Label styles={{\r\n root: {\r\n marginTop: '8px',\r\n marginBottom: '8px',\r\n },\r\n }}\r\n >\r\n {content}\r\n </Label>\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <TextField\r\n className={field}\r\n value={bidStrategy[field] || ''}\r\n placeholder=\"\"\r\n ariaLabel={`${field}Label`}\r\n styles={{ fieldGroup: { width: 80 } }}\r\n onBlur={() => { setBidStrategy({ isDirty: true }); }}\r\n onChange={(e, value) => { setBidStrategy({ [field]: value, isDirty: true }); }}\r\n />\r\n {isPercent ? <span>{i18n.getString(_TL_('%'))}</span> : <span>{accountCurrencyCode}</span>}\r\n </Stack>\r\n {shouldShowError && error && <ErrorString error={error} />}\r\n </div>\r\n );\r\n});\r\n\r\nBid.propTypes = {\r\n bidStrategy: PropTypes.shape({}),\r\n setBidStrategy: PropTypes.func.isRequired,\r\n content: PropTypes.string.isRequired,\r\n field: PropTypes.string.isRequired,\r\n isPercent: PropTypes.bool.isRequired,\r\n selectedKey: PropTypes.string.isRequired,\r\n};\r\n\r\nBid.defaultProps = {\r\n bidStrategy: {},\r\n};\r\n\r\nconst Percentage = React.memo((props) => {\r\n const {\r\n content,\r\n field,\r\n bidStrategy,\r\n setBidStrategy,\r\n selectedKey,\r\n isPercent,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n const shouldShowError = checkShouldShowError(bidStrategy);\r\n const minMax = getBidStrategyMinMax({ selectedKey, bidStrategy });\r\n const error = getPercentageOrBidErrorMsg({\r\n code: validateBidStrategy({ selectedKey, bidStrategy, ...minMax }),\r\n i18n,\r\n ...minMax,\r\n isPercent,\r\n });\r\n\r\n return (\r\n <div className=\"percentage\">\r\n <Label styles={{\r\n root: {\r\n marginBottom: '8px',\r\n },\r\n }}\r\n >\r\n {content}\r\n </Label>\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <TextField\r\n ariaLabel={`${field}Label`}\r\n className={field}\r\n value={bidStrategy[field] || ''}\r\n placeholder=\"\"\r\n styles={{ fieldGroup: { width: 80 } }}\r\n onBlur={() => { setBidStrategy({ isDirty: true }); }}\r\n onChange={(e, value) => { setBidStrategy({ [field]: value, isDirty: true }); }}\r\n />\r\n {isPercent ? <span>{i18n.getString(_TL_('%'))}</span> : <span>{accountCurrencyCode}</span>}\r\n {shouldShowError && error && <ErrorString error={error} />}\r\n </Stack>\r\n </div >\r\n );\r\n});\r\n\r\nPercentage.propTypes = {\r\n bidStrategy: PropTypes.shape({}),\r\n setBidStrategy: PropTypes.func.isRequired,\r\n content: PropTypes.string.isRequired,\r\n field: PropTypes.string.isRequired,\r\n selectedKey: PropTypes.string.isRequired,\r\n isPercent: PropTypes.bool,\r\n};\r\n\r\nPercentage.defaultProps = {\r\n bidStrategy: {},\r\n isPercent: false,\r\n};\r\n\r\nconst DefaultBidValue = React.memo((props) => {\r\n const {\r\n selectedKey,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n switch (selectedKey) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return (\r\n <Bid field={fields.AdGroupBid} content={i18n.getString(_TL_('Default ad group bid'))} {...props} selectedKey={selectedKey} />\r\n );\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return (\r\n <Bid field={fields.AdGroupPercentBid} content={i18n.getString(_TL_('Default ad group percent bid'))} {...props} isPercent selectedKey={selectedKey} />\r\n );\r\n case bidStrategyOptionKeys.Commission:\r\n default:\r\n return null;\r\n }\r\n});\r\n\r\nDefaultBidValue.propTypes = {\r\n bidStrategy: PropTypes.shape({}),\r\n selectedKey: PropTypes.string.isRequired,\r\n setBidStrategy: PropTypes.func.isRequired,\r\n};\r\n\r\nDefaultBidValue.defaultProps = {\r\n bidStrategy: {},\r\n};\r\n\r\n\r\nconst AdditionalInfo = React.memo((props) => {\r\n const {\r\n selectedKey,\r\n isPayPerStayEnabled,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n switch (selectedKey) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return null;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return (\r\n <Fragment>\r\n <Percentage field={fields.PercentCpc} content={i18n.getString(_TL_('Maximum effective bid limit'))} {...props} />\r\n </Fragment>\r\n );\r\n case bidStrategyOptionKeys.Commission: {\r\n let detail;\r\n if (isPayPerStayEnabled) {\r\n detail = (\r\n <Fragment>\r\n <Percentage field={fields.Commission} content={i18n.getString(_TL_('Room price (per stay)'))} isPercent {...props} />\r\n </Fragment>);\r\n } else {\r\n detail = null;\r\n }\r\n return detail;\r\n }\r\n default:\r\n return null;\r\n }\r\n});\r\n\r\nAdditionalInfo.propTypes = {\r\n bidStrategy: PropTypes.shape({}),\r\n selectedKey: PropTypes.string.isRequired,\r\n setBidStrategy: PropTypes.func.isRequired,\r\n isPayPerStayEnabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nAdditionalInfo.defaultProps = {\r\n bidStrategy: {},\r\n};\r\n\r\nexport const defaultBidStrategy = {\r\n option: bidStrategyOptionKeys.ManualCpc,\r\n};\r\n\r\nexport const CampaignBidStrategy = React.memo((props) => {\r\n const {\r\n bidStrategy,\r\n setBidStrategy,\r\n scenario,\r\n getAdScheduleView,\r\n permissions,\r\n } = props;\r\n const isPayPerStayEnabled = permissions && permissions.dynamic && permissions.dynamic.PayPerStay;\r\n const mySetBidStrategy = useCallback((partialUpdate) => {\r\n const adScheduleView = getAdScheduleView();\r\n const data = {\r\n ...bidStrategy,\r\n ...partialUpdate,\r\n };\r\n if (adScheduleView != null) {\r\n if (data.option === bidStrategyOptionKeys.Commission) {\r\n adScheduleView.koModel.hideAdScheduleBidAdjustments(true);\r\n } else {\r\n adScheduleView.koModel.hideAdScheduleBidAdjustments(false);\r\n }\r\n }\r\n setBidStrategy(data);\r\n }, [bidStrategy, setBidStrategy, getAdScheduleView]);\r\n\r\n const isCreation = scenario === 'creation';\r\n const i18n = useContext(I18nContext);\r\n const howToManageYourBidsText = i18n.getString(_TL_('How do you want to manage your bids?'));\r\n const selectedKey = bidStrategy.option || bidStrategyOptionKeys.ManualCpc;\r\n const shouldShowError = checkShouldShowError(bidStrategy);\r\n const minMax = getBidStrategyMinMax({ selectedKey, bidStrategy });\r\n const errorCode = validateBidStrategy({ selectedKey, bidStrategy, ...minMax });\r\n\r\n return (\r\n <div className={classnames('campaign-bid-strategy', 'section')}>\r\n <div className=\"description\">\r\n <Label\r\n className=\"campaign-bid-strategy-title-labe\"\r\n >\r\n <SpanWithComponent\r\n SpanText={howToManageYourBidsText}\r\n Component={() => (\r\n <HelpPopup\r\n topic=\"pop_BA_CampaignGrids_BidStrategy\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: i18n.getString(_TL_('Bid Strategy')) })}\r\n />)}\r\n />\r\n </Label>\r\n </div>\r\n <div className=\"bid-strategy-options\">\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <Dropdown\r\n label={i18n.getString(_TL_('Bid management'))}\r\n options={bidStrategyOptions(i18n, isPayPerStayEnabled)}\r\n defaultSelectedKey={selectedKey}\r\n styles={{\r\n dropdown: {\r\n width: 487,\r\n marginTop: '8px',\r\n },\r\n }}\r\n className=\"campaign-bid-strategy-dropdown\"\r\n onChange={(e, option) => mySetBidStrategy({ option: option.key })}\r\n />\r\n <AdditionalInfo isPayPerStayEnabled={isPayPerStayEnabled} {...props} selectedKey={selectedKey} setBidStrategy={mySetBidStrategy} />\r\n </Stack>\r\n {isCreation && <DefaultBidValue {...props} selectedKey={selectedKey} setBidStrategy={mySetBidStrategy} />}\r\n {(selectedKey === bidStrategyOptionKeys.Commission && isPayPerStayEnabled) &&\r\n <div className={classnames('disclaimer', shouldShowError && errorCode !== null ? 'has-error' : 'has-no-error')}>\r\n <Disclaimer\r\n message={i18n.getString(_TL_('Not all criteria is applicable, only excluded locations & -100% devices bid adjustment is supported'))}\r\n />\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nCampaignBidStrategy.propTypes = {\r\n bidStrategy: PropTypes.shape({}),\r\n setBidStrategy: PropTypes.func.isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n getAdScheduleView: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n PayPerStay: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n};\r\n\r\nCampaignBidStrategy.defaultProps = {\r\n bidStrategy: {},\r\n};\r\n","import decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { getAccountCurrencyCode, numberErrorCode } from '@bingads-webui-campaign/hotel-common-upsert';\r\n\r\nexport const getDefaultBudget = (serverContext) => {\r\n const USDefaultBudget = (serverContext && serverContext.Permissions && serverContext.Permissions.IsDefaultBudgetExperimentationEnabled) ? 25 : 20;\r\n const budgetRange = serverContext && serverContext.BudgetRange;\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n if (accountCurrencyCode === 'USD') {\r\n return decimal.fromFloatToString(USDefaultBudget, 2);\r\n }\r\n return decimal.fromFloatToString((budgetRange && budgetRange.DailyRange && budgetRange.DailyRange.FloorValue > 20) ? budgetRange.DailyRange.FloorValue : 20, 2);\r\n};\r\n\r\nexport const getBudgetErrorMsg = ({ code, i18n, serverContext }) => {\r\n const budgetRange = serverContext && serverContext.BudgetRange;\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n const min = (budgetRange && budgetRange.DailyRange && budgetRange.DailyRange.FloorValue) || 0.05;\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n return i18n.getString(_TL_('Enter a budget amount'));\r\n case numberErrorCode.InValidNumber:\r\n return i18n.getString(_TL_('Field requires numeric value'));\r\n case numberErrorCode.OutOfRange:\r\n return i18n.getString(_TL_('Your budget should be greater than {{currencyCode}} {{min}} and less than your daily maximum. The daily max. is your monthly budget averaged out over the number of days left in the month.'), { currencyCode: accountCurrencyCode, min: decimal.fromFloatToString(min) });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateBudget = ({ value, serverContext }) => {\r\n const budgetRange = serverContext && serverContext.BudgetRange;\r\n const isValidNumber = typeof value === 'number' ? true : decimal.isValid(value);\r\n if (value == null || value === '') {\r\n return numberErrorCode.RequiredField;\r\n } else if (!isValidNumber) {\r\n return numberErrorCode.InValidNumber;\r\n } else if (budgetRange == null || budgetRange.DailyRange == null) {\r\n const number = decimal.fromLocalToFloat(value);\r\n if (number < 0.05) {\r\n return numberErrorCode.OutOfRange;\r\n }\r\n }\r\n const number = decimal.fromLocalToFloat(value);\r\n const min = budgetRange.DailyRange.FloorValue;\r\n const max = budgetRange.DailyRange.CeilingValue;\r\n if (number < min || number > max) {\r\n return numberErrorCode.OutOfRange;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const isBudgetValid = ({ value, serverContext }) => validateBudget({ value, serverContext }) == null;\r\n","/* eslint-disable no-script-url */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { Fragment, useState, useContext, useCallback } from 'react';\r\nimport classnames from 'classnames';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, ChoiceGroup, TextField, Link, Label } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { getAccountCurrencyCode } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { SpanWithComponent, ErrorString, checkShouldShowError, } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Button } from '@bingads-webui-react/primitive';\r\nimport PageContext from '@bingads-webui-static-legacy/page-context';\r\nimport { getDefaultBudget, validateBudget, getBudgetErrorMsg } from './utility';\r\n\r\nexport const individualBudgetOptionKeys = {\r\n true: 'true',\r\n};\r\n\r\nconst IndividualBudgetEditor = React.memo((props) => {\r\n const {\r\n budget,\r\n setBudget,\r\n showBudgetMinRecommend,\r\n curBudgetAmount,\r\n activity,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n const [isExpanded, setIsExpanded] = useState(false);\r\n const shouldShowError = checkShouldShowError(budget);\r\n const error = getBudgetErrorMsg({ code: validateBudget({ value: budget.amount, serverContext }), i18n, serverContext });\r\n\r\n const individualBudgetOptions = [\r\n {\r\n key: individualBudgetOptionKeys.true,\r\n text: i18n.getString(_TL_('Standard (we will intelligently pick and choose the right time to serve your ads)')),\r\n },\r\n ];\r\n\r\n const toggleExpanded = () => {\r\n setIsExpanded(!isExpanded);\r\n };\r\n\r\n const currencySymbol = i18n.getCurrencySymbol(PageContext.AccountCurrencyCode);\r\n const applyRecommend = () => {\r\n if (activity) {\r\n activity.trace('BCCForBudgetMinimumRecommendation: apply');\r\n }\r\n setBudget({ amount: (curBudgetAmount * 0.5).toFixed(2) * 1, isDirty: true });\r\n };\r\n\r\n if (activity && showBudgetMinRecommend) {\r\n activity.trace('BCCForBudgetMinimumRecommendation: show');\r\n }\r\n\r\n return (\r\n <div className=\"individual-budget-editor\">\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <TextField\r\n value={budget.amount}\r\n placeholder={i18n.getString(_TL_('Example: {{defaultBudget}}'), { defaultBudget: getDefaultBudget(serverContext) })}\r\n aria-label={i18n.getString(_TL_('Campaign budget per day by {{item}}'), { item: accountCurrencyCode })}\r\n styles={{ fieldGroup: { width: 110 } }}\r\n onChange={(e, value) => {\r\n setBudget({ amount: value, isDirty: true });\r\n }}\r\n />\r\n <span>{i18n.getString(_TL_('{{item}}'), { item: accountCurrencyCode })}</span>\r\n </Stack>\r\n {shouldShowError && error && <ErrorString error={error} />}\r\n <Stack>\r\n <Link className=\"expander\" onClick={toggleExpanded}>\r\n {i18n.getString(_TL_('Daily budget options'))}\r\n </Link>\r\n {isExpanded && (\r\n <ChoiceGroup\r\n options={individualBudgetOptions}\r\n defaultSelectedKey={budget.individualOption || individualBudgetOptionKeys.true}\r\n onChange={(e, option) => setBudget({ individualOption: option.key })}\r\n />\r\n )}\r\n </Stack>\r\n {showBudgetMinRecommend ?\r\n <div className=\"alert alert-info budget-alert\">\r\n <div className=\"alert-image\" />\r\n <div className=\"alert-info-inline\">\r\n <span>{i18n.getString(_TL_('To best optimize your campaigns, we recommend a minimum budget of '))}</span>\r\n <span className=\"bold\">{currencySymbol + (curBudgetAmount * 0.5).toFixed(2)}</span>\r\n <span>{i18n.getString(_TL_('.'))}</span>\r\n </div>\r\n <div className=\"alert-budget-button\">\r\n <Button\r\n className=\"apply-budget\"\r\n onClick={applyRecommend}\r\n >\r\n {i18n.getString(_TL_('Apply recommendation'))}\r\n </Button>\r\n </div>\r\n\r\n </div> : null}\r\n </div>\r\n );\r\n});\r\n\r\nIndividualBudgetEditor.propTypes = {\r\n setBudget: PropTypes.func.isRequired,\r\n budget: PropTypes.shape({}),\r\n showBudgetMinRecommend: PropTypes.bool,\r\n curBudgetAmount: PropTypes.number,\r\n activity: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nIndividualBudgetEditor.defaultProps = {\r\n budget: {},\r\n showBudgetMinRecommend: false,\r\n curBudgetAmount: 0,\r\n};\r\n\r\nexport const budgetOptionKeys = {\r\n Individual: 'Individual',\r\n};\r\n\r\nconst budgetOptions = props => [\r\n {\r\n key: budgetOptionKeys.Individual,\r\n text: props.i18n.getString(_TL_('Spend/Day (avg.)')),\r\n onRenderField: (params, render) => (\r\n <Fragment>\r\n {render(params)}\r\n {params.checked && <IndividualBudgetEditor {...params} {...props} />}\r\n </Fragment>\r\n ),\r\n styles: {\r\n root: {\r\n '& label': {\r\n marginBottom: '8px',\r\n fontWeight: 'unset',\r\n },\r\n },\r\n },\r\n },\r\n];\r\n\r\nexport const defaultBudget = {\r\n option: budgetOptionKeys.Individual,\r\n individualOption: individualBudgetOptionKeys.true,\r\n amount: '25',\r\n};\r\n\r\nexport const CampaignBudget = React.memo((props) => {\r\n const {\r\n budget,\r\n setBudget,\r\n } = props;\r\n\r\n const mySetBudget = useCallback((partialUpdate) => {\r\n setBudget({\r\n ...budget,\r\n ...partialUpdate,\r\n });\r\n }, [budget, setBudget]);\r\n\r\n const i18n = useContext(I18nContext);\r\n const campaingBudgetText = i18n.getString(_TL_('How much would you like to spend?'));\r\n const labelId = 'campaign-budget-label';\r\n return (\r\n <div className={classnames('campaign-budget', 'section')}>\r\n <Label\r\n className=\"campaign-budget-label\"\r\n id={labelId}\r\n >\r\n <SpanWithComponent\r\n SpanText={campaingBudgetText}\r\n Component={() => (\r\n <HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Budget_SharedBudget\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: i18n.getString(_TL_('Campaign budget')) })}\r\n />)}\r\n />\r\n </Label>\r\n <ChoiceGroup\r\n defaultSelectedKey={budget.option || budgetOptionKeys.Individual}\r\n onChange={(e, option) => mySetBudget({ option: option.key })}\r\n options={budgetOptions({ ...props, i18n, setBudget: mySetBudget })}\r\n ariaLabelledBy={labelId}\r\n />\r\n </div>\r\n );\r\n});\r\n\r\nCampaignBudget.propTypes = {\r\n budget: PropTypes.shape({}),\r\n setBudget: PropTypes.func.isRequired,\r\n};\r\n\r\nCampaignBudget.defaultProps = {\r\n budget: {},\r\n};\r\n","\r\nimport {\r\n deviceDefaultSetting,\r\n defaultLocationData,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { audienceAdsOptionKeys, defaultAdFormat } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { defaultName } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { defaultBidStrategy } from './bid-strategy';\r\nimport { defaultBudget } from './budget';\r\n\r\nconst fields = {\r\n name: 'name',\r\n budget: 'budget',\r\n bidStrategy: 'bidStrategy',\r\n device: 'device',\r\n location: 'location',\r\n adSchedule: 'adSchedule',\r\n adFormat: 'adFormat',\r\n audienceAds: 'audienceAds',\r\n};\r\n\r\nconst {\r\n name,\r\n budget,\r\n bidStrategy,\r\n device,\r\n location,\r\n adSchedule,\r\n adFormat,\r\n audienceAds,\r\n} = fields;\r\n\r\nexport const fieldsToCheck = [adSchedule, audienceAds, name, budget, bidStrategy, device, location, adFormat];\r\n\r\nexport const defaultCampaignBasicData = {\r\n name: {\r\n value: defaultName,\r\n },\r\n adFormat: defaultAdFormat,\r\n budget: defaultBudget,\r\n bidStrategy: defaultBidStrategy,\r\n audienceAds: {\r\n parentLevelSettings: {},\r\n currentLevelSettings: { option: audienceAdsOptionKeys.Increase, value: 0 },\r\n useParentLevel: false,\r\n },\r\n dayTimeRanges: [],\r\n urlOptions: {},\r\n location: defaultLocationData,\r\n exclusions: {},\r\n device: {\r\n parentLevelSettings: [...deviceDefaultSetting],\r\n currentLevelSettings: [...deviceDefaultSetting],\r\n useParentLevel: false,\r\n },\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useContext } from 'react';\r\nimport _ from 'underscore';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport PropTypes from 'prop-types';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { usePatch, globalErrorMsg, AdFormat, getAccountCurrencyCode, bidStrategyOptionKeys, isAdFormatValid } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { checkShouldShowError, checkShouldShowErrors, CampaignName, isCampaignNameValid, LocalizationKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Collapse, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport classNames from 'classnames';\r\nimport { Link, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { CampaignBudget } from './budget';\r\nimport { CampaignBidStrategy } from './bid-strategy';\r\nimport { isBudgetValid } from './budget/utility';\r\nimport { isBidStrategyValid, fields } from './bid-strategy/utility';\r\n\r\nconst getStyles = () =>\r\n ({\r\n basicCampaignSection: {\r\n '& label': {\r\n padding: 'unset',\r\n },\r\n '& .section ~ .section': {\r\n marginTop: '24px',\r\n },\r\n '& .description': {\r\n marginBottom: '8px',\r\n },\r\n '& label, .helpbutton': {\r\n display: 'inline-block',\r\n },\r\n '& .individual-budget-editor': {\r\n padding: '4px 0 10px 26px',\r\n },\r\n },\r\n });\r\n\r\nexport const CampaignBasic = (props) => {\r\n const {\r\n campaign,\r\n patchCampaign,\r\n scenario,\r\n getAdScheduleView,\r\n permissions,\r\n activity,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const classes = useDefaultStyles(getStyles);\r\n const setName = usePatch(patchCampaign, 'name');\r\n const setBudget = usePatch(patchCampaign, 'budget');\r\n const setAdFormat = usePatch(patchCampaign, 'adFormat');\r\n const setBidStrategy = usePatch(patchCampaign, 'bidStrategy');\r\n const isCreation = scenario === 'creation';\r\n\r\n const allPanelItems = ['campaign', 'budget', 'bidStrategy'];\r\n const [activeKeys, setActiveKeys] = useState(allPanelItems);\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n const getBudgetTitleDetails = () => {\r\n if (campaign.budget && campaign.budget.amount) {\r\n if (campaign.budget.option === 'Individual') {\r\n const { amount } = campaign.budget;\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n return i18n.getString(_TL_('Spend {{amount}} {{accountCurrencyCode}}/Day (avg.)'), { amount, accountCurrencyCode });\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n const getBidStrategyTitleDetails = () => {\r\n const { bidStrategy } = campaign;\r\n const percentageOrBid = bidStrategy && bidStrategy[campaign.bidStrategy.option];\r\n const accountCurrencyCode = getAccountCurrencyCode(serverContext);\r\n let detail = '';\r\n switch (campaign.bidStrategy.option) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n detail = `${i18n.getString(_TL_('Bid management'))}: ${i18n.getString(LocalizationKeys[campaign.bidStrategy.option])}`;\r\n break;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n detail = `${i18n.getString(_TL_('Bid management'))}: ${i18n.getString(LocalizationKeys[campaign.bidStrategy.option])}, ${i18n.getString(_TL_('Maximum effective bid limit'))}: ${percentageOrBid ? `${percentageOrBid} ${accountCurrencyCode}` : ''}`;\r\n break;\r\n case bidStrategyOptionKeys.Commission:\r\n detail = `${i18n.getString(_TL_('Bid management'))}: ${i18n.getString(LocalizationKeys[campaign.bidStrategy.option])}, ${i18n.getString(_TL_('Room price (per stay)'))}: ${percentageOrBid ? `${percentageOrBid}%` : ''}`;\r\n break;\r\n default:\r\n detail = '';\r\n break;\r\n }\r\n if (isCreation) {\r\n switch (campaign.bidStrategy.option) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n detail += `, ${i18n.getString(_TL_('Default ad group bid'))}: ${bidStrategy[fields.AdGroupBid] ? `${bidStrategy[fields.AdGroupBid]} ${accountCurrencyCode}` : ''}`;\r\n break;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n detail += `, ${i18n.getString(_TL_('Default ad group percent bid'))}: ${bidStrategy[fields.AdGroupPercentBid] ? `${bidStrategy[fields.AdGroupPercentBid]}%` : ''}`;\r\n break;\r\n case bidStrategyOptionKeys.Commission:\r\n break;\r\n default:\r\n detail = '';\r\n break;\r\n }\r\n }\r\n return detail;\r\n };\r\n\r\n const getCampaignTitleDetail = () => {\r\n const details = [];\r\n details.push(`${i18n.getString(_TL_('Campaign name'))}: ${campaign.name.value ? campaign.name.value : ''}`);\r\n if (campaign.adFormat) {\r\n const entries = ['HPA', 'PPA'];\r\n const adFormatValue = _.compact(entries.map((entry) => { if (campaign.adFormat[entry]) { return entry; } return false; })).join(', ');\r\n if (adFormatValue) {\r\n const IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n const detailString = IsRenameHotelToLodgingEnabled ? `${i18n.getString(_TL_('Property ad format'))}: ${adFormatValue}` : `${i18n.getString(_TL_('Hotel ad format'))}: ${adFormatValue}`;\r\n details.push(detailString);\r\n }\r\n }\r\n return details.join(', ');\r\n };\r\n const showBudgetMinRecommend = permissions.dynamic.BCCBudgetImprovementEnabled && !isCreation && campaign.curBudgetAmount && campaign.curBudgetAmount >= 0.1 && campaign.budget.amount && ((campaign.budget.amount * 1.0) < (campaign.curBudgetAmount * 0.5).toFixed(2));\r\n\r\n return (\r\n <div className={classNames('basic-campaign-section', classes.basicCampaignSection)}>\r\n <Stack horizontalAlign=\"end\" tokens={{ padding: '0 0 12px 0' }}>\r\n <Link className=\"jumbo-card-control-all-btn\" onClick={onCollapseAll}>{activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}</Link>\r\n </Stack>\r\n <Collapse activeKeys={activeKeys} setActiveKeys={setActiveKeys}>\r\n <Collapse.Panel\r\n key=\"campaign\"\r\n title={<TextTitle titleKey={_TL_('Campaign')} details={isCreation ? getCampaignTitleDetail() : campaign.name.value} />}\r\n error={((!isCampaignNameValid(campaign.name.value) && checkShouldShowError(campaign.name)) || !isAdFormatValid(campaign.adFormat) || checkShouldShowErrors(campaign.name)) ? globalErrorMsg : ''}\r\n >\r\n <CampaignName name={campaign.name} setName={setName} />\r\n {isCreation && <AdFormat adFormat={campaign.adFormat} setAdFormat={setAdFormat} scenario={scenario} permissions={permissions} />}\r\n </Collapse.Panel>\r\n <Collapse.Panel\r\n key=\"budget\"\r\n title={<TextTitle titleKey={_TL_('Budget')} details={getBudgetTitleDetails()} />}\r\n error={!isBudgetValid({ value: campaign.budget.amount, serverContext }) && checkShouldShowError(campaign.budget) ? globalErrorMsg : ''}\r\n >\r\n <CampaignBudget showBudgetMinRecommend={showBudgetMinRecommend} curBudgetAmount={campaign.curBudgetAmount} budget={campaign.budget} setBudget={setBudget} activity={activity} />\r\n </Collapse.Panel>\r\n <Collapse.Panel\r\n key=\"bidStrategy\"\r\n title={<TextTitle titleKey={_TL_('Bid strategy')} details={getBidStrategyTitleDetails()} />}\r\n error={!isBidStrategyValid({ bidStrategy: campaign.bidStrategy, isCreation, serverContext }) && checkShouldShowError(campaign.bidStrategy) ? globalErrorMsg : ''}\r\n >\r\n <CampaignBidStrategy permissions={permissions} bidStrategy={campaign.bidStrategy} setBidStrategy={setBidStrategy} scenario={scenario} getAdScheduleView={getAdScheduleView} />\r\n </Collapse.Panel>\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nCampaignBasic.propTypes = {\r\n campaign: PropTypes.shape({}).isRequired,\r\n patchCampaign: PropTypes.func.isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n errMsg: PropTypes.shape({}),\r\n getAdScheduleView: PropTypes.func.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsRenameHotelToLodgingEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n activity: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nCampaignBasic.defaultProps = {\r\n errMsg: {},\r\n permissions: {\r\n dynamic: {\r\n IsRenameHotelToLodgingEnabled: false,\r\n },\r\n },\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport classnames from 'classnames';\r\nimport { Link, Label, Stack } from '@bingads-webui-react/fabric-control';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useMemo, useContext, useState, useCallback, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AdSchedule,\r\n BaseExclusion, UrlOptions, AudienceAds, usePatch,\r\n getUrlOptionsDetails, getExclusionsDetails, getAudienceAdsDetails,\r\n globalErrorMsg, isAudienceAdsValid } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { AdDistribution } from '@bingads-webui-campaign/ad-distribution';\r\nimport { checkShouldShowError, getAdScheduleDetails } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Collapse, TextTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { useCurrentCampaign, useCurrentAdGroup } from '@bingads-webui-campaign-react/use-current-scope-entity';\r\nimport { scenarios } from '../shared';\r\n\r\nconst getStyles = () =>\r\n ({\r\n advancedSettingsSection: {\r\n marginTop: '36px',\r\n '& .displayNone': {\r\n display: 'none',\r\n },\r\n '& .expandedImage:before, .expanderImage:before': {\r\n marginRight: '12px',\r\n },\r\n },\r\n advancedSettingsContainer: {\r\n marginLeft: '32px',\r\n },\r\n });\r\n\r\nfunction getAdDistributionOption() {\r\n return {\r\n AdDistribution: 'BingYahooAndSearchPartners',\r\n campaignType: 'hotel',\r\n Languages: ['All'],\r\n };\r\n}\r\n\r\nfunction getAdScheduleOption(campaign, isCreation) {\r\n const model = {\r\n dayTimeRanges: campaign.dayTimeRanges,\r\n timeZone: campaign.TimeZone,\r\n adScheduleUseSearcherTimeZone: campaign.AdScheduleUseSearcherTimeZone,\r\n };\r\n return {\r\n model,\r\n level: 'campaign',\r\n showDateSettings: isCreation,\r\n hideAdScheduleBidAdjustments: campaign.bidStrategy.option === 'Commission',\r\n };\r\n}\r\n\r\nexport const AdvancedSettings = (props) => {\r\n const {\r\n campaign,\r\n scenario,\r\n errMsg,\r\n patchErrMsg,\r\n patchCampaign,\r\n getAdScheduleView,\r\n setAdScheduleView,\r\n setAdDistributionView,\r\n getAdDistributionView,\r\n setUrlOptionsView,\r\n setSiteExclusionView,\r\n setIPExclusionView,\r\n getUrlOptionsValues,\r\n getExclusionsValues,\r\n advancedSettinsApiErrors,\r\n isDataFetched,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getStyles);\r\n const currentCampaign = useCurrentCampaign();\r\n const currentAdgroup = useCurrentAdGroup();\r\n const campaignId = currentCampaign ? currentCampaign.Id : null;\r\n const adgroupId = currentAdgroup ? currentAdgroup.Id : null;\r\n const setAudienceAds = usePatch(patchCampaign, 'audienceAds');\r\n const isCreation = scenario === scenarios.creation;\r\n\r\n const allPanelItems = _.compact(['adSchedule', 'audienceAds', isCreation && 'adDistribution', 'urlOptions', 'baseExclusion']);\r\n const [activeKeys, setActiveKeys] = useState(['adSchedule', 'audienceAds', 'adDistribution']);\r\n\r\n useEffect(() => {\r\n const hasApiErrorKeys = Object.keys(advancedSettinsApiErrors);\r\n const needToExpandKeys = [];\r\n allPanelItems.forEach((key) => {\r\n if (hasApiErrorKeys.includes(key) && advancedSettinsApiErrors[key] && advancedSettinsApiErrors[key].length) {\r\n patchErrMsg(key, globalErrorMsg);\r\n needToExpandKeys.push(key);\r\n }\r\n });\r\n setActiveKeys(activeKeys.concat(needToExpandKeys));\r\n }, [advancedSettinsApiErrors]);\r\n\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n // After collecting the needed data, need to ensure the view is created once.\r\n const adScheduleOption = useMemo(\r\n () => getAdScheduleOption(campaign, isCreation),\r\n [campaign.dayTimeRanges, campaign.AdScheduleUseSearcherTimeZone, isCreation]\r\n );\r\n\r\n const adDistributionOption = useMemo(\r\n () => getAdDistributionOption(),\r\n []\r\n );\r\n\r\n\r\n const setUrlOptionsActiveCallback = useCallback(() => { patchCampaign('urlOptions', getUrlOptionsValues()); }, []);\r\n const setExclusionsActiveCallback = useCallback(() => { patchCampaign('exclusions', getExclusionsValues()); }, []);\r\n\r\n return (\r\n <div className={classnames('advanced-settings-section', classes.advancedSettingsSection)}>\r\n <Stack horizontal horizontalAlign=\"space-between\" tokens={{ padding: '0 0 12px 0' }}>\r\n <Label>{i18n.getString(_TL_('ADVANCED SETTINGS'))}</Label>\r\n <Link className=\"jumbo-card-control-all-btn\" onClick={onCollapseAll}>{activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}</Link>\r\n </Stack>\r\n <Collapse allPanelItems={allPanelItems} checkItems activeKeys={activeKeys} setActiveKeys={setActiveKeys}>\r\n {isDataFetched &&\r\n <Collapse.Panel\r\n key=\"adSchedule\"\r\n title={<TextTitle\r\n titleKey={_TL_('Ad schedule')}\r\n topicKey=\"pop_BA_Targeting_DayTime\"\r\n details={getAdScheduleDetails(i18n, getAdScheduleView())}\r\n />}\r\n error={errMsg.adSchedule}\r\n >\r\n <AdSchedule\r\n key=\"ad-schedule\"\r\n setAdScheduleView={setAdScheduleView}\r\n options={adScheduleOption}\r\n getAdScheduleView={getAdScheduleView}\r\n getCreatedView={getAdScheduleView}\r\n managed\r\n />\r\n </Collapse.Panel>}\r\n <Collapse.Panel\r\n key=\"audienceAds\"\r\n title={<TextTitle\r\n titleKey={_TL_('Audience ads')}\r\n details={getAudienceAdsDetails({ rawData: campaign.audienceAds, i18n })}\r\n />}\r\n error={!isAudienceAdsValid(campaign.audienceAds) && checkShouldShowError(campaign.audienceAds) ? globalErrorMsg : ''}\r\n >\r\n <AudienceAds key=\"audience-ads\" setAudienceAds={setAudienceAds} audienceAds={campaign.audienceAds} />\r\n </Collapse.Panel>\r\n {isCreation &&\r\n <Collapse.Panel\r\n key=\"adDistribution\"\r\n title={<TextTitle\r\n titleKey={_TL_('Ad distribution')}\r\n topicKey=\"pop_BA_NewCampaignCreate_AdDistribution\"\r\n details={(() => {\r\n const view = getAdDistributionView();\r\n return view ? view.getTranslatedOption() : '';\r\n })()}\r\n />}\r\n error={errMsg.adDistribution}\r\n >\r\n <AdDistribution key=\"ad-distribution\" setAdDistributionView={setAdDistributionView} options={adDistributionOption} />\r\n </Collapse.Panel>}\r\n {!isCreation &&\r\n <Collapse.Panel key=\"urlOptions\" title={<TextTitle titleKey={_TL_('URL options')} details={getUrlOptionsDetails(i18n, campaign.urlOptions)} />} error={errMsg.urlOptions} setActiveCallback={setUrlOptionsActiveCallback}>\r\n <UrlOptions\r\n key=\"url-options\"\r\n setUrlOptionsView={setUrlOptionsView}\r\n options={{\r\n level: 'campaign', campaignId, adgroupId, model: campaign.urlOptions,\r\n }}\r\n />\r\n </Collapse.Panel>}\r\n {\r\n scenario === 'settings' &&\r\n <Collapse.Panel key=\"baseExclusion\" title={<TextTitle titleKey={_TL_('Website & IP address exclusions')} details={getExclusionsDetails(i18n, campaign.exclusions)} />} error={errMsg.baseExclusion} setActiveCallback={setExclusionsActiveCallback}>\r\n <BaseExclusion\r\n key=\"base-exclusion\"\r\n patchData={patchCampaign}\r\n setSiteExclusionView={setSiteExclusionView}\r\n setIPExclusionView={setIPExclusionView}\r\n options={{\r\n level: 'campaign', campaignId, adgroupId, showSiteExclusion: true, showIPExclusion: true,\r\n }}\r\n />\r\n </Collapse.Panel>\r\n }\r\n </Collapse>\r\n </div>\r\n );\r\n};\r\n\r\nAdvancedSettings.propTypes = {\r\n campaign: PropTypes.shape({}).isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n errMsg: PropTypes.shape({}),\r\n patchErrMsg: PropTypes.func.isRequired,\r\n patchCampaign: PropTypes.func.isRequired,\r\n setAdScheduleView: PropTypes.func.isRequired,\r\n getAdScheduleView: PropTypes.func.isRequired,\r\n setAdDistributionView: PropTypes.func.isRequired,\r\n getAdDistributionView: PropTypes.func.isRequired,\r\n setUrlOptionsView: PropTypes.func.isRequired,\r\n setSiteExclusionView: PropTypes.func.isRequired,\r\n setIPExclusionView: PropTypes.func.isRequired,\r\n getUrlOptionsValues: PropTypes.func.isRequired,\r\n getExclusionsValues: PropTypes.func.isRequired,\r\n advancedSettinsApiErrors: PropTypes.shape({}),\r\n isDataFetched: PropTypes.bool.isRequired,\r\n};\r\nAdvancedSettings.defaultProps = {\r\n errMsg: {},\r\n advancedSettinsApiErrors: {},\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable no-plusplus */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useContext, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n usePatch,\r\n getGridTargetTitleDetails,\r\n getLocationTargetTitleDetails,\r\n getLocationTargetErrorMessage,\r\n globalErrorMsg,\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ErrorString, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { Collapse, ToggleTitle } from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { Link, Stack, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nimport {\r\n DeviceTargetSetting,\r\n LocationTargetSetting,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { defaultCampaignBasicData } from './default-value';\r\n\r\nconst getStyles = () => ({\r\n CampaignTargets: {\r\n marginTop: '40px',\r\n },\r\n title: {\r\n fontWeight: 600,\r\n fontSize: '20px',\r\n },\r\n subtitle: {\r\n marginBottom: '16px',\r\n fontSize: '20px',\r\n },\r\n mt33: {\r\n marginTop: '33px',\r\n },\r\n});\r\n\r\n\r\nexport const CampaignTargets = (props) => {\r\n const {\r\n campaign,\r\n patchCampaign,\r\n errMsg,\r\n patchErrMsg,\r\n targetsApiErrors,\r\n patchTargetsApiErrMsg,\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const allPanelItems = ['location', 'device'];\r\n const [activeKeys, setActiveKeys] = useState(['location', 'device']);\r\n useEffect(() => {\r\n const hasApiErrorKeys = Object.keys(targetsApiErrors);\r\n const needToExpandKeys = [];\r\n allPanelItems.forEach((key) => {\r\n if (hasApiErrorKeys.includes(key) && targetsApiErrors[key] && targetsApiErrors[key].length) {\r\n patchErrMsg(key, globalErrorMsg);\r\n needToExpandKeys.push(key);\r\n }\r\n });\r\n setActiveKeys(activeKeys.concat(hasApiErrorKeys));\r\n }, [targetsApiErrors]);\r\n const onCollapseAll = () => {\r\n if (activeKeys.length) {\r\n setActiveKeys([]);\r\n } else {\r\n setActiveKeys(allPanelItems);\r\n }\r\n };\r\n\r\n const setLocation = usePatch(patchCampaign, 'location');\r\n const setDevice = usePatch(patchCampaign, 'device');\r\n\r\n const {\r\n location, device, bundleCountries, bundleLocationCriterions,\r\n } = campaign;\r\n\r\n const {\r\n device: { currentLevelSettings: deviceDefaultCurrentLevelSettings },\r\n } = defaultCampaignBasicData;\r\n\r\n const resetTarget = (setFn, targetData, targetDefaultCurrentLevelSettings, targetName) => {\r\n let tempCurrentLevelSettings = [...targetData.currentLevelSettings];\r\n for (let i = 0; i < tempCurrentLevelSettings.length; i++) {\r\n if (tempCurrentLevelSettings[i]) {\r\n const tempId = tempCurrentLevelSettings[i].Id;\r\n const tempObj = { ...targetDefaultCurrentLevelSettings[i] };\r\n if (tempCurrentLevelSettings[i].Id) {\r\n tempCurrentLevelSettings[i] = tempObj;\r\n tempCurrentLevelSettings[i].Id = tempId;\r\n tempCurrentLevelSettings[i].Status = 'Deleted';\r\n } else {\r\n tempCurrentLevelSettings.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n tempCurrentLevelSettings = targetDefaultCurrentLevelSettings.concat(tempCurrentLevelSettings);\r\n setFn({ ...targetData, currentLevelSettings: tempCurrentLevelSettings, reset: true });\r\n patchTargetsApiErrMsg(targetName, []);\r\n };\r\n\r\n // Turn off --- you set nothing, you use default settings 0 0 0\r\n // Turn on --- you override 0 0 0\r\n const onChangeToggle = (fn, key, value) => {\r\n fn({ ...campaign[key], useParentLevel: !value });\r\n };\r\n\r\n const campaignBidStrategyType = campaign && campaign.bidStrategy && campaign.bidStrategy.option;\r\n const locationTitle = (<ToggleTitle\r\n titleKey={_TL_('Location')}\r\n topicKey=\"pop_BA_Settings_LocationTargeting\"\r\n details={getLocationTargetTitleDetails(i18n, location, false, campaignBidStrategyType)}\r\n isChecked={!location.useParentLevel}\r\n handleChangeToggle={(_e, value) => {\r\n if (location.useParentLevel === true &&\r\n location.bidMode === true &&\r\n location.currentLevelSettings.targetOption === locationTargetsOptionKeys.everywhere) {\r\n setLocation({\r\n ...location,\r\n useParentLevel: false,\r\n bidMode: false,\r\n errors: undefined,\r\n });\r\n } else {\r\n setLocation({\r\n ...location,\r\n useParentLevel: !value,\r\n errors: undefined,\r\n });\r\n }\r\n }}\r\n />);\r\n\r\n const deviceTitle = (<ToggleTitle\r\n titleKey={_TL_('Device')}\r\n topicKey=\"pop_BA_CampaignCreate_AudTargets_Device\"\r\n details={device.useParentLevel ? '' : getGridTargetTitleDetails(i18n, device)}\r\n isChecked={!device.useParentLevel}\r\n handleChangeToggle={(_e, value) => { onChangeToggle(setDevice, 'device', value); }}\r\n />);\r\n\r\n return (\r\n <div className={classnames('campaign-targets-section', classes.CampaignTargets)}>\r\n <div>\r\n <div className={classes.title}>\r\n {i18n.getString(_TL_('Campaign targets'))}\r\n </div>\r\n <Stack horizontal horizontalAlign=\"space-between\" tokens={{ padding: '0 0 12px 0' }}>\r\n <span className={classes.description}> {i18n.getString(_TL_('Who do you want to target for this campaign? You can select any combination of the criteria below.'))}</span>\r\n <Link className=\"jumbo-card-control-all-btn\" onClick={onCollapseAll}>{activeKeys.length ? i18n.getString(_TL_('Collapse all')) : i18n.getString(_TL_('Expand all'))}</Link>\r\n </Stack>\r\n </div>\r\n\r\n <Collapse activeKeys={activeKeys} setActiveKeys={setActiveKeys}>\r\n <Collapse.Panel\r\n key=\"location\"\r\n title={locationTitle}\r\n error={getLocationTargetErrorMessage(location, campaignBidStrategyType)}\r\n >\r\n <LocationTargetSetting\r\n data={location}\r\n setData={setLocation}\r\n bundleCountries={bundleCountries}\r\n bundleLocationCriterions={bundleLocationCriterions}\r\n scope={props.scope}\r\n bidStrategyType={campaignBidStrategyType}\r\n />\r\n </Collapse.Panel>\r\n <Collapse.Panel key=\"device\" title={deviceTitle} error={errMsg.device}>\r\n <DeviceTargetSetting\r\n data={device}\r\n setData={setDevice}\r\n patchErrMsg={patchErrMsg}\r\n patchTargetsApiErrMsg={patchTargetsApiErrMsg}\r\n apiErrors={targetsApiErrors.device}\r\n bidStrategyType={campaignBidStrategyType}\r\n />\r\n {!device.useParentLevel && targetsApiErrors.device && targetsApiErrors.device.map(item => (<ErrorString error={item} />))}\r\n <Stack horizontal horizontalAlign=\"end\" className={classes.mt33}>\r\n <DefaultButton text={i18n.getString(_TL_('Reset'))} disabled={device.useParentLevel} onClick={() => { resetTarget(setDevice, device, deviceDefaultCurrentLevelSettings, 'device'); }} />\r\n </Stack>\r\n </Collapse.Panel>\r\n </Collapse>\r\n </div>);\r\n};\r\n\r\nCampaignTargets.propTypes = {\r\n campaign: PropTypes.shape({}),\r\n errMsg: PropTypes.shape({}),\r\n patchCampaign: PropTypes.func.isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n patchErrMsg: PropTypes.func.isRequired,\r\n targetsApiErrors: PropTypes.shape({}),\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n};\r\n\r\nCampaignTargets.defaultProps = {\r\n campaign: {},\r\n errMsg: {},\r\n targetsApiErrors: {},\r\n patchTargetsApiErrMsg() {},\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\n\r\nexport const CampaignTitle = React.memo(({ permissions }) => {\r\n const i18n = useContext(I18nContext);\r\n const IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n return (\r\n <div className={classnames('campaign-title', 'section')}>\r\n <div className=\"title\">\r\n { IsRenameHotelToLodgingEnabled ? i18n.getString(_TL_('Create a lodging campaign')) : i18n.getString(_TL_('Create a hotel campaign'))}\r\n </div>\r\n </div>);\r\n});\r\nCampaignTitle.propTypes = {\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsRenameHotelToLodgingEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nCampaignTitle.defaultProps = {\r\n permissions: {\r\n dynamic: {\r\n IsRenameHotelToLodgingEnabled: false,\r\n },\r\n },\r\n};\r\n","/* eslint-disable no-plusplus */\r\nimport _ from 'underscore';\r\n\r\nfunction commonConvertTargetStateToTargetSchema({\r\n campaign, target, CriterionType, targetCriterion,\r\n}) {\r\n const { useParentLevel } = target;\r\n const currentLevelSettings = [...target.currentLevelSettings];\r\n let newCurrentLevelSettings = [];\r\n const targetSchema = [];\r\n if (useParentLevel) {\r\n for (let i = 0; i < currentLevelSettings.length; i++) {\r\n const item = { ...currentLevelSettings[i] };\r\n if (item.Id) {\r\n item.Status = 'Deleted';\r\n newCurrentLevelSettings.push(item);\r\n } else {\r\n currentLevelSettings.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n } else {\r\n newCurrentLevelSettings = currentLevelSettings;\r\n }\r\n newCurrentLevelSettings.sort(a => (a.Status === 'Deleted' ? -1 : 1)); // Place the deleted item in front of the array\r\n const parentParams = {};\r\n if (campaign.Id) {\r\n parentParams.Campaign = { Id: campaign.Id };\r\n } else {\r\n parentParams.CampaignName = campaign.name.value;\r\n }\r\n for (let i = 0; i < newCurrentLevelSettings.length; i++) {\r\n const item = newCurrentLevelSettings[i];\r\n if (item) {\r\n targetSchema.push({\r\n Id: item.Id,\r\n CriterionType,\r\n ...parentParams,\r\n Status: item.Status,\r\n Criterion: {\r\n BidAdjustment: item.bidAdjustmentDropdown === 'Increase by' ? item.bidAdjustmentInput - 0 : -(item.bidAdjustmentInput - 0),\r\n Type: CriterionType,\r\n ...targetCriterion(item),\r\n },\r\n });\r\n }\r\n }\r\n return { targetSchema, currentLevelSettings: newCurrentLevelSettings };\r\n}\r\n\r\nexport const convertDeviceStateToDeviceSchema = (campaign, initTargets) => {\r\n const DeviceMap = {\r\n Tablet: 'Tablets',\r\n Computer: 'Computers',\r\n Smartphone: 'Smartphones',\r\n };\r\n const currentDeviceSchema = commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.device,\r\n CriterionType: 'Device',\r\n targetCriterion(item) {\r\n return { DeviceCriterion: { DeviceName: DeviceMap[item.device] } };\r\n },\r\n });\r\n\r\n let currentDeviceSchemaResult = [];\r\n if (!_.isEqual(initTargets.device, currentDeviceSchema.currentLevelSettings)) {\r\n currentDeviceSchemaResult = currentDeviceSchema.targetSchema;\r\n }\r\n return currentDeviceSchemaResult;\r\n};\r\n\r\nexport const convertABWStateToABWSchema = campaign => commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.ABW,\r\n CriterionType: 'AdvanceBookingWindow',\r\n targetCriterion(item) {\r\n return { AdvanceBookingWindowCriterion: { MinDays: item.minimumDays, MaxDays: item.maximumDays } };\r\n },\r\n});\r\n\r\nexport const convertCheckInDayStateToCheckInDaySchema = campaign => commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.checkinDay,\r\n CriterionType: 'CheckInDay',\r\n targetCriterion(item) {\r\n return { CheckInDayCriterion: { CheckInDay: item.day } };\r\n },\r\n});\r\n\r\nexport const convertLengthofStayStateToLengthofStaySchema = campaign => commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.lengthOfStay,\r\n CriterionType: 'LengthofStay',\r\n targetCriterion(item) {\r\n return { LengthOfStayCriterion: { MinNights: item.minimumNumber, MaxNights: item.maximumNumber } };\r\n },\r\n});\r\n\r\nexport const convertCheckInDateStateToCheckInDateSchema = campaign => commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.checkinDate,\r\n CriterionType: 'CheckInDate',\r\n targetCriterion(item) {\r\n return { CheckInDateCriterion: { StartDate: item.startDate, EndDate: item.endDate } };\r\n },\r\n});\r\n\r\nexport const convertUserSetDatesStateToUserSetDatesSchema = (campaign) => {\r\n const UserSetDateMap = {\r\n 'Selected date': 'UserSelection',\r\n 'Defaulted date': 'DefaultSelection',\r\n };\r\n return commonConvertTargetStateToTargetSchema({\r\n campaign,\r\n target: campaign.userSetDates,\r\n CriterionType: 'DateSelectionType',\r\n targetCriterion(item) {\r\n return { DateSelectionTypeCriterion: { HotelDateSelectionType: UserSetDateMap[item.dates] } };\r\n },\r\n });\r\n};\r\n","import timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport _ from 'underscore';\r\nimport {\r\n bidStrategyOptionKeys, collectCriterions, getAudienceAds, isAdFormatValid, isAudienceAdsValid,\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport {\r\n isDeviceTargetValid,\r\n isLocationValid,\r\n convertLocationStateToLocationSchemaCampaign,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { isCampaignNameValid } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { bidStrategyTypeValueMap, isBidStrategyValid, fields as bidStrategyFields } from './components/bid-strategy/utility';\r\nimport { isBudgetValid } from './components/budget/utility';\r\nimport { fieldsToCheck } from './components';\r\nimport { convertDeviceStateToDeviceSchema } from './get-targets-criterion';\r\n\r\nexport function getUnSupportedBidAdjustmentFeatures(CampaignBidStrategyType) {\r\n switch (CampaignBidStrategyType) {\r\n case 'Commission':\r\n return ['adSchedule'];\r\n default:\r\n return [];\r\n }\r\n}\r\n\r\nexport function getAdSchedule(campaign) {\r\n const targets = campaign.adScheduleData;\r\n return targets.map((criterion) => {\r\n const Status = _.isEmpty(criterion) ? 'Active' : criterion.Status;\r\n if (campaign.Id) {\r\n return {\r\n ...criterion,\r\n Status,\r\n Campaign: {\r\n Id: campaign.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n Status,\r\n CampaignName: campaign.name.value,\r\n };\r\n });\r\n}\r\n\r\nexport function getAdGroupBid(values) {\r\n const {\r\n bidStrategy,\r\n } = values;\r\n\r\n switch (bidStrategy.option) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n return {\r\n SearchBid: bidStrategy[bidStrategyFields.AdGroupBid] && decimal.fromLocalToFloat(bidStrategy[bidStrategyFields.AdGroupBid]),\r\n };\r\n case bidStrategyOptionKeys.PercentCpc:\r\n return {\r\n AdGroupPercentCpcBid: bidStrategy[bidStrategyFields.AdGroupPercentBid] && decimal.fromLocalToFloat(bidStrategy[bidStrategyFields.AdGroupPercentBid]),\r\n };\r\n case bidStrategyOptionKeys.Commission:\r\n return {\r\n AdGroupCommissionRate: bidStrategy[bidStrategyFields.AdGroupCommissionRate] && decimal.fromLocalToFloat(bidStrategy[bidStrategyFields.AdGroupCommissionRate]),\r\n };\r\n default:\r\n return {\r\n SearchBid: bidStrategy[bidStrategyFields.AdGroupBid] && decimal.fromLocalToFloat(bidStrategy[bidStrategyFields.AdGroupBid]),\r\n };\r\n }\r\n}\r\n\r\nfunction getName(campaign) {\r\n const Name = { Name: campaign.name.value };\r\n return Name;\r\n}\r\n\r\nfunction getBiddingScheme(campaign) {\r\n const bidStrategyType = campaign.bidStrategy.option;\r\n const bidOrPercentValue = campaign.bidStrategy[bidStrategyType];\r\n const bidStrategyField = bidStrategyTypeValueMap[bidStrategyType];\r\n const BiddingScheme = bidStrategyType === bidStrategyOptionKeys.ManualCpc ? { Type: bidStrategyType } : { Type: bidStrategyType, [bidStrategyField]: bidOrPercentValue };\r\n if (bidStrategyField !== bidStrategyTypeValueMap.ManualCpc) {\r\n BiddingScheme[bidStrategyField] = bidOrPercentValue && decimal.fromLocalToFloat(bidOrPercentValue);\r\n }\r\n return { BiddingScheme };\r\n}\r\n\r\nfunction getBudget(campaign) {\r\n const Budget = {\r\n Amount: campaign.budget.amount && decimal.fromLocalToFloat(campaign.budget.amount),\r\n Type: 'DailyStandard',\r\n };\r\n return { Budget };\r\n}\r\n\r\nfunction getAdScheduleUseSearcherTimeZone(campaign) {\r\n const { AdScheduleUseSearcherTimeZone } = campaign;\r\n return { AdScheduleUseSearcherTimeZone };\r\n}\r\n\r\nexport function convertCampaignStateToCampaignJSONSchemaData(campaign, initTargets) {\r\n // could reference mt-entity-tapi or client-data package\r\n const AdScheduleUseSearcherTimeZone = getAdScheduleUseSearcherTimeZone(campaign);\r\n const Name = getName(campaign);\r\n const BiddingScheme = getBiddingScheme(campaign);\r\n const Budget = getBudget(campaign);\r\n const deviceSettings = convertDeviceStateToDeviceSchema(campaign, initTargets);\r\n const locationTargets = convertLocationStateToLocationSchemaCampaign(campaign.location, campaign.bundleLocationCriterions, campaign);\r\n const adschedules = getAdSchedule(campaign);\r\n const AdGroups = campaign.AdGroups ? { AdGroups: campaign.AdGroups } : {};\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(campaign.bidStrategy.option);\r\n const audienceAds = getAudienceAds(campaign.audienceAds);\r\n const jsonSchemaData = {\r\n ...Name,\r\n ...AdScheduleUseSearcherTimeZone,\r\n ...BiddingScheme,\r\n ...Budget,\r\n ...audienceAds,\r\n CampaignType: 'Hotel',\r\n Languages: ['All'], // Hotel Campaign support All language by default\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n TrackingUrlTemplate: campaign.urlOptions.TrackingUrlTemplate,\r\n FinalUrlSuffix: campaign.urlOptions.FinalUrlSuffix,\r\n UrlCustomParameters: campaign.urlOptions.UrlCustomParameters,\r\n ...AdGroups,\r\n CampaignCriterions: [\r\n ...deviceSettings,\r\n ...locationTargets,\r\n ...collectCriterions('adSchedule', unSupportedFeatures, adschedules),\r\n ],\r\n };\r\n\r\n if (campaign.Id) {\r\n return {\r\n Id: campaign.Id,\r\n ...jsonSchemaData,\r\n };\r\n }\r\n return {\r\n Status: 'Active',\r\n ...jsonSchemaData,\r\n };\r\n}\r\n\r\nexport function validateCampaignState(campaign, serverContext, isCreation, patchErrMsg) {\r\n return {\r\n name: isCampaignNameValid(campaign.name.value),\r\n budget: isBudgetValid({ value: campaign.budget.amount, serverContext }),\r\n bidStrategy: isBidStrategyValid({ bidStrategy: campaign.bidStrategy, isCreation, serverContext }),\r\n audienceAds: isAudienceAdsValid(campaign.audienceAds),\r\n device: campaign.device.useParentLevel ? true : isDeviceTargetValid(campaign.device.currentLevelSettings, patchErrMsg, campaign.bidStrategy.option),\r\n location: isLocationValid(campaign.location, campaign.bidStrategy.option),\r\n adFormat: isAdFormatValid(campaign.adFormat) || !isCreation,\r\n };\r\n}\r\n\r\nexport function generateDataToInvalidState(validationData, campaign) {\r\n let data = { ...campaign };\r\n fieldsToCheck.forEach((field) => {\r\n if (validationData[field] === false) {\r\n data = {\r\n ...data,\r\n [field]: {\r\n ...data[field],\r\n isInvalid: true,\r\n },\r\n };\r\n }\r\n });\r\n return data;\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\n/* eslint-disable no-param-reassign */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\nimport _, { each } from 'underscore';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { PrimaryButton, DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { getODataErrors } from '@bingads-webui-campaign/api-errors';\r\nimport {\r\n getCampaignTargetsCriterions,\r\n converODataObjectToDeviceState,\r\n globalErrorMsg,\r\n showWarning,\r\n bidStrategyOptionKeys,\r\n getCampaignData, updateDeviceByResponse, handleApiErrors, clearSubViewApiErrors, scrollToErrors, invalidateCache, mergeCampaignStateWithErrors,\r\n subscribeUrlOptions, subscribeSiteExclusion, subscribeIPExclusion, createDefaultHotelGroup, send, sendErrors,\r\n} from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { Errors, modelToViewModelDayTimeTargets, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport instrumentation from '@bingads-webui-campaign-legacy/instrumentation/index';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport {\r\n patchForLocationTargetGrid, shouldSelectBundleOption, getBundleCountriesAndBundleLocationCriterions, parseLocationTargets,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { getRoutePathById } from '@bingads-webui-campaign-react/with-site-map';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport { AdvancedSettings, CampaignBasic, CampaignTitle, defaultCampaignBasicData, CampaignTargets, fieldsToCheck } from './components';\r\nimport { convertCampaignStateToCampaignJSONSchemaData, validateCampaignState, generateDataToInvalidState, getAdGroupBid, getUnSupportedBidAdjustmentFeatures } from './util';\r\n\r\nexport const scenarios = {\r\n settings: 'settings',\r\n creation: 'creation',\r\n};\r\n\r\nexport const HotelCampaignBase = class HotelCampaignBase extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.isCreation = props.scenario === scenarios.creation;\r\n this.initializeTheInstrumentation();\r\n\r\n this.state = {\r\n campaign: {\r\n ...defaultCampaignBasicData,\r\n },\r\n errMsg: {\r\n },\r\n initTargets: {},\r\n isLoading: true,\r\n campaignApiErrors: [],\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: {},\r\n isDataFetched: false,\r\n };\r\n this.subViews = {};\r\n this.defaultAdGroupId = undefined;\r\n this.defaultAdGroupCreated = props.scenario === scenarios.settings;\r\n this.defaultHotelGroupCreated = props.scenario === scenarios.settings;\r\n this.adScheduleView = undefined;\r\n this.adDistributionView = undefined;\r\n this.removeWarningInterval = undefined;\r\n this.getAdDistributionView = () => this.adDistributionView;\r\n this.getAdScheduleView = () => this.adScheduleView;\r\n this.setAdScheduleView = (view) => {\r\n this.adScheduleView = view;\r\n this.subViews.adScheduleView = view;\r\n this.adScheduleView.koModel.hasErrors.subscribe((x) => {\r\n if (x) {\r\n this.patchErrMsg('adSchedule', globalErrorMsg);\r\n return;\r\n }\r\n this.patchErrMsg('adSchedule', '');\r\n });\r\n };\r\n this.setAdDistributionView = (view) => { this.adDistributionView = view; };\r\n this.setSiteExclusionView = (view) => { this.siteExclusionView = view; subscribeSiteExclusion(this); };\r\n this.setIPExclusionView = (view) => { this.IPExclusionView = view; subscribeIPExclusion(this); };\r\n this.setUrlOptionsView = (view) => {\r\n this.urlOptionsView = view;\r\n this.subViews.urlOptionsView = view;\r\n subscribeUrlOptions(this, globalErrorMsg);\r\n };\r\n\r\n const campaignEDM = edmCampaign.types.resolve('Model.Campaign');\r\n this.campaignResource = new campaignEDM.ResourceIdentifier();\r\n }\r\n\r\n // eslint-disable-next-line react/sort-comp\r\n handleCreateOrUpdateSuccess = (response, resolve) => {\r\n const {\r\n scope,\r\n siteMap,\r\n } = this.props;\r\n if (this.isCreation) {\r\n const campaignId = this.getCreatedCampaignId(response);\r\n send(this.activity, 'campaign_creation_succeeded', { campaignId });\r\n this.createDefaultHotelGroupAfterCampaignAdGroupCreation(response, () => {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.save(getRoutePathById(siteMap, 'campaigns'));\r\n }).finally(() => resolve(true));\r\n } else {\r\n // we backfill advanced settings models here, so we have correct model if the saveExtensions call fails.\r\n send(this.activity, 'campaign_update_succeeded');\r\n this.updateResponseData({ entity: response }, resolve);\r\n\r\n if (this.isExclusionsUpdated()) {\r\n this.saveExtensions().then(() => {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.save(getRoutePathById(siteMap, 'adgroups'));\r\n });\r\n } else {\r\n send(this.activity, 'all_succeeded');\r\n this.durationActivity.stopSignal('completed');\r\n scope.save(getRoutePathById(siteMap, 'adgroups'));\r\n }\r\n }\r\n };\r\n\r\n getCreatedCampaignId = (response) => {\r\n let entity = response;\r\n if (response && response.entity) {\r\n // eslint-disable-next-line prefer-destructuring\r\n entity = response.entity;\r\n }\r\n return entity.Id;\r\n };\r\n\r\n getCreatedDefaultAdGroupId = (response) => {\r\n let entity = response;\r\n if (response && response.entity) {\r\n // eslint-disable-next-line prefer-destructuring\r\n entity = response.entity;\r\n }\r\n const adGroups = entity.AdGroups;\r\n if (adGroups && adGroups.length > 0) {\r\n const adGroup = adGroups[0];\r\n if (adGroup.Id) {\r\n return adGroup.Id;\r\n }\r\n }\r\n return undefined;\r\n };\r\n\r\n handleCreatedDefaultAdGroup = (response) => {\r\n this.defaultAdGroupId = this.getCreatedDefaultAdGroupId(response);\r\n };\r\n\r\n scrollAndShowWarning() {\r\n this.removeWarningInterval = showWarning('campaign', this.props.i18n, this.removeWarningInterval);\r\n scrollToErrors('campaign');\r\n }\r\n\r\n createDefaultHotelGroupAfterCampaignAdGroupCreation = (response, callback) => {\r\n if (!this.defaultHotelGroupCreated) {\r\n const campaignId = this.getCreatedCampaignId(response);\r\n const adGroupId = this.getCreatedDefaultAdGroupId(response);\r\n\r\n if (adGroupId && campaignId) {\r\n const {\r\n cid,\r\n aid,\r\n } = this.props.scope.values;\r\n let bid = 0.05;\r\n let type = 'FixedBid';\r\n const {\r\n bidStrategy,\r\n } = this.state.campaign;\r\n switch (bidStrategy.option) {\r\n case bidStrategyOptionKeys.ManualCpc:\r\n bid = bidStrategy.AdGroupBid;\r\n type = 'FixedBid';\r\n break;\r\n case bidStrategyOptionKeys.PercentCpc:\r\n bid = bidStrategy.AdGroupPercentBid;\r\n type = 'RateBid';\r\n break;\r\n case bidStrategyOptionKeys.Commission:\r\n bid = bidStrategy.AdGroupCommissionRate;\r\n if (bid == null || bid.length === 0) {\r\n bid = bidStrategy.Commission;\r\n }\r\n type = 'RateBid';\r\n break;\r\n default:\r\n bid = 0.05;\r\n type = 'FixedBid';\r\n break;\r\n }\r\n return createDefaultHotelGroup(cid, aid, campaignId, adGroupId, type, bid).then(() => {\r\n send(this.activity, 'hotel_group_creation_succeeded');\r\n this.defaultHotelGroupCreated = true;\r\n if (callback) {\r\n callback();\r\n }\r\n }).catch((res) => {\r\n // TODO: should not get here.\r\n send(this.activity, 'hotel_group_creation_failed');\r\n sendErrors(this.activity, 'hotel_group_creation_error', res);\r\n let errors;\r\n if (res.errors) {\r\n errors = getODataErrors(res.errors, this.props.i18n);\r\n }\r\n if (errors && errors.length) {\r\n this.setState(prevState => ({\r\n campaignApiErrors: prevState.campaignApiErrors.concat(errors),\r\n }));\r\n this.scrollAndShowWarning();\r\n }\r\n });\r\n }\r\n }\r\n return new Promise((resolve) => {\r\n if (callback) {\r\n callback();\r\n }\r\n resolve(true);\r\n });\r\n };\r\n\r\n handleCreateOrUpdateError = (response, resolve) => {\r\n if (this.isCreation) {\r\n send(this.activity, 'campaign_creation_failed');\r\n sendErrors(this.activity, 'campaign_creation_error', response);\r\n } else {\r\n send(this.activity, 'campaign_update_failed');\r\n sendErrors(this.activity, 'campaign_update_error', response);\r\n }\r\n const allApiErrors = handleApiErrors(response, this.props.i18n, this.subViews, 'campaign');\r\n\r\n this.setState(prevState => ({\r\n campaign: {\r\n ...mergeCampaignStateWithErrors(prevState.campaign, allApiErrors),\r\n },\r\n campaignApiErrors: allApiErrors.entityApiErrors.General || [],\r\n targetsApiErrors: allApiErrors.targetsApiErrors,\r\n advancedSettinsApiErrors: allApiErrors.advancedSettinsApiErrors,\r\n }));\r\n this.updateResponseData(response, resolve);\r\n };\r\n\r\n createOrUpdateCampaign = (data) => {\r\n const createOrUpdateCall = this.isCreation ? this.campaignResource.bulkCreate.bind(this.campaignResource) : this.campaignResource.bulkUpdate.bind(this.campaignResource);\r\n return new Promise(resolve => createOrUpdateCall(data)\r\n .then(response => this.handleCreateOrUpdateSuccess(response, resolve))\r\n .catch(response => this.handleCreateOrUpdateError(response, resolve)));\r\n };\r\n\r\n getBundleCountries() {\r\n const {\r\n cid,\r\n aid,\r\n } = this.props.scope.values;\r\n const {\r\n serverContext,\r\n } = this.props;\r\n const lcid = serverContext ? serverContext.CurrentUser.LocaleID : '1033';\r\n const market = serverContext ? serverContext.CurrentUser.Market : 'US';\r\n const language = 'All';\r\n\r\n return getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid, language, market);\r\n }\r\n\r\n renderCampaignTargets(cid, aid, campaignId) {\r\n const getCampaignDeviceCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DeviceCriterion')\", cid, aid, campaignId,\r\n });\r\n\r\n return getCampaignDeviceCriterionsPromise.then((campaignTargets) => {\r\n const defalutDeviceSettings = defaultCampaignBasicData.device.parentLevelSettings;\r\n let deviceCriterion = [...defalutDeviceSettings];\r\n if (campaignTargets.length) {\r\n deviceCriterion = converODataObjectToDeviceState(campaignTargets);\r\n }\r\n this.setState(prev => ({ initTargets: { ...prev.initTargets, device: campaignTargets.length > 0 ? deviceCriterion : [] } }));\r\n this.patchCampaign('device', {\r\n parentLevelSettings: [...defalutDeviceSettings],\r\n currentLevelSettings: deviceCriterion,\r\n useParentLevel: campaignTargets.length === 0,\r\n reset: true,\r\n });\r\n });\r\n }\r\n\r\n syncLocationCriterions(cid, aid, campaignId) {\r\n invalidateCache('Model.CampaignCriterion');\r\n const getLocationCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion')\",\r\n cid,\r\n aid,\r\n campaignId,\r\n });\r\n\r\n return getLocationCriterionsPromise.then((rawLocations) => {\r\n const {\r\n locations,\r\n } = parseLocationTargets(rawLocations, 'campaign', campaignId);\r\n this.setState(prevState => ({\r\n campaign: {\r\n ...prevState.campaign,\r\n location: {\r\n ...prevState.campaign.location,\r\n currentLevelSettings: {\r\n ...prevState.campaign.location.currentLevelSettings,\r\n initLocations: locations,\r\n },\r\n },\r\n },\r\n }));\r\n });\r\n }\r\n\r\n fetchLocationCriterions(cid, aid, campaignId, getBundleCountriesPromise) {\r\n const getLocationCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.LocationCriterion') or isof(Criterion,'Model.RadiusCriterion') or isof(Criterion,'Model.LocationIntentCriterion')\",\r\n cid,\r\n aid,\r\n campaignId,\r\n });\r\n\r\n return Promise.all([getBundleCountriesPromise, getLocationCriterionsPromise]).then(([{ bundleCountries, bundleLocationCriterions }, rawLocations]) => {\r\n const {\r\n locations,\r\n intentId,\r\n intentOption,\r\n } = parseLocationTargets(rawLocations, 'campaign', campaignId);\r\n let targetOption = locations.length ? locationTargetsOptionKeys.specific : locationTargetsOptionKeys.everywhere;\r\n targetOption = shouldSelectBundleOption(bundleCountries, locations) ? locationTargetsOptionKeys.bundleOrDefaultMarket : targetOption;\r\n this.patchCampaign('location', {\r\n currentLevelSettings: {\r\n initLocations: locations,\r\n currentLocations: locations,\r\n targetOption,\r\n intentId,\r\n ...intentOption,\r\n },\r\n bidMode: true,\r\n useParentLevel: locations.length === 0,\r\n });\r\n this.patchCampaign('bundleCountries', bundleCountries);\r\n this.patchCampaign('bundleLocationCriterions', bundleLocationCriterions.map(x => patchForLocationTargetGrid(x)));\r\n });\r\n }\r\n\r\n fetchDayTimeCriterions(cid, aid, campaignId) {\r\n const getDayTimeCriterionsPromise = getCampaignTargetsCriterions({\r\n type: \"isof(Criterion,'Model.DayTimeCriterion')\",\r\n cid,\r\n aid,\r\n campaignId,\r\n });\r\n\r\n return getDayTimeCriterionsPromise.then((dayTimeRanges) => {\r\n this.patchCampaign('dayTimeRanges', modelToViewModelDayTimeTargets(dayTimeRanges));\r\n });\r\n }\r\n\r\n fetchCampaignData(cid, aid, campaignId) {\r\n const getCampaignDataPromise = getCampaignData(cid, aid, campaignId);\r\n return getCampaignDataPromise\r\n .then(campaignData => this.setState(prevState => ({ campaign: { ...prevState.campaign, ...campaignData, curBudgetAmount: campaignData.budget.amount } })));\r\n }\r\n\r\n componentDidMount() {\r\n this.perfMarker.willFetchData();\r\n\r\n const {\r\n scenario,\r\n } = this.props;\r\n\r\n const getBundleCountriesPromise = this.getBundleCountries();\r\n\r\n if (scenario === scenarios.creation) {\r\n getBundleCountriesPromise.then(({ bundleCountries, bundleLocationCriterions }) => {\r\n this.patchCampaign('bundleCountries', bundleCountries);\r\n this.patchCampaign('bundleLocationCriterions', bundleLocationCriterions.map(x => patchForLocationTargetGrid(x)));\r\n }).finally(() => {\r\n this.perfMarker.willRender();\r\n this.setState(() => ({ isLoading: false, isDataFetched: true }));\r\n });\r\n } else if (scenario === scenarios.settings) {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n } = this.props.scope.values;\r\n\r\n Promise.all([\r\n this.renderCampaignTargets(cid, aid, campaignId),\r\n this.fetchCampaignData(cid, aid, campaignId),\r\n this.fetchLocationCriterions(cid, aid, campaignId, getBundleCountriesPromise),\r\n this.fetchDayTimeCriterions(cid, aid, campaignId),\r\n ]).finally(() => {\r\n this.perfMarker.willRender();\r\n this.setState(() => ({ isLoading: false, isDataFetched: true }));\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.isLoading === false && this.state.isDataFetched === true && this.perfMarker.isDone === false) {\r\n this.durationActivity.startSignal();\r\n this.perfMarker.done();\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.activity.stop();\r\n if (this.state.campaign && this.state.campaign.Id) {\r\n invalidateCache('Model.Campaign', [this.state.campaign.Id]);\r\n }\r\n if (this.removeWarningInterval) {\r\n this.removeWarningInterval();\r\n }\r\n if (this.adScheduleView) {\r\n this.adScheduleView.undelegateEvents().off().remove();\r\n }\r\n }\r\n\r\n // eslint-disable-next-line react/sort-comp\r\n patchCampaign = (key, value) => {\r\n this.setState(prevState => ({\r\n campaign: {\r\n ...prevState.campaign,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchErrMsg = (key, value) => {\r\n this.setState(prevState => ({\r\n errMsg: {\r\n ...prevState.errMsg,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchTargetsApiErrMsg = (key, value) => {\r\n this.setState(prevState => ({\r\n targetsApiErrors: {\r\n ...prevState.targetsApiErrors,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n patchAdvancedSettinsApiErrors = (key, value) => {\r\n this.setState(prevState => ({\r\n advancedSettinsApiErrors: {\r\n ...prevState.advancedSettinsApiErrors,\r\n [key]: value,\r\n },\r\n }));\r\n };\r\n getCurrentCampaignId() {\r\n const {\r\n currentCampaign,\r\n } = this.props;\r\n return currentCampaign && currentCampaign.Id;\r\n }\r\n\r\n validate = () => {\r\n const {\r\n serverContext,\r\n } = this.props;\r\n let validationData = validateCampaignState(this.state.campaign, serverContext, this.isCreation, this.patchErrMsg);\r\n const unSupportedFeatures = getUnSupportedBidAdjustmentFeatures(this.state.campaign.bidStrategy.option);\r\n validationData = Object.assign(\r\n validationData,\r\n { urlOptions: this.urlOptionsView ? this.urlOptionsView.validate() : true },\r\n { adSchedule: this.adScheduleView && !unSupportedFeatures.includes('adSchedule') ? this.adScheduleView.validate() : true }\r\n );\r\n const isValid = fieldsToCheck.every(x => validationData[x] === true);\r\n if (isValid !== true) {\r\n this.setState(prevState => ({\r\n campaign: {\r\n ...generateDataToInvalidState(validationData, prevState.campaign),\r\n },\r\n }));\r\n }\r\n return isValid;\r\n };\r\n\r\n getAdScheduleValues = () => {\r\n const deletedDayTimeCb = (deletedDayTimeCriterions) => {\r\n const currentCampaignId = this.getCurrentCampaignId();\r\n\r\n each(deletedDayTimeCriterions, (criterion) => {\r\n criterion.Status = 'Deleted';\r\n criterion.Campaign = {\r\n Id: currentCampaignId,\r\n };\r\n });\r\n };\r\n\r\n return this.adScheduleView ? this.adScheduleView.getValues(deletedDayTimeCb) : [];\r\n };\r\n\r\n getUrlOptionsValues = () => {\r\n const urlOptions = this.urlOptionsView ? this.urlOptionsView.toObject() : {};\r\n\r\n if (_.isEmpty(urlOptions.TrackingUrlTemplate)) {\r\n urlOptions.TrackingUrlTemplate = null;\r\n }\r\n if (_.isEmpty(urlOptions.UrlCustomParameters)) {\r\n urlOptions.UrlCustomParameters = null;\r\n }\r\n\r\n return urlOptions;\r\n };\r\n\r\n getExclusionsValues = () => {\r\n const siteExclusionData = this.siteExclusionView ? this.siteExclusionView.getValues() : {};\r\n const IPExclusionData = this.IPExclusionView ? this.IPExclusionView.getValues() : {};\r\n const Exclusions = {\r\n ExcludedSites: siteExclusionData,\r\n ExcludedIPs: IPExclusionData,\r\n };\r\n return { Exclusions };\r\n };\r\n\r\n getDateSettings = () => {\r\n if (this.isCreation && this.adScheduleView) {\r\n return this.adScheduleView.getDateSettings();\r\n }\r\n return {};\r\n };\r\n\r\n getAdGroup = (values) => {\r\n const defaultAdGroupName = 'Ad group #1';\r\n const adgroup = {\r\n CampaignName: values.name.value,\r\n Name: defaultAdGroupName,\r\n Medium: 'Search',\r\n PricingModel: 'CPC',\r\n Status: 'Active',\r\n AdGroupType: 'HotelAds',\r\n ...this.getDateSettings(),\r\n ...getAdGroupBid(values),\r\n ...values.netWorkOptions,\r\n };\r\n\r\n if (this.adScheduleView && this.adScheduleView.getAdScheduleUseSearcherTimeZone) {\r\n adgroup.AdScheduleUseSearcherTimeZone = this.adScheduleView.getAdScheduleUseSearcherTimeZone();\r\n }\r\n\r\n if (values.Id) {\r\n adgroup.Campaign = {\r\n Id: values.Id,\r\n };\r\n }\r\n\r\n if (this.defaultAdGroupId) {\r\n adgroup.Id = this.defaultAdGroupId;\r\n } else {\r\n adgroup.HotelAdGroupType = _.compact([values.adFormat.HPA && 'HotelAd', values.adFormat.PPA && 'PropertyAd']);\r\n }\r\n\r\n return adgroup;\r\n };\r\n\r\n getValues = () => {\r\n const values = {\r\n ...this.state.campaign,\r\n adScheduleData: this.getAdScheduleValues(),\r\n urlOptions: this.getUrlOptionsValues(),\r\n netWorkOptions: this.adDistributionView ? this.adDistributionView.toObject() : {},\r\n };\r\n\r\n if (this.adScheduleView && this.adScheduleView.getAdScheduleUseSearcherTimeZone) {\r\n values.AdScheduleUseSearcherTimeZone = this.adScheduleView.getAdScheduleUseSearcherTimeZone();\r\n }\r\n\r\n if (!this.defaultAdGroupCreated) {\r\n values.AdGroups = [this.getAdGroup(values)];\r\n }\r\n\r\n return values;\r\n };\r\n\r\n initializeTheInstrumentation = () => {\r\n if (this.isCreation) {\r\n const scenario = instrumentation.hotelCampaignCreation.create();\r\n\r\n this.activity = scenario.hotelCampaignCreation.create();\r\n // duration activity, from user could edit & all successeed/completed\r\n this.durationActivity = scenario.duration.create();\r\n this.perfMarker = this.props.perfMarker.createChild('HotelCampaignBaseCreation');\r\n } else {\r\n const scenario = instrumentation.hotelCampaignSettings.create();\r\n\r\n this.activity = scenario.hotelCampaignSettings.create();\r\n this.durationActivity = scenario.duration.create();\r\n this.perfMarker = this.props.perfMarker.createChild('HotelCampaignBaseSettings');\r\n }\r\n // the component life time\r\n this.activity.start();\r\n send(this.activity, 'enter_page');\r\n\r\n this.perfMarker.willInit();\r\n };\r\n\r\n syncLocationCriterionsPromise = (payload) => {\r\n const {\r\n cid,\r\n aid,\r\n campaignId,\r\n } = this.props.scope.values;\r\n if (campaignId) {\r\n return this.syncLocationCriterions(cid, aid, campaignId);\r\n } else if (payload && payload.entity && payload.entity.Id) {\r\n return this.syncLocationCriterions(cid, aid, payload.entity.Id);\r\n } else if (payload && payload.Id) {\r\n return this.syncLocationCriterions(cid, aid, payload.Id);\r\n }\r\n return Promise.resolve(true);\r\n };\r\n\r\n updateResponseData = (payload, resolve) => {\r\n if (!payload) {\r\n resolve(true);\r\n return;\r\n }\r\n // Fill back the data to the view;\r\n if (payload.entity && payload.entity.Id) {\r\n this.patchCampaign('Id', payload.entity.Id);\r\n }\r\n const resourceName = 'CampaignCriterions';\r\n\r\n if (this.adScheduleView) {\r\n this.adScheduleView.backFillItems(payload.entity ? payload : { entity: payload });\r\n }\r\n\r\n this.handleCreatedDefaultAdGroup(payload);\r\n\r\n let resources = [];\r\n if (_.has(payload, 'entity') && _.has(payload.entity, resourceName)) {\r\n resources = payload.entity[resourceName];\r\n } else if (_.has(payload, resourceName)) {\r\n resources = payload[resourceName];\r\n }\r\n const DeviceCriterion = [];\r\n const ServerDeviceCriterion = [];\r\n _.each(resources, (criterion) => {\r\n switch (criterion.CriterionType) {\r\n case 'Device':\r\n case 'OriginalDevice':\r\n DeviceCriterion.push(criterion);\r\n if (!criterion.errors) {\r\n ServerDeviceCriterion.push(criterion);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n const currentCriterionMap = {};\r\n if (DeviceCriterion.length > 0) {\r\n updateDeviceByResponse(DeviceCriterion, this.state.campaign.device, this.patchCampaign);\r\n }\r\n if (ServerDeviceCriterion.length > 0) {\r\n const currentDeviceCriterion = updateDeviceByResponse(ServerDeviceCriterion, this.state.campaign.device);\r\n currentCriterionMap.device = currentDeviceCriterion;\r\n }\r\n\r\n this.setState(prev => ({ initTargets: { ...prev.initTargets, ...currentCriterionMap } }));\r\n if (payload && payload.errors) {\r\n this.removeWarningInterval = showWarning('campaign', this.props.i18n, this.removeWarningInterval);\r\n }\r\n\r\n Promise.all([this.syncLocationCriterionsPromise(payload), this.createDefaultHotelGroupAfterCampaignAdGroupCreation(payload)])\r\n .finally(() => resolve(true));\r\n };\r\n\r\n isExclusionsUpdated() {\r\n if (!this.siteExclusionView && !this.IPExclusionView) {\r\n return false;\r\n }\r\n\r\n const siteExclusionsUpdated = this.siteExclusionView &&\r\n !_.isEqual(this.siteExclusionView.options.exclusions, this.siteExclusionView.getValues());\r\n\r\n const IPExclusionsUpdated = this.IPExclusionView &&\r\n !_.isEqual(this.IPExclusionView.options.exclusions, this.IPExclusionView.getValues());\r\n\r\n return siteExclusionsUpdated || IPExclusionsUpdated;\r\n }\r\n\r\n saveExtensions() {\r\n const { campaignId } = this.props.scope.values;\r\n const data = {\r\n campaignId,\r\n AdvanceSettings: {\r\n ...this.getExclusionsValues(),\r\n },\r\n };\r\n const that = this;\r\n return exclusionRepository.saveExtensions(data, 'campaign')\r\n .then(() => {\r\n send(this.activity, 'hotel_campaign_extensions_update_succeeded');\r\n that.IPExclusionView.clearApiErrors();\r\n that.siteExclusionView.clearApiErrors();\r\n that.patchErrMsg('baseExclusion', '');\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', []);\r\n })\r\n .catch((response) => {\r\n send(this.activity, 'hotel_campaign_extensions_update_failed');\r\n if (response.NegativeSitesResult || response.NegativeIPsResult) {\r\n const { NegativeSitesResult: siteErrors, NegativeIPsResult: ipErrors } = response;\r\n const exclusionApiErrors = [];\r\n if (siteErrors || ipErrors) {\r\n if (that.siteExclusionView && siteErrors) {\r\n that.siteExclusionView.showErrors(siteErrors);\r\n exclusionApiErrors.push({ siteErrors });\r\n } else {\r\n that.siteExclusionView.clearApiErrors();\r\n }\r\n if (that.IPExclusionView && ipErrors) {\r\n that.IPExclusionView.showErrors(ipErrors);\r\n exclusionApiErrors.push({ ipErrors });\r\n } else {\r\n that.IPExclusionView.clearApiErrors();\r\n }\r\n that.patchErrMsg('baseExclusion', globalErrorMsg);\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', exclusionApiErrors);\r\n scrollToErrors('campaign');\r\n } else {\r\n that.patchErrMsg('baseExclusion', '');\r\n this.patchAdvancedSettinsApiErrors('baseExclusion', []);\r\n }\r\n // eslint-disable-next-line no-throw-literal\r\n throw 'exclusion error';\r\n }\r\n });\r\n }\r\n\r\n clearAllApiErrors() {\r\n clearSubViewApiErrors(this.subViews);\r\n this.setState(prev => ({\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: { baseExclusion: prev.advancedSettinsApiErrors.baseExclusion },\r\n }));\r\n }\r\n\r\n save = () => {\r\n send(this.activity, 'save_clicked');\r\n // If something is wrong, you want show error message in the titlebar, you can patchErrMsg like below.\r\n // this.patchErrMsg('campaign', '*Required field'); // The two parameters are the key of Collapse.Panel, and the error message displayed.\r\n const isValid = this.validate();\r\n if (isValid) {\r\n const data = this.getValues();\r\n this.setState(() => ({ isLoading: true }));\r\n const createOrUpdatePromise = this.createOrUpdateCampaign(convertCampaignStateToCampaignJSONSchemaData(data, this.state.initTargets));\r\n createOrUpdatePromise.finally(() => this.setState(() => ({ isLoading: false })));\r\n } else {\r\n scrollToErrors('campaign');\r\n }\r\n };\r\n\r\n cancel = () => {\r\n send(this.activity, 'cancel_clicked');\r\n this.durationActivity.stopSignal('canceled');\r\n const {\r\n scope,\r\n siteMap,\r\n } = this.props;\r\n scope.save(getRoutePathById(siteMap, 'campaigns'));\r\n };\r\n\r\n render() {\r\n const {\r\n classes,\r\n i18n,\r\n scenario,\r\n } = this.props;\r\n\r\n return (\r\n <div\r\n className={classnames(classes.hotelCampaignBase, `hotel-campaign-${scenario}-app`)}\r\n onFocus={() => { if (!_.isEmpty(this.state.campaignApiErrors)) { _.delay(() => this.setState(() => ({ campaignApiErrors: [] })), 200); } }}\r\n >\r\n <UiBlocker\r\n blocking={this.state.isLoading}\r\n loadingText={i18n.getString(_TL_('Loading...'))}\r\n >\r\n <div className={classnames(`hotel-campaign-${scenario}-container`, 'hotel-campaign-shared')}>\r\n {this.isCreation && <CampaignTitle permissions={this.props.permissions} />}\r\n <Errors errors={!_.isEmpty(this.state.campaignApiErrors) && this.state.campaignApiErrors.map(x => x.message)} />\r\n <CampaignBasic\r\n campaign={this.state.campaign}\r\n patchCampaign={this.patchCampaign}\r\n scenario={scenario}\r\n errMsg={this.state.errMsg}\r\n patchErrMsg={this.patchErrMsg}\r\n getAdScheduleView={this.getAdScheduleView}\r\n permissions={this.props.permissions}\r\n activity={this.activity}\r\n />\r\n <AdvancedSettings\r\n campaign={this.state.campaign}\r\n patchCampaign={this.patchCampaign}\r\n setAdScheduleView={this.setAdScheduleView}\r\n getAdScheduleView={this.getAdScheduleView}\r\n setAdDistributionView={this.setAdDistributionView}\r\n getAdDistributionView={this.getAdDistributionView}\r\n setBaseExclusionView={this.setBaseExclusionView}\r\n setUrlOptionsView={this.setUrlOptionsView}\r\n setSiteExclusionView={this.setSiteExclusionView}\r\n setIPExclusionView={this.setIPExclusionView}\r\n scenario={scenario}\r\n errMsg={this.state.errMsg}\r\n patchErrMsg={this.patchErrMsg}\r\n getUrlOptionsValues={this.getUrlOptionsValues}\r\n getExclusionsValues={this.getExclusionsValues}\r\n advancedSettinsApiErrors={this.state.advancedSettinsApiErrors}\r\n adScheduleModel={this.adScheduleModel}\r\n isDataFetched={this.state.isDataFetched}\r\n />\r\n <CampaignTargets\r\n campaign={this.state.campaign}\r\n patchCampaign={this.patchCampaign}\r\n errMsg={this.state.errMsg}\r\n patchErrMsg={this.patchErrMsg}\r\n scope={this.props.scope}\r\n targetsApiErrors={this.state.targetsApiErrors}\r\n patchTargetsApiErrMsg={this.patchTargetsApiErrMsg}\r\n />\r\n <div className=\"dashline\" />\r\n <PrimaryButton className=\"save-campaign-btn\" text={i18n.getString(_TL_('Save'))} onClick={this.save} />\r\n <DefaultButton className=\"cancel-btn\" text={i18n.getString(_TL_('Cancel'))} onClick={this.cancel} />\r\n </div>\r\n </UiBlocker>\r\n </div>\r\n );\r\n }\r\n};\r\n\r\nHotelCampaignBase.propTypes = {\r\n currentCampaign: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n perfMarker: perfMarkerPropTypes.isRequired,\r\n classes: PropTypes.shape({}).isRequired,\r\n scenario: PropTypes.string,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n campaignId: PropTypes.number,\r\n }).isRequired,\r\n }).isRequired,\r\n siteMap: PropTypes.shape([]).isRequired,\r\n serverContext: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}),\r\n};\r\n\r\nHotelCampaignBase.defaultProps = {\r\n scenario: scenarios.creation,\r\n permissions: {},\r\n};\r\n","import { helpbuttonStyle, datePickerStyle, convertToLocalStyle, glyphIconStyle, getBlockerStyle, spinnerKeyframe } from '@bingads-webui-campaign-react/common-styles';\r\nimport { creationCommonStyle } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\n\r\nexport const sharedStyles = core =>\r\n ({\r\n hotelCampaignBase: {\r\n padding: '32px 32px 48px 24px',\r\n minWidth: '1032px',\r\n backgroundColor: `${core && core.palette && core.palette.neutralLighterAlt}`,\r\n '& .campaign-title .title': {\r\n fontSize: '20px',\r\n fontWeight: '600',\r\n },\r\n '& .helpbutton': helpbuttonStyle(core)['.helpbutton'],\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n ...convertToLocalStyle(glyphIconStyle(core)),\r\n ...creationCommonStyle(core),\r\n '& .dashline': {\r\n borderBottom: `1px solid ${core && core.palette && core.palette.neutralLight}`,\r\n width: '100%',\r\n margin: '24px 0 16px 0',\r\n },\r\n '& span': {\r\n verticalAlign: 'unset',\r\n },\r\n '& .jumbo-card-control-all-btn': {\r\n color: '#323230',\r\n },\r\n '& .alert-info': {\r\n marginTop: '8px',\r\n },\r\n '& .location-target-options label': {\r\n display: 'inherit',\r\n },\r\n '& .intent-target-options label': {\r\n display: 'inherit',\r\n },\r\n '& .intent-target': {\r\n marginTop: '8px',\r\n },\r\n '& .cancel-btn': {\r\n marginLeft: '8px',\r\n },\r\n '& .react-block-ui': {\r\n '& > div:last-child > div > div': {\r\n backgroundColor: 'unset',\r\n },\r\n '& > div:last-child': {\r\n alignItems: 'center',\r\n backgroundColor: 'rgba(256, 256, 256, 0.5)',\r\n color: core.palette.themePrimary,\r\n display: 'flex',\r\n outline: 'none',\r\n padding: 10,\r\n '& .blocker-text': {\r\n fontWeight: 'normal',\r\n top: '23.5px',\r\n display: 'inline-block',\r\n position: 'absolute',\r\n },\r\n '& .blocker-image': {\r\n ...getBlockerStyle(28, core.palette),\r\n display: 'inline-block',\r\n },\r\n },\r\n },\r\n '& table tbody .col-sm-9': {\r\n width: 'unset',\r\n paddingLeft: 'unset',\r\n },\r\n '& .bing-maps-search-box-dropdown li a::after': {\r\n display: 'none',\r\n },\r\n '& .bing-maps-search-box-dropdown li a:focus': {\r\n outline: '1px solid #605e5c',\r\n },\r\n '& table tbody .item-label.schedule-item-label.form-control-static': {\r\n fontWeight: '600',\r\n color: '#323130',\r\n paddingTop: '10px',\r\n display: 'block',\r\n },\r\n '& table tbody .radio .col-sm-3': {\r\n width: 'unset',\r\n },\r\n '& table tbody .radio .col-sm-9': {\r\n paddingLeft: '8px',\r\n },\r\n '& table tbody .col-sm-9 input.k-input.form-control': {\r\n width: '100px !important',\r\n },\r\n '& .adschedule-targets-container .ba-backbone-instance-wrapper .advanced-scheduling-grid .ad-scheduling-panel table tr:nth-child(3) td .radio-inline:nth-child(2)': {\r\n top: 'unset',\r\n },\r\n '& .form-horizontal table tbody .radio': {\r\n paddingTop: 'unset',\r\n },\r\n '& .scheduling-grid .advanced-scheduling-grid': {\r\n marginTop: '16px',\r\n },\r\n '& .hotel-campaign-shared': {\r\n width: '62.5%',\r\n minWidth: '968px',\r\n },\r\n '& span.error-string': {\r\n whiteSpace: 'normal',\r\n },\r\n '& .hotel-ad-format label': {\r\n display: 'inherit',\r\n },\r\n '& .bid-strategy-options': {\r\n minHeight: '84px',\r\n '& .percentage': {\r\n position: 'relative',\r\n minWidth: '296px',\r\n '& .error-string': {\r\n position: 'absolute',\r\n top: '64px',\r\n },\r\n },\r\n '& .disclaimer.has-error': {\r\n marginTop: '24px',\r\n },\r\n },\r\n '& .campaign': {\r\n '& .collapse-content.content-show': {\r\n marginTop: '-4px',\r\n marginLeft: '-4px',\r\n '& .campaign-name': {\r\n marginTop: '4px',\r\n marginLeft: '4px',\r\n },\r\n '& .hotel-ad-format': {\r\n marginLeft: '4px',\r\n marginBottom: '4px',\r\n },\r\n },\r\n },\r\n '& .budget': {\r\n '& .collapse-content.content-show': {\r\n marginTop: '-4px',\r\n marginLeft: '-4px',\r\n '& .campaign-budget': {\r\n marginTop: '4px',\r\n marginLeft: '4px',\r\n marginBottom: '4px',\r\n },\r\n },\r\n },\r\n '& span.bold': {\r\n fontWeight: 1000,\r\n },\r\n '& .alert-budget-button': {\r\n marginLeft: '10px',\r\n paddingTop: '5px',\r\n '& button': {\r\n color: 'black',\r\n fontSize: '13px',\r\n fontWeight: 500,\r\n borderColor: '#edebe9',\r\n },\r\n },\r\n },\r\n '@global': {\r\n '.floating-banner.warnFloatingBanner': {\r\n bottom: 'unset',\r\n top: '10%',\r\n background: '#A80000',\r\n '& .iconba, [role=\"alert\"], [role=\"button\"]': {\r\n color: 'white',\r\n },\r\n\r\n },\r\n '.app-shell .app-content-body div.settings-page': {\r\n overflow: 'visible',\r\n },\r\n '.app-shell .app-content-container-col': {\r\n backgroundColor: `${core && core.palette && core.palette.neutralLighterAlt}`,\r\n '& .ba-content-footer, .back-to-campaign': {\r\n minWidth: '1032px',\r\n },\r\n },\r\n ...spinnerKeyframe,\r\n ...datePickerStyle(core),\r\n },\r\n });\r\n","import React from 'react';\r\nimport { withCreationHeader } from '@bingads-webui-campaign-react/campaign-adgroup-creation';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { compose } from 'underscore';\r\nimport { HotelCampaignBase, scenarios } from './shared';\r\nimport { sharedStyles } from './style';\r\n\r\nconst getStyles = (_, theme) => ({\r\n ...mergeStyles(\r\n { theme },\r\n sharedStyles\r\n ),\r\n});\r\n\r\n\r\nexport const HotelCampaignCreation = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, getStyles),\r\n withCreationHeader\r\n)(props => (<HotelCampaignBase {...props} scenario={scenarios.creation} />));\r\n","import React from 'react';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { compose } from 'underscore';\r\nimport { mergeStyles } from '@bingads-webui-campaign-react/common-styles';\r\nimport { HotelCampaignBase, scenarios } from './shared';\r\nimport { sharedStyles } from './style';\r\n\r\nconst getStyles = (_, theme) => ({\r\n ...mergeStyles(\r\n { theme },\r\n sharedStyles,\r\n {\r\n hotelCampaignBase: {\r\n paddingLeft: '32px',\r\n },\r\n }\r\n ),\r\n});\r\n\r\nexport const HotelCampaignSettings = compose(\r\n withI18nConsumer,\r\n WrappedComponent => withDefaultStyles(WrappedComponent, getStyles)\r\n)(props => (<HotelCampaignBase {...props} scenario={scenarios.settings} />));\r\n\r\n","import $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { FilterEntity } from '@bingads-webui/filter-entity';\r\n\r\nexport const getBulkEditParams = ({ state }) => {\r\n if (!state) {\r\n return {};\r\n }\r\n const getDateRange = () => {\r\n try {\r\n const dateRange = state.get('$daterange');\r\n const startdate = (dateRange.start || dateRange.RangeStartDate).toISOString();\r\n const enddate = (dateRange.end || dateRange.RangeEndDate).toISOString();\r\n\r\n return `startdate=${startdate}&enddate=${enddate}`;\r\n } catch (e) {\r\n return '';\r\n }\r\n };\r\n\r\n const mergeStrFilter = (str1, str2) => {\r\n if (_.isEmpty(str1)) {\r\n return str2;\r\n }\r\n if (_.isEmpty(str2)) {\r\n return str1;\r\n }\r\n return [str1, str2].join(' and ');\r\n };\r\n\r\n const getQueryString = ({\r\n selectionCount,\r\n selectedIds,\r\n idAttribute,\r\n filter,\r\n customStrFilter,\r\n isPreview,\r\n }) => {\r\n const queryArray = [];\r\n let strFilter = '';\r\n\r\n // When preview, select ids on current page only.\r\n // selectionCount === selectedIds.length indicates cross page select all not checked\r\n if (isPreview || selectionCount <= selectedIds.length) {\r\n strFilter = _.chain(selectedIds)\r\n .map(id => `${idAttribute} eq '${id}'`)\r\n .join(' or ')\r\n .value();\r\n } else if (filter) {\r\n strFilter = new FilterEntity(filter.query, {\r\n entitySchema: _.result(filter, 'options.entitySchema'),\r\n odata: _.omit(filter.options, 'entitySchema'),\r\n }).odataV4();\r\n }\r\n strFilter = mergeStrFilter(strFilter, customStrFilter);\r\n if (!_.isEmpty(strFilter)) {\r\n strFilter = $.param({ $filter: `(${strFilter})` });\r\n }\r\n queryArray.push(strFilter);\r\n queryArray.push(getDateRange());\r\n\r\n return _.chain(queryArray)\r\n .compact()\r\n .join('&')\r\n .value();\r\n };\r\n\r\n\r\n const getDescription = (selectionCount) => {\r\n const description = {\r\n idsCount: selectionCount,\r\n };\r\n\r\n return JSON.stringify(description);\r\n };\r\n\r\n const bulkEditParams = ({\r\n selectionCount,\r\n selectedIds,\r\n idAttribute = 'Id',\r\n filter,\r\n customStrFilter,\r\n batchActions,\r\n entity,\r\n campaignId = null,\r\n adgroupId = null,\r\n isPreview,\r\n }) => ({\r\n BatchAction: batchActions,\r\n Description: getDescription(selectionCount),\r\n Entity: entity,\r\n Selection: {\r\n QueryString: getQueryString({\r\n selectionCount,\r\n selectedIds,\r\n idAttribute,\r\n filter,\r\n customStrFilter,\r\n isPreview,\r\n }),\r\n CampaignId: campaignId,\r\n AdGroupId: adgroupId,\r\n },\r\n });\r\n\r\n return {\r\n bulkEditParams,\r\n };\r\n};\r\n","export const getGridOptionUtils = ({ edm, state }) => {\r\n if (!edm || !state) {\r\n return {};\r\n }\r\n const getEntitySetInSubAccount = () => {\r\n const subAccountId = state.get('subAccount_id');\r\n\r\n if (subAccountId) {\r\n return edm.currentAccount.SubAccounts.$withKey(subAccountId);\r\n }\r\n return edm.currentAccount;\r\n };\r\n\r\n const getEntitySetByScope = (scope) => {\r\n if (scope === 'account') {\r\n return edm.currentAccount;\r\n } else if (scope === 'subAccount') {\r\n return getEntitySetInSubAccount();\r\n } else if (scope === 'hotelGroup') {\r\n const hotelDrillDown = state.get('hotelGroup_drillDown');\r\n\r\n if (hotelDrillDown && hotelDrillDown.hotelGroupId) {\r\n return edm.currentAccount\r\n .SubAccounts.$withKey(hotelDrillDown.subAccountId)\r\n .HotelGroups.$withKey(hotelDrillDown.hotelGroupId);\r\n }\r\n return getEntitySetInSubAccount();\r\n }\r\n return null;\r\n };\r\n\r\n // name indicate the entitySet name\r\n const getEntitySetByName = (name, scope = 'subAccount') => {\r\n if (name === 'subAccount') {\r\n return edm.currentAccount.SubAccounts;\r\n } else if (name === 'hotelGroup') {\r\n return getEntitySetByScope(scope).HotelGroups;\r\n } else if (name === 'hotel') {\r\n return getEntitySetByScope(scope).Hotels;\r\n }\r\n return edm.currentAccount;\r\n };\r\n\r\n const getUrlWithSubAccountState = () => {\r\n const subAccountId = state.get('subAccount_id');\r\n\r\n if (subAccountId && subAccountId !== '') {\r\n return `/Customers(:advertisercustomer_id)/Accounts(:account_id)/SubAccounts('${subAccountId}')/`;\r\n }\r\n return '/Customers(:advertisercustomer_id)/Accounts(:account_id)/';\r\n };\r\n\r\n const getUrlByName = (name) => {\r\n if (name === 'associations') {\r\n const url = getUrlWithSubAccountState();\r\n\r\n return `${url}Associations?`;\r\n }\r\n return '';\r\n };\r\n\r\n return {\r\n gridOptionUtils: {\r\n getUrlByName,\r\n getEntitySetByName,\r\n },\r\n };\r\n};\r\n","import { getAccountService } from './src/account-service';\r\nimport { getBulkEditParams } from './src/bulk-edit-params';\r\nimport { getBulkEditService } from './src/bulk-edit-service';\r\nimport { getGridOptionUtils } from './src/grid-option-utils';\r\n\r\nexport const getHotelCenterService = ({\r\n state, jsdata, edm, dataStore,\r\n} = {}) => ({\r\n ...getAccountService({ state, jsdata, edm }),\r\n ...getBulkEditParams({ state }),\r\n ...getBulkEditService({ dataStore }),\r\n ...getGridOptionUtils({ edm, state }),\r\n});\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nexport const getAccountService = ({ state, jsdata, edm }) => {\r\n if (!state || !jsdata || !edm) {\r\n return {};\r\n }\r\n /**\r\n * Class representing a AccountService for HotelCenter\r\n * @extends Backbone.Model\r\n */\r\n class AccountService extends Backbone.Model {\r\n fetchSubAccountAsync() {\r\n const currentSubAccountId = state.get('subAccount_id');\r\n const subAccountModel = state.get('subAccount_model');\r\n\r\n if (subAccountModel && subAccountModel.Id === currentSubAccountId) {\r\n return new Promise((resolve) => {\r\n resolve(subAccountModel);\r\n });\r\n } else if (currentSubAccountId && currentSubAccountId !== '') {\r\n // if the subAccountId don't equal to current subAccountId\r\n // fetch the new result\r\n return this.fetchSubAccountById(currentSubAccountId);\r\n }\r\n\r\n // when all subaccounts is selcted ,subaccount Id will be ''\r\n state.unset('subAccount_model');\r\n return new Promise((resolve) => {\r\n resolve(_.noop());\r\n });\r\n }\r\n\r\n fetchSubAccountById(subAccountId) {\r\n return jsdata.SubAccount\r\n .find(subAccountId, {\r\n entitySet: edm.currentAccount.SubAccounts,\r\n cacheResponse: false,\r\n bypassCache: true,\r\n })\r\n .then((subAccount) => {\r\n if (subAccount) {\r\n state.set('subAccount_model', subAccount);\r\n }\r\n\r\n return state.get('subAccount_model');\r\n });\r\n }\r\n }\r\n return {\r\n AccountService,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getBulkEditService = ({ dataStore: DataStore }) => {\r\n if (!DataStore) {\r\n return {};\r\n }\r\n const pollStatus = (taskId, successCb, failedCb) => {\r\n DataStore.BulkEditSession.find(taskId, { cacheResponse: false }).then((response) => {\r\n successCb(response);\r\n })\r\n .catch(failedCb);\r\n };\r\n\r\n const processResponse = (completeCB, failedCB, progressCB, response) => {\r\n if (_.contains(['Completed', 'CompletedWithErrors'], response.Status)) {\r\n completeCB(response);\r\n } else if (_.contains(['Failed', 'Aborted', 'Expired'], response.Status)) {\r\n failedCB(response);\r\n } else { // task is inprogress or pending\r\n progressCB(response);\r\n setTimeout(\r\n _.partial(\r\n pollStatus,\r\n response.Id,\r\n _.partial(processResponse, completeCB, failedCB, progressCB),\r\n failedCB\r\n ),\r\n 500\r\n );\r\n }\r\n return response;\r\n };\r\n\r\n /*\r\n * @param {Object} options\r\n * @param {Object} options.params\r\n * @param {function} options.progressCB\r\n * @param {function} options.completeCB\r\n * @param {function} options.failedCB\r\n * @param {boolean} preview\r\n */\r\n const bulkEdit = ({\r\n params,\r\n completeCB = _.noop,\r\n failedCB = _.noop,\r\n progressCB = _.noop,\r\n }, preview = false) => {\r\n const process = preview ?\r\n _.identity :\r\n _.partial(processResponse, completeCB, failedCB, progressCB);\r\n const urlParameters = { $expand: 'BulkEditResults' };\r\n\r\n if (preview) {\r\n urlParameters.preview = true;\r\n }\r\n return DataStore.BulkEditSession\r\n .create(params, {\r\n urlParameters,\r\n cacheResponse: false,\r\n })\r\n .then(process)\r\n .catch(failedCB);\r\n };\r\n\r\n const save = options => bulkEdit(options);\r\n const preview = options => bulkEdit(options, true);\r\n\r\n return {\r\n bulkEditService: {\r\n save,\r\n preview,\r\n },\r\n };\r\n};\r\n","/* eslint-disable max-len */\r\n\r\nimport $ from 'jquery';\r\n\r\nlet isLightDismissibleInitialized = false;\r\n\r\n/*\r\n Light Dismissible controller can help the element to be light dismissed when clicked else where.\r\n Give the target grid class name of \"light-dismissible\" and importing this function should do the job.\r\n\r\n Currently, it works element that can be toggled with either \"hide\" or \"show\" class.\r\n\r\n NOTE: If the element that toggles the visibility is outside of the target light dismissible element,\r\n clicked the toggle button will invoke this function to dismiss the target.\r\n\r\n For this, give e.originalEvent.noDismiss to the target class name.\r\n*/\r\nexport default () => {\r\n if (!isLightDismissibleInitialized) {\r\n $(window).click((e) => {\r\n const $lightDismissibles = $('.light-dismissible');\r\n\r\n if ($lightDismissibles.length === 0) {\r\n return;\r\n }\r\n\r\n const clickedEl = $(e.target);\r\n\r\n $lightDismissibles.each((index) => {\r\n if (clickedEl.closest($lightDismissibles[index]).length === 0) {\r\n if (e.originalEvent && e.originalEvent.noDismiss) {\r\n if ($($lightDismissibles[index]).hasClass(e.originalEvent.noDismiss)) {\r\n return;\r\n }\r\n }\r\n\r\n if (!$($lightDismissibles[index]).hasClass('hide')) {\r\n $($lightDismissibles[index]).addClass('hide');\r\n }\r\n\r\n if ($($lightDismissibles[index]).hasClass('show')) {\r\n $($lightDismissibles[index]).removeClass('show');\r\n }\r\n }\r\n });\r\n });\r\n\r\n isLightDismissibleInitialized = true;\r\n }\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport template from './view-template.pug';\r\n\r\nexport const getBidMultiplierView = ({ i18n, pageContext, multiplierSchema }) => {\r\n /**\r\n * Shared view for Hotel Ads Bid Multiplier\r\n * @extends DeterministicView\r\n */\r\n class BidMultiplierView extends DeterministicView {\r\n initialize(options) {\r\n const editStrategy = {\r\n increase: 'increase',\r\n decrease: 'decrease',\r\n };\r\n\r\n const strategy = options.strategy || editStrategy.increase;\r\n\r\n this.i18n = i18n;\r\n this.type = options.type;\r\n this.value = options.value;\r\n this.text = options.text;\r\n\r\n this.factorModel = this.initFactorInput('factor-input', strategy);\r\n\r\n this.setState({\r\n strategy,\r\n // getState will map '' and undefined to null\r\n // here just map null to _.noop() since there only have undefined check when setState\r\n // and also we show keep '0' work for clear situation\r\n factor: options.factor === null ? _.noop() : options.factor,\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change .select-strategy': ({ target }) => {\r\n this.setState({\r\n strategy: target.value,\r\n });\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n return {\r\n type: this.type,\r\n value: this.value,\r\n isValid: this.getChild('factor-input').getState().isValid,\r\n factor: this.getFactor(this.model.get('strategy'), this.factorModel.toJSON()),\r\n percentage: this.factorModel.toJSON() ? this.factorModel.toJSON().Factor : '',\r\n };\r\n }\r\n\r\n setState({\r\n strategy,\r\n factor,\r\n isUseParent,\r\n }) {\r\n if (!_.isUndefined(isUseParent)) {\r\n this.model.set({ isUseParent });\r\n this.getChild('factor-input').setState({ readonly: isUseParent });\r\n }\r\n\r\n if (strategy && strategy !== this.model.get('strategy')) {\r\n this.model.set({ strategy });\r\n this.factorModel = this.initFactorInput('factor-input', strategy);\r\n }\r\n\r\n if (!_.isUndefined(factor)) {\r\n // formatDecimal will ignore fraction by default\r\n const value = _.isNumber(factor) ? i18n.formatDecimal(\r\n factor,\r\n { minimumFractionDigits: 0, maximumFractionDigits: 1 }\r\n ) : factor;\r\n\r\n this.factorModel.set('Factor', value);\r\n this.getChild('factor-input').setState({ value });\r\n this.trigger('input-changed');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n getFactor(editStrategy, factorModel) {\r\n const factor = factorModel.Factor;\r\n\r\n if (factor === null) {\r\n return _.noop();\r\n }\r\n let num = Number(factor) / 100;\r\n\r\n if (editStrategy === 'increase') {\r\n num += 1;\r\n } else {\r\n num = 1 - num;\r\n }\r\n // here we need to format decimal firstly to restrict the fraction from 1-3\r\n // mt only support fraction with 1-3\r\n // and we want to keep what user input instead of a fix fraction\r\n const formatDecimal =\r\n i18n.formatDecimal(num, { minimumFractionDigits: 1, maximumFractionDigits: 3 });\r\n // we need to parse decimal here since formatDecimal involve the locale information\r\n return i18n.parseDecimal(formatDecimal).toString();\r\n }\r\n\r\n initFactorInput(inputView, editStrategy) {\r\n const schema = multiplierSchema;\r\n\r\n if (editStrategy === 'increase') {\r\n _.extend(schema.properties.Factor, { minimum: 0, maximum: 1000 });\r\n } else {\r\n _.extend(schema.properties.Factor, { minimum: 0, maximum: 100 });\r\n }\r\n const FactorModel = backboneSchema(\r\n schema, i18n, ['Factor', '@odata.type'], null,\r\n {\r\n Factor: {\r\n validation: (validation) => {\r\n validation.decimalLength.decimalLength = 1; // eslint-disable-line\r\n return validation;\r\n },\r\n },\r\n }\r\n );\r\n\r\n const factorModel = new FactorModel();\r\n\r\n factorModel.set('Factor', '');\r\n\r\n const factorInput = new InputControl({\r\n entity: factorModel,\r\n field: 'Factor',\r\n addonText: pageContext.DecimalFormatter.percentSymbol,\r\n ariaLabel: i18n.getString('HotelCenter_Overview_Multipliers_Bids_Factor_Label'),\r\n });\r\n\r\n this.setChild(inputView, factorInput);\r\n\r\n return factorModel;\r\n }\r\n }\r\n\r\n return {\r\n BidMultiplierView,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport template from './bid-multipliers-view-template.pug';\r\nimport { getUserCountryMultipliersView } from './user-country/view';\r\nimport { getDeviceTypeMultipliersView } from './device-type/view';\r\nimport { getCheckInDayMultipliersView } from './check-in-day/view';\r\nimport { getLengthOfStayMultipliersView } from './length-of-stay/view';\r\nimport { getBidMultiplierView } from './single-multiplier-view/view';\r\n\r\nexport const getBidMultipliersView = ({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n}) => {\r\n if (!i18n || !componentState || !pageContext || !multiplierSchema) {\r\n return {};\r\n }\r\n const { bidMultiplierUtils } = getHotelCenterUtils({ i18n, state: componentState });\r\n const { getMultipliersState } = bidMultiplierUtils;\r\n const { CheckInDayMultipliersView } =\r\n getCheckInDayMultipliersView({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n });\r\n const { DeviceTypeMultipliersView } =\r\n getDeviceTypeMultipliersView({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n });\r\n const { LengthOfStayMultipliersView } =\r\n getLengthOfStayMultipliersView({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n });\r\n const { BidMultiplierView } =\r\n getBidMultiplierView({ i18n, pageContext, multiplierSchema });\r\n const { UserCountryMultipliersView } =\r\n getUserCountryMultipliersView({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n });\r\n /**\r\n * Shared view for Hotel Ads Bid Multipliers\r\n * @extends DeterministicView\r\n */\r\n const deviceTypes = ['Mobile', 'Tablet', 'Desktop'];\r\n const checkInDays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\r\n\r\n class BidMultipliersView extends DeterministicView {\r\n initialize({\r\n showUseParent = true,\r\n isPayPerStay = false,\r\n isPayPerStayPhase2Pilot = false,\r\n }) {\r\n this.i18n = i18n;\r\n this.showUseParent = showUseParent;\r\n this.deviceTypeMultipliersView = new DeviceTypeMultipliersView();\r\n this.dateTypeMultipliersView = new DeviceTypeMultipliersView({\r\n listOfTypes: {\r\n Selected: 'HotelCenter_Overview_DateType_Multipliers_Selected_Label',\r\n Default: 'HotelCenter_Overview_DateType_Multipliers_Default_Label',\r\n },\r\n type: 'dateType',\r\n });\r\n this.isHotelPropertyPromotionAdEnabled =\r\n pageContext.Permissions.IsHotelPropertyPromotionAdEnabled;\r\n this.siteTypeMultipliersView = new DeviceTypeMultipliersView({\r\n listOfTypes: {\r\n LocalUniversal: 'HotelCenter_Overview_SiteType_Multipliers_Local_Universal_Label',\r\n MapResults: 'HotelCenter_Overview_SiteType_Multipliers_Map_Results_Label',\r\n ...(this.isHotelPropertyPromotionAdEnabled ? { PropertyPromotionAd: 'HotelCenter_Overview_SiteType_Multipliers_Property_PromotionAd_Label' } : {}),\r\n },\r\n type: 'siteType',\r\n });\r\n this.userCountryMultipliersView = new UserCountryMultipliersView();\r\n this.lengthOfStayMultipliersView = new LengthOfStayMultipliersView();\r\n this.advancedBookingMultipliersView = new LengthOfStayMultipliersView({\r\n minNumberOfNights: 0,\r\n maxNumberOfNights: 180,\r\n type: 'advancedBooking',\r\n });\r\n this.checkInDayMultipliersView = new CheckInDayMultipliersView();\r\n this.setChild('device-type-multipliers', this.deviceTypeMultipliersView);\r\n this.setChild('date-type-multipliers', this.dateTypeMultipliersView);\r\n this.setChild('site-type-multipliers', this.siteTypeMultipliersView);\r\n this.setChild('user-country-multipliers', this.userCountryMultipliersView);\r\n this.setChild('length-of-stay-multipliers', this.lengthOfStayMultipliersView);\r\n this.setChild('check-in-day-multipliers', this.checkInDayMultipliersView);\r\n this.setChild('advanced-booking-multipliers', this.advancedBookingMultipliersView);\r\n this.setState({\r\n selectedMultiplierType: 'deviceType',\r\n isPayPerStay,\r\n isPayPerStayPhase2Pilot,\r\n });\r\n this.setState({ errors: [] });\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .bid-multipliers-panel li': ({ target }) => {\r\n this.setState({\r\n selectedMultiplierType: target.dataset.type,\r\n });\r\n },\r\n 'click .bid-multipliers-use-parent input[type=checkbox]': ({ target }) => {\r\n const isUseParent = target.checked;\r\n\r\n this.setState({ isUseParent });\r\n this.trigger('update:isUseParent', isUseParent);\r\n },\r\n };\r\n }\r\n\r\n setState({\r\n selectedMultiplierType,\r\n bidMultipliers,\r\n isUseParent,\r\n errors,\r\n isPayPerStay,\r\n isPayPerStayPhase2Pilot,\r\n }) {\r\n if (!_.isUndefined(isPayPerStay)) {\r\n this.model.set({ isPayPerStay });\r\n }\r\n if (!_.isUndefined(isPayPerStayPhase2Pilot)) {\r\n this.model.set({ isPayPerStayPhase2Pilot });\r\n }\r\n\r\n if (!_.isUndefined(isUseParent)) {\r\n this.model.set({ isUseParent });\r\n this.getChild('device-type-multipliers').setState({ isUseParent });\r\n this.getChild('date-type-multipliers').setState({ isUseParent });\r\n this.getChild('site-type-multipliers').setState({ isUseParent });\r\n this.getChild('user-country-multipliers').setState({ isUseParent });\r\n this.getChild('check-in-day-multipliers').setState({ isUseParent });\r\n this.getChild('length-of-stay-multipliers').setState({ isUseParent });\r\n this.getChild('advanced-booking-multipliers').setState({ isUseParent });\r\n }\r\n if (selectedMultiplierType && !this.model.get('isUseParent')) {\r\n this.model.set({ selectedMultiplierType });\r\n }\r\n if (!_.isEmpty(bidMultipliers)) {\r\n // set deviceType\r\n this.getChild('device-type-multipliers').setState(bidMultipliers.deviceType);\r\n\r\n // set dateType\r\n this.getChild('date-type-multipliers').setState(bidMultipliers.dateType);\r\n\r\n // set siteType\r\n this.getChild('site-type-multipliers').setState(bidMultipliers.siteType);\r\n\r\n // set userCountry\r\n const state = this.userCountryMultipliersView\r\n .getSelectedCountriesMulti(bidMultipliers.userCountry || {});\r\n\r\n this.getChild('user-country-multipliers').setState(state);\r\n\r\n // set checkInDay\r\n this.getChild('check-in-day-multipliers').setState(bidMultipliers.checkInDay);\r\n\r\n // set lengthOfStay\r\n this.getChild('length-of-stay-multipliers').setState({ staySegments: bidMultipliers.lengthOfStay || [] });\r\n\r\n // set advancedBooking\r\n this.getChild('advanced-booking-multipliers').setState({ staySegments: bidMultipliers.advancedBooking || [] });\r\n\r\n this.model.set({ selectedMultiplierType: this.model.attributes.selectedMultiplierType });\r\n }\r\n\r\n if (errors) {\r\n this.model.set({ errors });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n getBidMultipliers(bidMultipliers) {\r\n let res = [];\r\n\r\n _.each(bidMultipliers, (item) => {\r\n res = res.concat(item.bidMultipliers);\r\n });\r\n return res;\r\n }\r\n\r\n getState() {\r\n const isUseParent = this.model.get('isUseParent');\r\n const bidMultipliers = [];\r\n\r\n if (isUseParent) {\r\n return {\r\n isValid: true,\r\n bidMultipliers: [],\r\n };\r\n }\r\n\r\n bidMultipliers.push(this.getChild('device-type-multipliers').getState());\r\n bidMultipliers.push(this.getChild('date-type-multipliers').getState());\r\n bidMultipliers.push(this.getChild('site-type-multipliers').getState());\r\n bidMultipliers.push(this.getChild('user-country-multipliers').getState());\r\n bidMultipliers.push(this.getChild('check-in-day-multipliers').getState());\r\n bidMultipliers.push(this.getChild('length-of-stay-multipliers').getState());\r\n bidMultipliers.push(this.getChild('advanced-booking-multipliers').getState());\r\n const errors = _.chain(bidMultipliers)\r\n .pluck('errors')\r\n .flatten()\r\n .compact()\r\n .value();\r\n this.setState({ errors });\r\n\r\n if (_.findWhere(bidMultipliers, { isValid: false })) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n };\r\n }\r\n\r\n return {\r\n isValid: true,\r\n bidMultipliers: this.getBidMultipliers(bidMultipliers),\r\n };\r\n }\r\n\r\n clean() {\r\n const state = this.getState();\r\n let bidMultipliers;\r\n\r\n if (state.isValid) {\r\n bidMultipliers = getMultipliersState(state.bidMultipliers, true);\r\n }\r\n\r\n // to set mobile as 0 to in case bid multipliers covered by its father node\r\n // when there is no data\r\n if (!bidMultipliers || (_.isEmpty(bidMultipliers.checkInDay) &&\r\n _.isEmpty(bidMultipliers.deviceType) &&\r\n _.isEmpty(bidMultipliers.lengthOfStay) &&\r\n _.isEmpty(bidMultipliers.userCountry) &&\r\n _.isEmpty(bidMultipliers.dateType) &&\r\n _.isEmpty(bidMultipliers.siteType) &&\r\n _.isEmpty(bidMultipliers.advancedBooking))) {\r\n _.extend(bidMultipliers, {\r\n deviceType: {\r\n Mobile: {\r\n factor: 0,\r\n },\r\n },\r\n });\r\n }\r\n\r\n this.setState({ bidMultipliers });\r\n }\r\n\r\n emptyDeviceTypeAndCheckInDay() {\r\n const bidMultipliers = {\r\n deviceType: _.reduce(deviceTypes, (memo, item) =>\r\n _.extend(memo, {\r\n [item]: { factor: '' },\r\n }), {}),\r\n checkInDay: _.reduce(checkInDays, (memo, item) =>\r\n _.extend(memo, {\r\n [item]: { factor: '' },\r\n }), {}),\r\n };\r\n\r\n this.setState({ bidMultipliers });\r\n }\r\n }\r\n\r\n return {\r\n BidMultipliersView,\r\n BidMultiplierView,\r\n UserCountryMultipliersView,\r\n DeviceTypeMultipliersView,\r\n CheckInDayMultipliersView,\r\n LengthOfStayMultipliersView,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport template from './view-template.pug';\r\nimport { getBidMultiplierView } from '../single-multiplier-view/view';\r\n\r\nexport const getCheckInDayMultipliersView = ({\r\n i18n, state, pageContext, multiplierSchema,\r\n}) => {\r\n const { bidMultiplierUtils } = getHotelCenterUtils({ i18n, state });\r\n const { BidMultiplierView } = getBidMultiplierView({ i18n, pageContext, multiplierSchema });\r\n const {\r\n serializeBidMultipliers,\r\n weekDayMap,\r\n } = bidMultiplierUtils;\r\n\r\n /**\r\n * Shared view for Hotel Ads bid strategy setup section\r\n * @extends DeterministicView\r\n */\r\n\r\n class CheckInDayMultipliersView extends DeterministicView {\r\n initialize() {\r\n _.each(_.keys(weekDayMap), (key) => {\r\n this.setChild(`${key.toLowerCase()}-bid-multiplier`, this.getBidMultiplierView({\r\n value: key,\r\n text: i18n.getString(weekDayMap[key]),\r\n }));\r\n });\r\n }\r\n\r\n getBidMultiplierView(options) {\r\n const view = new BidMultiplierView({\r\n type: 'checkInDay',\r\n value: options.value,\r\n text: options.text,\r\n });\r\n\r\n return view;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n const checkInDayMultipliersState = [];\r\n\r\n _.each(_.keys(weekDayMap), (key) => {\r\n checkInDayMultipliersState.push(this.getChild(`${key.toLowerCase()}-bid-multiplier`).getState());\r\n });\r\n\r\n if (_.findWhere(checkInDayMultipliersState, { isValid: false })) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n };\r\n }\r\n\r\n return {\r\n isValid: true,\r\n bidMultipliers: serializeBidMultipliers(checkInDayMultipliersState),\r\n };\r\n }\r\n\r\n setState(options = {}) {\r\n const { isUseParent } = options;\r\n\r\n if (!_.isUndefined(isUseParent)) {\r\n _.each(_.keys(weekDayMap), (key) => {\r\n this.getChild(`${key.toLowerCase()}-bid-multiplier`).setState({ isUseParent });\r\n });\r\n }\r\n\r\n _.each(_.keys(weekDayMap), (key) => {\r\n if (options &&\r\n options[key] &&\r\n (options[key].strategy || !_.isUndefined(options[key].factor))) {\r\n this.getChild(`${key.toLowerCase()}-bid-multiplier`).setState({\r\n strategy: options[key].strategy,\r\n factor: options[key].factor,\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n }\r\n\r\n return {\r\n CheckInDayMultipliersView,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport template from './view-template.pug';\r\nimport { getBidMultiplierView } from '../single-multiplier-view/view';\r\n\r\nexport const getDeviceTypeMultipliersView = ({\r\n i18n, state, pageContext, multiplierSchema,\r\n}) => {\r\n const { bidMultiplierUtils } = getHotelCenterUtils({ i18n, state });\r\n const { BidMultiplierView } = getBidMultiplierView({ i18n, pageContext, multiplierSchema });\r\n\r\n const { serializeBidMultipliers } = bidMultiplierUtils;\r\n\r\n /**\r\n * Shared view for Hotel Ads bid strategy setup section\r\n * @extends DeterministicView\r\n */\r\n\r\n const deviceTypeMap = {\r\n Mobile: 'HotelCenter_Overview_Multipliers_Bids_Mobile_Label',\r\n Tablet: 'HotelCenter_Overview_Multipliers_Bids_Tablet_Label',\r\n Desktop: 'HotelCenter_Overview_Multipliers_Bids_Desktop_Label',\r\n };\r\n\r\n class DeviceTypeMultipliersView extends DeterministicView {\r\n initialize(options) {\r\n this.listOfTypes = options.listOfTypes || deviceTypeMap;\r\n this.type = options.type || 'deviceType';\r\n\r\n _.each(this.listOfTypes, (i18nKey, type) => {\r\n this.setChild(`${type.toLowerCase()}-bid-multiplier`, this.getBidMultiplierView({\r\n value: type,\r\n text: i18n.getString(i18nKey),\r\n }));\r\n });\r\n }\r\n\r\n getBidMultiplierView(options) {\r\n const view = new BidMultiplierView({\r\n type: this.type,\r\n value: options.value,\r\n text: options.text,\r\n });\r\n\r\n return view;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n const deviceMultipliersState = [];\r\n\r\n _.each(_.keys(this.listOfTypes), (key) => {\r\n deviceMultipliersState.push(this.getChild(`${key.toLowerCase()}-bid-multiplier`).getState());\r\n });\r\n\r\n if (_.findWhere(deviceMultipliersState, { isValid: false })) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n };\r\n }\r\n\r\n return {\r\n isValid: true,\r\n bidMultipliers: serializeBidMultipliers(deviceMultipliersState),\r\n };\r\n }\r\n\r\n setState(options = {}) {\r\n const { isUseParent } = options;\r\n\r\n if (!_.isUndefined(isUseParent)) {\r\n _.each(_.keys(this.listOfTypes), (key) => {\r\n this.getChild(`${key.toLowerCase()}-bid-multiplier`).setState({ isUseParent });\r\n });\r\n }\r\n\r\n _.each(_.keys(this.listOfTypes), (key) => {\r\n if (options &&\r\n options[key] &&\r\n (options[key].strategy || !_.isUndefined(options[key].factor))) {\r\n this.getChild(`${key.toLowerCase()}-bid-multiplier`).setState({\r\n strategy: options[key].strategy,\r\n factor: options[key].factor,\r\n });\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n }\r\n\r\n return {\r\n DeviceTypeMultipliersView,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport template from './view-template.pug';\r\nimport { getBidMultiplierView } from '../single-multiplier-view/view';\r\n\r\nexport const getLengthOfStayMultipliersView = ({\r\n i18n, state: componentState, pageContext, multiplierSchema,\r\n}) => {\r\n const { bidMultiplierUtils } = getHotelCenterUtils({ i18n, state: componentState });\r\n const { BidMultiplierView } = getBidMultiplierView({ i18n, pageContext, multiplierSchema });\r\n\r\n const {\r\n serializeBidMultipliers,\r\n formatStaySegments,\r\n } = bidMultiplierUtils;\r\n\r\n /**\r\n * Shared view for Hotel Ads length of stay bid multiplier\r\n * @extends DeterministicView\r\n */\r\n class LengthOfStayMultipliersView extends DeterministicView {\r\n initialize(options) {\r\n this.i18n = i18n;\r\n this.minNumberOfNights = _.isUndefined(options.minNumberOfNights) ?\r\n 1 : options.minNumberOfNights;\r\n this.maxNumberOfNights = options.maxNumberOfNights || 14;\r\n this.staySegments = [];\r\n this.nightsModel = this.initNightsInput('stay-nights-input');\r\n this.setState({\r\n staySegments: this.staySegments,\r\n });\r\n this.type = options.type || 'lengthOfStay';\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .add-new-query': () => {\r\n if (this.model.get('isUseParent')) {\r\n return;\r\n }\r\n this.addNewSegment();\r\n },\r\n 'click .mulitplier-query-remove .filter-query-remove__glyphicon': ({ target }) => {\r\n if (this.model.get('isUseParent')) {\r\n return;\r\n }\r\n this.removeSegment(target);\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n initNightsInput(inputView) {\r\n const schema = {\r\n name: 'NightsInput',\r\n type: 'object',\r\n properties: {\r\n MinimumNumberOfNights: {\r\n type: 'integer',\r\n minimum: this.minNumberOfNights,\r\n maximum: this.maxNumberOfNights,\r\n },\r\n },\r\n };\r\n const override = {\r\n MinimumNumberOfNights: {\r\n validation: (validators) => {\r\n const result = validators;\r\n\r\n if (_.has(result, 'decimalLength')) {\r\n result.decimalLength.message = i18n.getString('HotelCenter_Shared_Validation_Require_Integer');\r\n }\r\n return result;\r\n },\r\n },\r\n };\r\n const NightsModel = backboneSchema(schema, i18n, ['MinimumNumberOfNights', '@odata.type'], null, override);\r\n const addonText = this.type === 'lengthOfStay' ? i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_InputNights_AddOn_Label') : i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_InputDays_AddOn_Label');\r\n\r\n const nightsModel = new NightsModel();\r\n const nightsInput = new InputControl({\r\n entity: nightsModel,\r\n field: 'MinimumNumberOfNights',\r\n addonText,\r\n });\r\n\r\n this.setChild(inputView, nightsInput);\r\n\r\n return nightsModel;\r\n }\r\n\r\n addNewSegment() {\r\n const state = this.getChild('stay-nights-input').getState();\r\n\r\n if (!state.isValid) {\r\n return;\r\n }\r\n const minNumberOfNights = this.nightsModel.toJSON().MinimumNumberOfNights;\r\n\r\n if (_.isUndefined(minNumberOfNights)) {\r\n return;\r\n }\r\n this.updateUserInputs();\r\n this.addSegmentByMinNumberOfNights(minNumberOfNights);\r\n this.setState({ staySegments: this.staySegments });\r\n }\r\n\r\n removeSegment(target) {\r\n this.updateUserInputs();\r\n this.removeSegmentByMinNumberOfNights(target.title);\r\n this.setState({ staySegments: this.staySegments });\r\n }\r\n\r\n addSegmentByMinNumberOfNights(minNumberOfNights) {\r\n const currentKey = minNumberOfNights.toString();\r\n const currentIndex = _.findIndex(this.staySegments, it => it.key === currentKey);\r\n const newSegment = {\r\n key: currentKey,\r\n factor: _.noop(),\r\n strategy: 'increase',\r\n };\r\n\r\n if (currentIndex > -1) {\r\n this.staySegments.splice(currentIndex, 1, newSegment);\r\n } else {\r\n this.staySegments.push(newSegment);\r\n }\r\n this.staySegments = _.sortBy(this.staySegments, segment => Number(segment.key));\r\n // advanced booking and length of stay share the same view\r\n const isLengthOfStay = this.type === 'lengthOfStay';\r\n\r\n this.staySegments = formatStaySegments(this.staySegments, isLengthOfStay);\r\n }\r\n\r\n removeSegmentByMinNumberOfNights(minNumberOfNights) {\r\n const currentKey = minNumberOfNights.toString();\r\n const currentSegment = _.findWhere(this.staySegments, { key: currentKey });\r\n\r\n this.staySegments = _.difference(this.staySegments, [currentSegment]);\r\n // advanced booking and length of stay share the same view\r\n const isLengthOfStay = this.type === 'lengthOfStay';\r\n\r\n this.staySegments = formatStaySegments(this.staySegments, isLengthOfStay);\r\n }\r\n\r\n setState({ staySegments, isUseParent }) {\r\n if (staySegments) {\r\n _.each(staySegments, (segment) => {\r\n const bidMultiplier = new BidMultiplierView({\r\n text: segment.value,\r\n value: segment.key,\r\n strategy: segment.strategy,\r\n factor: segment.factor,\r\n type: this.type,\r\n });\r\n\r\n this.setChild(`${segment.key}-bid-multiplier`, bidMultiplier);\r\n });\r\n this.staySegments = staySegments;\r\n this.model.set({ staySegments });\r\n this.model.trigger('change');\r\n }\r\n if (!_.isUndefined(isUseParent)) {\r\n this.model.set('isUseParent', isUseParent);\r\n this.getChild('stay-nights-input').setState({ readonly: isUseParent });\r\n _.each(this.staySegments, (segment) => {\r\n this.getChild(`${segment.key}-bid-multiplier`).setState({ isUseParent });\r\n });\r\n }\r\n return this;\r\n }\r\n\r\n updateUserInputs() {\r\n _.each(this.staySegments, (item) => {\r\n item.factor = this.getChild(`${item.key}-bid-multiplier`).getState().percentage; // eslint-disable-line\r\n });\r\n }\r\n\r\n getState() {\r\n const lengthOfStayMultipliersState = [];\r\n\r\n _.each(this.staySegments, (item) => {\r\n lengthOfStayMultipliersState.push(this.getChild(`${item.key}-bid-multiplier`).getState());\r\n });\r\n\r\n if (_.findWhere(lengthOfStayMultipliersState, { isValid: false })) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n };\r\n }\r\n\r\n const bidMultipliers = serializeBidMultipliers(lengthOfStayMultipliersState);\r\n const stayFactors = _.pluck(bidMultipliers, 'Factor');\r\n let i = 0;\r\n let hasDuplicateMultipliers = false;\r\n\r\n while (i < stayFactors.length - 1) {\r\n if (stayFactors[i] === stayFactors[i + 1]) {\r\n hasDuplicateMultipliers = true;\r\n break;\r\n } else {\r\n i += 1;\r\n }\r\n }\r\n if (hasDuplicateMultipliers) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n errors: [i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_Duplicate')],\r\n };\r\n }\r\n\r\n return {\r\n isValid: true,\r\n bidMultipliers,\r\n };\r\n }\r\n }\r\n return {\r\n LengthOfStayMultipliersView,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport template from './view-template.pug';\r\nimport { getBidMultiplierView } from '../single-multiplier-view/view';\r\n\r\nexport const getUserCountryMultipliersView = ({\r\n i18n, state, pageContext, multiplierSchema,\r\n}) => {\r\n const { bidMultiplierUtils } = getHotelCenterUtils({ i18n, state });\r\n const { BidMultiplierView } = getBidMultiplierView({ i18n, pageContext, multiplierSchema });\r\n const { serializeBidMultipliers } = bidMultiplierUtils;\r\n\r\n /**\r\n * Shared view for Hotel Ads User country bid multiplier\r\n * @extends DeterministicView\r\n */\r\n class UserCountryMultipliersView extends DeterministicView {\r\n initialize() {\r\n const countries = state.get('userCountries');\r\n\r\n this.i18n = i18n;\r\n this.selectedCountries = [];\r\n this.chooseCountry = countries.length > 0 ? countries[0].Key : '';\r\n this.restCountries = this.getRestCountries(countries, this.selectedCountries);\r\n this.setState({\r\n selectedCountries: this.selectedCountries,\r\n chooseCountry: this.chooseCountry,\r\n restCountries: this.restCountries,\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .add-new-query': () => {\r\n if (this.model.get('isUseParent')) {\r\n return;\r\n }\r\n if (this.chooseCountry) {\r\n const chooseCountry = _.findWhere(this.restCountries, { Key: this.chooseCountry });\r\n\r\n this.updateUserInputs();\r\n this.selectedCountries.push(chooseCountry);\r\n this.restCountries = this.getRestCountries(this.restCountries, [chooseCountry]);\r\n if (this.restCountries.length > 0) {\r\n this.chooseCountry = this.restCountries[0].Key;\r\n } else {\r\n this.chooseCountry = '';\r\n }\r\n this.setState({\r\n selectedCountries: this.selectedCountries,\r\n restCountries: this.restCountries,\r\n chooseCountry: this.chooseCountry,\r\n });\r\n }\r\n },\r\n 'change .form-control.country-list': ({ target }) => {\r\n this.chooseCountry = target.value;\r\n this.setState({\r\n chooseCountry: this.chooseCountry,\r\n });\r\n },\r\n 'click .mulitplier-query-remove .filter-query-remove__glyphicon': ({ target }) => {\r\n if (this.model.get('isUseParent')) {\r\n return;\r\n }\r\n const removeCountry = _.findWhere(this.selectedCountries, { Key: target.title });\r\n\r\n this.restCountries.push(removeCountry);\r\n this.restCountries = _.sortBy(this.restCountries, 'Key');\r\n this.updateUserInputs();\r\n this.selectedCountries = this.getRestCountries(this.selectedCountries, [removeCountry]);\r\n this.setState({\r\n selectedCountries: this.selectedCountries,\r\n restCountries: this.restCountries,\r\n });\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getSelectedCountriesMulti(bidMultipliers) {\r\n const countries = state.get('userCountries');\r\n\r\n this.selectedCountries = [];\r\n\r\n if (bidMultipliers) {\r\n _.each(_.keys(bidMultipliers), (key) => {\r\n const country = _.findWhere(countries, { Key: key });\r\n\r\n if (country) {\r\n this.selectedCountries.push(_.extend(country, {\r\n strategy: bidMultipliers[key].strategy,\r\n factor: bidMultipliers[key].factor,\r\n }));\r\n }\r\n });\r\n }\r\n this.restCountries = this.getRestCountries(countries, this.selectedCountries);\r\n this.chooseCountry = this.restCountries.length > 0 ? this.restCountries[0].Key : '';\r\n return {\r\n selectedCountries: this.selectedCountries,\r\n restCountries: this.restCountries,\r\n chooseCountry: this.chooseCountry,\r\n };\r\n }\r\n\r\n getRestCountries(countries, removeNodes) {\r\n let keys = _.map(removeNodes, (node) => {\r\n if (node) {\r\n return node.Key;\r\n }\r\n return '';\r\n });\r\n\r\n keys = _.difference(keys, ['']);\r\n\r\n return _.filter(countries, country => _.indexOf(keys, country.Key) === -1);\r\n }\r\n\r\n setState({\r\n selectedCountries, chooseCountry, restCountries, isUseParent,\r\n }) {\r\n if (chooseCountry) {\r\n this.chooseCountry = chooseCountry;\r\n this.model.set({ chooseCountry });\r\n }\r\n\r\n if (selectedCountries) {\r\n _.each(selectedCountries, (country) => {\r\n const bidMultiplier = new BidMultiplierView({\r\n text: country.Value,\r\n value: country.Key,\r\n strategy: country.strategy,\r\n factor: country.factor,\r\n type: 'userCountry',\r\n });\r\n\r\n this.setChild(`${country.Key}-bid-multiplier`, bidMultiplier);\r\n });\r\n this.selectedCountries = selectedCountries;\r\n this.model.set({ selectedCountries });\r\n this.model.trigger('change');\r\n }\r\n\r\n if (restCountries) {\r\n this.restCountries = restCountries;\r\n this.model.set({ restCountries });\r\n }\r\n\r\n if (!_.isUndefined(isUseParent)) {\r\n this.model.set({ isUseParent });\r\n _.each(this.selectedCountries, (item) => {\r\n this.getChild(`${item.Key}-bid-multiplier`).setState({ isUseParent });\r\n });\r\n }\r\n return this;\r\n }\r\n\r\n updateUserInputs() {\r\n _.each(this.selectedCountries, (item) => {\r\n item.factor = this.getChild(`${item.Key}-bid-multiplier`).getState().percentage; // eslint-disable-line\r\n });\r\n }\r\n\r\n getState() {\r\n const userCountryMultipliersState = [];\r\n\r\n _.each(this.selectedCountries, (item) => {\r\n userCountryMultipliersState.push(this.getChild(`${item.Key}-bid-multiplier`).getState());\r\n });\r\n\r\n if (_.findWhere(userCountryMultipliersState, { isValid: false })) {\r\n return {\r\n isValid: false,\r\n bidMultipliers: _.noop(),\r\n };\r\n }\r\n\r\n return {\r\n isValid: true,\r\n bidMultipliers: serializeBidMultipliers(userCountryMultipliersState),\r\n };\r\n }\r\n }\r\n return {\r\n UserCountryMultipliersView,\r\n };\r\n};\r\n","/* eslint-disable no-proto, no-param-reassign */\r\nimport Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport _ from 'underscore';\r\nimport { DateFilter } from '@bingads-webui/date-filter';\r\nimport { getHotelCenterUtils } from '@bingads-webui-campaign/hotel-center-utils';\r\nimport { withoutTime } from '@bingads-webui/primitive-utilities';\r\nimport { RANGES } from '@bingads-webui/date-ranges';\r\n\r\nexport const getProjectionGridDateFilter = ({\r\n i18n: i18nDefault, pageContext, state, dateFilterPreferences,\r\n}) => {\r\n if (!i18nDefault || !pageContext || !state || !dateFilterPreferences) {\r\n return {};\r\n }\r\n const { dateUtils } = getHotelCenterUtils({ pageContext });\r\n const { setDateFilter } = dateFilterPreferences;\r\n const { account2local, local2account } = dateUtils;\r\n\r\n const includeRanges = ['custom', 'today', 'yesterday', 'thisWeekSunday', 'thisWeekMonday', 'lastSevenDays',\r\n 'lastWeekSunday', 'lastWeekMonday', 'lastFourteenDays', 'thisMonth', 'lastMonth', 'last30Days', 'allTime'];\r\n\r\n const formatAccountDate = date =>\r\n i18nDefault.formatDate(account2local(date), { raw: 'MM/dd/yyyy' });\r\n\r\n const formatUTCDateTime = (date) => {\r\n const strDate = i18nDefault.formatDate(account2local(date), { raw: 'yyyy-MM-ddTHH:mm:ss.sss', timeZone: 'GMT' });\r\n\r\n return `${strDate}Z`;\r\n };\r\n\r\n const ensureMinDate = (date, minDate) => {\r\n if (!_.isObject(date)) {\r\n date = new Date(date);\r\n }\r\n return minDate && (date < minDate) ? minDate : date;\r\n };\r\n\r\n const parseDate = dateString => i18nDefault.parseDate(dateString);\r\n\r\n const getDefaultRange = today => ({\r\n grain: 3,\r\n start: today,\r\n end: today,\r\n key: 'today',\r\n });\r\n\r\n const normalizeConfig = (config, gridName) => {\r\n const i18n = _.defaults({\r\n timeZone: null,\r\n __proto__: i18nDefault.__proto__,\r\n }, i18nDefault);\r\n\r\n // Normalize the config with default options\r\n return _.defaults(config, {\r\n i18n,\r\n isComparisonEnabled: true,\r\n enabledRangesPredicate: range => _.indexOf(includeRanges, range.key) !== -1,\r\n dateFormat: 'yMd',\r\n timeFormat: 'hm',\r\n get maxDate() {\r\n return config.maxDate || withoutTime(local2account(new Date()));\r\n },\r\n get defaultTimeRange() {\r\n const storedDateRangeKey = config.sharedInGrids === false ? `$daterange${gridName}` : '$daterange';\r\n const storedDateRange = state.get(storedDateRangeKey);\r\n\r\n if (_.result(storedDateRange, 'key') === RANGES.CUSTOM_TIME) {\r\n return {\r\n start: ensureMinDate(storedDateRange.start, config.minDate),\r\n end: ensureMinDate(storedDateRange.end, config.minDate),\r\n };\r\n }\r\n return _.noop();\r\n },\r\n });\r\n };\r\n\r\n const generateEndDateTime = (date, upToNowWhenToday) => {\r\n const now = local2account(new Date());\r\n const today = withoutTime(now);\r\n\r\n // if it is today, get the time for now\r\n if (date.valueOf() === today.valueOf() && upToNowWhenToday) {\r\n return now;\r\n }\r\n // if it is a past day, get the last time of that day\r\n const returnDate = new Date(date);\r\n\r\n returnDate.setHours(23, 59, 59, 999);\r\n return returnDate;\r\n };\r\n\r\n const formatDateRange = (odataTimeZone, dateRange, upToNowWhenToday) => _.result({\r\n UTC: () => {\r\n const end = dateRange.key === RANGES.CUSTOM_TIME ?\r\n dateRange.end :\r\n generateEndDateTime(dateRange.end, upToNowWhenToday);\r\n\r\n return {\r\n startDateTime: formatUTCDateTime(dateRange.start),\r\n endDateTime: formatUTCDateTime(end),\r\n };\r\n },\r\n Account: () => ({\r\n startDate: formatAccountDate(dateRange.start) ||\r\n formatAccountDate(parseDate(dateRange.RangeStartDate)),\r\n endDate: formatAccountDate(dateRange.end) ||\r\n formatAccountDate(parseDate(dateRange.RangeEndDate)),\r\n }),\r\n }, odataTimeZone);\r\n\r\n const addDateRangeToQueryParams = (queryParams, dateRange, { odataTimeZone = 'Account', upToNowWhenToday = true }) => {\r\n // need to format the date when generate from the preference odata api the first time\r\n if (dateRange.start && !_.isObject(dateRange.start) &&\r\n dateRange.end && !_.isObject(dateRange.end)) {\r\n dateRange.start = new Date(dateRange.start);\r\n dateRange.end = new Date(dateRange.end);\r\n }\r\n\r\n // Feeds use date time as date range while others use date\r\n const primaryRange = formatDateRange(odataTimeZone, dateRange, upToNowWhenToday);\r\n let query = _.defaults(primaryRange, queryParams.query);\r\n\r\n if (dateRange.compared) {\r\n query = _.defaults({\r\n comparisonStartDate: formatAccountDate(new Date(dateRange.compared.start)),\r\n comparisonEndDate: formatAccountDate(new Date(dateRange.compared.end)),\r\n }, query);\r\n } else {\r\n query = _.omit(query, 'comparisonStartDate', 'comparisonEndDate');\r\n }\r\n\r\n return _.defaults({\r\n query,\r\n }, queryParams);\r\n };\r\n\r\n const renderDateFilterView = (dateRange, dateFilter, dateFilterView) => {\r\n const today = withoutTime(local2account(new Date()));\r\n const container = $(dateFilter.container);\r\n const selection = _.extend({\r\n primaryRange: {\r\n grain: dateRange.grain,\r\n key: dateRange.key,\r\n start: ensureMinDate(dateRange.start, dateFilter.minDate),\r\n end: ensureMinDate(dateRange.end, dateFilter.minDate),\r\n },\r\n }, dateRange.compared ? {\r\n comparedRange: {\r\n key: dateRange.compared.key,\r\n },\r\n } : {});\r\n\r\n dateFilterView.setState({ today, selection });\r\n dateFilterView.render();\r\n container.append(dateFilterView.$el);\r\n };\r\n\r\n const setDateRange = ({\r\n name,\r\n dateFilter,\r\n dateRange,\r\n }) => {\r\n const { primaryRange, comparedRange } = dateRange;\r\n _.extend(primaryRange, { Rangelcid: pageContext.CurrentUser.Locale });\r\n const selectedDate = _.extend(primaryRange, {\r\n compared: comparedRange,\r\n });\r\n\r\n if (dateFilter.sharedInGrids === false) {\r\n setDateFilter(name, _.clone(dateRange));\r\n state.set(`$daterange${name}`, selectedDate);\r\n } else {\r\n setDateFilter('TravelShared', _.clone(dateRange));\r\n state.set('$daterange', selectedDate);\r\n }\r\n };\r\n\r\n const dateFilterPlugin = definePlugin =>\r\n definePlugin('dateFilter', ['gridView', 'dataSource', 'config'], (gridView, dataSource, { plugins, name } = {}) => {\r\n const dateFilter = _.result(plugins, 'dateFilter', {});\r\n const normalizedConfig = normalizeConfig(dateFilter, name);\r\n const dateFilterView = new DateFilter(normalizedConfig);\r\n const projectName = dateFilter.sharedInGrids === false ? `$daterange${name}` : '$daterange';\r\n const originalQuery = dataSource.query;\r\n\r\n // render date filter view in the initial function\r\n state.getPromise(projectName).then((initDateRange) => {\r\n let dateRange = initDateRange;\r\n\r\n // rewrite the date filter here to incase\r\n // preference setting saved some unenabled ranges\r\n if (!dateFilter.enabledRangesPredicate(dateRange)) {\r\n const today = withoutTime(local2account(new Date()));\r\n\r\n dateRange = getDefaultRange(today);\r\n setDateRange({\r\n name,\r\n dateFilter,\r\n dateRange:\r\n {\r\n primaryRange: _.omit(dateRange, 'compared'),\r\n comparedRange: dateRange.compared,\r\n },\r\n });\r\n }\r\n renderDateFilterView(dateRange, dateFilter, dateFilterView);\r\n });\r\n\r\n // wrap dateSource query to update data range\r\n dataSource.query = params => state.getPromise(projectName).then((dateRange) => {\r\n const queryParams = addDateRangeToQueryParams(params, dateRange, dateFilter);\r\n\r\n gridView.set({ queryParams });\r\n\r\n return originalQuery.call(dataSource, queryParams);\r\n });\r\n\r\n dateFilterView.on('date-range-selected', (dateRange) => {\r\n setDateRange({ name, dateFilter, dateRange });\r\n\r\n gridView.refresh(true);\r\n });\r\n return { events: _.extend({}, Backbone.Events) };\r\n });\r\n return {\r\n dateFilterPlugin,\r\n addDateRangeToQueryParams,\r\n };\r\n};\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './option-template.pug';\r\n\r\nexport class Option extends DeterministicView {\r\n events() {\r\n return {\r\n 'click .dropdown-search-selector__option': () => {\r\n this.trigger('optionSelected', this.getState());\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n const {\r\n id,\r\n } = this.model.attributes;\r\n\r\n return {\r\n id,\r\n };\r\n }\r\n\r\n setState({\r\n id = '', value = '', isSelected = false, isDisabled = false,\r\n }) {\r\n this.model.set({\r\n id,\r\n value,\r\n isSelected,\r\n isDisabled,\r\n });\r\n\r\n return this;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { helpers, DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './selector-template.pug';\r\nimport { Option } from './option';\r\n\r\nconst { updateView, ensureChildView } = helpers;\r\n\r\nexport class Selector extends DeterministicView {\r\n initialize({\r\n options = [],\r\n selectOption = {},\r\n nodataPlaceholder = '',\r\n }) {\r\n this.selectOption = selectOption;\r\n this.options = options;\r\n this.nodataPlaceholder = nodataPlaceholder;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n const {\r\n options,\r\n } = this.model.attributes;\r\n\r\n return {\r\n options,\r\n };\r\n }\r\n\r\n setState({ options, selectOption }) {\r\n if (options) {\r\n this.selectOption = selectOption || this.selectOption;\r\n _.each(options, (option) => {\r\n const initialOption = this.selectOption.id === option.id ?\r\n { isSelected: true } :\r\n { isSelected: false };\r\n\r\n ensureChildView(this, `option-${option.id}`, Option, {}, {\r\n optionSelected: 'onOptionSelected',\r\n }).setState(_.extend(initialOption, option));\r\n });\r\n this.model.set({ options });\r\n }\r\n\r\n return this;\r\n }\r\n\r\n onOptionSelected({ id }) {\r\n if (this.selectOption && this.selectOption.id !== id) {\r\n const { options } = this.getState();\r\n\r\n this.selectOption = _.findWhere(options, { id });\r\n\r\n updateView(this, {\r\n options,\r\n });\r\n }\r\n this.trigger('optionSelected', this.selectOption);\r\n }\r\n}\r\n","import { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport template from './pagination-template.pug';\r\n\r\nconst { updateView } = helpers;\r\n\r\n\r\nexport class Pagination extends DeterministicView {\r\n initialize({\r\n i18n,\r\n currentPage = 1,\r\n pageSize = 10,\r\n totalCount = 0,\r\n }) {\r\n this.i18n = i18n;\r\n this.pageSize = pageSize;\r\n\r\n this.setState({\r\n currentPage,\r\n totalCount,\r\n });\r\n }\r\n\r\n events() {\r\n return {\r\n 'click .previous-page-button': () => {\r\n this.goToPreviousPage();\r\n },\r\n 'click .next-page-button': () => {\r\n this.goToNextPage();\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n getState() {\r\n const {\r\n currentPage,\r\n totalCount,\r\n } = this.model.attributes;\r\n\r\n return {\r\n currentPage,\r\n totalCount,\r\n };\r\n }\r\n\r\n goToPreviousPage() {\r\n let { currentPage } = this.getState();\r\n if (currentPage <= 1) {\r\n return;\r\n }\r\n currentPage -= 1;\r\n\r\n updateView(this, {\r\n currentPage,\r\n });\r\n this.trigger('pageChanged', currentPage);\r\n }\r\n\r\n goToNextPage() {\r\n let { currentPage, totalCount } = this.getState(); // eslint-disable-line\r\n if (totalCount && (currentPage * this.pageSize) >= totalCount) {\r\n return;\r\n }\r\n\r\n currentPage += 1;\r\n\r\n updateView(this, {\r\n currentPage,\r\n });\r\n this.trigger('pageChanged', currentPage);\r\n }\r\n}\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './search-template.pug';\r\n\r\nexport class Search extends DeterministicView {\r\n initialize({\r\n placeholder = 'account name',\r\n searchResultsId = 'search-results',\r\n }) {\r\n this.placeholder = placeholder;\r\n this.searchResultsId = searchResultsId;\r\n }\r\n\r\n events() {\r\n return {\r\n 'click .dropdown-search-selector__search--submit': () => this.search(),\r\n 'input input#srch-term': () => this.onChange(),\r\n keypress: e => this.keyPress(e),\r\n };\r\n }\r\n\r\n keyPress(e) {\r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n this.search();\r\n }\r\n }\r\n\r\n onChange() {\r\n this.trigger('searchChanged', this.$('#srch-term')[0].value);\r\n }\r\n\r\n search() {\r\n this.trigger('searchInvoked', this.$('#srch-term')[0].value);\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n}\r\n","import { DeterministicView, helpers } from '@bingads-webui/deterministic-view';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport { Selector } from './selector';\r\nimport { Pagination } from './pagination';\r\nimport { Search } from './search';\r\nimport { Option } from './option';\r\nimport template from './dropdown-search-selector-template.pug';\r\n\r\nconst { updateView, ensureChildView } = helpers;\r\n\r\nexport class DropdownSearchSelector extends DeterministicView {\r\n initialize({\r\n selectOption,\r\n placeholder,\r\n dataSource,\r\n pageSize = 10,\r\n i18n,\r\n customOptions = [],\r\n forceEnableSearch = false,\r\n invokeSearchOnChange = false, // invoke search on change\r\n nodataPlaceholder = '',\r\n isDisabled = false,\r\n }) {\r\n this.model.set({ selectOption: { id: '', value: '' } });\r\n this.model.set({ isDisabled });\r\n this.dataSource = dataSource;\r\n this.pageSize = pageSize;\r\n this.placeholder = placeholder;\r\n this.i18n = i18n;\r\n this.customOptions = customOptions;\r\n this.forceEnableSearch = forceEnableSearch;\r\n this.invokeSearchOnChange = invokeSearchOnChange;\r\n this.nodataPlaceholder = nodataPlaceholder;\r\n this.searchResultsId = _.uniqueId('search-results-');\r\n\r\n $(window).click((e) => {\r\n const clickedEl = $(e.target);\r\n const dropDown = this.$('.dropdown-search-selector__dropdown');\r\n\r\n if (clickedEl.closest(dropDown).length === 0 && dropDown.hasClass('open')) {\r\n this.toggle();\r\n }\r\n });\r\n this.viewLoadAsync(selectOption || { id: '', value: '' });\r\n }\r\n\r\n viewLoadAsync(selectOption = _.noop()) {\r\n return this.fetchData(this.dataSource, {\r\n pageNumber: 1,\r\n pageSize: this.pageSize,\r\n }).then((results) => {\r\n let { options } = results;\r\n\r\n if (results.totalCount > this.pageSize) {\r\n // enable search and pagination\r\n const { totalCount } = results;\r\n\r\n this.initialPaginationView(this.i18n, totalCount);\r\n this.initialSearchView(this.placeholder);\r\n options = options.slice(0, this.pageSize);\r\n } else {\r\n if (this.getChild('pagination-container')) {\r\n this.detachChild('pagination-container').remove();\r\n }\r\n\r\n if (this.forceEnableSearch) {\r\n this.initialSearchView(this.placeholder);\r\n } else if (this.getChild('search-container')) {\r\n this.detachChild('search-container').remove();\r\n }\r\n }\r\n\r\n // clean the search term\r\n if (this.getChild('search-container')) {\r\n this.$('#srch-term').val('');\r\n this.searchString = '';\r\n }\r\n if (selectOption) {\r\n this.setState({ selectOption });\r\n }\r\n\r\n if (this.customOptions) {\r\n _.each(this.customOptions, (option) => {\r\n option.id = option.id || option.value; // eslint-disable-line\r\n this.initialCustomOptionView(option, selectOption);\r\n });\r\n }\r\n this.setOptionView(options, selectOption);\r\n this.render();\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .dropdown-toggle': () => {\r\n this.toggle();\r\n },\r\n };\r\n }\r\n\r\n fetchData(dataSource, params) {\r\n return new Promise((resolve) => {\r\n if (_.isFunction(dataSource)) {\r\n return resolve(dataSource(params));\r\n }\r\n return resolve({\r\n options: [],\r\n totalCount: 0,\r\n });\r\n });\r\n }\r\n\r\n onOptionSelected(selectOption) {\r\n updateView(this, {\r\n selectOption,\r\n });\r\n this.trigger('option-selected', selectOption);\r\n this.selectedId = selectOption.id;\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n this.$('.dropdown-toggle').parent().toggleClass('open');\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n onSearchChanged(searchString) {\r\n if (this.invokeSearchOnChange) {\r\n this.onSearchInvoked(searchString);\r\n }\r\n }\r\n\r\n onSearchInvoked(searchString) {\r\n if (this.searchString !== searchString) {\r\n this.searchString = searchString;\r\n this.fetchData(this.dataSource, {\r\n searchString,\r\n pageNumber: 1,\r\n pageSize: this.pageSize,\r\n }).then((results) => {\r\n const { totalCount } = results;\r\n\r\n if (this.getChild('pagination-container')) {\r\n this.getChild('pagination-container').setState({\r\n currentPage: 1,\r\n totalCount,\r\n });\r\n }\r\n this.getChild('selector-container').setState({\r\n options: results.options,\r\n });\r\n });\r\n }\r\n }\r\n\r\n onPageChanged(currentPage) {\r\n this.fetchData(this.dataSource, {\r\n searchString: this.searchString,\r\n pageNumber: currentPage,\r\n pageSize: this.pageSize,\r\n }).then((results) => {\r\n const { totalCount } = results;\r\n\r\n if (this.getChild('pagination-container')) {\r\n this.getChild('pagination-container').setState({\r\n currentPage,\r\n totalCount,\r\n });\r\n }\r\n this.getChild('selector-container').setState({\r\n options: results.options,\r\n });\r\n });\r\n }\r\n\r\n initialSearchView(placeholder) {\r\n ensureChildView(this, 'search-container', Search, {\r\n placeholder,\r\n searchResultsId: this.searchResultsId,\r\n }, {\r\n searchInvoked: 'onSearchInvoked',\r\n searchChanged: 'onSearchChanged',\r\n });\r\n }\r\n\r\n initialPaginationView(i18n, totalCount) {\r\n ensureChildView(this, 'pagination-container', Pagination, { i18n, pageSize: this.pageSize, totalCount }, {\r\n pageChanged: 'onPageChanged',\r\n }).setState({\r\n totalCount,\r\n currentPage: 1,\r\n });\r\n }\r\n\r\n setOptionView(options, selectOption) {\r\n ensureChildView(this, 'selector-container', Selector, { options, selectOption, nodataPlaceholder: this.nodataPlaceholder }, {\r\n optionSelected: 'onOptionSelected',\r\n }).setState({ options, selectOption });\r\n }\r\n\r\n initialCustomOptionView(customOption, selectOption) {\r\n if (!customOption.onOptionSelected) {\r\n customOption.onOptionSelected = ({ id }) => { // eslint-disable-line\r\n const option = _.findWhere(this.customOptions, { id });\r\n\r\n this.onOptionSelected(option);\r\n };\r\n }\r\n ensureChildView(this, `${customOption.id}-container`, Option, {}, {\r\n optionSelected: ({ id }) => customOption.onOptionSelected({ id }),\r\n }).setState({\r\n id: customOption.id,\r\n value: customOption.value,\r\n isSelected: selectOption.id === customOption.id,\r\n });\r\n }\r\n}\r\n","export const schema = {\r\n scenario: [{\r\n name: 'subAccountSetup',\r\n value: 'HotelCenterSubAccountSetup',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'initializeWizard',\r\n value: 'InitializeWizard',\r\n }, {\r\n name: 'saveSubAccount',\r\n value: 'SaveSubAccount',\r\n }, {\r\n name: 'closeWizard',\r\n value: 'CloseWizard',\r\n },\r\n ],\r\n }, {\r\n name: 'subAccountBar',\r\n value: 'HotelCenterSubAccountBar',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'loadSubAccountInfo',\r\n value: 'LoadSubAccountInfo',\r\n }, {\r\n name: 'saveSubAccountBid',\r\n value: 'SaveSubAccountBid',\r\n }, {\r\n name: 'saveBidMultiplier',\r\n value: 'SaveBidMultiplier',\r\n },\r\n ],\r\n }, {\r\n name: 'overViewPage',\r\n value: 'HotelCenterOverViewPage',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'loadHotelGroupGrid',\r\n value: 'LoadHotelGroupGrid',\r\n }, {\r\n name: 'loadHotelIdGrid',\r\n value: 'LoadHotelIdGrid',\r\n }, {\r\n name: 'loadDeviceTypeGrid',\r\n value: 'LoadDeviceTypeGrid',\r\n }, {\r\n name: 'loadDateGrid',\r\n value: 'LoadDateGrid',\r\n }, {\r\n name: 'loadLengthOfStayGrid',\r\n value: 'LoadLengthOfStayGrid',\r\n }, {\r\n name: 'loadUserCountryGrid',\r\n value: 'LoadUserCountryGrid',\r\n }, {\r\n name: 'loadHotelCountryGrid',\r\n value: 'LoadHotelCountryGrid',\r\n }, {\r\n name: 'loadSlotTypeGrid',\r\n value: 'LoadSlotTypeGrid',\r\n }, {\r\n name: 'loadAdvancedBookingGrid',\r\n value: 'LoadAdvancedBookingGrid',\r\n }, {\r\n name: 'loadCheckinDayGrid',\r\n value: 'LoadCheckinDayGrid',\r\n }, {\r\n name: 'loadDateTypeGrid',\r\n value: 'LoadDateTypeGrid',\r\n }, {\r\n name: 'loadSiteTypeGrid',\r\n value: 'LoadSiteTypeGrid',\r\n }, {\r\n name: 'loadSubAccountGrid',\r\n value: 'LoadSubAccountGrid',\r\n }, {\r\n name: 'bulkEditHotelBid',\r\n value: 'BulkEditHotelBid',\r\n }, {\r\n name: 'bulkEditHotelMultiplier',\r\n value: 'BulkEditHotelMultiplier',\r\n }, {\r\n name: 'bulkEditIncreaseDecreaseBid',\r\n value: 'BulkEditIncreaseDecreaseBid',\r\n }, {\r\n name: 'inlineEditHotelBid',\r\n value: 'InlineEditHotelBid',\r\n }, {\r\n name: 'inlineEditHotelMultiplier',\r\n value: 'InlineEditHotelMultiplier',\r\n },\r\n ],\r\n }, {\r\n name: 'budgetPage',\r\n value: 'HotelCenterBudgetPage',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'initializePage',\r\n value: 'InitializePage',\r\n }, {\r\n name: 'saveBidCap',\r\n value: 'SaveBidCap',\r\n }, {\r\n name: 'saveBudget',\r\n value: 'SaveBudget',\r\n },\r\n ],\r\n }, {\r\n name: 'utilityPage',\r\n value: 'HotelCenterUtilityPage',\r\n setting: {},\r\n activity: [\r\n {\r\n name: 'loadFeedStatusGrid',\r\n value: 'LoadFeedStatusGrid',\r\n }, {\r\n name: 'downloadFeedStatusReport',\r\n value: 'DownloadFeedStatusReport',\r\n },\r\n ],\r\n }],\r\n};\r\n","// specify odata error codes that represent user errors\r\nexport const errorCodes = [\r\n 'BUDGETAMOUNTISABOVELIMIT',\r\n 'BUDGETAMOUNTISBELOWLIMIT',\r\n 'DEFAULTHOTELGROUPUPDATENOTALLOWED',\r\n 'MAXSUBACCOUNTLIMITATIONREACHED',\r\n 'ENTITYDOESNOTEXIST', // fix bug 3532459:400 error with error code EntityDoesNotExist\r\n];\r\n","import _ from 'underscore';\r\nimport { AriaListener } from '@bingads-webui/aria-listener';\r\nimport { ConsoleListener } from '@bingads-webui/console-listener';\r\nimport { InMemoryListener, InMemorySink } from '@bingads-webui/in-memory-listener';\r\nimport {\r\n getAriaConfig,\r\n campaignLogTableConfig,\r\n ContextProcessor,\r\n DebugProcessor,\r\n BasicFormatter,\r\n ApiFormatter,\r\n ConsoleFormatter,\r\n LogLevelFilter,\r\n ApiFilter,\r\n ConsoleFilter,\r\n OdataErrorMapper,\r\n isTestEnvironment,\r\n} from '@bingads-webui-campaign/instrumentation';\r\nimport { errorCodes } from './error-codes';\r\n\r\nexport const initSetup = ({ pageContext, config }) => {\r\n const getListeners = () => {\r\n const ariaConfig = getAriaConfig();\r\n const currentEnv = _.find(_.keys(ariaConfig.tokens), env => document.domain.indexOf(env) > -1);\r\n\r\n // init log formatters\r\n const basicFormatter = new BasicFormatter({\r\n applicationSystem: 'campaign',\r\n applicationSubSystem: 'hotelcenterui',\r\n });\r\n const apiFormatter = new ApiFormatter();\r\n const consoleFormatter = new ConsoleFormatter();\r\n\r\n // init log filters\r\n const logLevelFilter = new LogLevelFilter();\r\n const apiFilter = new ApiFilter();\r\n const consoleFilter = new ConsoleFilter();\r\n\r\n const ariaListener = new AriaListener({\r\n tenantToken: ariaConfig.tokens[currentEnv],\r\n flushInterval: ariaConfig.flushInterval,\r\n batchSize: ariaConfig.batchSize,\r\n logTableNames: campaignLogTableConfig.logTableNames,\r\n defaultLogCategory: campaignLogTableConfig.defaultLogCategory,\r\n formatters: {\r\n basicFormatter,\r\n apiFormatter,\r\n },\r\n filters: {\r\n logLevelFilter,\r\n apiFilter,\r\n },\r\n });\r\n\r\n ariaListener.init();\r\n ariaListener.registerForTeardown();\r\n\r\n const consoleListener = new ConsoleListener({\r\n filters: {\r\n consoleFilter,\r\n },\r\n formatters: {\r\n consoleFormatter,\r\n },\r\n });\r\n\r\n consoleListener.init();\r\n\r\n const listeners = {\r\n ariaListener,\r\n consoleListener,\r\n };\r\n\r\n if (isTestEnvironment(currentEnv)) {\r\n window.seleniumLogsSink = new InMemorySink({ maxSize: 100 });\r\n const inMemoryListener = new InMemoryListener({\r\n sink: window.seleniumLogsSink,\r\n formatters: {\r\n basicFormatter,\r\n apiFormatter,\r\n },\r\n filters: {\r\n logLevelFilter,\r\n apiFilter,\r\n },\r\n });\r\n\r\n inMemoryListener.init();\r\n\r\n _.extend(listeners, { inMemoryListener });\r\n }\r\n\r\n return listeners;\r\n };\r\n\r\n const getProcessors = () => {\r\n const contextProcessor = new ContextProcessor({ pageContext });\r\n const debugProcessor = new DebugProcessor({\r\n isDebugMode: (config && config.get('isDebugMode')) || window.BINGADS_DEBUG,\r\n });\r\n\r\n const processors = {\r\n contextProcessor,\r\n debugProcessor,\r\n };\r\n\r\n return processors;\r\n };\r\n\r\n const getErrorMappers = () => {\r\n const odataErrorMapper = new OdataErrorMapper(errorCodes);\r\n\r\n const errorMappers = {\r\n odataErrorMapper,\r\n };\r\n\r\n return errorMappers;\r\n };\r\n\r\n return {\r\n getErrorMappers,\r\n getProcessors,\r\n getListeners,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { AriaListener } from '@bingads-webui/aria-listener';\r\nimport { Instrumentation } from '@bingads-webui/instrumentation';\r\nimport { PerformanceTimingLogger } from '@bingads-webui/performance-timing-logger';\r\nimport {\r\n getAriaConfig,\r\n PerformanceLogsFilter,\r\n PerformanceLogsFormatter,\r\n ContextProcessor,\r\n DebugProcessor,\r\n PerfTimingProcessor,\r\n} from '@bingads-webui-campaign/instrumentation';\r\n\r\nexport const initPerfTiming = ({ pageContext, config }) => {\r\n const getListeners = () => {\r\n const ariaConfig = getAriaConfig();\r\n const currentEnv = _.find(_.keys(ariaConfig.tokens), env => document.domain.indexOf(env) > -1);\r\n\r\n // init log formatters\r\n const performanceLogsFormatter = new PerformanceLogsFormatter();\r\n\r\n // init log filters\r\n const performanceLogsFilter = new PerformanceLogsFilter();\r\n\r\n const ariaListener = new AriaListener({\r\n tenantToken: ariaConfig.tokens[currentEnv],\r\n flushInterval: ariaConfig.flushInterval,\r\n batchSize: ariaConfig.batchSize,\r\n logTableNames: {\r\n resourcetiming: {\r\n name: 'resourcetiming',\r\n },\r\n },\r\n defaultLogCategory: 'resourcetiming',\r\n formatters: {\r\n performanceLogsFormatter,\r\n },\r\n filters: {\r\n performanceLogsFilter,\r\n },\r\n });\r\n\r\n ariaListener.init();\r\n ariaListener.registerForTeardown();\r\n\r\n const listeners = {\r\n ariaListener,\r\n };\r\n\r\n return listeners;\r\n };\r\n\r\n const getProcessors = () => {\r\n const contextProcessor = new ContextProcessor({ pageContext });\r\n const debugProcessor = new DebugProcessor({\r\n isDebugMode: (config && config.get('isDebugMode')) || window.BINGADS_DEBUG,\r\n });\r\n const perfTimingProcessor = new PerfTimingProcessor({\r\n landingPageUrl: config.get('LandingPageUrl') || '',\r\n });\r\n\r\n const processors = {\r\n contextProcessor,\r\n debugProcessor,\r\n perfTimingProcessor,\r\n };\r\n\r\n return processors;\r\n };\r\n\r\n const instr = new Instrumentation({\r\n listeners: getListeners(),\r\n processors: getProcessors(),\r\n });\r\n\r\n const perfTimingLogger = new PerformanceTimingLogger({ instrumentation: instr });\r\n\r\n return {\r\n perfTimingLogger,\r\n getListeners,\r\n getProcessors,\r\n };\r\n};\r\n","import { EDM } from '@bingads-webui/edm-core-legacy';\r\nimport { jsdataPlugin } from '@bingads-webui/edm-js-data';\r\nimport { odataPlugin } from '@bingads-webui/edm-odata-legacy';\r\nimport { resIdsPlugin } from '@bingads-webui/edm-resource-identifiers-legacy';\r\nimport {\r\n defineConstProperty,\r\n defineComputedProperty,\r\n} from '@bingads-webui/reflection';\r\nimport _ from 'underscore';\r\nimport { getJsDataExtension } from './js-data-extension';\r\n\r\nexport const getEdmBhc = ({\r\n state, schemas, CustomerIdType, config,\r\n}) => {\r\n if (!state || !schemas || !CustomerIdType || !config) {\r\n return {};\r\n }\r\n const namespace = 'Microsoft.BingAds.Api.Model.Travel';\r\n const edm = new EDM({\r\n schemas,\r\n namespace,\r\n });\r\n const jsdataExtension = getJsDataExtension({ config, state });\r\n\r\n resIdsPlugin(edm);\r\n odataPlugin(edm, '');\r\n jsdataPlugin(edm);\r\n\r\n jsdataExtension(edm);\r\n\r\n // Define the root type\r\n // We only have a Customer entity set at the root\r\n const rootType = new edm.types.ComplexType({\r\n name: '$ROOT',\r\n properties: {\r\n Customers: { typeName: `${namespace}.TravelCustomer@COLL` },\r\n },\r\n });\r\n const root = new rootType.ResourceIdentifier();\r\n\r\n defineConstProperty(edm, 'root', root);\r\n\r\n const customerIdType = new CustomerIdType();\r\n\r\n defineConstProperty(edm, 'customerIdType', customerIdType);\r\n\r\n _.each({\r\n currentCustomer: {\r\n key: 'customer_id',\r\n parent: 'root',\r\n collection: 'Customers',\r\n },\r\n currentAccount: {\r\n key: 'account_id',\r\n parent: 'currentCustomer',\r\n collection: 'Accounts',\r\n },\r\n }, (dependencies, name) => {\r\n defineComputedProperty(edm, name, () => {\r\n let id = state.get(dependencies.key);\r\n const parent = edm[dependencies.parent];\r\n\r\n if (edm.customerIdType.useAdvertiserCustomerId && dependencies.parent === 'root' && state.get('advertisercustomer_id')) {\r\n id = state.get('advertisercustomer_id');\r\n }\r\n\r\n return parent && id ? parent[dependencies.collection].$withKey(Number(id)) : null;\r\n });\r\n });\r\n return { jsdataBhc: edm.jsdata.resources };\r\n};\r\n","import ODataAdapter from '@bingads-webui/js-data-odata';\r\n\r\nexport const getJsDataExtension = ({ config, state }) => (edm) => {\r\n const { store } = edm.jsdata;\r\n\r\n store.registerAdapter('odata', new ODataAdapter({\r\n ajaxOptions: {\r\n path: 'HotelCenter/V1',\r\n host: config.get('odata.url'),\r\n oDataToken: config.get('odata.token'),\r\n loginType: config.get('odata.loginType'),\r\n },\r\n state,\r\n }), { default: true });\r\n};\r\n","import lightDismissible from './src/light-dismissible/light-dismissible';\r\nimport toolbarTemplate from './src/template/toolbar-template.pug';\r\nimport { getAccountInformationView } from './src/account-information-view/account-information-view';\r\nimport { getBidCapView } from './src/bid-cap-view/bid-cap-view';\r\nimport { getBidStrategyView } from './src/bid-strategy-view/bid-strategy-view';\r\nimport { getBidMultipliersView } from './src/bid-multipliers-view/bid-multipliers-view';\r\nimport { getProjectionGridDateFilter } from './src/date-filter/projection-grid-date-filter';\r\nimport { DropdownSearchSelector } from './src/dropdown-search-selector/dropdown-search-selector';\r\nimport { getEditPanelView } from './src/edit-panel-view/edit-panel-view';\r\nimport { getFetchPreferenceConfig } from './src/service/fetch-preference-config';\r\nimport { getHotelGroupInformationView } from './src/hotel-group-information-view/information-view';\r\nimport { getHotelGroupModel } from './src/hotel-group-model/hotel-group-model';\r\nimport { getHotelModel } from './src/hotel-model/hotel-model';\r\nimport { getInstrumentation } from './src/instrumentation/index';\r\nimport { getEdmBhc } from './src/js-data-bhc/edm-bhc';\r\nimport { getUserCountryService } from './src/bid-multipliers-view/user-country/user-country-service';\r\nimport { getSubAccountModel } from './src/sub-account-model/sub-account-model';\r\n\r\nexport const getHotelCenterShared = ({\r\n pageContext, i18n, state, config, preferencesService, CustomerIdType,\r\n segmentationPreferences, jsdata, edm, dateFilterPreferences,\r\n fixedBidSchema, percentageBidSchema, payPerStayBidSchema, multiplierSchema,\r\n hotelGroupSchema, hotelSchema, subAccountSchema, schemas,\r\n} = {}) => ({\r\n DropdownSearchSelector,\r\n lightDismissible,\r\n toolbarTemplate,\r\n ...getAccountInformationView({ i18n }),\r\n ...getBidCapView({ i18n, config, fixedBidSchema }),\r\n ...getBidStrategyView({\r\n i18n, pageContext, config, fixedBidSchema, percentageBidSchema, payPerStayBidSchema,\r\n }),\r\n ...getBidMultipliersView({\r\n i18n, state, pageContext, multiplierSchema,\r\n }),\r\n ...getProjectionGridDateFilter({\r\n i18n, pageContext, state, dateFilterPreferences,\r\n }),\r\n ...getEditPanelView({ i18n }),\r\n ...getFetchPreferenceConfig({ state, preferencesService, segmentationPreferences }),\r\n ...getHotelGroupInformationView({ i18n }),\r\n ...getHotelGroupModel({\r\n i18n, hotelGroupSchema, state, jsdata, edm,\r\n }),\r\n ...getHotelModel({\r\n i18n, hotelSchema, jsdata, edm, state,\r\n }),\r\n ...getInstrumentation({ pageContext, config }),\r\n ...getEdmBhc({\r\n state, schemas, config, CustomerIdType,\r\n }),\r\n ...getUserCountryService({ state, i18n }),\r\n ...getSubAccountModel({\r\n state, i18n, subAccountSchema, jsdata, edm,\r\n }),\r\n});\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './account-information-view-template.pug';\r\n\r\nexport const getAccountInformationView = ({ i18n }) => {\r\n if (!i18n) {\r\n return {};\r\n }\r\n /**\r\n * Class representing an account information view for HotelCenter\r\n * @extends View\r\n */\r\n class AccountInformationView extends DeterministicView {\r\n /**\r\n * Initializes AccountInformationView\r\n * Creates model and give default parameter for account information.\r\n * @returns { undefined }\r\n */\r\n initialize() {\r\n this.i18n = i18n;\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n }\r\n\r\n return {\r\n AccountInformationView,\r\n };\r\n};\r\n\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport template from './bid-cap-view-template.pug';\r\n\r\nexport const getBidCapView = ({ i18n, config, fixedBidSchema }) => {\r\n if (!i18n || !config || !fixedBidSchema) {\r\n return {};\r\n }\r\n /**\r\n * Shared view for Hotel Ads max bid setup section\r\n * @extends Backbone.View\r\n */\r\n class BidCapView extends DeterministicView {\r\n initialize() {\r\n this.selections = {\r\n empty: 'empty',\r\n cap: 'cap',\r\n };\r\n\r\n this.i18n = i18n;\r\n\r\n const FixedBidModel = backboneSchema(fixedBidSchema, i18n, ['Amount', '@odata.type']);\r\n\r\n this.fixedBidModel = new FixedBidModel();\r\n const maxBidInputControl = new InputControl({\r\n entity: this.fixedBidModel,\r\n field: 'Amount',\r\n addonText: config.get('AccountCurrencyCode'),\r\n });\r\n\r\n this.setChild('max-bid-input', maxBidInputControl);\r\n this.listenTo(maxBidInputControl, 'input-changed', () => {\r\n this.trigger('input-changed');\r\n });\r\n\r\n this.setState({ capSelection: this.selections.empty });\r\n\r\n this.on('rendered', () => {\r\n const capSelection = this.model.get('capSelection');\r\n if (capSelection === 'empty') {\r\n $('label.empty').focus();\r\n } else if (capSelection === 'cap') {\r\n $('label.bid-selection-label').focus();\r\n }\r\n }, this);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change .bid-cap-radio': ({ target }) => {\r\n this.setState({ capSelection: target.value });\r\n },\r\n };\r\n }\r\n\r\n setState(state) {\r\n if (_.has(state, 'capSelection')) {\r\n this.model.set('capSelection', state.capSelection);\r\n }\r\n\r\n if (_.has(state, 'maximumBid')) {\r\n this.fixedBidModel.parse(state.maximumBid);\r\n this.getChild('max-bid-input').setState({ value: this.fixedBidModel.get('Amount') });\r\n }\r\n\r\n this.trigger('input-changed');\r\n return this;\r\n }\r\n\r\n getState() {\r\n const inputState = this.getChild('max-bid-input').getState();\r\n const noCap = this.model.get('capSelection') === this.selections.empty;\r\n\r\n return {\r\n maximumBid: noCap ? null : this.fixedBidModel.toJSON(),\r\n isValid: noCap || inputState.isValid,\r\n };\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n }\r\n\r\n return {\r\n BidCapView,\r\n };\r\n};\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { InputControl } from '@bingads-webui/input-control';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport template from './bid-strategy-view-template.pug';\r\n\r\nexport const getBidStrategyView = ({\r\n i18n, pageContext, config, fixedBidSchema, percentageBidSchema, payPerStayBidSchema,\r\n}) => {\r\n if (!i18n || !pageContext || !config || !fixedBidSchema ||\r\n !percentageBidSchema || !payPerStayBidSchema) {\r\n return {};\r\n }\r\n /**\r\n * Shared view for Hotel Ads bid strategy setup section\r\n * @extends Backbone.View\r\n */\r\n class BidStrategyView extends DeterministicView {\r\n initialize(options) {\r\n this.strategy = {\r\n fixed: 'fixed',\r\n percentage: 'percentage',\r\n payperstay: 'payperstay',\r\n empty: 'empty',\r\n };\r\n\r\n this.currentTemplate = options.customTemplate || template;\r\n this.i18n = i18n;\r\n\r\n this.isAmountRequired = !_.result(options, 'allowEmptyStrategy', true);\r\n this.isPayPerStayEnabled = _.result(pageContext.Permissions.dynamic, 'PayPerStay', false);\r\n\r\n // todo: remove below readonly flags when DE limitation is resolved\r\n this.isReadonly = _.result(options, 'isReadonly', false);\r\n this.disabledAttr = this.isReadonly ? { disabled: 'disabled' } : {};\r\n this.isPPSReadOnly = this.isReadonly || !_.result(options, 'enablePPS', false);\r\n this.disabledPPSAttr = this.isPPSReadOnly ? { disabled: 'disabled' } : {};\r\n\r\n this.initFixedBidInput(this.isAmountRequired);\r\n this.initPercentageBidInput(this.isAmountRequired);\r\n this.initPayPerStayBidInput(this.isAmountRequired);\r\n\r\n this.setState({\r\n bidStrategy: options.strategy || this.strategy.fixed,\r\n bidAmount: options.bidAmount,\r\n });\r\n\r\n this.on('rendered', () => {\r\n const bidStrategy = this.model.get('bidStrategy');\r\n if (bidStrategy === this.strategy.fixed) {\r\n $('label.radio.fixed').focus();\r\n } else if (bidStrategy === this.strategy.percentage) {\r\n $('label.radio.percentage').focus();\r\n } else if (bidStrategy === this.strategy.payperstay) {\r\n $('label.radio.payperstay').focus();\r\n } else if (bidStrategy === this.strategy.empty) {\r\n $('label.radio.empty').focus();\r\n }\r\n }, this);\r\n }\r\n\r\n get events() {\r\n return {\r\n 'change .bid-strategy-radio': ({ target }) => {\r\n this.setState({ bidStrategy: target.value });\r\n },\r\n };\r\n }\r\n\r\n get template() {\r\n return this.currentTemplate;\r\n }\r\n\r\n get bidInput() {\r\n const { bidStrategy } = super.getState();\r\n\r\n return _.result({\r\n fixed: () => this.getChild('fixed-bid-input'),\r\n percentage: () => this.getChild('percentage-bid-input'),\r\n payperstay: () => this.getChild('payperstay-bid-input'),\r\n }, bidStrategy);\r\n }\r\n\r\n setState(props) {\r\n const { bidStrategy, bidAmount, showError } = props;\r\n\r\n // todo: remove below readonly flags when DE limitation is resolved\r\n this.isReadonly = _.result(props, 'isReadonly', this.isReadonly);\r\n this.disabledAttr = this.isReadonly ? { disabled: 'disabled' } : {};\r\n\r\n if (!_.isUndefined(bidStrategy)) {\r\n this.model.set({ bidStrategy });\r\n }\r\n\r\n if (!_.isUndefined(bidAmount)) {\r\n const value = i18n.formatDecimalToFixed(bidAmount);\r\n\r\n if (bidStrategy === this.strategy.fixed) {\r\n this.fixedBidModel.set('Amount', value);\r\n this.getChild('fixed-bid-input').setState({ value, readonly: this.isReadonly });\r\n } else if (bidStrategy === this.strategy.percentage) {\r\n this.percentageBidModel.set('Amount', value);\r\n this.getChild('percentage-bid-input').setState({ value, readonly: this.isReadonly });\r\n } else {\r\n this.payPerStayBidModel.set('Amount', value);\r\n this.getChild('payperstay-bid-input').setState({ value });\r\n }\r\n this.trigger('input-changed');\r\n }\r\n\r\n if (!_.isUndefined(showError)) {\r\n if (this.bidInput) {\r\n this.bidInput.setState({ showError });\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n getState() {\r\n switch (this.model.get('bidStrategy')) {\r\n case this.strategy.fixed:\r\n return {\r\n isValid: this.getChild('fixed-bid-input').getState().isValid,\r\n bid: this.fixedBidModel.toJSON(),\r\n };\r\n case this.strategy.percentage:\r\n return {\r\n isValid: this.getChild('percentage-bid-input').getState().isValid,\r\n bid: this.percentageBidModel.toJSON(),\r\n };\r\n case this.strategy.payperstay:\r\n return {\r\n isValid: this.getChild('payperstay-bid-input').getState().isValid,\r\n bid: this.payPerStayBidModel.toJSON(),\r\n };\r\n default:\r\n return {\r\n isValid: !this.isAmountRequired,\r\n bid: { Amount: null },\r\n };\r\n }\r\n }\r\n\r\n initFixedBidInput() {\r\n const FixedBidModel = backboneSchema(fixedBidSchema, i18n, ['Amount', '@odata.type']);\r\n\r\n this.fixedBidModel = new FixedBidModel();\r\n const fixedBidInput = new InputControl({\r\n entity: this.fixedBidModel,\r\n field: 'Amount',\r\n addonText: config.get('AccountCurrencyCode'),\r\n readonly: this.isReadonly,\r\n });\r\n\r\n this.setChild('fixed-bid-input', fixedBidInput);\r\n\r\n this.listenTo(fixedBidInput, 'input-changed', () => {\r\n this.trigger('input-changed');\r\n });\r\n }\r\n\r\n initPercentageBidInput() {\r\n const PercentageBidModel = backboneSchema(percentageBidSchema, i18n, ['Amount', '@odata.type']);\r\n\r\n this.percentageBidModel = new PercentageBidModel();\r\n const percentageBidInput = new InputControl({\r\n entity: this.percentageBidModel,\r\n field: 'Amount',\r\n addonText: pageContext.DecimalFormatter.percentSymbol,\r\n readonly: this.isReadonly,\r\n });\r\n\r\n this.setChild('percentage-bid-input', percentageBidInput);\r\n\r\n this.listenTo(percentageBidInput, 'input-changed', () => {\r\n this.trigger('input-changed');\r\n });\r\n }\r\n\r\n initPayPerStayBidInput() {\r\n const PayPerStayBidModel = backboneSchema(payPerStayBidSchema, i18n, ['Amount', '@odata.type']);\r\n\r\n this.payPerStayBidModel = new PayPerStayBidModel();\r\n const payPerStayBidInput = new InputControl({\r\n entity: this.payPerStayBidModel,\r\n field: 'Amount',\r\n addonText: pageContext.DecimalFormatter.percentSymbol,\r\n });\r\n\r\n this.setChild('payperstay-bid-input', payPerStayBidInput);\r\n\r\n this.listenTo(payPerStayBidInput, 'input-changed', () => {\r\n this.trigger('input-changed');\r\n });\r\n }\r\n }\r\n return {\r\n BidStrategyView,\r\n };\r\n};\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './edit-panel-view-template.pug';\r\n\r\nexport const getEditPanelView = ({ i18n }) => {\r\n if (!i18n) {\r\n return {};\r\n }\r\n /**\r\n * Shared view for Hotel Ads edit panel\r\n * @extends DeterministicView\r\n */\r\n class EditPanelView extends DeterministicView {\r\n initialize() {\r\n this.i18n = i18n;\r\n this.model.set({ hasCleanButton: false });\r\n this.model.set({ isSaveButtonDisabled: false });\r\n }\r\n\r\n get template() {\r\n return template;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click #Cancel': this.onCancel,\r\n 'click #Save': this.onSave,\r\n 'click #Clean': this.onClean,\r\n };\r\n }\r\n getState() {\r\n return {\r\n isSaveButtonDisabled: this.model.get('isSaveButtonDisabled'),\r\n hasCleanButton: this.model.get('hasCleanButton'),\r\n };\r\n }\r\n\r\n onCancel() {\r\n this.trigger('canceled');\r\n }\r\n\r\n onSave() {\r\n this.trigger('saved');\r\n }\r\n\r\n onClean() {\r\n this.trigger('cleaned');\r\n }\r\n }\r\n\r\n return {\r\n EditPanelView,\r\n };\r\n};\r\n","\r\nimport { isTimeRangeValid } from '@bingads-webui-campaign/segmentation-utilities';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport const getFetchPreferenceConfig =\r\n ({ state, preferencesService, segmentationPreferences }) => {\r\n if (!state || !preferencesService || !segmentationPreferences) {\r\n return {};\r\n }\r\n const { getSegPreference, getSegType } = segmentationPreferences;\r\n return {\r\n fetchPreferenceConfig: (gridConfig) => {\r\n const defaultPageSize = 20;\r\n const sortInfoKey = gridConfig.name;\r\n\r\n const p$stateManager = new Promise((resolve) => {\r\n preferencesService.default.initialize().then(() => {\r\n const { Data: { rowsPerPage: pageSize = defaultPageSize } } = preferencesService.default.findByName('WebApp.CampaignUI.grid') || { Data: {} };\r\n const { Data: { sortInfo: { orderby: orderbyInfo, sortableHeader } } } =\r\n preferencesService.default.findByName(`WebApp.CampaignUI.${sortInfoKey}`) || { Data: { sortInfo: {} } };\r\n\r\n resolve({ pageSize, orderbyInfo, sortableHeader });\r\n });\r\n });\r\n\r\n return Promise\r\n .all([p$stateManager, getSegPreference(gridConfig.name)])\r\n .spread(({ pageSize, orderbyInfo, sortableHeader }) => {\r\n gridConfig = _.defaults(gridConfig, {pageable: {}}); //eslint-disable-line\r\n gridConfig.pageable.pageSize = pageSize; //eslint-disable-line\r\n if (gridConfig.plugins && gridConfig.plugins.pagination) {\r\n gridConfig.plugins.pagination.pageSize = pageSize; //eslint-disable-line\r\n }\r\n if (gridConfig.plugins &&\r\n gridConfig.plugins.pagination &&\r\n gridConfig.plugins.pagination.pageSize) {\r\n gridConfig.plugins.pagination.pageSize = pageSize; //eslint-disable-line\r\n }\r\n\r\n const segType = getSegType(gridConfig.name);\r\n\r\n if (segType && segType.segmentationType !== 'None' && isTimeRangeValid(segType.segmentationType, state.get('$daterange'))) {\r\n gridConfig.dataSource.query.SegmentationTypes = segType.segmentationType; //eslint-disable-line\r\n }\r\n\r\n if (orderbyInfo && orderbyInfo.length > 0) {\r\n gridConfig.dataSource.orderby = orderbyInfo; //eslint-disable-line\r\n gridConfig.sortableHeader = _.pick(sortableHeader, 'name', 'directionIndex'); //eslint-disable-line\r\n }\r\n });\r\n },\r\n };\r\n };\r\n","import { DeterministicView } from '@bingads-webui/deterministic-view';\r\nimport template from './information-template.pug';\r\n\r\nexport const getHotelGroupInformationView = ({ i18n }) => {\r\n if (!i18n) {\r\n return {};\r\n }\r\n\r\n /**\r\n * Class representing an account information view for HotelCenter\r\n * @extends View\r\n */\r\n class HotelGroupInformationView extends DeterministicView {\r\n /**\r\n * Initializes AccountInformationView\r\n * Creates model and give default parameter for account information.\r\n * @returns { undefined }\r\n */\r\n initialize() {\r\n this.i18n = i18n;\r\n }\r\n get template() {\r\n return template;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .glyphicon-arrow-left': this.onBack,\r\n 'click .hotel-group-information-remove__glyphicon': this.onRemove,\r\n };\r\n }\r\n\r\n onBack() {\r\n this.trigger('go-back');\r\n }\r\n\r\n onRemove() {\r\n this.trigger('remove-group-info');\r\n }\r\n }\r\n\r\n return {\r\n HotelGroupInformationView,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport _ from 'underscore';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { getHotelCenterService } from '@bingads-webui-campaign/hotel-center-service';\r\n\r\nexport const getHotelGroupModel = ({\r\n i18n, hotelGroupSchema, state, jsdata, edm,\r\n}) => {\r\n if (!i18n || !hotelGroupSchema || !state || !jsdata || !edm) {\r\n return {};\r\n }\r\n const { gridOptionUtils } = getHotelCenterService({ edm, state });\r\n // eslint-disable-next-line no-param-reassign\r\n hotelGroupSchema.properties.Name.required = true;\r\n const SchemaModel = backboneSchema(hotelGroupSchema, i18n, ['Name']);\r\n\r\n /**\r\n * HotelGroup backbone model based on hotelGroupSchema\r\n * @extends Backbone.Model\r\n */\r\n\r\n class HotelGroupModel extends SchemaModel {\r\n initialize(options = {}) {\r\n if (options.Id) {\r\n this.id = options.Id;\r\n }\r\n\r\n this.set('Name', options.Name);\r\n this.set('Id', options.Id);\r\n this.entitySet = options.entitySet || gridOptionUtils.getEntitySetByName('hotelGroup');\r\n }\r\n\r\n get idAttribute() {\r\n return 'Id';\r\n }\r\n\r\n toJSON() {\r\n const json = super.toJSON();\r\n\r\n this.attachNestedModels(json, ['BidSetting', 'Bid', 'BidMultipliers', 'Id']);\r\n\r\n return json;\r\n }\r\n\r\n sync(method, model, options) {\r\n const json = this.toJSON();\r\n\r\n switch (method) {\r\n case 'read':\r\n return jsdata.HotelGroup\r\n .find(this.get('Id'), {\r\n entitySet: this.entitySet,\r\n });\r\n case 'create':\r\n state.unset('subAccount_hotelGroupCount');\r\n return jsdata.HotelGroup.create(json, {\r\n cacheResponse: false,\r\n entitySet: this.entitySet,\r\n });\r\n case 'patch':\r\n case 'update':\r\n if (_.has(json, 'Bid') && json.Bid.Amount === null) {\r\n json.Bid = null; // if user didn't input Bid amout, pass null object to odata\r\n }\r\n return jsdata.HotelGroup.update(\r\n model.id,\r\n _.isEmpty(options.attrs) ? json : _.pick(json, options.attrs),\r\n {\r\n cacheResponse: false,\r\n entitySet: this.entitySet,\r\n }\r\n );\r\n case 'delete':\r\n state.unset('subAccount_hotelGroupCount');\r\n return jsdata.HotelGroup.destroy(model.id, {\r\n entitySet: this.entitySet,\r\n });\r\n default:\r\n throw new Error(`sync method ${method} is not supported`);\r\n }\r\n }\r\n\r\n attachNestedModels(json, fieldNames) {\r\n _.each(fieldNames, (field) => {\r\n if (this.has(field) || _.contains(this.changedAttributes(), 'BidSetting')) {\r\n json[field] = this.get(field); // eslint-disable-line\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n HotelGroupModel,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport _ from 'underscore';\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { getHotelCenterService } from '@bingads-webui-campaign/hotel-center-service';\r\n\r\nexport const getHotelModel = ({\r\n i18n, hotelSchema, jsdata, edm, state,\r\n}) => {\r\n if (!i18n || !hotelSchema || !state || !jsdata || !edm) {\r\n return {};\r\n }\r\n const SchemaModel = backboneSchema(hotelSchema, i18n, ['Id']);\r\n const { gridOptionUtils } = getHotelCenterService({ edm, state });\r\n /**\r\n * Hotel backbone model based on schema\r\n * @extends Backbone.Model\r\n */\r\n\r\n class HotelModel extends SchemaModel {\r\n initialize(options = {}) {\r\n this.set('Id', options.Id);\r\n this.entitySet = options.entitySet || gridOptionUtils.getEntitySetByName('hotel');\r\n }\r\n\r\n get idAttribute() {\r\n return 'Id';\r\n }\r\n\r\n toJSON() {\r\n const json = super.toJSON();\r\n\r\n this.attachNestedModels(json, ['Bid', 'BidMultipliers', 'Name']);\r\n\r\n return json;\r\n }\r\n\r\n sync(method, model, options) {\r\n const json = model.toJSON();\r\n\r\n switch (method) {\r\n case 'read':\r\n return jsdata.Hotel\r\n .find(this.get('Id'), {\r\n entitySet: this.entitySet,\r\n });\r\n case 'create':\r\n return jsdata.Hotel.create(json, {\r\n cacheResponse: false,\r\n entitySet: this.entitySet,\r\n });\r\n case 'patch':\r\n case 'update':\r\n if (_.has(json, 'Bid') && json.Bid.Amount === null) {\r\n json.Bid = null; // if user didn't input Bid amout, pass null object to odata\r\n }\r\n\r\n return jsdata.Hotel.update(\r\n model.get('Id'),\r\n _.isEmpty(options.attrs) ? json : _.pick(json, options.attrs),\r\n {\r\n cacheResponse: false,\r\n entitySet: this.entitySet,\r\n }\r\n );\r\n default:\r\n throw new Error(`sync method ${method} is not supported`);\r\n }\r\n }\r\n\r\n attachNestedModels(json, fieldNames) {\r\n _.each(fieldNames, (field) => {\r\n if (this.has(field) || _.contains(this.changedAttributes(), 'MaximumBid')) {\r\n json[field] = this.get(field); // eslint-disable-line\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n HotelModel,\r\n };\r\n};\r\n","import $ from 'jquery';\r\nimport { Instrumentation } from '@bingads-webui/instrumentation';\r\nimport { AjaxStub, AjaxEventHandler, ErrorStub } from '@bingads-webui/instrumentation-stubs';\r\nimport { isInternalUrl } from '@bingads-webui/url-util';\r\nimport { schema } from './schema';\r\nimport { initSetup } from './setup';\r\nimport { initPerfTiming } from './perf-timing';\r\n\r\nexport const getInstrumentation = ({\r\n pageContext, config,\r\n}) => {\r\n if (!pageContext || !config) {\r\n return {};\r\n }\r\n const { getListeners, getProcessors, getErrorMappers } = initSetup({\r\n pageContext, config,\r\n });\r\n const { perfTimingLogger } = initPerfTiming({\r\n pageContext, config,\r\n });\r\n const init = () => {\r\n const instrumentConfig = {\r\n listeners: getListeners(),\r\n processors: getProcessors(),\r\n };\r\n\r\n const instr = new Instrumentation(instrumentConfig);\r\n\r\n instr.addScenario(schema);\r\n return instr;\r\n };\r\n\r\n const stub = (instrumentation) => {\r\n const stubOptions = {\r\n objectsToStub: [$],\r\n };\r\n\r\n const errorMappers = getErrorMappers();\r\n const shouldAddHeaders = ajaxContext => isInternalUrl(ajaxContext.url);\r\n const eventHandler = new AjaxEventHandler({ errorMappers, shouldAddHeaders });\r\n\r\n const ajaxStub = new AjaxStub({\r\n stubOptions,\r\n eventHandler,\r\n instrumentation,\r\n });\r\n\r\n const errorStub = new ErrorStub({\r\n instrumentation,\r\n });\r\n\r\n ajaxStub.init();\r\n errorStub.init();\r\n };\r\n\r\n // init instrumentation\r\n const instrumentation = init();\r\n\r\n // init log stubs\r\n stub(instrumentation);\r\n\r\n // init performance timing logger\r\n perfTimingLogger.init();\r\n\r\n return {\r\n instrumentation,\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nexport const getUserCountryService = ({ state, i18n }) => {\r\n if (!state || !i18n) {\r\n return {};\r\n }\r\n const countryCodes = ['AL', 'AQ', 'DZ', 'AS', 'AD', 'AO', 'AG', 'AR', 'AU', 'AT', 'BS', 'BD', 'BB', 'BE', 'BM', 'BT', 'BO', 'BW', 'BR', 'BZ', 'SB', 'VG', 'BN', 'BG', 'MM', 'BI', 'BY', 'KH', 'CM', 'CA', 'CV', 'KY', 'CF', 'LK', 'TD', 'CL', 'CN', 'TW', 'CX', 'CC', 'CO', 'YT', 'CG', 'CD', 'CK', 'CR', 'HR', 'CZ', 'BJ', 'DK', 'DM', 'DO', 'EC', 'SV', 'GQ', 'ET', 'ER', 'EE', 'FO', 'FK', 'FI', 'FR', 'GF', 'PF', 'DJ', 'GA', 'GM', 'DE', 'GH', 'GI', 'KI', 'GR', 'GL', 'GD', 'GP', 'GU', 'GT', 'GN', 'GY', 'HT', 'VA', 'HN', 'HU', 'IS', 'IN', 'ID', 'IE', 'IT', 'CI', 'JM', 'JP', 'KZ', 'KE', 'KR', 'KG', 'LA', 'LS', 'LV', 'LR', 'LY', 'LI', 'LT', 'LU', 'MG', 'MW', 'MY', 'MV', 'ML', 'MT', 'MQ', 'MR', 'MU', 'MX', 'MC', 'MN', 'MD', 'MS', 'MA', 'MZ', 'NA', 'NR', 'NP', 'NL', 'AN', 'AW', 'NC', 'VU', 'NZ', 'NI', 'NE', 'NG', 'NF', 'NO', 'MP', 'FM', 'MH', 'PW', 'PK', 'PA', 'PG', 'PY', 'PE', 'PH', 'PN', 'PL', 'PT', 'GW', 'PR', 'RE', 'RU', 'RW', 'AI', 'SM', 'ST', 'SN', 'SC', 'SL', 'SG', 'SK', 'VN', 'SI', 'ZA', 'ZW', 'ES', 'SR', 'SZ', 'SE', 'CH', 'TJ', 'TH', 'TG', 'TK', 'TO', 'TT', 'TR', 'TM', 'TC', 'UG', 'MK', 'EG', 'GB', 'TZ', 'US', 'BF', 'UY', 'UZ', 'WF', 'WS', 'ZM', 'BA', 'FJ', 'HK', 'MO', 'VE', 'AZ', 'BH', 'AM', 'CY', 'GE', 'IL', 'JO', 'KW', 'LB', 'OM', 'QA', 'SA', 'AE', 'YE', 'PS', 'AF', 'TL', 'NU', 'RO', 'SO', 'KM', 'TN', 'IQ', 'SH', 'KN', 'LC', 'PM', 'VC', 'TV', 'UA', 'VI', 'RS', 'ME'];\r\n\r\n const getCountriesAndSetState = () => {\r\n if (state.get('userCountries')) {\r\n return;\r\n }\r\n\r\n const countries = _.map(countryCodes, code => ({\r\n Key: code,\r\n Value: i18n.getString(`UserCountry_${code}`) || code,\r\n })).sort((a, b) => ((a.Value > b.Value) ? 1 : -1));\r\n\r\n state.set('userCountries', countries);\r\n };\r\n\r\n const userCountryService = {\r\n getCountriesAndSetState,\r\n };\r\n\r\n return {\r\n userCountryService,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\nimport { BackboneSchema as backboneSchema } from '@bingads-webui/backbone-schema';\r\nimport { getHotelCenterService } from '@bingads-webui-campaign/hotel-center-service';\r\nimport _ from 'underscore';\r\n\r\nexport const getSubAccountModel = ({\r\n state, i18n, subAccountSchema, jsdata, edm,\r\n}) => {\r\n if (!i18n || !subAccountSchema || !state || !jsdata || !edm) {\r\n return {};\r\n }\r\n const { AccountService } = getHotelCenterService({ state, jsdata, edm });\r\n // eslint-disable-next-line no-param-reassign\r\n subAccountSchema.properties.Name.required = true;\r\n const SchemaModel = backboneSchema(subAccountSchema, i18n, ['Name']);\r\n\r\n /**\r\n * Sub account backbone model based on schema\r\n * @extends Backbone.Model\r\n */\r\n\r\n class SubAccountModel extends SchemaModel {\r\n initialize(options = {}) {\r\n if (options.Id) {\r\n this.id = options.Id;\r\n }\r\n }\r\n\r\n get idAttribute() {\r\n return 'Id';\r\n }\r\n\r\n toJSON() {\r\n const json = super.toJSON();\r\n\r\n this.attachNestedModels(json, ['DailyBudget', 'MaximumBid', 'Bid', 'BidMultipliers', 'HotelAssociationCount']);\r\n\r\n return json;\r\n }\r\n\r\n sync(method, model, options) {\r\n const json = model.toJSON();\r\n\r\n this.accountService = new AccountService();\r\n\r\n switch (method) {\r\n case 'read':\r\n return this.accountService.fetchSubAccountAsync()\r\n .then((subAccount) => {\r\n // For V1, there is only one fixed account with one sub-account\r\n if (subAccount) {\r\n this.parse(subAccount);\r\n this.set('Id', subAccount.Id);\r\n\r\n // to do [rayduan]: add support for nested models in backbone-model\r\n this.set('DailyBudget', subAccount.DailyBudget);\r\n this.set('MaximumBid', subAccount.MaximumBid);\r\n this.set('Bid', subAccount.Bid);\r\n this.set('BidMultipliers', subAccount.BidMultipliers);\r\n this.set('HotelAssociationCount', subAccount.HotelAssociationCount);\r\n }\r\n });\r\n case 'create':\r\n return jsdata.SubAccount.create(json, { cacheResponse: false });\r\n case 'patch':\r\n case 'update':\r\n {\r\n if (_.has(json, 'Bid') && json.Bid.Amount === null) {\r\n json.Bid = null; // if user didn't input Bid amout, pass null object to odata\r\n }\r\n const updatedId = model.get('Id') || model.id;\r\n const subAccountModel = state.get('subAccount_model');\r\n\r\n // if the updated subaccount Id equal current global subaccount model in state\r\n // updated the status for subaccout model\r\n if (subAccountModel && subAccountModel.Id === updatedId) {\r\n state.unset('subAccount_model');\r\n }\r\n return jsdata.SubAccount.update(\r\n updatedId,\r\n _.isEmpty(options.attrs) ? json : _.pick(json, options.attrs),\r\n { cacheResponse: false }\r\n );\r\n }\r\n case 'delete':\r\n return jsdata.SubAccount.destroy(model.id, {\r\n entitySet: this.entitySet,\r\n });\r\n default:\r\n throw new Error(`sync method ${method} is not supported`);\r\n }\r\n }\r\n\r\n attachNestedModels(json, fieldNames) {\r\n _.each(fieldNames, (field) => {\r\n if (this.has(field) || _.contains(this.changedAttributes(), 'MaximumBid')) {\r\n json[field] = this.get(field); // eslint-disable-line\r\n }\r\n });\r\n }\r\n }\r\n\r\n return {\r\n SubAccountModel,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport const getBidMultiplierUtils = ({ i18n, state }) => {\r\n if (!i18n || !state) {\r\n return {};\r\n }\r\n const weekDayMap = {\r\n Monday: 'WeekDay_2',\r\n Tuesday: 'WeekDay_3',\r\n Wednesday: 'WeekDay_4',\r\n Thursday: 'WeekDay_5',\r\n Friday: 'WeekDay_6',\r\n Saturday: 'WeekDay_7',\r\n Sunday: 'WeekDay_1',\r\n };\r\n\r\n const getSegmentText = (minNight, maxNight, isLengthOfStay) => {\r\n if (maxNight) {\r\n const segment = maxNight === minNight ? minNight : `${minNight}-${maxNight}`;\r\n const segmentLabel = isLengthOfStay ? i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_NightsSegment_Label') : i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_DaysSegment_Label');\r\n\r\n return segmentLabel.replace(/\\{0\\}/g, segment);\r\n }\r\n // current node is the last one\r\n const addOnText = isLengthOfStay ? i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_InputNights_AddOn_Label') : i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_InputDays_AddOn_Label');\r\n\r\n return `${minNight} ${addOnText}`;\r\n };\r\n\r\n const formatStaySegments = (staySegments, isLengthOfStay) => {\r\n const res = [];\r\n const { length } = staySegments;\r\n let maxNight;\r\n let sortedStaySegments = staySegments;\r\n\r\n if (length > 1) {\r\n sortedStaySegments = _.sortBy(staySegments, item => Number(item.key));\r\n }\r\n\r\n for (let i = 0; i < length; i += 1) {\r\n if (i === length - 1) {\r\n maxNight = _.noop();\r\n } else {\r\n maxNight = (Number(sortedStaySegments[i + 1].key) - 1).toString();\r\n }\r\n res.push({\r\n key: sortedStaySegments[i].key,\r\n factor: sortedStaySegments[i].factor,\r\n value: getSegmentText(sortedStaySegments[i].key, maxNight, isLengthOfStay),\r\n strategy: sortedStaySegments[i].strategy,\r\n });\r\n }\r\n\r\n return res;\r\n };\r\n\r\n // only for lengh of stay and advanced booking mulipliers\r\n const formatDaysAndNightsMultipliers = (bidMultipliers, isLengthOfStay) => {\r\n const staySegments = [];\r\n\r\n _.each(bidMultipliers, (multiplier) => {\r\n staySegments.push({\r\n key: multiplier.key,\r\n factor: Math.abs(multiplier.percentage),\r\n strategy: multiplier.percentage >= 0 ? 'increase' : 'decrease',\r\n });\r\n });\r\n return formatStaySegments(staySegments, isLengthOfStay);\r\n };\r\n\r\n const deserializeBidMultipliers = (bidMultipliers) => {\r\n const res = {\r\n deviceType: [],\r\n dateType: [],\r\n siteType: [],\r\n userCountry: [],\r\n checkInDay: [],\r\n lengthOfStay: [],\r\n advancedBooking: [],\r\n };\r\n\r\n if (!bidMultipliers || bidMultipliers.length === 0) {\r\n return res;\r\n }\r\n _.each(bidMultipliers, (item) => {\r\n const multiplierFactor = item.Factor;\r\n let percentage = Number(multiplierFactor) * 100;\r\n\r\n percentage = parseFloat(percentage - 100).toFixed(2);\r\n\r\n if (item['@odata.type'] === '#Model.DeviceMultiplier') {\r\n _.each(item.DeviceTypes, (deviceType) => {\r\n res.deviceType.push({ deviceType, percentage });\r\n });\r\n } else if (item['@odata.type'] === '#Model.DateTypeMultiplier') {\r\n res.dateType.push({ dateType: item.DateType, percentage });\r\n } else if (item['@odata.type'] === '#Model.SiteMultiplier') {\r\n _.each(item.Sites, (siteType) => {\r\n res.siteType.push({ siteType, percentage });\r\n });\r\n } else if (item['@odata.type'] === '#Model.UserCountryMultiplier') {\r\n _.each(item.Countries, (country) => {\r\n res.userCountry.push({ country, percentage });\r\n });\r\n } else if (item['@odata.type'] === '#Model.CheckinDayOfWeekMultiplier') {\r\n _.each(item.DaysOfWeek, (dayOfWeek) => {\r\n res.checkInDay.push({ dayOfWeek, percentage });\r\n });\r\n } else if (item['@odata.type'] === '#Model.LengthOfStayMultiplier') {\r\n res.lengthOfStay.push({ key: item.MinimumNumberOfNights.toString(), percentage });\r\n } else if (item['@odata.type'] === '#Model.AdvanceBookingWindowMultiplier') {\r\n res.advancedBooking.push({ key: item.MinimumNumberOfDays.toString(), percentage });\r\n }\r\n });\r\n if (res.lengthOfStay.length > 0) {\r\n res.lengthOfStay = formatDaysAndNightsMultipliers(res.lengthOfStay, true);\r\n }\r\n if (res.advancedBooking.length > 0) {\r\n res.advancedBooking = formatDaysAndNightsMultipliers(res.advancedBooking, false);\r\n }\r\n\r\n return res;\r\n };\r\n\r\n const getMultipliersState = (input, resetFactor = false) => {\r\n const bidMultipliers = deserializeBidMultipliers(input);\r\n\r\n return _.mapObject(bidMultipliers, (multipliers, key) => {\r\n if (key === 'lengthOfStay' || key === 'advancedBooking') {\r\n if (resetFactor) {\r\n return _.map(multipliers, multiplier =>\r\n _.defaults({\r\n factor: 0,\r\n }, multiplier));\r\n }\r\n return multipliers;\r\n }\r\n const multipliersState = {};\r\n\r\n _.each(multipliers, (multiplier) => {\r\n const name = multiplier.deviceType || multiplier.dateType ||\r\n multiplier.siteType || multiplier.country || multiplier.dayOfWeek;\r\n const percentage = resetFactor ? 0 : multiplier.percentage;\r\n\r\n _.extend(multipliersState, {\r\n [name]: {\r\n strategy: percentage >= 0 ? 'increase' : 'decrease',\r\n factor: Math.abs(percentage),\r\n },\r\n });\r\n });\r\n return multipliersState;\r\n });\r\n };\r\n\r\n const bidMultiplierTextFormat = (name, percentage) => i18n.getString('HotelCenter_SubAccountBar_Device_Type_Multiplier_Format').replace(/\\{0\\}/g, name).replace(/\\{1\\}/g, percentage > 0 ? `+${percentage}` : percentage);\r\n\r\n const getDeviceTypeMultipliersText = (deviceTypeMultipliers) => {\r\n const deviceTypeMap = {\r\n Mobile: i18n.getString('HotelCenter_Overview_Multipliers_Bids_Mobile_Label'),\r\n Tablet: i18n.getString('HotelCenter_Overview_Multipliers_Bids_Tablet_Label'),\r\n Desktop: i18n.getString('HotelCenter_Overview_Multipliers_Bids_Desktop_Label'),\r\n };\r\n const deviceMultipliersText = _.map(deviceTypeMultipliers, (deviceTypeMultiplier) => {\r\n const { percentage } = deviceTypeMultiplier;\r\n const name = deviceTypeMap[deviceTypeMultiplier.deviceType];\r\n\r\n return bidMultiplierTextFormat(name, percentage);\r\n }).join(', ');\r\n\r\n return `${i18n.getString('HotelCenter_Overview_DeviceType_Multipliers_Label')}: ${deviceMultipliersText}`;\r\n };\r\n\r\n const getSiteTypeMultipliersText = (siteTypeMultipliers) => {\r\n const siteTypeMap = {\r\n LocalUniversal: i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Local_Universal_Label'),\r\n MapResults: i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Map_Results_Label'),\r\n PropertyPromotionAd: i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Property_PromotionAd_Label'),\r\n };\r\n const siteMultipliersText = _.map(siteTypeMultipliers, (siteTypeMultiplier) => {\r\n const { percentage } = siteTypeMultiplier;\r\n const name = siteTypeMap[siteTypeMultiplier.siteType];\r\n\r\n return bidMultiplierTextFormat(name, percentage);\r\n }).join(', ');\r\n\r\n return `${i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Label')}: ${siteMultipliersText}`;\r\n };\r\n\r\n const getDateTypeMultipliersText = (dateTypeMultipliers) => {\r\n const dateTypeMap = {\r\n Selected: i18n.getString('HotelCenter_Overview_DateType_Multipliers_Selected_Label'),\r\n Default: i18n.getString('HotelCenter_Overview_DateType_Multipliers_Default_Label'),\r\n };\r\n const dateTypeMultipliersText = _.map(dateTypeMultipliers, (dateTypeMultiplier) => {\r\n const { percentage } = dateTypeMultiplier;\r\n const name = dateTypeMap[dateTypeMultiplier.dateType];\r\n\r\n return bidMultiplierTextFormat(name, percentage);\r\n }).join(', ');\r\n\r\n return `${i18n.getString('HotelCenter_Overview_DateType_Multipliers_Label')}: ${dateTypeMultipliersText}`;\r\n };\r\n\r\n const getUserCountriesMultipliersText = (userCountryMultipliers) => {\r\n const userCountryMultipliersText = _.map(userCountryMultipliers, (userCountryMultiplier) => {\r\n const { percentage } = userCountryMultiplier;\r\n const countries = state.get('userCountries');\r\n const country = _.chain(countries)\r\n .findWhere({ Key: userCountryMultiplier.country })\r\n .result('Value', userCountryMultiplier.country)\r\n .value();\r\n\r\n return bidMultiplierTextFormat(country, percentage);\r\n }).join(', ');\r\n\r\n const res = `${i18n.getString('HotelCenter_Overview_UserCountry_Multipliers_Label')}: ${userCountryMultipliersText}`;\r\n\r\n return res;\r\n };\r\n\r\n const getCheckInDayMultipliersText = (checkInDayMultipliers) => {\r\n const checkInDayMultipliersText = _.map(checkInDayMultipliers, (checkInDayMultiplier) => {\r\n const { percentage } = checkInDayMultiplier;\r\n const name = i18n.getString(weekDayMap[checkInDayMultiplier.dayOfWeek]);\r\n\r\n return bidMultiplierTextFormat(name, percentage);\r\n }).join(', ');\r\n const res = `${i18n.getString('HotelCenter_Overview_CheckinDay_Multipliers_Label')}: ${checkInDayMultipliersText}`;\r\n\r\n return res;\r\n };\r\n\r\n const getLengthOfStayMultipliersText = (lengthOfStayMultipliers) => {\r\n const lengthOfStayMultipliersText = _.map(lengthOfStayMultipliers, (lengthOfStayMultiplier) => {\r\n const percentage = lengthOfStayMultiplier.factor;\r\n const name = lengthOfStayMultiplier.value;\r\n\r\n return bidMultiplierTextFormat(name, percentage);\r\n }).join(', ');\r\n\r\n const res = `${i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_Label')}: ${lengthOfStayMultipliersText}`;\r\n\r\n return res;\r\n };\r\n\r\n\r\n const getMultipliersText = (input, hasPreLabel = true, defaultText = '') => {\r\n const res = [];\r\n\r\n if (_.isEmpty(input)) {\r\n return defaultText;\r\n }\r\n const bidMultipliers = deserializeBidMultipliers(input);\r\n\r\n // generate device type multipliers text\r\n if (bidMultipliers.deviceType.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_DeviceType_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate user country multipliers text\r\n if (bidMultipliers.userCountry.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_UserCountry_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate check in day multipliers text\r\n if (bidMultipliers.checkInDay.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_CheckinDay_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate length of stay multipliers text\r\n if (bidMultipliers.lengthOfStay.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate advanced booking multipliers text\r\n if (bidMultipliers.advancedBooking.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate date type multipliers text\r\n if (bidMultipliers.dateType.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_DateType_Multipliers_Label_Short'));\r\n }\r\n\r\n // generate site type multipliers text\r\n if (bidMultipliers.siteType.length !== 0) {\r\n res.push(i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Label_Short'));\r\n }\r\n\r\n if (res.length === 0) {\r\n return '';\r\n }\r\n return hasPreLabel ? `${i18n.getString('HotelCenter_Overview_Multipliers_PreLabel')}${res.join(', ')}` : res.join(', ');\r\n };\r\n\r\n const getMultipliersDetailText = (input, defaultText = '') => {\r\n if (_.isEmpty(input)) {\r\n return defaultText;\r\n }\r\n const bidMultipliers = deserializeBidMultipliers(input);\r\n\r\n const convert2text = {\r\n deviceType: getDeviceTypeMultipliersText,\r\n dateType: getDateTypeMultipliersText,\r\n siteType: getSiteTypeMultipliersText,\r\n userCountry: getUserCountriesMultipliersText,\r\n checkInDay: getCheckInDayMultipliersText,\r\n lengthOfStay: getLengthOfStayMultipliersText,\r\n };\r\n\r\n return _.chain(bidMultipliers)\r\n .map((value, key) => {\r\n if (_.isFunction(convert2text[key]) && !_.isEmpty(value)) {\r\n return convert2text[key](value);\r\n }\r\n return null;\r\n })\r\n .compact()\r\n .join(';')\r\n .value();\r\n };\r\n\r\n const addDeviceTypeBidMultipliers = bidMultiplier => (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n DeviceTypes: [bidMultiplier.value],\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.DeviceMultiplier',\r\n });\r\n\r\n const addDateTypeBidMultipliers = bidMultiplier => (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n DateType: bidMultiplier.value,\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.DateTypeMultiplier',\r\n });\r\n\r\n\r\n const addSiteTypeBidMultipliers = bidMultiplier => (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n Sites: [bidMultiplier.value],\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.SiteMultiplier',\r\n });\r\n\r\n const addUserCountryBidMultipliers = bidMultiplier =>\r\n (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n Countries: [bidMultiplier.value],\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.UserCountryMultiplier',\r\n });\r\n\r\n const addCheckInDayBidMultipliers = bidMultiplier =>\r\n (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n DaysOfWeek: [bidMultiplier.value],\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.CheckinDayOfWeekMultiplier',\r\n });\r\n\r\n const addLengthOfStayBidMultipliers = bidMultiplier =>\r\n (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n MinimumNumberOfNights: Number(bidMultiplier.value),\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.LengthOfStayMultiplier',\r\n });\r\n\r\n const addAdvancedBookingBidMultipliers = bidMultiplier =>\r\n (_.isUndefined(bidMultiplier.factor) ? {} : {\r\n MinimumNumberOfDays: Number(bidMultiplier.value),\r\n Factor: bidMultiplier.factor,\r\n '@odata.type': '#Model.AdvanceBookingWindowMultiplier',\r\n });\r\n\r\n const serializeBidMultipliers = (bidMultipliers) => {\r\n const res = [];\r\n\r\n _.each(bidMultipliers, (bidMultiplier) => {\r\n if (bidMultiplier.type === 'deviceType') {\r\n res.push(addDeviceTypeBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'dateType') {\r\n res.push(addDateTypeBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'siteType') {\r\n res.push(addSiteTypeBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'userCountry') {\r\n res.push(addUserCountryBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'checkInDay') {\r\n res.push(addCheckInDayBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'lengthOfStay') {\r\n res.push(addLengthOfStayBidMultipliers(bidMultiplier));\r\n } else if (bidMultiplier.type === 'advancedBooking') {\r\n res.push(addAdvancedBookingBidMultipliers(bidMultiplier));\r\n }\r\n });\r\n\r\n return _.filter(res, item => !_.isEmpty(item));\r\n };\r\n\r\n return {\r\n bidMultiplierUtils: {\r\n weekDayMap,\r\n formatStaySegments,\r\n getMultipliersState,\r\n serializeBidMultipliers,\r\n getMultipliersDetailText,\r\n getMultipliersText,\r\n },\r\n };\r\n};\r\n\r\n","import { getBidUtils } from './src/bid-utils';\r\nimport { getDateUtils } from './src/date-utils';\r\nimport { getBidMultiplierUtils } from './src/bid-multiplier-utils';\r\nimport { getInlineDownloadUtils } from './src/inline-download-utils';\r\n\r\nexport const getHotelCenterUtils = ({ pageContext, i18n, state } = {}) => ({\r\n ...getBidUtils({ pageContext, i18n }),\r\n ...getDateUtils({ pageContext }),\r\n ...getBidMultiplierUtils({ i18n, state }),\r\n ...getInlineDownloadUtils(),\r\n});\r\n","import _ from 'underscore';\r\n\r\nexport const getBidUtils = ({ i18n, pageContext }) => {\r\n if (!i18n || !pageContext) {\r\n return {};\r\n }\r\n const getText = (jsonValue, defaultText = '') => {\r\n if (_.isNull(jsonValue) || jsonValue.Amount < 0) {\r\n return defaultText;\r\n }\r\n const amount = i18n.formatDecimalToFixed(jsonValue.Amount);\r\n const addonText = _.result({\r\n '#Model.FixedBid': pageContext.AccountCurrencyCode,\r\n '#Model.PercentageBid': pageContext.DecimalFormatter.percentSymbol,\r\n }, jsonValue['@odata.type'], pageContext.AccountCurrencyCode);\r\n\r\n return [amount, addonText].join(' ');\r\n };\r\n\r\n return {\r\n bidUtils: {\r\n getText,\r\n },\r\n };\r\n};\r\n","export const getDateUtils = ({ pageContext }) => {\r\n if (!pageContext) {\r\n return {};\r\n }\r\n\r\n const accountTimeZoneOffsetMinutes = pageContext.UtcOffsetHours * 60;\r\n const localTimeZoneOffsetMinutes = (new Date()).getTimezoneOffset();\r\n const totalOffset = (localTimeZoneOffsetMinutes + accountTimeZoneOffsetMinutes) * 60000;\r\n\r\n\r\n const local2account = date =>\r\n new Date(date.getTime() + totalOffset);\r\n\r\n const account2local = date =>\r\n new Date(date.getTime() - totalOffset);\r\n\r\n return {\r\n dateUtils: {\r\n local2account,\r\n account2local,\r\n },\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nexport const getInlineDownloadUtils = () => {\r\n const processReportRuleForHotelCenterBIDimensionRow = ReportRule => _.defaults({\r\n SaveReport: true,\r\n Selection: _.defaults({\r\n '@odata.type': '#Model.DimensionReportSelection',\r\n Type: 'VerticalPerformance',\r\n }, ReportRule.Selection),\r\n }, ReportRule);\r\n\r\n const processReportRuleForHotelCenterBookingRow = ReportRule => _.defaults({\r\n SaveReport: true,\r\n Selection: _.defaults({\r\n '@odata.type': '#Model.DimensionReportSelection',\r\n Type: 'VerticalBookingDetails',\r\n }, ReportRule.Selection),\r\n }, ReportRule);\r\n\r\n return {\r\n inlineDownloadUtils: {\r\n processReportRuleForHotelCenterBIDimensionRow,\r\n processReportRuleForHotelCenterBookingRow,\r\n },\r\n };\r\n};\r\n\r\n","import React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Text } from '@bingads-webui-react/fabric-control';\r\n\r\nexport const ErrorString = ({\r\n error,\r\n}) => (\r\n <Fragment>\r\n <Text variant=\"small\" className=\"error-string\" block styles={{ root: { color: '#A80000', whiteSpace: 'break-spaces', lineHeight: '18px' } }}>{error}</Text>\r\n </Fragment>\r\n);\r\n\r\nErrorString.propTypes = {\r\n error: PropTypes.string,\r\n};\r\nErrorString.defaultProps = {\r\n error: '',\r\n};\r\n\r\n","import decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { validateNumber, getNumberErrorMsg } from '../components/utility';\r\n\r\nconst advancedBookConst = {\r\n min: 0,\r\n max: 330,\r\n isInteger: true,\r\n};\r\n\r\nexport const validateAdvancedBookingDays = ({\r\n value, min = advancedBookConst.min, max = advancedBookConst.max, isInteger = advancedBookConst.isInteger,\r\n}) => validateNumber({\r\n value, min, max, isInteger, extra: [],\r\n});\r\nexport const getValidateAdvancedBookingDaysErrorMsg = ({\r\n code, i18n, min = advancedBookConst.min, max = advancedBookConst.max,\r\n}) => {\r\n switch (code) {\r\n default:\r\n return getNumberErrorMsg({\r\n code, i18n, min, max,\r\n });\r\n }\r\n};\r\n\r\nexport const isABWOverlapCal = (dt1, dt2) => {\r\n const start1 = Number(dt1.minimumDays);\r\n const end1 = Number(dt1.maximumDays);\r\n const start2 = Number(dt2.minimumDays);\r\n const end2 = Number(dt2.maximumDays);\r\n let [flag1, flag2, flag3] = [true, true, true];\r\n if (decimal.isValid(dt1.minimumDays) && decimal.isValid(dt1.maximumDays)) {\r\n flag1 = start1 <= end1;\r\n }\r\n if (decimal.isValid(dt2.minimumDays) && decimal.isValid(dt2.maximumDays)) {\r\n flag2 = start2 <= end2;\r\n }\r\n if (decimal.isValid(dt1.maximumDays) && decimal.isValid(dt2.minimumDays)) {\r\n flag3 = end1 < start2;\r\n }\r\n if (!flag1 || !flag2) {\r\n return 'minimum_greater_than_maximum';\r\n }\r\n if (!flag3) {\r\n return 'adjust_settings';\r\n }\r\n return '';\r\n};\r\n\r\n","import decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { validateNumber, getNumberErrorMsg } from '../components/utility';\r\n\r\nconst lengthOfStayConst = {\r\n min: 0,\r\n max: 30,\r\n isInteger: true,\r\n};\r\n\r\nexport const validateLengthOfStayDays = ({\r\n value, min = lengthOfStayConst.min, max = lengthOfStayConst.max, isInteger = lengthOfStayConst.isInteger,\r\n}) => validateNumber({\r\n value, min, max, isInteger, extra: [],\r\n});\r\nexport const getValidateLengthOfStayDaysErrorMsg = ({\r\n code, i18n, min = lengthOfStayConst.min, max = lengthOfStayConst.max,\r\n}) => {\r\n switch (code) {\r\n default:\r\n return getNumberErrorMsg({\r\n code, i18n, min, max,\r\n });\r\n }\r\n};\r\n\r\nexport const isLengthOfStayOverlapCal = (dt1, dt2) => {\r\n const start1 = Number(dt1.minimumNumber);\r\n const end1 = Number(dt1.maximumNumber);\r\n const start2 = Number(dt2.minimumNumber);\r\n const end2 = Number(dt2.maximumNumber);\r\n let [flag1, flag2, flag3] = [true, true, true];\r\n if (decimal.isValid(dt1.minimumNumber) && decimal.isValid(dt1.maximumNumber)) {\r\n flag1 = start1 <= end1;\r\n }\r\n if (decimal.isValid(dt2.minimumNumber) && decimal.isValid(dt2.maximumNumber)) {\r\n flag2 = start2 <= end2;\r\n }\r\n if (decimal.isValid(dt1.maximumNumber) && decimal.isValid(dt2.minimumNumber)) {\r\n flag3 = end1 < start2;\r\n }\r\n if (!flag1 || !flag2) {\r\n return 'minimum_greater_than_maximum_nights';\r\n }\r\n if (!flag3) {\r\n return 'adjust_settings';\r\n }\r\n return '';\r\n};\r\n","export const getValidateCheckinDateErrorMsg = ({\r\n code, i18n,\r\n}) => {\r\n if (code.value === '' || code.value == null) {\r\n return i18n.getString(_TL_('Required field'));\r\n }\r\n return null;\r\n};\r\n\r\nexport const validateCheckinDate = ({ value }) => {\r\n if (value === '' || value == null) {\r\n return 'RequiredField';\r\n }\r\n return null;\r\n};\r\n\r\nfunction getDaysBetween(dateString1, dateString2) {\r\n const startDate = Date.parse(dateString1);\r\n const endDate = Date.parse(dateString2);\r\n const days = (endDate - startDate) / (1 * 24 * 60 * 60 * 1000);\r\n return days;\r\n}\r\n\r\nexport const isCheckinDateOverlapCal = (dt1, dt2) => {\r\n const start1 = dt1.startDate;\r\n const end1 = dt1.endDate;\r\n const start2 = dt2.startDate;\r\n const end2 = dt2.endDate;\r\n let [isStart1EarlyThanEnd1, isStart2EarlyThanEnd2, isEnd1EarlyThanStart2, isRange1NotGreaterThan999, isRange2NotGreaterThan999] = [true, true, true, true, true];\r\n if (dt1.startDate && dt1.endDate) {\r\n isStart1EarlyThanEnd1 = start1 <= end1;\r\n isRange1NotGreaterThan999 = getDaysBetween(start1, end1) <= 999;\r\n }\r\n if (dt2.startDate && dt2.endDate) {\r\n isStart2EarlyThanEnd2 = start2 <= end2;\r\n isRange2NotGreaterThan999 = getDaysBetween(start2, end2) <= 999;\r\n }\r\n if (dt1.endDate && dt2.startDate) {\r\n isEnd1EarlyThanStart2 = end1 < start2;\r\n }\r\n if (!isStart1EarlyThanEnd1 || !isStart2EarlyThanEnd2) {\r\n return 'startdate_greater_than_enddate';\r\n }\r\n if (!isEnd1EarlyThanStart2) {\r\n return 'adjust_settings';\r\n }\r\n if (!isRange1NotGreaterThan999 || !isRange2NotGreaterThan999) {\r\n return 'out_of_checkin_date_range';\r\n }\r\n return '';\r\n};\r\n","/* eslint-disable no-param-reassign */\r\n/* eslint-disable no-plusplus */\r\nimport _ from 'underscore';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport targetConstants from '@bingads-webui-campaign-legacy/base-targets/viewmodel/targetConstants';\r\nimport { isABWTargetValid, isLengthOfStayTargetValid, isCheckinDateTargetValid } from '../index';\r\nimport { isABWOverlapCal } from '../advanced-booking-window-target-setting/utility';\r\nimport { isLengthOfStayOverlapCal } from '../length-of-stay-target-setting/utility';\r\nimport { isCheckinDateOverlapCal } from '../check-in-date-target-setting/utility';\r\n\r\nexport function shouldNotHideInclude(bidStrategyType) {\r\n return bidStrategyType !== 'Commission';\r\n}\r\n\r\nconst bidAdjustmentConst = {\r\n min: 0,\r\n max: 1000,\r\n};\r\nexport const numberErrorCode = {\r\n RequiredField: 'RequiredField',\r\n InValidNumber: 'InValidNumber',\r\n OutOfRange: 'OutOfRange',\r\n RequiredInteger: 'RequiredInteger',\r\n};\r\n\r\nexport const getNumberErrorMsg = ({\r\n code, i18n, min, max,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n return i18n.getString(_TL_('Required field'));\r\n case numberErrorCode.InValidNumber:\r\n return i18n.getString(_TL_('Field requires numeric value'));\r\n case numberErrorCode.OutOfRange:\r\n return i18n.getString(_TL_('Number should be between {{min}} and {{max}}'), { min, max });\r\n case numberErrorCode.RequiredInteger:\r\n return i18n.getString(_TL_('Field requires integer value'));\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateNumber = ({\r\n value,\r\n min,\r\n max,\r\n isInteger,\r\n extra,\r\n onlyExtra,\r\n}) => {\r\n const isValidNumber = typeof value === 'number' ? true : decimal.isValid(value);\r\n if (value === '' || value == null) {\r\n return numberErrorCode.RequiredField;\r\n } else if (!isValidNumber) {\r\n return numberErrorCode.InValidNumber;\r\n }\r\n const number = decimal.fromLocalToFloat(value);\r\n if ((number < min || number > max) && ((extra && extra.indexOf(number) === -1) || _.isUndefined(extra))) {\r\n return numberErrorCode.OutOfRange;\r\n }\r\n if (onlyExtra && ((extra && extra.indexOf(number) === -1) || _.isUndefined(extra))) {\r\n return numberErrorCode.OutOfRange;\r\n }\r\n if (isInteger && !Number.isInteger(number)) {\r\n return numberErrorCode.RequiredInteger;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst transExtra = (i18n, extra) => {\r\n const num = extra.length;\r\n const last = extra[num - 1];\r\n if (num > 1) {\r\n const pre = extra.slice(0, num - 1);\r\n return i18n.getString(_TL_('{{pre}}% or {{last}}%'), { pre: pre.join('%, '), last });\r\n }\r\n return i18n.getString(_TL_('{{last}}%'), { last });\r\n};\r\n\r\nexport const validateBidAdjustment = ({\r\n value, min = bidAdjustmentConst.min, max = bidAdjustmentConst.max, extra, onlyExtra,\r\n}) => validateNumber({\r\n value, min, max, extra, onlyExtra, isInteger: true,\r\n});\r\nexport const getValidateBidAdjustmentErrorMsg = ({\r\n code, i18n, min = bidAdjustmentConst.min, max = bidAdjustmentConst.max, extra, onlyExtra,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.OutOfRange:\r\n if (extra && extra.length) {\r\n if (onlyExtra) {\r\n return i18n.getString(_TL_('The bid adjustment must be {{extra}}'), { extra: transExtra(i18n, extra) });\r\n }\r\n return i18n.getString(_TL_('The bid adjustment must be {{extra}} or {{min}}% to {{max}}%'), { min, max, extra: transExtra(i18n, extra) });\r\n }\r\n return i18n.getString(_TL_('The bid adjustment must be between {{min}}% and {{max}}%'), { min, max });\r\n default:\r\n return getNumberErrorMsg({\r\n code, i18n, min, max,\r\n });\r\n }\r\n};\r\n\r\nconst defaultSupportedLocationsForGEODeal = ['Country', 'SubGeography', 'MetroArea'];\r\n\r\nexport const locationErrors = {\r\n IntentIsNotValid: 'IntentIsNotValid',\r\n BidIsNotValid: 'BidIsNotValid',\r\n HasConflict: 'HasConflict',\r\n InvalidLocationForDeal: 'InvalidLocationForDeal',\r\n};\r\n\r\nconst checkConflict = (areaLocations) => {\r\n const includedLocations = [];\r\n const excludedLocations = [];\r\n\r\n _.each(areaLocations, (location) => {\r\n if (location.Criterion.LocationCriterion) {\r\n if (location.SelectionStatus === 'Included') {\r\n includedLocations.push(location);\r\n } else if (location.SelectionStatus === 'Excluded') {\r\n excludedLocations.push(location);\r\n }\r\n }\r\n });\r\n\r\n return _.every(includedLocations, includedLoc =>\r\n _.every(includedLoc.Criterion.LocationCriterion.EnclosingLocationIds, parentLocationId =>\r\n _.isUndefined(_.find(excludedLocations, excludedLoc =>\r\n excludedLoc.Criterion.LocationCriterion.LocationId === parentLocationId))));\r\n};\r\n\r\nconst locationTypeNameMap = {\r\n Country: _TL_('country'),\r\n SubGeography: _TL_('region, state, province '),\r\n MetroArea: _TL_('metro area'),\r\n City: _TL_('city'),\r\n PostalCode: _TL_('postal code'),\r\n County: _TL_('county'),\r\n Neighborhood: _TL_('neighborhood'),\r\n};\r\n\r\nconst constructErrorMessageForDeal = ({ i18n, dealInfo = {} }) => {\r\n const { dealSupportedLocationType } = dealInfo;\r\n let message = '';\r\n if (dealSupportedLocationType) {\r\n const supportedLocationType = dealSupportedLocationType\r\n .map(type => (_.has(locationTypeNameMap, type) ? locationTypeNameMap[type] : ''))\r\n .join(', ');\r\n message = i18n.getString(_TL_('The location you selected is not valid for this deal. This deal supported location types {{supportedLocationType}} location targeting under the country.'), { supportedLocationType });\r\n }\r\n return message;\r\n};\r\n\r\nexport const getLocationErrorMsg = ({\r\n code, i18n, dealInfo = {},\r\n}) => {\r\n switch (code) {\r\n case locationErrors.HasConflict:\r\n return i18n.getString(_TL_('You cannot target a location that is within an excluded location.'));\r\n case locationErrors.InvalidLocationForDeal:\r\n return constructErrorMessageForDeal({ i18n, dealInfo });\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateLocations = (location, bidStrategyType, dealInfo = null) => {\r\n if (location.useParentLevel) {\r\n return null;\r\n }\r\n const {\r\n currentLevelSettings = {},\r\n } = location;\r\n\r\n const {\r\n peopleInLocation,\r\n peopleSearchingForLocation,\r\n currentLocations,\r\n } = currentLevelSettings;\r\n\r\n if (shouldNotHideInclude(bidStrategyType) && !checkConflict(currentLocations)) {\r\n return locationErrors.HasConflict;\r\n }\r\n\r\n if (shouldNotHideInclude(bidStrategyType) && (peopleInLocation === false && peopleSearchingForLocation === false)) {\r\n return locationErrors.IntentIsNotValid;\r\n }\r\n\r\n const data = currentLocations && currentLocations.find(target => validateBidAdjustment({\r\n min: -targetConstants.minimumBid.Location,\r\n max: targetConstants.maximumBid.Location,\r\n value: target.Criterion.BidAdjustment,\r\n }) !== null);\r\n\r\n if (data) {\r\n return locationErrors.BidIsNotValid;\r\n }\r\n\r\n const {\r\n isForDeal,\r\n dealSupportedLocationType,\r\n dealCountryCode,\r\n } = dealInfo || {};\r\n\r\n // Deal Check\r\n if (isForDeal) {\r\n let invalidCountryLocations = [];\r\n // If supportedLocationType is not provided, default to country, subgeography, metroarea\r\n const supportedLocationType = dealSupportedLocationType || defaultSupportedLocationsForGEODeal;\r\n const invalidTypeLocations = currentLocations\r\n && currentLocations.find((target) => {\r\n const locationType = _.get(target, ['Criterion', 'LocationCriterion', 'LocationType'], '');\r\n return _.contains(supportedLocationType, locationType) === false;\r\n });\r\n\r\n if (!_.isEmpty(dealCountryCode)) {\r\n invalidCountryLocations = currentLocations\r\n && currentLocations.find((target) => {\r\n const targetCountryCode = _.get(target, ['Criterion', 'LocationCriterion', 'CountryCode'], '').toLowerCase();\r\n // If the location selected is not in the same country announced by the deal, return error\r\n return !_.isEqual(dealCountryCode.toLowerCase(), targetCountryCode);\r\n });\r\n }\r\n\r\n if (!_.isEmpty(invalidTypeLocations) || !_.isEmpty(invalidCountryLocations)) {\r\n return locationErrors.InvalidLocationForDeal;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const isLocationValid = (location, bidStrategyType, dealInfo = {}) => validateLocations(location, bidStrategyType, dealInfo) === null;\r\n\r\nexport const getDatePickerStrings = i18n => ({\r\n months: [\r\n i18n.getString(_TL_('January')),\r\n i18n.getString(_TL_('February')),\r\n i18n.getString(_TL_('March')),\r\n i18n.getString(_TL_('April')),\r\n i18n.getString(_TL_('May')),\r\n i18n.getString(_TL_('June')),\r\n i18n.getString(_TL_('July')),\r\n i18n.getString(_TL_('August')),\r\n i18n.getString(_TL_('September')),\r\n i18n.getString(_TL_('October')),\r\n i18n.getString(_TL_('November')),\r\n i18n.getString(_TL_('December')),\r\n ],\r\n\r\n shortMonths: [\r\n i18n.getString(_TL_('Jan')),\r\n i18n.getString(_TL_('Feb')),\r\n i18n.getString(_TL_('Mar')),\r\n i18n.getString(_TL_('Apr')),\r\n i18n.getString(_TL_('May')),\r\n i18n.getString(_TL_('Jun')),\r\n i18n.getString(_TL_('Jul')),\r\n i18n.getString(_TL_('Aug')),\r\n i18n.getString(_TL_('Sep')),\r\n i18n.getString(_TL_('Oct')),\r\n i18n.getString(_TL_('Nov')),\r\n i18n.getString(_TL_('Dec')),\r\n ],\r\n\r\n days: [\r\n i18n.getString(_TL_('Sunday')),\r\n i18n.getString(_TL_('Monday')),\r\n i18n.getString(_TL_('Tuesday')),\r\n i18n.getString(_TL_('Wednesday')),\r\n i18n.getString(_TL_('Thursday')),\r\n i18n.getString(_TL_('Friday')),\r\n i18n.getString(_TL_('Saturday')),\r\n ],\r\n\r\n // likezh: These short day initials are not used. Left en-US defaults from Fluent UI.\r\n // https://github.com/microsoft/fluentui/blob/4f907a837f3b85923178b611e4fbb0d9ac222dda/packages/date-time-utilities/src/dateFormatting/dateFormatting.defaults.ts#L55\r\n shortDays: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\r\n\r\n goToToday: i18n.getString(_TL_('Go to today')),\r\n prevMonthAriaLabel: i18n.getString(_TL_('Go to previous month')),\r\n nextMonthAriaLabel: i18n.getString(_TL_('Go to next month')),\r\n prevYearAriaLabel: i18n.getString(_TL_('Go to previous year')),\r\n nextYearAriaLabel: i18n.getString(_TL_('Go to next year')),\r\n closeButtonAriaLabel: i18n.getString(_TL_('Close date picker')),\r\n\r\n isRequiredErrorMessage: i18n.getString(_TL_('Start date is required.')),\r\n invalidInputErrorMessage: i18n.getString(_TL_('Invalid date format.')),\r\n});\r\n\r\nexport const areEqual = (prevProps, nextProps) => prevProps.data === nextProps.data;\r\n\r\nexport function notifyTargetsShowError(target, patchTarget) {\r\n if (!target.ABW.useParentLevel && isABWTargetValid(target.ABW.currentLevelSettings) === false) {\r\n patchTarget('ABW', { ...target.ABW, isInvalid: true });\r\n }\r\n if (!target.lengthOfStay.useParentLevel && isLengthOfStayTargetValid(target.lengthOfStay.currentLevelSettings) === false) {\r\n patchTarget('lengthOfStay', { ...target.lengthOfStay, isInvalid: true });\r\n }\r\n if (!target.checkinDate.useParentLevel && isCheckinDateTargetValid(target.checkinDate.currentLevelSettings) === false) {\r\n patchTarget('checkinDate', { ...target.checkinDate, isInvalid: true });\r\n }\r\n}\r\n\r\nconst isValueOverlapMap = {\r\n ABW: isABWOverlapCal,\r\n lengthOfStay: isLengthOfStayOverlapCal,\r\n checkinDate: isCheckinDateOverlapCal,\r\n};\r\nconst isValueOverlapMapSortByParams = {\r\n ABW: { key: 'minimumDays', type: 'number' },\r\n lengthOfStay: { key: 'minimumNumber', type: 'number' },\r\n checkinDate: { key: 'startDate', type: 'string' },\r\n};\r\n\r\nexport function isValueOverlap(targetName, data) {\r\n if (data && data.length) {\r\n let sortData = [...data];\r\n if (isValueOverlapMapSortByParams[targetName] && isValueOverlapMapSortByParams[targetName].type === 'number') {\r\n sortData = _.sortBy(sortData, item => item[isValueOverlapMapSortByParams[targetName].key] - 0);\r\n }\r\n if (isValueOverlapMapSortByParams[targetName] && isValueOverlapMapSortByParams[targetName].type === 'string') {\r\n sortData = _.sortBy(sortData, item => item[isValueOverlapMapSortByParams[targetName].key]);\r\n }\r\n sortData = sortData.filter(item => item.Status !== 'Deleted');\r\n for (let i = 0, len = sortData.length; i < len; i++) {\r\n const curDt = sortData[i];\r\n const isValueOverlapMapFn = isValueOverlapMap[targetName];\r\n if (sortData.length === 1) {\r\n if (isValueOverlapMapFn && isValueOverlapMapFn(curDt, {})) {\r\n return isValueOverlapMapFn(curDt, {});\r\n }\r\n }\r\n for (let j = i + 1; j < len; j++) {\r\n const otherDt = sortData[j];\r\n if (isValueOverlapMapFn && isValueOverlapMapFn(curDt, otherDt)) {\r\n return isValueOverlapMapFn(curDt, otherDt);\r\n }\r\n }\r\n }\r\n }\r\n return '';\r\n}\r\nexport function setIsDirtyByNotifyFn({ data, setKeySuffix, setIsDirty }) {\r\n if (data.reset) {\r\n setKeySuffix(new Date().getTime());\r\n delete data.reset;\r\n setIsDirty({});\r\n }\r\n if (data.remove) {\r\n setKeySuffix(new Date().getTime());\r\n const dirty = {};\r\n data.currentLevelSettings.forEach((_item, index) => {\r\n Object.entries(_item).forEach(([key, value]) => {\r\n if (!data.useParentLevel && value !== '') {\r\n dirty[`${key}-${index}`] = true;\r\n }\r\n });\r\n });\r\n setIsDirty(dirty);\r\n delete data.remove;\r\n }\r\n if (data.isInvalid) {\r\n delete data.isInvalid;\r\n const dirty = {};\r\n data.currentLevelSettings.forEach((_item, index) => {\r\n Object.entries(_item).forEach(([key]) => {\r\n if (!data.useParentLevel) {\r\n dirty[`${key}-${index}`] = true;\r\n }\r\n });\r\n });\r\n setIsDirty(dirty);\r\n }\r\n}\r\n\r\nexport const overlapErrorMsg = {\r\n minimum_greater_than_maximum: _TL_('Minimum days cannot be greater than maximum days'),\r\n minimum_greater_than_maximum_nights: _TL_('Minimum number of nights cannot be greater than maximum number of nights'),\r\n adjust_settings: _TL_(\"Adjust your settings so they don't overlap.\"),\r\n startdate_greater_than_enddate: _TL_('Start check-in date cannot be later than end check-in date'),\r\n out_of_checkin_date_range: _TL_('The number of days between start check-in date and end check-in date cannot be greater than 999.'),\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n\r\nimport React, { useContext, Fragment, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Stack, Dropdown, TextField } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { validateBidAdjustment, getValidateBidAdjustmentErrorMsg } from './utility';\r\nimport { ErrorString } from './shared';\r\n\r\nexport const BidAdjustment = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data,\r\n adjustmentDropdown,\r\n adjustmentInput,\r\n handleChangeInput,\r\n handleBatchChangeInput,\r\n isDirty,\r\n index,\r\n keySuffix,\r\n item,\r\n column,\r\n setIsDirty,\r\n disableDecrease,\r\n } = props;\r\n\r\n const dropdownOption = disableDecrease ? [\r\n { key: 'Increase by', text: i18n.getString(_TL_('Increase by')) },\r\n ] : [\r\n { key: 'Increase by', text: i18n.getString(_TL_('Increase by')) },\r\n { key: 'Decrease by', text: i18n.getString(_TL_('Decrease by')) },\r\n ];\r\n\r\n const {\r\n min, max, extra, onlyExtra,\r\n } = column;\r\n const [bidAdjustmentError, setBidAdjustmentError] = useState('');\r\n const [adjustmentDropdownValue, setAdjustmentDropdownValue] = useState('');\r\n const [currentKeySuffix, setCurrentKeySuffix] = useState('');\r\n\r\n useEffect(() => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (adjustmentDropdownValue === 'Decrease by') {\r\n validateValue = -item.bidAdjustmentInput;\r\n }\r\n // When the valid value range or input value changes, check again\r\n setBidAdjustmentError(getValidateBidAdjustmentErrorMsg({\r\n code: validateBidAdjustment({\r\n value: validateValue, min, max, extra, onlyExtra,\r\n }),\r\n i18n,\r\n min,\r\n max,\r\n extra,\r\n onlyExtra,\r\n }));\r\n }, [item[column.fieldName], min, max, extra, onlyExtra, adjustmentDropdownValue]);\r\n\r\n useEffect(() => { setAdjustmentDropdownValue(adjustmentDropdown); }, [adjustmentDropdown]);\r\n useEffect(() => { setCurrentKeySuffix(keySuffix); }, [keySuffix]);\r\n\r\n const handleBlur = (value) => {\r\n let tempValue = value - 0;\r\n if (!disableDecrease && !isNaN(tempValue) && tempValue < 0) {\r\n tempValue = -tempValue;\r\n setCurrentKeySuffix(new Date().getTime());\r\n let tempAdjustmentDropdownValue = '';\r\n if (adjustmentDropdownValue === 'Decrease by') {\r\n tempAdjustmentDropdownValue = 'Increase by';\r\n } else {\r\n tempAdjustmentDropdownValue = 'Decrease by';\r\n }\r\n setAdjustmentDropdownValue(tempAdjustmentDropdownValue);\r\n handleBatchChangeInput({ bidAdjustmentInput: tempValue, bidAdjustmentDropdown: tempAdjustmentDropdownValue });\r\n } else {\r\n handleChangeInput('bidAdjustmentInput', value);\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }} className=\"bid-adjustment-wrapper\">\r\n <Dropdown\r\n className=\"bid-adjustment-dropdown\"\r\n aria-label=\"bid-adjustment-dropdown-label\"\r\n options={dropdownOption}\r\n selectedKey={adjustmentDropdownValue}\r\n onChange={(_e, option) => {\r\n if (!isDirty[`bidAdjustmentDropdown-${index}`]) {\r\n setIsDirty({ ...isDirty, [`bidAdjustmentDropdown-${index}`]: true });\r\n }\r\n handleChangeInput('bidAdjustmentDropdown', option.key);\r\n }}\r\n styles={{\r\n dropdown: { width: 135 },\r\n dropdownOptionText: { overflow: 'visible', whiteSpace: 'normal' },\r\n dropdownItem: { height: 'auto' },\r\n dropdownItemSelected: { height: 'auto' },\r\n }}\r\n disabled={data.useParentLevel}\r\n />\r\n <TextField\r\n className={`bid-adjustment-input ${!data.useParentLevel && isDirty[`bidAdjustmentInput-${index}`] && bidAdjustmentError ? 'input-error-border' : ''}`}\r\n ariaLabel=\"bid-adjustment-input-label\"\r\n defaultValue={adjustmentInput}\r\n key={`${column.fieldName}-${index}-${currentKeySuffix}`}\r\n onChange={(_e, value) => {\r\n if (!isDirty[`bidAdjustmentInput-${index}`]) {\r\n setIsDirty({ ...isDirty, [`bidAdjustmentInput-${index}`]: true });\r\n }\r\n let validateValue = value;\r\n if (adjustmentDropdownValue === 'Decrease by') {\r\n validateValue = -value;\r\n }\r\n const err = getValidateBidAdjustmentErrorMsg({\r\n code: validateBidAdjustment({\r\n value: validateValue, min, max, extra, onlyExtra,\r\n }),\r\n i18n,\r\n min,\r\n max,\r\n extra,\r\n onlyExtra,\r\n });\r\n setBidAdjustmentError(err);\r\n }}\r\n onBlur={e => handleBlur(e.target.value)}\r\n disabled={data.useParentLevel}\r\n />\r\n <span className=\"bidBoost-percent\">%</span>\r\n </Stack>\r\n {!data.useParentLevel && isDirty[`bidAdjustmentInput-${index}`] && bidAdjustmentError && <ErrorString error={bidAdjustmentError} />}\r\n </Fragment>\r\n );\r\n};\r\n\r\nBidAdjustment.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n item: PropTypes.shape({}).isRequired,\r\n adjustmentDropdown: PropTypes.string,\r\n adjustmentInput: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n handleChangeInput: PropTypes.func.isRequired,\r\n handleBatchChangeInput: PropTypes.func.isRequired,\r\n isDirty: PropTypes.shape({}).isRequired,\r\n index: PropTypes.number.isRequired,\r\n keySuffix: PropTypes.number.isRequired,\r\n column: PropTypes.shape({}).isRequired,\r\n setIsDirty: PropTypes.func.isRequired,\r\n disableDecrease: PropTypes.bool,\r\n};\r\n\r\nBidAdjustment.defaultProps = {\r\n adjustmentDropdown: '',\r\n adjustmentInput: '',\r\n disableDecrease: false,\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { Fragment, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\nimport { ErrorString } from './shared';\r\n\r\nexport const CommonTextField = (props) => {\r\n const {\r\n column, index, item, keySuffix, data, fieldContent, isDirty, setIsDirty, handleChangeInput, getFieldErrorMsg,\r\n } = props;\r\n const [fieldErrorMsg, setFieldErrorMsg] = useState('');\r\n useEffect(() => { setFieldErrorMsg(getFieldErrorMsg(item[column.fieldName])); }, [data]);\r\n\r\n return (\r\n <Fragment>\r\n <TextField\r\n ariaLabel={`${column.fieldName}Label`}\r\n key={`${column.fieldName}-${index}-${keySuffix}`}\r\n className={`target-input ${!data.useParentLevel && (isDirty[`${column.fieldName}-${index}`]) && fieldErrorMsg ? 'input-error-border' : ''}`}\r\n styles={{ fieldGroup: { width: 92 } }}\r\n disabled={data.useParentLevel || item.Id}\r\n defaultValue={fieldContent}\r\n onChange={(_e, value) => {\r\n if (!isDirty[`${column.fieldName}-${index}`]) {\r\n setIsDirty({ ...isDirty, [`${column.fieldName}-${index}`]: true });\r\n }\r\n setFieldErrorMsg(getFieldErrorMsg(value));\r\n }}\r\n onBlur={(e) => { handleChangeInput({ fieldName: column.fieldName, index }, e.target && e.target.value, 'blur'); }}\r\n />\r\n {!data.useParentLevel && (isDirty[`${column.fieldName}-${index}`]) && fieldErrorMsg && <ErrorString error={fieldErrorMsg} />}\r\n </Fragment>\r\n );\r\n};\r\n\r\nCommonTextField.propTypes = {\r\n column: PropTypes.shape({}).isRequired,\r\n item: PropTypes.shape({}).isRequired,\r\n index: PropTypes.number.isRequired,\r\n keySuffix: PropTypes.number.isRequired,\r\n data: PropTypes.shape({}).isRequired,\r\n fieldContent: PropTypes.string,\r\n isDirty: PropTypes.shape({}).isRequired,\r\n setIsDirty: PropTypes.func.isRequired,\r\n handleChangeInput: PropTypes.func.isRequired,\r\n getFieldErrorMsg: PropTypes.func.isRequired,\r\n};\r\nCommonTextField.defaultProps = {\r\n fieldContent: '',\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { Fragment } from 'react';\r\nimport { Link, DatePicker, Label } from '@bingads-webui-react/fabric-control';\r\nimport { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { ErrorString } from './shared';\r\nimport { BidAdjustment } from './bid-adjustment';\r\nimport { getDatePickerStrings } from './utility';\r\nimport { CommonTextField } from './common-textfield';\r\n\r\nfunction clearValidation({\r\n item, index, setIsDirty, isDirty,\r\n}) {\r\n const isDirtyCopy = {};\r\n Object.entries(item).forEach(([key]) => {\r\n isDirtyCopy[`${key}-${index}`] = false;\r\n });\r\n setIsDirty({ ...isDirty, ...isDirtyCopy });\r\n}\r\nexport function validateFn(validateParams) {\r\n if (validateParams.targetId) {\r\n if (document.getElementById(validateParams.targetId) && document.getElementById(validateParams.targetId).parentNode.querySelectorAll('.error-string').length) {\r\n validateParams.patchErrMsg(validateParams.targetName, globalErrorMsg);\r\n } else {\r\n validateParams.patchErrMsg(validateParams.targetName, '');\r\n }\r\n }\r\n}\r\nexport function generateColumn(parmas) {\r\n const {\r\n item,\r\n index,\r\n column,\r\n i18n,\r\n serverContext,\r\n isDirty,\r\n setIsDirty,\r\n handleRemove,\r\n props: {\r\n handleChangeInput, handleBatchChangeInput, data, setData, getFieldErrorMsg, keySuffix, disableDecrease,\r\n },\r\n } = parmas;\r\n\r\n\r\n const fieldContent = item[column.fieldName];\r\n const fieldErrorMsg = getFieldErrorMsg(fieldContent);\r\n\r\n const formatDateValue = value => i18n.formatDate(value, { raw: serverContext.CurrentUser.CultureDateTimeFormat.ShortDatePattern });\r\n\r\n let { bidAdjustmentInput, bidAdjustmentDropdown } = item;\r\n if (!disableDecrease && bidAdjustmentInput - 0 < 0) {\r\n bidAdjustmentDropdown = 'Decrease by';\r\n bidAdjustmentInput = -bidAdjustmentInput;\r\n }\r\n switch (column.type) {\r\n case 'bid-adjustment':\r\n return (\r\n <Fragment>\r\n <BidAdjustment\r\n index={index}\r\n item={item}\r\n keySuffix={keySuffix}\r\n data={data}\r\n setData={setData}\r\n column={column}\r\n adjustmentDropdown={bidAdjustmentDropdown}\r\n adjustmentInput={bidAdjustmentInput}\r\n handleChangeInput={(key, value) => {\r\n handleChangeInput({ fieldName: key, index }, value);\r\n }}\r\n handleBatchChangeInput={(fieldName) => {\r\n handleBatchChangeInput({ fieldName, index });\r\n }}\r\n isDirty={isDirty}\r\n setIsDirty={setIsDirty}\r\n disableDecrease={disableDecrease}\r\n />\r\n </Fragment>);\r\n case 'input':\r\n return (\r\n <Fragment>\r\n <CommonTextField\r\n item={item}\r\n column={column}\r\n index={index}\r\n keySuffix={keySuffix}\r\n data={data}\r\n fieldContent={fieldContent}\r\n isDirty={isDirty}\r\n setIsDirty={setIsDirty}\r\n handleChangeInput={handleChangeInput}\r\n getFieldErrorMsg={getFieldErrorMsg}\r\n />\r\n </Fragment>);\r\n case 'remove':\r\n return (\r\n <Link\r\n className=\"target-remove-btn\"\r\n disabled={data.useParentLevel}\r\n onClick={() => {\r\n handleRemove(index);\r\n clearValidation({\r\n data, item, index, setIsDirty, isDirty,\r\n });\r\n }}\r\n >\r\n {i18n.getString(_TL_('Remove'))}\r\n </Link>);\r\n case 'datePicker':\r\n return (\r\n <Fragment>\r\n <DatePicker\r\n strings={getDatePickerStrings(i18n)}\r\n ariaLabel={i18n.getString(_TL_('check-in date picker'))}\r\n isMonthPickerVisible\r\n showGoToToday={false}\r\n value={fieldContent}\r\n formatDate={value => formatDateValue(value)}\r\n onSelectDate={(value) => { setIsDirty({ ...isDirty, [`${column.fieldName}-${index}`]: true }); handleChangeInput({ fieldName: column.fieldName, index }, value); }}\r\n className={`date-picker ${!data.useParentLevel && (isDirty[`${column.fieldName}-${index}`]) && fieldErrorMsg ? 'input-error-border' : ''} `}\r\n disabled={data.useParentLevel}\r\n />\r\n {!data.useParentLevel && (isDirty[`${column.fieldName}-${index}`]) && fieldErrorMsg && <ErrorString error={fieldErrorMsg} />}\r\n </Fragment>\r\n );\r\n case 'plainString':\r\n return (<span className={column.spanClassName}>{fieldContent}</span>);\r\n default:\r\n return <Label style={{ fontWeight: 'normal' }}>{fieldContent && i18n.getString(fieldContent)}</Label>;\r\n }\r\n}\r\n\r\n\r\nexport function getAllColumns({\r\n i18n,\r\n props,\r\n setIsDirty,\r\n handleRemoveAll,\r\n minBid,\r\n maxBid,\r\n extraBid,\r\n onlyExtra,\r\n}) {\r\n const bidAdjustmentTitle = (\r\n <Fragment>\r\n <span>{i18n.getString(_TL_('Bid adjustment'))}</span>\r\n </Fragment>\r\n );\r\n const removetTitle = (\r\n <Link className=\"target-remove-all-btn\" disabled={props.data.useParentLevel} onClick={() => { handleRemoveAll(); setIsDirty({}); }}>\r\n {i18n.getString(_TL_('Remove all'))}\r\n </Link>\r\n );\r\n\r\n let bidAdjustmentColumn = {\r\n key: 'bid-adjustment',\r\n name: bidAdjustmentTitle,\r\n fieldName: 'bidAdjustment',\r\n type: 'bid-adjustment',\r\n minWidth: 200,\r\n min: minBid,\r\n max: maxBid,\r\n extra: extraBid,\r\n onlyExtra,\r\n };\r\n\r\n const RemoveBtnColumn = {\r\n key: 'remove',\r\n name: removetTitle,\r\n fieldName: 'remove',\r\n type: 'remove',\r\n minWidth: 200,\r\n };\r\n\r\n let allColums = [...props.columns, bidAdjustmentColumn];\r\n if (props.showAddBtn) {\r\n bidAdjustmentColumn = {\r\n ...bidAdjustmentColumn,\r\n className: 'border-right',\r\n headerClassName: 'target-custom-header',\r\n };\r\n allColums = [...props.columns, bidAdjustmentColumn, RemoveBtnColumn];\r\n }\r\n if (props.noBidAdjustment) {\r\n allColums = [...props.columns];\r\n }\r\n return allColums;\r\n}\r\n\r\n","/* eslint-disable react/no-unused-prop-types */\r\nimport React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { ServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { DetailsList, SelectionMode } from '@bingads-webui-react/fabric-control';\r\nimport { DetailsRow } from '@fluentui/react';\r\nimport { Pagination } from '@bingads-webui-grid/campaign-details-list';\r\nimport { generateColumn, getAllColumns } from './generate-column';\r\n\r\nconst cropWithPage = (pageSize, pageNumber, data) => {\r\n const min = (pageNumber - 1) * pageSize;\r\n const max = pageNumber * pageSize;\r\n return data.slice(min, max);\r\n};\r\n\r\nexport const TargetDetailList = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const serverContext = useContext(ServerContext);\r\n const {\r\n data,\r\n setData,\r\n isDirty,\r\n setIsDirty,\r\n enablePagination,\r\n pageSize,\r\n pageNumber,\r\n setPageSize,\r\n setPageNumber,\r\n hideWhenEmpty,\r\n minBid,\r\n maxBid,\r\n extraBid,\r\n onlyExtra,\r\n validateParams,\r\n patchTargetsApiErrMsg,\r\n } = props;\r\n\r\n const handleRemove = (index) => {\r\n const currentLevelSettings = [...data.currentLevelSettings];\r\n const item = { ...currentLevelSettings[index] };\r\n if (item.Id) {\r\n item.Status = 'Deleted';\r\n currentLevelSettings[index] = item;\r\n } else {\r\n currentLevelSettings.splice(index, 1);\r\n }\r\n setData({ ...data, currentLevelSettings, remove: true });\r\n if (validateParams) {\r\n patchTargetsApiErrMsg(validateParams.targetName, []);\r\n }\r\n };\r\n\r\n const handleRemoveAll = () => {\r\n const currentLevelSettings = [...data.currentLevelSettings];\r\n const tempCurrentLevelSettings = [];\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < currentLevelSettings.length; i++) {\r\n const item = currentLevelSettings[i];\r\n if (item.Id) {\r\n tempCurrentLevelSettings.push({\r\n ...item,\r\n Status: 'Deleted',\r\n });\r\n }\r\n }\r\n setData({ ...data, currentLevelSettings: tempCurrentLevelSettings });\r\n if (validateParams) {\r\n validateParams.patchErrMsg(validateParams.targetName, '');\r\n patchTargetsApiErrMsg(validateParams.targetName, []);\r\n }\r\n };\r\n\r\n const renderItemColumn = (item, index, column) => generateColumn({\r\n item,\r\n index,\r\n column,\r\n i18n,\r\n serverContext,\r\n isDirty,\r\n setIsDirty,\r\n handleRemove,\r\n props,\r\n hideWhenEmpty,\r\n });\r\n\r\n const renderItemRow = (row) => {\r\n const customStyles = {};\r\n if (row) {\r\n if (row.item.Status === 'Deleted') {\r\n customStyles.root = { display: 'none' };\r\n }\r\n return <DetailsRow {...row} styles={customStyles} />;\r\n }\r\n return null;\r\n };\r\n\r\n let itemsSetting = data.currentLevelSettings;\r\n if (data.useParentLevel) {\r\n itemsSetting = data.parentLevelSettings;\r\n }\r\n\r\n const items = enablePagination ? cropWithPage(pageSize, pageNumber, itemsSetting) : itemsSetting;\r\n if (hideWhenEmpty && items.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <DetailsList\r\n className=\"criterion-target-table\"\r\n selectionMode={SelectionMode.none}\r\n items={items}\r\n columns={getAllColumns({\r\n i18n,\r\n props,\r\n setIsDirty,\r\n handleRemoveAll,\r\n minBid,\r\n maxBid,\r\n extraBid,\r\n onlyExtra,\r\n })}\r\n onRenderItemColumn={renderItemColumn}\r\n onRenderRow={renderItemRow}\r\n />\r\n {enablePagination &&\r\n <div className=\"pagination-control\">\r\n <Pagination\r\n pageNumber={pageNumber}\r\n onPageChange={number => setPageNumber(number)}\r\n pageSize={pageSize}\r\n total={itemsSetting.length}\r\n onPageSizeChange={size => setPageSize(size)}\r\n />\r\n </div>}\r\n </React.Fragment>\r\n );\r\n};\r\n\r\nTargetDetailList.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func,\r\n columns: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isDirty: PropTypes.shape({}).isRequired,\r\n setIsDirty: PropTypes.func.isRequired,\r\n showAddBtn: PropTypes.bool,\r\n handleChangeInput: PropTypes.func.isRequired,\r\n getFieldErrorMsg: PropTypes.func,\r\n enablePagination: PropTypes.bool,\r\n setPageSize: PropTypes.func.isRequired,\r\n setPageNumber: PropTypes.func.isRequired,\r\n pageSize: PropTypes.number.isRequired,\r\n pageNumber: PropTypes.number.isRequired,\r\n minBid: PropTypes.number,\r\n maxBid: PropTypes.number,\r\n extraBid: PropTypes.arrayOf(PropTypes.number),\r\n onlyExtra: PropTypes.bool,\r\n hideWhenEmpty: PropTypes.bool,\r\n validateParams: PropTypes.shape({}).isRequired,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n};\r\n\r\nTargetDetailList.defaultProps = {\r\n setData() { },\r\n getFieldErrorMsg() { },\r\n showAddBtn: false,\r\n enablePagination: false,\r\n hideWhenEmpty: false,\r\n minBid: undefined,\r\n maxBid: undefined,\r\n onlyExtra: false,\r\n extraBid: [],\r\n patchTargetsApiErrMsg() { },\r\n};\r\n","import { helpbuttonStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getStyles = (_, core) => ({\r\n criterionSettingContainer: {\r\n '& .helpbutton': helpbuttonStyle(core)['.helpbutton'],\r\n '& .helpbutton::before': helpbuttonStyle(core)['.helpbutton::before'],\r\n '& .control-label': {\r\n paddingBottom: '0px',\r\n },\r\n '& .target-toggle': {\r\n '& .ms-Toggle-label': {\r\n fontWeight: 400,\r\n },\r\n },\r\n\r\n '& .table-container': {\r\n width: '716px',\r\n '&.length-of-stay-container,&.checkin-date-container': {\r\n width: '890px',\r\n },\r\n '& .bid-adjustment-input': {\r\n width: '66px',\r\n },\r\n '& .criterion-target-table': {\r\n '& .ms-List-cell': {\r\n minHeight: '0',\r\n },\r\n '& .ms-DetailsHeader': {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n borderTop: `1px solid ${core.palette.neutralLight}`,\r\n '& .ms-DetailsHeader-cellName': {\r\n fontWeight: 'normal',\r\n },\r\n },\r\n '& .ms-DetailsRow': {\r\n animationFillMode: 'none',\r\n },\r\n '& .ms-DetailsRow:hover,& .ms-DetailsHeader-cell:hover': {\r\n backgroundColor: `${core.palette.white}`,\r\n color: 'inherit',\r\n '& .ms-DetailsRow-cell .ms-Link.is-disabled': {\r\n color: `${core.palette.neutralTertiary}`,\r\n },\r\n },\r\n '& .target-remove-btn': {\r\n fontSize: '14px',\r\n },\r\n '& .target-custom-header': {\r\n borderRight: `1px solid ${core.palette.neutralLight}`,\r\n },\r\n '& .ms-DetailsRow-cell': {\r\n paddingTop: '5px',\r\n paddingBottom: '5px',\r\n lineHeight: '30px',\r\n },\r\n '& .border-right': {\r\n borderRight: `1px solid ${core.palette.neutralLight}`,\r\n },\r\n },\r\n '& .ms-TextField-fieldGroup::after': {\r\n border: '0px',\r\n },\r\n },\r\n '& .target-add-btn': {\r\n marginTop: '12px',\r\n },\r\n '& .green-dot label': {\r\n '&:before': {\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '5px',\r\n display: 'inline-block',\r\n content: '\"\"',\r\n backgroundColor: `${core.palette.green}`,\r\n marginRight: '5px',\r\n },\r\n },\r\n '& input:focus': {\r\n outline: 'none',\r\n },\r\n '& .input-error-border .ms-TextField-fieldGroup': {\r\n borderColor: `${core.semanticColors && core.semanticColors.errorIcon}`,\r\n },\r\n\r\n },\r\n});\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\n\r\nimport React, { useContext, useState, useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _, { constant, compose, mapObject } from 'underscore';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Link, FontIcon } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TargetDetailList } from './components/detail-list';\r\nimport { getStyles } from './style';\r\nimport { validateFn } from './components/generate-column';\r\nimport { ErrorString } from './components/shared';\r\nimport { isValueOverlap, setIsDirtyByNotifyFn, overlapErrorMsg } from './components/utility';\r\n\r\nexport const usePageControl = () => {\r\n const [pageNumber, setPageNumber] = useState(1);\r\n const [pageSize, setPageSize] = useState(20);\r\n\r\n return {\r\n pageNumber, setPageNumber, pageSize, setPageSize,\r\n };\r\n};\r\n\r\nexport const GridTargetsBaseApp = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data,\r\n setData,\r\n basicConfig,\r\n handleAddLine,\r\n getFieldErrorMsg,\r\n classes,\r\n validateParams,\r\n apiErrors,\r\n patchTargetsApiErrMsg,\r\n } = props;\r\n\r\n const [isDirty, setIsDirty] = useState({});\r\n const [errMsg, setErrMsg] = useState('');\r\n const [keySuffix, setKeySuffix] = useState('');\r\n\r\n const {\r\n pageNumber, setPageNumber, pageSize, setPageSize,\r\n } = usePageControl();\r\n\r\n const {\r\n enablePagination,\r\n } = basicConfig;\r\n\r\n const shift = enablePagination ? (pageNumber - 1) * pageSize : 0;\r\n\r\n const debounceFn = useCallback(_.debounce((callback) => { callback(); }, 500), []);\r\n const handleChangeInput = useCallback((...rest) => {\r\n const [{ fieldName, index }, value] = rest;\r\n const realIndex = index + shift;\r\n const currentLevelSettings = [...data.currentLevelSettings];\r\n currentLevelSettings[realIndex] = { ...currentLevelSettings[realIndex], [fieldName]: value };\r\n props.setData({ ...data, currentLevelSettings });\r\n }, [data, props, shift]);\r\n\r\n const handleBatchChangeInput = useCallback((...rest) => {\r\n const [{ fieldName, index }] = rest;\r\n const realIndex = index + shift;\r\n const currentLevelSettings = [...data.currentLevelSettings];\r\n currentLevelSettings[realIndex] = { ...currentLevelSettings[realIndex], ...fieldName };\r\n props.setData({ ...data, currentLevelSettings });\r\n }, [data, props, shift]);\r\n\r\n\r\n const setIsDirtyByNotify = useCallback(() => {\r\n setIsDirtyByNotifyFn({ data, setKeySuffix, setIsDirty });\r\n }, [data.reset, data.isInvalid, data.remove]);\r\n setIsDirtyByNotify();\r\n\r\n // When the valid value range or input value changes, check again, show or hide error message on the top right corner of jumbo card.\r\n useEffect(() => { setErrMsg(isValueOverlap(validateParams.targetName, data.currentLevelSettings)); debounceFn(() => validateFn(validateParams)); }, [data.currentLevelSettings, data.useParentLevel, basicConfig.minBid, basicConfig.maxBid, basicConfig.extraBid, basicConfig.onlyExtra]);\r\n useEffect(() => { setKeySuffix(new Date().getTime()); }, [data.useParentLevel]);\r\n useEffect(() => {\r\n if ((!_.isEmpty(isDirty) || data.useParentLevel) && apiErrors && apiErrors.length) {\r\n patchTargetsApiErrMsg(validateParams.targetName, []);\r\n }\r\n }, [isDirty, data.useParentLevel]);\r\n const localizeErrorMsg = useCallback(\r\n error => (overlapErrorMsg[error] ? i18n.getString(overlapErrorMsg[error]) : error),\r\n [i18n]\r\n );\r\n\r\n return (\r\n <div className={classnames(classes.criterionSettingContainer, 'criterion-setting-container')}>\r\n <div className={classnames(basicConfig.extraClass ? basicConfig.extraClass : '', 'table-container')}>\r\n <TargetDetailList\r\n columns={basicConfig.columns}\r\n minBid={basicConfig.minBid}\r\n maxBid={basicConfig.maxBid}\r\n extraBid={basicConfig.extraBid}\r\n onlyExtra={basicConfig.onlyExtra}\r\n data={data}\r\n setData={setData}\r\n isDirty={isDirty}\r\n setIsDirty={setIsDirty}\r\n showAddBtn={basicConfig.showAddBtn}\r\n noBidAdjustment={basicConfig.noBidAdjustment}\r\n handleChangeInput={handleChangeInput}\r\n handleBatchChangeInput={handleBatchChangeInput}\r\n getFieldErrorMsg={getFieldErrorMsg}\r\n enablePagination={basicConfig.enablePagination}\r\n disableDecrease={basicConfig.disableDecrease}\r\n pageNumber={pageNumber}\r\n setPageNumber={setPageNumber}\r\n pageSize={pageSize}\r\n setPageSize={setPageSize}\r\n hideWhenEmpty={basicConfig.hideWhenEmpty}\r\n validateParams={validateParams}\r\n keySuffix={keySuffix}\r\n patchTargetsApiErrMsg={patchTargetsApiErrMsg}\r\n />\r\n </div>\r\n {!data.useParentLevel && errMsg && <ErrorString error={localizeErrorMsg(errMsg)} />}\r\n {\r\n basicConfig.showAddBtn && (\r\n <div>\r\n <Link className=\"target-add-btn\" disabled={data.useParentLevel || (basicConfig.maxLimit && data.currentLevelSettings.filter(item => item.Status !== 'Deleted').length >= basicConfig.maxLimit)} onClick={handleAddLine}>\r\n <FontIcon aria-label=\"Add\" iconName=\"Add\" /> {i18n.getString(_TL_('Add another'))}\r\n </Link>\r\n </div>\r\n )\r\n }\r\n </div>\r\n );\r\n};\r\n\r\n\r\nGridTargetsBaseApp.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func,\r\n basicConfig: PropTypes.shape({}).isRequired,\r\n handleAddLine: PropTypes.func,\r\n getFieldErrorMsg: PropTypes.func,\r\n classes: PropTypes.shape(mapObject(\r\n getStyles({}, { palette: {} }),\r\n constant(PropTypes.string.isRequired)\r\n )).isRequired,\r\n validateParams: PropTypes.shape({}),\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nGridTargetsBaseApp.defaultProps = {\r\n setData() {},\r\n handleAddLine() { },\r\n getFieldErrorMsg() { },\r\n validateParams: {},\r\n patchTargetsApiErrMsg() {},\r\n apiErrors: [],\r\n};\r\n\r\nexport const GridTargetsBase = compose(WrappedComponent => withDefaultStyles(WrappedComponent, getStyles))(GridTargetsBaseApp);\r\n","import { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment, isValueOverlap } from '../components/utility';\r\nimport { validateAdvancedBookingDays } from './utility';\r\n\r\nexport function getAbwBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'minimum-days', name: i18n.getString(_TL_('Minimum days')), fieldName: 'minimumDays', minWidth: 100, maxWidth: 117, type: 'input', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n {\r\n key: 'maximum-days', name: i18n.getString(_TL_('Maximum days')), fieldName: 'maximumDays', minWidth: 100, maxWidth: 127, type: 'input', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: true,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('Advanced booking window')),\r\n topicKey: 'pop_BA_CampaignTargets_AdvancedBookingWindow',\r\n maxLimit: 10,\r\n minBid: -90,\r\n maxBid: 900,\r\n extraBid: [-100],\r\n },\r\n };\r\n}\r\n\r\n\r\nexport const advancedBookingDefaultSetting = [{\r\n minimumDays: '',\r\n maximumDays: '',\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n}];\r\n\r\nexport const isABWTargetValid = (ABW, patchErrMsg = function () { }) => {\r\n let isValid = true;\r\n ABW.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue, min: -90, max: 900, extra: [-100],\r\n }) || validateAdvancedBookingDays({ value: item.minimumDays }) || validateAdvancedBookingDays({ value: item.maximumDays })) {\r\n isValid = false;\r\n }\r\n });\r\n if (isValueOverlap('ABW', ABW)) {\r\n isValid = false;\r\n }\r\n\r\n if (isValid) {\r\n patchErrMsg('ABW', '');\r\n } else {\r\n patchErrMsg('ABW', globalErrorMsg);\r\n }\r\n return isValid;\r\n};\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { validateAdvancedBookingDays, getValidateAdvancedBookingDaysErrorMsg } from './utility';\r\nimport { areEqual } from '../components/utility';\r\nimport { getAbwBasicConfig, advancedBookingDefaultSetting } from './basic-config';\r\n\r\nexport const AdvancedBookingWindowTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, apiErrors,\r\n } = props;\r\n const advancedBookingDaysError = value => getValidateAdvancedBookingDaysErrorMsg({ code: validateAdvancedBookingDays({ value }), i18n });\r\n\r\n const handleAddLine = () => {\r\n const currentLevelSettings = [...data.currentLevelSettings, ...advancedBookingDefaultSetting];\r\n props.setData({ ...data, currentLevelSettings });\r\n };\r\n\r\n const params = {\r\n ...getAbwBasicConfig(i18n),\r\n handleAddLine,\r\n getFieldErrorMsg: advancedBookingDaysError,\r\n validateParams: { targetId: 'abw-target-wrapper', patchErrMsg, targetName: 'ABW' },\r\n patchTargetsApiErrMsg,\r\n apiErrors,\r\n };\r\n\r\n\r\n return (\r\n <div id=\"abw-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nAdvancedBookingWindowTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nAdvancedBookingWindowTargetSetting.defaultProps = {\r\n patchErrMsg() { },\r\n patchTargetsApiErrMsg() {},\r\n apiErrors: [],\r\n};\r\n","import { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment } from '../components/utility';\r\n\r\nexport function getCheckinDayBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'day', name: i18n.getString(_TL_('Day of the week')), fieldName: 'day', minWidth: 100, maxWidth: 117, type: 'string', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: false,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('Check-in day')),\r\n topicKey: 'pop_BA_CampaignTargets_CheckinDay',\r\n minBid: -90,\r\n maxBid: 900,\r\n extraBid: [-100],\r\n },\r\n };\r\n}\r\n\r\n\r\nexport const checkinDayDefaultSetting = [{\r\n day: _TL_('Monday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Tuesday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Wednesday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Thursday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Friday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Saturday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n},\r\n{\r\n day: _TL_('Sunday'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n}];\r\n\r\nexport const isCheckinDayTargetValid = (checkinDay, patchErrMsg = function () { }) => {\r\n let isValid = true;\r\n\r\n checkinDay.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue, min: -90, max: 900, extra: [-100],\r\n })) {\r\n isValid = false;\r\n }\r\n });\r\n if (isValid) {\r\n patchErrMsg('checkinDay', '');\r\n } else {\r\n patchErrMsg('checkinDay', globalErrorMsg);\r\n }\r\n return isValid;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { getCheckinDayBasicConfig } from './basic-config';\r\nimport { areEqual } from '../components/utility';\r\n\r\nexport const CheckinDayTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, apiErrors,\r\n } = props;\r\n\r\n const params = {\r\n ...getCheckinDayBasicConfig(i18n),\r\n validateParams: { targetId: 'check-in-day-target-wrapper', patchErrMsg, targetName: 'checkinDay' },\r\n patchTargetsApiErrMsg,\r\n apiErrors,\r\n };\r\n\r\n return (\r\n <div id=\"check-in-day-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nCheckinDayTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n};\r\nCheckinDayTargetSetting.defaultProps = {\r\n patchErrMsg() {},\r\n patchTargetsApiErrMsg() {},\r\n apiErrors: [],\r\n};\r\n","\r\nimport { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment } from '../components/utility';\r\n\r\nexport function getUserSetDatesBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'dates', name: '', fieldName: 'dates', minWidth: 100, maxWidth: 135, type: 'string', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: false,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('User set dates')),\r\n topicKey: 'pop_BA_CampaignTargets_UserSetDates',\r\n minBid: -50,\r\n maxBid: 100,\r\n },\r\n };\r\n}\r\n\r\nexport const userSetDatesDefaultSetting = [\r\n {\r\n dates: _TL_('Selected date'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n {\r\n dates: _TL_('Default date'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n }];\r\n\r\nexport const isUserSetDatesTargetValid = (userSetDates, patchErrMsg = function () { }) => {\r\n let isValid = true;\r\n\r\n userSetDates.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue, min: -90, max: 900, extra: [-100],\r\n })) {\r\n isValid = false;\r\n }\r\n });\r\n\r\n if (isValid) {\r\n patchErrMsg('userSetDates', '');\r\n } else {\r\n patchErrMsg('userSetDates', globalErrorMsg);\r\n }\r\n return isValid;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { getUserSetDatesBasicConfig } from './basic-config';\r\nimport { areEqual } from '../components/utility';\r\n\r\nexport const UserSetDatesTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, apiErrors,\r\n } = props;\r\n\r\n const params = {\r\n ...getUserSetDatesBasicConfig(i18n),\r\n validateParams: { targetId: 'user-set-dates-target-wrapper', patchErrMsg, targetName: 'userSetDates' },\r\n patchTargetsApiErrMsg,\r\n apiErrors,\r\n };\r\n\r\n return (\r\n <div id=\"user-set-dates-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nUserSetDatesTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n};\r\nUserSetDatesTargetSetting.defaultProps = {\r\n patchErrMsg() {},\r\n patchTargetsApiErrMsg() {},\r\n apiErrors: [],\r\n};\r\n","import { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment, isValueOverlap } from '../components/utility';\r\nimport { validateCheckinDate } from './utility';\r\n\r\nexport function getCheckinDateBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'start-date', name: i18n.getString(_TL_('Start check-in date')), fieldName: 'startDate', minWidth: 200, maxWidth: 245, type: 'datePicker', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n {\r\n key: 'end-date', name: i18n.getString(_TL_('End check-in date')), fieldName: 'endDate', minWidth: 200, maxWidth: 240, type: 'datePicker', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: true,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('Check-in date')),\r\n topicKey: 'pop_BA_CampaignTargets_CheckinDate',\r\n extraClass: 'checkin-date-container',\r\n maxLimit: 30,\r\n minBid: -90,\r\n maxBid: 900,\r\n extraBid: [-100],\r\n },\r\n };\r\n}\r\n\r\n\r\nexport const checkinDateDefaultSetting = [{\r\n startDate: '',\r\n endDate: '',\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n}];\r\n\r\n\r\nexport const isCheckinDateTargetValid = (checkinDate, patchErrMsg = function () { }) => {\r\n let isValid = true;\r\n\r\n checkinDate.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue, min: -90, max: 900, extra: [-100],\r\n }) || validateCheckinDate({ value: item.startDate }) || validateCheckinDate({ value: item.endDate })) {\r\n isValid = false;\r\n }\r\n });\r\n if (isValueOverlap('checkinDate', checkinDate)) {\r\n isValid = false;\r\n }\r\n if (isValid) {\r\n patchErrMsg('checkinDate', '');\r\n } else {\r\n patchErrMsg('checkinDate', globalErrorMsg);\r\n }\r\n return isValid;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { getCheckinDateBasicConfig, checkinDateDefaultSetting } from './basic-config';\r\nimport { areEqual } from '../components/utility';\r\nimport { getValidateCheckinDateErrorMsg } from './utility';\r\n\r\nexport const CheckinDateTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, apiErrors,\r\n } = props;\r\n const checkinDateError = value => getValidateCheckinDateErrorMsg({ code: { value }, i18n });\r\n\r\n const handleAddLine = () => {\r\n const currentLevelSettings = [...data.currentLevelSettings, ...checkinDateDefaultSetting];\r\n props.setData({ ...data, currentLevelSettings });\r\n };\r\n const params = {\r\n ...getCheckinDateBasicConfig(i18n),\r\n handleAddLine,\r\n getFieldErrorMsg: checkinDateError,\r\n validateParams: { targetId: 'check-in-date-target-wrapper', patchErrMsg, targetName: 'checkinDate' },\r\n patchTargetsApiErrMsg,\r\n apiErrors,\r\n };\r\n\r\n return (\r\n <div id=\"check-in-date-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n\r\n );\r\n}, areEqual);\r\n\r\nCheckinDateTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n};\r\nCheckinDateTargetSetting.defaultProps = {\r\n patchErrMsg() {},\r\n patchTargetsApiErrMsg() {},\r\n apiErrors: [],\r\n};\r\n","import { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment, isValueOverlap } from '../components/utility';\r\nimport { validateLengthOfStayDays } from './utility';\r\n\r\nexport function getLengthOfStayBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'minimum-number', name: i18n.getString(_TL_('Minimum number of nights')), fieldName: 'minimumNumber', minWidth: 188, maxWidth: 188, type: 'input', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n {\r\n key: 'maximum-number', name: i18n.getString(_TL_('Maximum number of nights')), fieldName: 'maximumNumber', minWidth: 198, maxWidth: 198, type: 'input', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: true,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('Length of stay')),\r\n topicKey: 'pop_BA_CampaignTargets_LengthOfStay',\r\n extraClass: 'length-of-stay-container',\r\n maxLimit: 30,\r\n minBid: -90,\r\n maxBid: 900,\r\n extraBid: [-100],\r\n },\r\n };\r\n}\r\n\r\n\r\nexport const lengthOfStayDefaultSetting = [{\r\n minimumNumber: '',\r\n maximumNumber: '',\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n}];\r\n\r\nexport const isLengthOfStayTargetValid = (lengthOfStay, patchErrMsg = function () { }) => {\r\n let isValid = true;\r\n\r\n lengthOfStay.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue, min: -90, max: 900, extra: [-100],\r\n }) || validateLengthOfStayDays({ value: item.minimumNumber }) || validateLengthOfStayDays({ value: item.maximumNumber })) {\r\n isValid = false;\r\n }\r\n });\r\n if (isValueOverlap('lengthOfStay', lengthOfStay)) {\r\n isValid = false;\r\n }\r\n if (isValid) {\r\n patchErrMsg('lengthOfStay', '');\r\n } else {\r\n patchErrMsg('lengthOfStay', globalErrorMsg);\r\n }\r\n return isValid;\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { validateLengthOfStayDays, getValidateLengthOfStayDaysErrorMsg, } from './utility';\r\nimport { getLengthOfStayBasicConfig, lengthOfStayDefaultSetting } from './basic-config';\r\nimport { areEqual } from '../components/utility';\r\n\r\nexport const LengthOfStayTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, targetsApiErrMsg,\r\n } = props;\r\n const lengthOfStayDatesError = value => getValidateLengthOfStayDaysErrorMsg({ code: validateLengthOfStayDays({ value }), i18n });\r\n\r\n const handleAddLine = () => {\r\n const currentLevelSettings = [...data.currentLevelSettings, ...lengthOfStayDefaultSetting];\r\n props.setData({ ...data, currentLevelSettings });\r\n };\r\n\r\n const params = {\r\n ...getLengthOfStayBasicConfig(i18n),\r\n handleAddLine,\r\n getFieldErrorMsg: lengthOfStayDatesError,\r\n validateParams: { targetId: 'length-of-stay-target-wrapper', patchErrMsg, targetName: 'lengthOfStay' },\r\n patchTargetsApiErrMsg,\r\n targetsApiErrMsg,\r\n };\r\n\r\n return (\r\n <div id=\"length-of-stay-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nLengthOfStayTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n targetsApiErrMsg: PropTypes.arrayOf(PropTypes.string),\r\n};\r\nLengthOfStayTargetSetting.defaultProps = {\r\n patchErrMsg() {},\r\n patchTargetsApiErrMsg() {},\r\n targetsApiErrMsg: [],\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { globalErrorMsg } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { validateBidAdjustment } from '../components/utility';\r\n\r\nexport function getDeviceBasicConfig(i18n, campaignBidStrategyType, showTargetedColumn = true) {\r\n const columns = _.compact([\r\n showTargetedColumn ? ({\r\n key: 'targeted', name: '', fieldName: 'targeted', minWidth: 100, maxWidth: 135, type: 'string', className: 'border-right green-dot', headerClassName: 'target-custom-header',\r\n }) : null,\r\n {\r\n key: 'device', name: i18n.getString(_TL_('Device')), fieldName: 'device', minWidth: 100, maxWidth: 135, type: 'string', className: 'border-right', headerClassName: 'target-custom-header',\r\n },\r\n ]);\r\n\r\n const isCommission = campaignBidStrategyType === 'Commission';\r\n return {\r\n basicConfig: {\r\n columns,\r\n showAddBtn: false,\r\n showSettingToggle: true,\r\n titleKey: i18n.getString(_TL_('Device')),\r\n topicKey: 'pop_BA_CampaignTargets_Device',\r\n minBid: -90,\r\n maxBid: 900,\r\n extraBid: isCommission ? [-100, 0] : [-100],\r\n onlyExtra: isCommission,\r\n },\r\n };\r\n}\r\n\r\nexport const deviceDefaultSetting = [\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Computer'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Tablet'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n },\r\n {\r\n targeted: _TL_('Targeted'),\r\n device: _TL_('Smartphone'),\r\n bidAdjustmentDropdown: 'Increase by',\r\n bidAdjustmentInput: 0,\r\n }];\r\n\r\nexport const isDeviceTargetValid = (device, patchErrMsg = function () { }, campaignBidStrategyType) => {\r\n let isValid = true;\r\n const isCommission = campaignBidStrategyType === 'Commission';\r\n device.filter(item => item.Status !== 'Deleted').forEach((item) => {\r\n let validateValue = item.bidAdjustmentInput;\r\n if (item.bidAdjustmentDropdown === 'Decrease by') {\r\n validateValue = -validateValue;\r\n }\r\n if (validateBidAdjustment({\r\n value: validateValue,\r\n min: -90,\r\n max: 900,\r\n extra: isCommission ? [-100, 0] : [-100],\r\n onlyExtra: isCommission,\r\n })) {\r\n isValid = false;\r\n }\r\n });\r\n if (isValid) {\r\n patchErrMsg('device', '');\r\n } else {\r\n patchErrMsg('device', globalErrorMsg);\r\n }\r\n\r\n return isValid;\r\n};\r\n\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { getDeviceBasicConfig } from './basic-config';\r\n\r\nexport const DeviceTargetSetting = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data, setData, patchErrMsg, patchTargetsApiErrMsg, apiErrors, bidStrategyType, showTargetedColumn,\r\n } = props;\r\n\r\n const params = {\r\n ...getDeviceBasicConfig(i18n, bidStrategyType, showTargetedColumn),\r\n validateParams: { targetId: 'device-target-wrapper', patchErrMsg, targetName: 'device' },\r\n patchTargetsApiErrMsg,\r\n apiErrors,\r\n };\r\n\r\n return (\r\n <div id=\"device-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, (prevProps, nextProps) => prevProps.data === nextProps.data && prevProps.bidStrategyType === nextProps.bidStrategyType);\r\n\r\nDeviceTargetSetting.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n patchErrMsg: PropTypes.func,\r\n patchTargetsApiErrMsg: PropTypes.func,\r\n apiErrors: PropTypes.arrayOf(PropTypes.string),\r\n bidStrategyType: PropTypes.string,\r\n showTargetedColumn: PropTypes.bool,\r\n};\r\n\r\nDeviceTargetSetting.defaultProps = {\r\n patchErrMsg() { },\r\n patchTargetsApiErrMsg() { },\r\n apiErrors: [],\r\n bidStrategyType: '',\r\n showTargetedColumn: true,\r\n};\r\n","import targetConstants from '@bingads-webui-campaign-legacy/base-targets/viewmodel/targetConstants';\r\nimport { locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport function getIncludedLocationBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'icon', name: '', fieldName: 'icon', minWidth: 32, maxWidth: 32, type: 'plainString', headerClassName: 'target-custom-header', raw: true, spanClassName: 'map-icon__pin--included', className: 'col-icon',\r\n },\r\n {\r\n key: 'location', name: i18n.getString(_TL_('Targeted locations')), fieldName: 'location', minWidth: 100, maxWidth: 333, type: 'plainString', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showSettingToggle: true,\r\n enablePagination: true,\r\n hideWhenEmpty: true,\r\n minBid: -targetConstants.minimumBid.Location,\r\n maxBid: targetConstants.maximumBid.Location,\r\n },\r\n };\r\n}\r\n\r\nexport function getExcludedLocationBasicConfig(i18n) {\r\n const columns = [\r\n {\r\n key: 'icon', name: '', fieldName: 'icon', minWidth: 32, maxWidth: 32, type: 'plainString', headerClassName: 'target-custom-header', spanClassName: 'map-icon__pin--excluded', className: 'col-icon',\r\n },\r\n {\r\n key: 'location', name: i18n.getString('Excluded locations'), fieldName: 'location', minWidth: 100, maxWidth: 333, type: 'plainString', headerClassName: 'target-custom-header',\r\n },\r\n ];\r\n return {\r\n basicConfig: {\r\n columns,\r\n showSettingToggle: true,\r\n noBidAdjustment: true,\r\n enablePagination: true,\r\n hideWhenEmpty: true,\r\n },\r\n };\r\n}\r\n\r\nexport const defaultLocationData = {\r\n parentLevelSettings: {},\r\n currentLevelSettings: {\r\n targetOption: locationTargetsOptionKeys.everywhere,\r\n initLocations: [],\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n },\r\n useParentLevel: false,\r\n bidMode: false,\r\n};\r\n","import React, { useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { GridTargetsBase } from '../grid-target-base';\r\nimport { getIncludedLocationBasicConfig, getExcludedLocationBasicConfig } from './basic-config';\r\nimport { areEqual } from '../components/utility';\r\n\r\nexport const IncludedLocationGrid = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const { data, setData } = props;\r\n\r\n const params = {\r\n ...getIncludedLocationBasicConfig(i18n),\r\n };\r\n\r\n return (\r\n <div className=\"included-location-target-wrapper\">\r\n <GridTargetsBase data={data} setData={setData} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nIncludedLocationGrid.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n};\r\n\r\n\r\nexport const ExcludedLocationGrid = React.memo((props) => {\r\n const i18n = useContext(I18nContext);\r\n const { data } = props;\r\n\r\n const params = {\r\n ...getExcludedLocationBasicConfig(i18n),\r\n };\r\n\r\n return (\r\n <div className=\"excluded-location-target-wrapper\">\r\n <GridTargetsBase data={data} {...params} />\r\n </div>\r\n );\r\n}, areEqual);\r\n\r\nExcludedLocationGrid.propTypes = {\r\n data: PropTypes.shape({}).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport { SEARCH_TYPE, LocationTarget } from '@bingads-webui-react/bing-maps';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport odata from '@bingads-webui-component-legacy/http/channel/odata';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { RadioGroup } from '@bingads-webui-react/radio';\r\nimport React, { useContext, useMemo, useCallback, useEffect, useRef, Fragment } from 'react';\r\nimport { PrimaryButton, DefaultButton, Stack, Link, Label, Checkbox, Toggle } from '@bingads-webui-react/fabric-control';\r\nimport * as languageBundle from '@bingads-webui-campaign-legacy/location-targets/util/languageBundle';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Disclaimer } from '@bingads-webui-campaign/hotel-common-upsert';\r\nimport { SpecificLocationTargetsEditor, ErrorString, withVerticalAlignCenterSpan, Errors, checkShouldShowErrors, locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport * as locationTargetConverter from '@bingads-webui-campaign-legacy/location-targets/util/locationTargetConverter';\r\nimport { glyphIconStyle, convertToLocalStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withPermissions } from '@bingads-webui-react/hoc-with-permissions';\r\nimport { IncludedLocationGrid, ExcludedLocationGrid } from './grid';\r\nimport { validateLocations, locationErrors, getLocationErrorMsg, shouldNotHideInclude } from '../components/utility';\r\n\r\nexport const physicalIntentOptions = {\r\n PeopleIn: 'PeopleIn',\r\n PeopleSearchingForOrViewingPages: 'PeopleSearchingForOrViewingPages',\r\n PeopleInOrSearchingForOrViewingPages: 'PeopleInOrSearchingForOrViewingPages',\r\n};\r\n\r\nexport function convertIntentOption(option) {\r\n if (option.peopleInLocation && option.peopleSearchingForLocation) {\r\n return physicalIntentOptions.PeopleInOrSearchingForOrViewingPages;\r\n } else if (option.peopleInLocation) {\r\n return physicalIntentOptions.PeopleIn;\r\n } else if (option.peopleSearchingForLocation) {\r\n return physicalIntentOptions.PeopleSearchingForOrViewingPages;\r\n }\r\n return physicalIntentOptions.PeopleInOrSearchingForOrViewingPages;\r\n}\r\n\r\nexport function getLocationIntent(option) {\r\n switch (option) {\r\n case physicalIntentOptions.PeopleIn:\r\n return {\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: false,\r\n };\r\n case physicalIntentOptions.PeopleSearchingForOrViewingPages:\r\n return {\r\n peopleInLocation: false,\r\n peopleSearchingForLocation: true,\r\n };\r\n case physicalIntentOptions.PeopleInOrSearchingForOrViewingPages:\r\n default:\r\n return {\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n };\r\n }\r\n}\r\n\r\nexport function patchForLocationTargetGrid(criterion) {\r\n const Criterion = criterion.CriterionType === 'Radius' ? criterion.Criterion.RadiusCriterion : criterion.Criterion.LocationCriterion;\r\n return {\r\n ...criterion,\r\n location: Criterion.NameTypeCombo,\r\n bidAdjustmentDropdown: criterion.Criterion.BidAdjustment >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: criterion.Criterion.BidAdjustment == null ? 0 : Math.abs(criterion.Criterion.BidAdjustment),\r\n };\r\n}\r\n\r\nconst RadisUnitMap = {\r\n mi: 'mi',\r\n km: 'km',\r\n Miles: 'mi',\r\n Kilometers: 'km',\r\n};\r\n\r\nexport function getLocationHashWithStatus(criterion) {\r\n const Criterion = criterion.CriterionType === 'Radius' ? criterion.Criterion.RadiusCriterion : criterion.Criterion.LocationCriterion;\r\n return JSON.stringify([\r\n Criterion.LocationId,\r\n Criterion.Type,\r\n Criterion.CountryCode,\r\n Criterion.Latitude,\r\n Criterion.Longitude,\r\n criterion.SelectionStatus,\r\n Criterion.Radius,\r\n RadisUnitMap[Criterion.RadiusUnit],\r\n ]);\r\n}\r\n\r\nexport function getLocationHash(criterion) {\r\n const Criterion = criterion.CriterionType === 'Radius' ? criterion.Criterion.RadiusCriterion : criterion.Criterion.LocationCriterion;\r\n return JSON.stringify({\r\n LocationId: Criterion.LocationId,\r\n Type: Criterion.Type,\r\n Name: Criterion.Name,\r\n CountryCode: Criterion.CountryCode,\r\n Latitude: Criterion.Latitude,\r\n Longitude: Criterion.Longitude,\r\n });\r\n}\r\n\r\nfunction fromBingMapTargetToLocationCriterion(data) {\r\n const isRadius = data.isRadiusLocationTarget;\r\n const isIncluded = data.targetingType === 'Included';\r\n const criterion = isRadius ? locationTargetConverter.buildLocationCriterionFromSearchResult(\r\n data.location,\r\n {\r\n mode: 'radius', radius: data.radiusSize, unit: data.radiusUnit, status: isIncluded ? 'Included' : 'Excluded',\r\n }\r\n ) : locationTargetConverter.buildLocationCriterionFromSearchResult(\r\n data.location,\r\n { mode: 'location', status: isIncluded ? 'Included' : 'Excluded' }\r\n );\r\n\r\n if (isIncluded) {\r\n criterion.SelectionStatus = 'Included';\r\n } else {\r\n criterion.SelectionStatus = 'Excluded';\r\n }\r\n criterion.Id = data.Id;\r\n\r\n return criterion;\r\n}\r\n\r\nfunction createIdAttributes(Ids) {\r\n if (Ids == null) return [];\r\n return Ids.map(Id => ({ Id }));\r\n}\r\n\r\nfunction fromLocationCriterionToBingMapTarget(data) {\r\n if (data) {\r\n // TO DO Need to check how to merge bulkupsert format to criterion odata format\r\n return _.chain(data)\r\n .filter(criterion => criterion.Criterion.Type !== 'LocationIntentOption')\r\n .map((criterion) => {\r\n const Criterion = criterion.CriterionType === 'Radius' ? criterion.Criterion.RadiusCriterion : criterion.Criterion.LocationCriterion;\r\n const isExcluded = criterion.SelectionStatus === 'Excluded';\r\n const ParentLocations = criterion.CriterionType === 'Radius' ? createIdAttributes(Criterion.LocationTargetEnclosingLocationIds) : createIdAttributes(Criterion.EnclosingLocationIds);\r\n const locationTarget =\r\n isExcluded ?\r\n LocationTarget.CreateExcludedLocationTarget({\r\n CountryCode: Criterion.CountryCode,\r\n ExpandedName: Criterion.Name,\r\n GeoPoint: Criterion.GeoPoint ? Criterion.GeoPoint : {\r\n Latitude: Criterion.Latitude,\r\n Longitude: Criterion.Longitude,\r\n },\r\n Id: Criterion.LocationId,\r\n ParentLocations,\r\n Type: Criterion.LocationTargetType || Criterion.LocationType || Criterion.Type,\r\n }, Criterion.Radius, RadisUnitMap[Criterion.RadiusUnit])\r\n : LocationTarget.CreateIncludedLocationTarget({\r\n CountryCode: Criterion.CountryCode,\r\n ExpandedName: Criterion.Name,\r\n GeoPoint: Criterion.GeoPoint ? Criterion.GeoPoint : {\r\n Latitude: Criterion.Latitude,\r\n Longitude: Criterion.Longitude,\r\n },\r\n Id: Criterion.LocationId,\r\n ParentLocations,\r\n Type: Criterion.LocationTargetType || Criterion.LocationType || Criterion.Type,\r\n }, Criterion.Radius, RadisUnitMap[Criterion.RadiusUnit]);\r\n locationTarget.Id = criterion.Id;\r\n return locationTarget;\r\n })\r\n .value();\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport const LocationTargetsIntent = (props) => {\r\n const {\r\n data,\r\n setData,\r\n isLocationTargetingImprovementEnabled,\r\n } = props;\r\n\r\n const {\r\n peopleInLocation,\r\n peopleSearchingForLocation,\r\n } = data;\r\n\r\n const i18n = useContext(I18nContext);\r\n const peopleInLocationString = i18n.getString(_TL_('People in your targeted locations'));\r\n const peopleSearchingForLocationString = i18n.getString(_TL_('People searching for or viewing pages about your targeted locations'));\r\n const peopleInOrInterestedInLocationString = i18n.getString(_TL_('People in, searching for, or viewing webpages about your targeted locations'));\r\n\r\n // For user who only select original option \"peopleSearchingForLocation\", we will convert it to \"peopleInOrInterestedInLocation\" option\r\n if (isLocationTargetingImprovementEnabled && !peopleInLocation && peopleSearchingForLocation) {\r\n setData({ peopleInLocation: true, peopleSearchingForLocation: true });\r\n }\r\n\r\n const intentOptionsKeysMap = useMemo(() => ({\r\n [physicalIntentOptions.PeopleIn]: (\r\n <>\r\n <span>{peopleInLocationString}</span>\r\n <HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Settings_PhysicalIntentOn\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: peopleInLocationString })}\r\n />\r\n </>\r\n ),\r\n [physicalIntentOptions.PeopleInOrSearchingForOrViewingPages]: (\r\n <>\r\n <span>{peopleInOrInterestedInLocationString}</span>\r\n <HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Settings_PhysicalIntentOnly\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: peopleInOrInterestedInLocationString })}\r\n />\r\n </>\r\n ),\r\n }), [i18n, peopleInLocationString, peopleInOrInterestedInLocationString]);\r\n\r\n const intentOptionsKeys = useMemo(() => (_.compact([\r\n physicalIntentOptions.PeopleIn,\r\n physicalIntentOptions.PeopleInOrSearchingForOrViewingPages,\r\n ])), []);\r\n\r\n const checkedRadio = peopleSearchingForLocation ?\r\n physicalIntentOptions.PeopleInOrSearchingForOrViewingPages :\r\n physicalIntentOptions.PeopleIn;\r\n\r\n const onIntentOptionChanged = useCallback((key) => {\r\n if (key === physicalIntentOptions.PeopleIn) {\r\n setData({\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: false,\r\n });\r\n } else {\r\n setData({\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n });\r\n }\r\n }, [setData]);\r\n\r\n return (\r\n <div className={classNames('intent-target')}>\r\n <div className={classNames('title')}>\r\n <Label>{i18n.getString(_TL_('Who should see your ads?'))}</Label>\r\n </div>\r\n <div className={classNames('intent-target-options')}>\r\n {isLocationTargetingImprovementEnabled ?\r\n <ul role=\"radiogroup\" aria-label={i18n.getString(_TL_('Who should see your ads?'))}>\r\n <RadioGroup\r\n items={intentOptionsKeys}\r\n renderItem={key => intentOptionsKeysMap[key]}\r\n onChange={onIntentOptionChanged}\r\n checked={checkedRadio}\r\n getItemId={_.identity}\r\n />\r\n </ul> :\r\n <Stack tokens={{ childrenGap: 8 }}>\r\n <Checkbox\r\n className=\"peopleIn\"\r\n label={peopleInLocationString}\r\n checked={peopleInLocation}\r\n onChange={(ev, isChecked) => {\r\n setData({ peopleInLocation: isChecked });\r\n }}\r\n onRenderLabel={withVerticalAlignCenterSpan(() => (<HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Settings_PhysicalIntentOn\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: peopleInLocationString })}\r\n />))}\r\n />\r\n <Checkbox\r\n className=\"peopleSearchingFor\"\r\n label={peopleSearchingForLocationString}\r\n checked={peopleSearchingForLocation}\r\n onChange={(ev, isChecked) => {\r\n setData({ peopleSearchingForLocation: isChecked });\r\n }}\r\n onRenderLabel={withVerticalAlignCenterSpan(() => (<HelpPopup\r\n topic=\"pop_BA_CampaignCreate_Settings_PhysicalIntentOnly\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: peopleSearchingForLocationString })}\r\n />))}\r\n />\r\n {!peopleInLocation && !peopleSearchingForLocation &&\r\n <div role=\"alert\" aria-live=\"polite\">\r\n <ErrorString error={i18n.getString(_TL_('At least one intent option must be selected'))} />\r\n </div>}\r\n </Stack>\r\n }\r\n </div>\r\n </div>);\r\n};\r\n\r\nLocationTargetsIntent.propTypes = {\r\n setData: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n isLocationTargetingImprovementEnabled: PropTypes.bool.isRequired,\r\n};\r\n\r\nLocationTargetsIntent.defaultProps = {\r\n data: {},\r\n};\r\n\r\nfunction getIncludedLocations(locations) {\r\n if (locations == null) return [];\r\n return locations.filter(location => location.SelectionStatus === 'Included');\r\n}\r\n\r\nfunction getExcludedLocations(locations) {\r\n if (locations == null) return [];\r\n return locations.filter(location => location.SelectionStatus === 'Excluded');\r\n}\r\n\r\nfunction fillAdditionalInfoToCriterion(location) {\r\n const isPositive = location.bidAdjustmentDropdown === 'Increase by';\r\n // eslint-disable-next-line no-param-reassign\r\n location.Criterion.BidAdjustment = isPositive ? location.bidAdjustmentInput : -location.bidAdjustmentInput;\r\n}\r\n\r\nexport function fillAdditionalInfoToBundleLocationCriterions(currentLocations, bundleLocationCriterions) {\r\n if (bundleLocationCriterions) {\r\n return _.chain(bundleLocationCriterions)\r\n .map((target) => {\r\n const criterion = { ...target };\r\n const hash = getLocationHash(criterion);\r\n const currentLocation = currentLocations.find(current => getLocationHash(current) === hash);\r\n if (currentLocation) {\r\n criterion.Criterion.BidAdjustment = currentLocation.Criterion.BidAdjustment;\r\n criterion.Criterion.OriginalBidAdjustment = currentLocation.Criterion.OriginalBidAdjustment;\r\n }\r\n return patchForLocationTargetGrid(criterion);\r\n })\r\n .value();\r\n }\r\n return [];\r\n}\r\n\r\nfunction fillAdditionalInfoToGrid(currentLocations, newLocations) {\r\n if (newLocations) {\r\n return _.chain(newLocations)\r\n .map((locationTarget) => {\r\n const isIncluded = locationTarget.targetingType === 'Included';\r\n const criterion = fromBingMapTargetToLocationCriterion(locationTarget);\r\n criterion.SelectionStatus = isIncluded ? 'Included' : 'Excluded';\r\n const hash = getLocationHash(criterion);\r\n const currentLocation = currentLocations.find(current => getLocationHash(current) === hash);\r\n if (currentLocation) {\r\n criterion.Criterion.BidAdjustment = currentLocation.Criterion.BidAdjustment;\r\n criterion.Criterion.OriginalBidAdjustment = currentLocation.Criterion.OriginalBidAdjustment;\r\n }\r\n return patchForLocationTargetGrid(criterion);\r\n })\r\n .value();\r\n }\r\n\r\n return [];\r\n}\r\n\r\nconst LocationTargetsEditor = (props) => {\r\n const i18n = useContext(I18nContext);\r\n const {\r\n data,\r\n setData,\r\n isAdGroupLevel,\r\n toggleBidModeAndSetData,\r\n languageBundleString,\r\n bundleLocationCriterions,\r\n bidStrategyType,\r\n allowBidAdjustment,\r\n allowNegativeLocationTargeting,\r\n showSearchTypeOptions,\r\n showBulkLocations,\r\n strings,\r\n isBrandAwarenessCampaignScenario,\r\n defaultSelectedSearchType,\r\n showIntent,\r\n isLocationTargetingImprovementEnabled,\r\n isDomesticSimplifiedChineseEnabled,\r\n dealInfo,\r\n } = props;\r\n\r\n const backUpData = useRef({});\r\n\r\n useEffect(() => {\r\n backUpData.current = _.deepClone(data);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const myData = useMemo(() => ({\r\n includedLocations: shouldNotHideInclude(bidStrategyType) ? fromLocationCriterionToBingMapTarget(getIncludedLocations(data.currentLocations)) : [],\r\n excludedLocations: fromLocationCriterionToBingMapTarget(getExcludedLocations(data.currentLocations)),\r\n targetOption: data.targetOption,\r\n peopleInLocation: data.peopleInLocation,\r\n peopleSearchingForLocation: data.peopleSearchingForLocation,\r\n }), [bidStrategyType, data.currentLocations, data.peopleInLocation, data.peopleSearchingForLocation, data.targetOption]);\r\n\r\n const mySetData = useCallback((partialUpdate) => {\r\n const newData = {\r\n ...myData,\r\n ...partialUpdate,\r\n };\r\n\r\n const {\r\n excludedLocations = [],\r\n peopleInLocation,\r\n peopleSearchingForLocation,\r\n } = newData;\r\n\r\n let {\r\n includedLocations = [],\r\n } = newData;\r\n\r\n const {\r\n currentLocations = [],\r\n } = data;\r\n\r\n if (!shouldNotHideInclude(bidStrategyType)) {\r\n includedLocations = fromLocationCriterionToBingMapTarget(getIncludedLocations(data.currentLocations));\r\n }\r\n\r\n const newLocations = fillAdditionalInfoToGrid(currentLocations, includedLocations).concat(fillAdditionalInfoToGrid(currentLocations, excludedLocations));\r\n\r\n setData({\r\n targetOption: newData.targetOption,\r\n currentLocations: newLocations,\r\n peopleInLocation,\r\n peopleSearchingForLocation,\r\n });\r\n }, [data, myData, setData, bidStrategyType]);\r\n\r\n const targetOptionsKeysMap = useMemo(() => {\r\n const keysMap = {\r\n [locationTargetsOptionKeys.everywhere]: i18n.getString(_TL_('All available countries/regions')),\r\n [locationTargetsOptionKeys.specific]: i18n.getString(_TL_('Let me choose specific locations')),\r\n };\r\n if (shouldNotHideInclude(bidStrategyType)) {\r\n keysMap[locationTargetsOptionKeys.bundleOrDefaultMarket] = languageBundleString;\r\n return keysMap;\r\n }\r\n return keysMap;\r\n }, [i18n, languageBundleString, bidStrategyType]);\r\n\r\n const targetOptionsKeys = useMemo(() => (_.compact([\r\n shouldNotHideInclude(bidStrategyType) && locationTargetsOptionKeys.bundleOrDefaultMarket,\r\n !isDomesticSimplifiedChineseEnabled && locationTargetsOptionKeys.everywhere,\r\n locationTargetsOptionKeys.specific,\r\n ])), [bidStrategyType, isDomesticSimplifiedChineseEnabled]);\r\n\r\n const done = () => {\r\n const valid = validateLocations({\r\n currentLevelSettings: data,\r\n }, bidStrategyType);\r\n\r\n if (valid && valid !== locationErrors.BidIsNotValid) {\r\n return;\r\n }\r\n const isBundle = data.targetOption === locationTargetsOptionKeys.bundleOrDefaultMarket;\r\n const isTargetEverywhere = data.currentLocations == null || data.currentLocations.length === 0;\r\n if (isTargetEverywhere && !isBundle) {\r\n toggleBidModeAndSetData({\r\n targetOption: locationTargetsOptionKeys.everywhere,\r\n currentLocations: data.currentLocations,\r\n });\r\n } else {\r\n toggleBidModeAndSetData({\r\n currentLocations: isBundle ? fillAdditionalInfoToBundleLocationCriterions(data.currentLocations, bundleLocationCriterions) : data.currentLocations,\r\n });\r\n }\r\n };\r\n\r\n const cancel = () => {\r\n toggleBidModeAndSetData({\r\n targetOption: backUpData.current.targetOption,\r\n currentLocations: backUpData.current.currentLocations,\r\n peopleInLocation: backUpData.current.peopleInLocation,\r\n peopleSearchingForLocation: backUpData.current.peopleSearchingForLocation,\r\n });\r\n };\r\n\r\n const onTargetOptionChanged = (key) => {\r\n if (key === locationTargetsOptionKeys.everywhere) {\r\n mySetData({\r\n targetOption: key,\r\n peopleInLocation: true,\r\n peopleSearchingForLocation: true,\r\n });\r\n } else {\r\n mySetData({ targetOption: key });\r\n }\r\n };\r\n\r\n const {\r\n targetOption,\r\n } = myData;\r\n\r\n const showSpecificLocationTargetEditor = targetOption === locationTargetsOptionKeys.specific || isAdGroupLevel;\r\n const error = getLocationErrorMsg({ code: validateLocations({ currentLevelSettings: data }, bidStrategyType, dealInfo), i18n, dealInfo });\r\n\r\n return (\r\n <div className=\"location-target-options\">\r\n {!shouldNotHideInclude(bidStrategyType) && <Disclaimer\r\n message={i18n.getString(_TL_('Only excluded locations are supported'))}\r\n />}\r\n <div className=\"header\"><Label>{i18n.getString(_TL_('Where do you want your ads to appear?'))}</Label></div>\r\n {\r\n (!isAdGroupLevel) && (\r\n <div className=\"choiceGroup\">\r\n <ul role=\"radiogroup\" aria-label={i18n.getString(_TL_('Where do you want your ads to appear?'))}>\r\n <RadioGroup\r\n items={targetOptionsKeys}\r\n renderItem={key => targetOptionsKeysMap[key]}\r\n onChange={onTargetOptionChanged}\r\n checked={targetOption || locationTargetsOptionKeys.everywhere}\r\n getItemId={_.identity}\r\n />\r\n </ul>\r\n </div>\r\n )\r\n }\r\n <ul>\r\n {showSpecificLocationTargetEditor && <SpecificLocationTargetsEditor\r\n allowNegativeLocationTargeting={allowNegativeLocationTargeting}\r\n showSearchTypeOptions={showSearchTypeOptions}\r\n showBulkLocations={showBulkLocations}\r\n strings={strings}\r\n defaultSelectedSearchType={defaultSelectedSearchType}\r\n isBrandAwarenessCampaignScenario={isBrandAwarenessCampaignScenario}\r\n data={myData}\r\n setData={mySetData}\r\n scope={props.scope}\r\n edmCampaign={edmCampaign}\r\n allowPositiveLocationTargeting={shouldNotHideInclude(bidStrategyType)}\r\n />}\r\n </ul>\r\n {error && <div className=\"error\"><ErrorString error={error} /></div>}\r\n <div>\r\n {showIntent && <LocationTargetsIntent data={myData} setData={mySetData} isLocationTargetingImprovementEnabled={isLocationTargetingImprovementEnabled} />}\r\n </div>\r\n {allowBidAdjustment &&\r\n <div className=\"footer\">\r\n <PrimaryButton text={i18n.getString(_TL_('Done'))} onClick={done} />\r\n <DefaultButton text={i18n.getString(_TL_('Cancel'))} onClick={cancel} />\r\n </div>}\r\n </div>\r\n );\r\n};\r\n\r\nLocationTargetsEditor.propTypes = {\r\n setData: PropTypes.func.isRequired,\r\n toggleBidModeAndSetData: PropTypes.func.isRequired,\r\n data: PropTypes.shape({}),\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n bundleLocationCriterions: PropTypes.shape([]).isRequired,\r\n languageBundleString: PropTypes.string,\r\n bidStrategyType: PropTypes.string.isRequired,\r\n isAdGroupLevel: PropTypes.bool,\r\n allowBidAdjustment: PropTypes.bool,\r\n allowNegativeLocationTargeting: PropTypes.bool,\r\n showSearchTypeOptions: PropTypes.bool,\r\n showBulkLocations: PropTypes.bool,\r\n strings: PropTypes.shape({}),\r\n isBrandAwarenessCampaignScenario: PropTypes.bool,\r\n defaultSelectedSearchType: PropTypes.oneOf(_.values(SEARCH_TYPE)),\r\n showIntent: PropTypes.bool.isRequired,\r\n isLocationTargetingImprovementEnabled: PropTypes.bool.isRequired,\r\n isDomesticSimplifiedChineseEnabled: PropTypes.bool.isRequired,\r\n dealInfo: PropTypes.shape({\r\n isForDeal: PropTypes.bool,\r\n dealCountryCode: PropTypes.string,\r\n dealSupportedLocationType: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n};\r\n\r\nLocationTargetsEditor.defaultProps = {\r\n data: {\r\n },\r\n languageBundleString: 'Canada, United States',\r\n isAdGroupLevel: false,\r\n allowBidAdjustment: true,\r\n allowNegativeLocationTargeting: true,\r\n showSearchTypeOptions: true,\r\n showBulkLocations: false,\r\n strings: {},\r\n isBrandAwarenessCampaignScenario: false,\r\n defaultSelectedSearchType: SEARCH_TYPE.Boundary,\r\n dealInfo: {},\r\n};\r\n\r\nconst LocationTargetsGridContainer = (props) => {\r\n const {\r\n data,\r\n setData,\r\n bidStrategyType,\r\n showIntent,\r\n } = props;\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const {\r\n currentLevelSettings = {},\r\n parentLevelSettings = {},\r\n useParentLevel,\r\n } = data;\r\n\r\n const myData = useMemo(() => ({\r\n peopleInLocation: currentLevelSettings.peopleInLocation,\r\n peopleSearchingForLocation: currentLevelSettings.peopleSearchingForLocation,\r\n }), [currentLevelSettings.peopleInLocation, currentLevelSettings.peopleSearchingForLocation]);\r\n\r\n const error = getLocationErrorMsg({ code: validateLocations(data, bidStrategyType), i18n });\r\n\r\n return (\r\n <div className=\"location-targets-grids\">\r\n <Stack>\r\n {shouldNotHideInclude(bidStrategyType) && (\r\n <IncludedLocationGrid\r\n data={{\r\n currentLevelSettings: getIncludedLocations(currentLevelSettings.currentLocations),\r\n parentLevelSettings: getIncludedLocations(parentLevelSettings.currentLocations),\r\n useParentLevel,\r\n }}\r\n setData={(newIncluded) => {\r\n newIncluded.currentLevelSettings.forEach(fillAdditionalInfoToCriterion);\r\n setData({\r\n currentLocations: newIncluded.currentLevelSettings.concat(getExcludedLocations(currentLevelSettings.currentLocations)),\r\n });\r\n }}\r\n />\r\n )}\r\n <ExcludedLocationGrid\r\n data={{\r\n currentLevelSettings: getExcludedLocations(currentLevelSettings.currentLocations),\r\n parentLevelSettings: getExcludedLocations(parentLevelSettings.currentLocations),\r\n useParentLevel,\r\n }}\r\n setData={newExcluded => setData({\r\n currentLocations: newExcluded.currentLevelSettings.concat(getIncludedLocations(currentLevelSettings.currentLocations)),\r\n })}\r\n />\r\n {showIntent && <LocationTargetsIntent data={myData} setData={setData} isLocationTargetingImprovementEnabled />}\r\n {error && <div className=\"error\"><ErrorString error={error} /></div>}\r\n </Stack>\r\n </div>\r\n );\r\n};\r\n\r\nLocationTargetsGridContainer.propTypes = {\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n currentLevelSettings: PropTypes.shape({}),\r\n }),\r\n setData: PropTypes.func.isRequired,\r\n bidStrategyType: PropTypes.string.isRequired,\r\n showIntent: PropTypes.bool.isRequired,\r\n};\r\n\r\nLocationTargetsGridContainer.defaultProps = {\r\n data: {\r\n currentLevelSettings: {\r\n targetOption: locationTargetsOptionKeys.everywhere,\r\n },\r\n useParentLevel: true,\r\n },\r\n};\r\n\r\n\r\nconst getStyles = (__, core) => ({\r\n LocationTargetSetting: {\r\n ...convertToLocalStyle(glyphIconStyle(core)),\r\n '& .col-icon': {\r\n fontSize: '16px',\r\n },\r\n '& .everywhere': {\r\n '& .content': {\r\n marginRight: '8px',\r\n },\r\n },\r\n '& .edit-location-targets-button': {\r\n textDecoration: 'underline',\r\n },\r\n '& .location-target-options': {\r\n '& .choiceGroup': {\r\n '& label': {\r\n fontWeight: '400',\r\n padding: 'unset',\r\n },\r\n '& .radio ~ .radio': {\r\n marginTop: '8px',\r\n },\r\n '& > ul': {\r\n paddingLeft: 0,\r\n },\r\n marginLeft: '20px',\r\n marginTop: '8px',\r\n },\r\n '& .footer': {\r\n marginTop: '16px',\r\n },\r\n '& .ms-Button--primary': {\r\n marginRight: '8px',\r\n },\r\n },\r\n '& .specific-location-targets-editor': {\r\n marginLeft: '26px',\r\n marginTop: '4px',\r\n marginBottom: '16px',\r\n },\r\n '& .error': {\r\n marginTop: '8px',\r\n },\r\n },\r\n});\r\n\r\nexport function getBundleCountries(language, market) {\r\n let bundleCountries = languageBundle.getBundle(language, market);\r\n\r\n if (!bundleCountries) {\r\n bundleCountries = [];\r\n let publisherCountry = languageBundle.getPublisherCountryByCode(market);\r\n\r\n if (_.isUndefined(publisherCountry)) {\r\n publisherCountry = {\r\n Country: 'US',\r\n LocationId: 190,\r\n };\r\n }\r\n\r\n bundleCountries.push(publisherCountry);\r\n }\r\n return bundleCountries;\r\n}\r\n\r\nconst globalI18n = window.globalLegacyI18n.get('@bingads-webui/i18n-amd-loader!campaignui/location-targets');\r\n\r\nexport function getLanguageBundleString(bundleCountries) {\r\n const bundleCountryNames = [];\r\n _.each(bundleCountries, (country) => {\r\n const countryName = globalI18n.getString(`PublisherCountry_${country.Country}`);\r\n\r\n bundleCountryNames.push(countryName);\r\n });\r\n return bundleCountryNames.join(', ');\r\n}\r\n\r\nexport function shouldSelectBundleOption(bundleCountries, locations) {\r\n // if there is no bundle found, return false\r\n if (!bundleCountries) {\r\n return false;\r\n }\r\n\r\n // if number of locations are not equal to number of bundle countries, return false\r\n if (bundleCountries.length !== locations.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < locations.length; i += 1) {\r\n const location = locations[i];\r\n\r\n // if there is any radius/excluded target defined, we're not in bundle mode\r\n if (location.Criterion.Type === 'Radius' ||\r\n location.SelectionStatus === 'Excluded') {\r\n return false;\r\n } else if (!_.find(bundleCountries, country => country.LocationId === location.Criterion.LocationCriterion.LocationId)) { // if the location is not in the bundle list, return false\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function getBundleCountriesLocations(bundleCountries, lcid, cid, aid) {\r\n const locationIds = _.pluck(bundleCountries, 'LocationId');\r\n if (_.size(locationIds) === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n const reqs = _.map(locationIds, id => ({\r\n type: 'GET',\r\n url: `${edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Locations.$withKey(id).path}?%24expand=ParentLocations`,\r\n headers: lcid ? {\r\n lcid,\r\n } : undefined,\r\n }));\r\n\r\n return odata.batch({ reqs, needContentType: true });\r\n}\r\n\r\nexport function getBundleCountriesAndBundleLocationCriterions(cid, aid, lcid, language, market) {\r\n const bundleCountries = getBundleCountries(language, market);\r\n return new Promise(resolve => getBundleCountriesLocations(bundleCountries, lcid, cid, aid).then((response) => {\r\n const bundleLocationCriterions = [];\r\n if (response.message) {\r\n throw new Error(response.message);\r\n }\r\n _.each(response, (location) => {\r\n bundleLocationCriterions.push(locationTargetConverter.buildLocationCriterionFromSearchResult(\r\n location.data,\r\n { mode: 'location', status: 'Included' }\r\n ));\r\n });\r\n console.log(response);\r\n resolve({ bundleCountries, bundleLocationCriterions });\r\n }).catch((error) => {\r\n console.log(error);\r\n resolve({ bundleCountries: [], bundleLocationCriterions: [] });\r\n }));\r\n}\r\n\r\nexport const isTargetEverywhere = (settings, isAdGroupLevel, bidStrategyType) => {\r\n const {\r\n targetOption,\r\n currentLocations = [],\r\n } = settings;\r\n\r\n if (!shouldNotHideInclude(bidStrategyType)) {\r\n const excludedLocations = getExcludedLocations(currentLocations);\r\n return excludedLocations.length === 0;\r\n }\r\n\r\n if (isAdGroupLevel) {\r\n return currentLocations.length === 0;\r\n }\r\n return targetOption === locationTargetsOptionKeys.everywhere;\r\n};\r\n\r\nfunction compareLocationTargetArrays(initLocations, currentLocations) {\r\n const changes = { Added: [], Deleted: [] };\r\n\r\n // convert arrays into dictionaries, with hashcode as key\r\n const initDict = _.object(_.map(initLocations, lt => [getLocationHashWithStatus(lt), lt]));\r\n const currentDict = _.object(_.map(currentLocations, lt => [getLocationHashWithStatus(lt), lt]));\r\n\r\n // calculate newly added location targets\r\n _.each(currentDict, (currentTarget, hashCode) => {\r\n if (!_.has(initDict, hashCode)) {\r\n if (_.isUndefined(currentTarget.Id)) {\r\n // no Id, this is a new location target\r\n changes.Added.push(currentTarget);\r\n } else {\r\n // changed from radius to location or location to radius or radius changed for the same location\r\n changes.Added.push(_.omit(currentTarget, 'Id'));\r\n }\r\n } else if (currentTarget.Criterion.BidAdjustment !== currentTarget.Criterion.OriginalBidAdjustment) {\r\n if (_.isUndefined(currentTarget.Id)) {\r\n const currentHash = getLocationHashWithStatus(currentTarget);\r\n const initTarget = initLocations.find(x => getLocationHashWithStatus(x) === currentHash);\r\n if (initTarget) {\r\n // eslint-disable-next-line no-param-reassign\r\n currentTarget.Id = initTarget.Id;\r\n }\r\n }\r\n changes.Added.push(currentTarget);\r\n }\r\n });\r\n\r\n // calculate deleted location targets\r\n _.each(initDict, (initTarget, hashCode) => {\r\n if (!_.has(currentDict, hashCode)) {\r\n changes.Deleted.push(initTarget);\r\n }\r\n });\r\n\r\n return changes;\r\n}\r\n\r\nexport function compareAndProcessLocations(initLocations, currentLocations) {\r\n let finalLocations = currentLocations;\r\n const changes = compareLocationTargetArrays(initLocations, finalLocations);\r\n\r\n finalLocations = _.map(changes.Deleted, locationTarget => ({\r\n ...locationTarget,\r\n Status: 'Deleted',\r\n })).concat(changes.Added);\r\n\r\n finalLocations = _.map(finalLocations, (finalLocation) => {\r\n let locationToSend = finalLocation;\r\n\r\n if (locationToSend.Criterion.Type === 'Radius') {\r\n locationToSend.CriterionType = locationToSend.Criterion.Type;\r\n if (locationToSend.Criterion.RadiusCriterion.IsOriginalNameEmpty) {\r\n locationToSend.Criterion.RadiusCriterion.Name = null;\r\n }\r\n } else {\r\n locationToSend.CriterionType = locationToSend.SelectionStatus === 'Included' ? 'Location' : 'NegativeLocation';\r\n }\r\n\r\n // For those not created in MT, it should be zero.\r\n if (locationToSend.Id < 0) {\r\n locationToSend = _.omit(locationToSend, 'Id');\r\n }\r\n locationToSend = _.omit(locationToSend, 'location', 'bidAdjustmentDropdown', 'bidAdjustmentInput', 'Campaign', 'LesLocationType');\r\n return locationToSend;\r\n });\r\n\r\n return finalLocations;\r\n}\r\n\r\nexport function parseLocationTargets(rawLocations, level, Id) {\r\n const locations = rawLocations\r\n .filter(criterion => criterion.Criterion.Type === 'Radius' || criterion.Criterion.Type === 'Location')\r\n .map(criterion => patchForLocationTargetGrid(locationTargetConverter.buildLocationCriterionFromBiddableCampaignCriterion(criterion, level, Id)));\r\n const intent = rawLocations.find(criterion => criterion.Criterion.Type === 'LocationIntentOption');\r\n const intentId = intent ? intent.Id : null;\r\n const intentOption = intent ? getLocationIntent(intent.Criterion.IntentOption) : null;\r\n\r\n return {\r\n locations,\r\n intentId,\r\n intentOption,\r\n };\r\n}\r\n\r\nconst InnerLocationTargetSettingWithoutError = (props) => {\r\n const {\r\n data,\r\n setData,\r\n bundleCountries,\r\n bundleLocationCriterions,\r\n isAdGroupLevel,\r\n bidStrategyType,\r\n allowBidAdjustment,\r\n allowNegativeLocationTargeting,\r\n showSearchTypeOptions,\r\n showBulkLocations,\r\n strings,\r\n isBrandAwarenessCampaignScenario,\r\n defaultSelectedSearchType,\r\n hideIntent,\r\n dealInfo,\r\n permissions = {},\r\n } = props;\r\n\r\n const {\r\n currentLevelSettings = {},\r\n parentLevelSettings = {},\r\n useParentLevel,\r\n bidMode,\r\n } = data;\r\n\r\n const isLocationTargetingImprovementEnabled = _.result(permissions.dynamic, 'LocationTargetingImprovement', false);\r\n const isDomesticSimplifiedChineseEnabled = _.result(permissions, 'IsDomesticSimplifiedChineseEnabled', false);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const mySetLocationTargets = useCallback((partialUpdate) => {\r\n setData({\r\n ...data,\r\n currentLevelSettings: {\r\n ...data.currentLevelSettings,\r\n ...partialUpdate,\r\n },\r\n });\r\n }, [data, setData]);\r\n\r\n const toggleBidModeAndSetLocationTargets = useCallback((partialUpdate) => {\r\n setData({\r\n ...data,\r\n currentLevelSettings: {\r\n ...data.currentLevelSettings,\r\n ...partialUpdate,\r\n },\r\n bidMode: !bidMode,\r\n });\r\n }, [data, setData, bidMode]);\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const toggleBidMode = useCallback(() => {\r\n setData({\r\n ...data,\r\n bidMode: !bidMode,\r\n });\r\n }, [setData, data, bidMode]);\r\n\r\n const turnOffBidAndToggleParentLevel = useCallback(() => {\r\n setData({\r\n ...data,\r\n useParentLevel: !useParentLevel,\r\n bidMode: false,\r\n });\r\n }, [setData, data, useParentLevel]);\r\n\r\n useEffect(() => {\r\n if (shouldNotHideInclude(bidStrategyType)) {\r\n // Check conflict and reset Data\r\n const includedLocations = getIncludedLocations(currentLevelSettings.currentLocations);\r\n const includedLocationsHash = includedLocations.map(getLocationHash);\r\n let excludedLocations = getExcludedLocations(currentLevelSettings.currentLocations);\r\n const excludedLocationsHash = excludedLocations.map(getLocationHash);\r\n if (!_.isEmpty(_.intersection(includedLocationsHash, excludedLocationsHash))) {\r\n excludedLocations = excludedLocations.filter(x => !includedLocationsHash.includes(getLocationHash(x)));\r\n mySetLocationTargets({\r\n ...currentLevelSettings,\r\n currentLocations: includedLocations.concat(excludedLocations),\r\n });\r\n }\r\n }\r\n }, [bidStrategyType, currentLevelSettings, mySetLocationTargets]);\r\n\r\n const languageBundleString = useMemo(() => getLanguageBundleString(bundleCountries), [bundleCountries]);\r\n\r\n const { targetOption } = currentLevelSettings;\r\n const showIntent = !hideIntent && shouldNotHideInclude(bidStrategyType) && (targetOption === locationTargetsOptionKeys.specific || targetOption === locationTargetsOptionKeys.bundleOrDefaultMarket || isAdGroupLevel);\r\n\r\n if (useParentLevel) {\r\n if (isAdGroupLevel) {\r\n // Show Campaign Data\r\n return (\r\n <div className={classNames('location-target-settings', 'location-target-settings--use-adgroup-level', classes.LocationTargetSetting)}>\r\n {isTargetEverywhere(parentLevelSettings, isAdGroupLevel) ? (\r\n <div className=\"everywhere\">\r\n <span className=\"content\">{i18n.getString(_TL_('Targeting everywhere'))}</span>\r\n </div>\r\n ) : (\r\n <div className=\"specific\">\r\n <Stack>\r\n <LocationTargetsGridContainer data={data} setData={mySetLocationTargets} />\r\n </Stack>\r\n </div>)}\r\n </div>\r\n );\r\n }\r\n return (\r\n <div className={classNames('location-target-settings', 'location-target-settings--use-campaign-level', classes.LocationTargetSetting)}>\r\n <div className=\"everywhere\">\r\n <span className=\"content\">{i18n.getString(_TL_('Targeting everywhere'))}</span>\r\n <Link className=\"edit-location-targets-button\" onClick={turnOffBidAndToggleParentLevel}>\r\n {i18n.getString(_TL_('Edit location targets'))}\r\n </Link>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // target editor mode\r\n if (!bidMode) {\r\n return (\r\n <div className={classNames('location-target-settings', 'location-target-settings--edit-mode', classes.LocationTargetSetting)}>\r\n <LocationTargetsEditor\r\n scope={props.scope}\r\n bundleLocationCriterions={bundleLocationCriterions}\r\n languageBundleString={languageBundleString}\r\n allowNegativeLocationTargeting={allowNegativeLocationTargeting}\r\n showSearchTypeOptions={showSearchTypeOptions}\r\n strings={strings}\r\n isBrandAwarenessCampaignScenario={isBrandAwarenessCampaignScenario}\r\n defaultSelectedSearchType={defaultSelectedSearchType}\r\n data={currentLevelSettings}\r\n setData={mySetLocationTargets}\r\n toggleBidModeAndSetData={toggleBidModeAndSetLocationTargets}\r\n isAdGroupLevel={isAdGroupLevel}\r\n bidStrategyType={bidStrategyType}\r\n allowBidAdjustment={allowBidAdjustment}\r\n showIntent={showIntent}\r\n isLocationTargetingImprovementEnabled={isLocationTargetingImprovementEnabled}\r\n isDomesticSimplifiedChineseEnabled={isDomesticSimplifiedChineseEnabled}\r\n showBulkLocations={showBulkLocations}\r\n dealInfo={dealInfo}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n // bidMode with grid\r\n return (\r\n <div className={classNames('location-target-settings', 'location-target-settings--edit-mode--with-bids', classes.LocationTargetSetting)}>\r\n {isTargetEverywhere(currentLevelSettings, isAdGroupLevel, bidStrategyType) ? (\r\n <div className=\"everywhere\">\r\n <span className=\"content\">{i18n.getString(_TL_('Targeting everywhere'))}</span>\r\n <Link className=\"edit-location-targets-button\" onClick={toggleBidMode}>\r\n {i18n.getString(_TL_('Edit location targets'))}\r\n </Link>\r\n </div>\r\n ) : (\r\n <div className=\"specific\">\r\n <Stack>\r\n <Link className=\"edit-location-targets-button\" onClick={toggleBidMode}>\r\n {i18n.getString(_TL_('Edit location targets'))}\r\n </Link>\r\n <LocationTargetsGridContainer\r\n data={data}\r\n setData={mySetLocationTargets}\r\n bidStrategyType={bidStrategyType}\r\n showIntent={isLocationTargetingImprovementEnabled && showIntent}\r\n />\r\n </Stack>\r\n </div>)}\r\n </div>\r\n );\r\n};\r\n\r\nInnerLocationTargetSettingWithoutError.propTypes = {\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number.isRequired,\r\n aid: PropTypes.number.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n data: PropTypes.shape({\r\n currentLevelSettings: PropTypes.shape({}),\r\n }),\r\n bundleCountries: PropTypes.shape([]).isRequired,\r\n bundleLocationCriterions: PropTypes.shape([]).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n isAdGroupLevel: PropTypes.bool,\r\n bidStrategyType: PropTypes.string.isRequired,\r\n allowBidAdjustment: PropTypes.bool,\r\n allowNegativeLocationTargeting: PropTypes.bool,\r\n showSearchTypeOptions: PropTypes.bool,\r\n showBulkLocations: PropTypes.bool,\r\n strings: PropTypes.shape({}),\r\n defaultSelectedSearchType: PropTypes.oneOf(_.values(SEARCH_TYPE)),\r\n isBrandAwarenessCampaignScenario: PropTypes.bool,\r\n hideIntent: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n LocationTargetingImprovement: PropTypes.bool,\r\n }),\r\n }).isRequired,\r\n dealInfo: PropTypes.shape({\r\n isForDeal: PropTypes.bool,\r\n dealCountryCode: PropTypes.string,\r\n dealSupportedLocationType: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n};\r\n\r\nInnerLocationTargetSettingWithoutError.defaultProps = {\r\n data: {\r\n currentLevelSettings: {\r\n targetOption: locationTargetsOptionKeys.everywhere,\r\n },\r\n useParentLevel: false,\r\n },\r\n isAdGroupLevel: false,\r\n allowBidAdjustment: true,\r\n allowNegativeLocationTargeting: true,\r\n showSearchTypeOptions: true,\r\n showBulkLocations: false,\r\n strings: {},\r\n defaultSelectedSearchType: SEARCH_TYPE.Boundary,\r\n isBrandAwarenessCampaignScenario: false,\r\n hideIntent: false,\r\n dealInfo: {},\r\n};\r\n\r\nconst LocationTargetSettingWithoutError = withPermissions(InnerLocationTargetSettingWithoutError);\r\n\r\nexport const LocationTargetSetting = (props) => {\r\n const {\r\n data,\r\n setData,\r\n showUserParentLevelToggle,\r\n keepInitValueWhenToggle,\r\n } = props;\r\n\r\n const {\r\n useParentLevel,\r\n currentLevelSettings,\r\n } = data || {};\r\n\r\n const {\r\n currentLocations, initLocations,\r\n } = currentLevelSettings || {};\r\n\r\n const i18n = useContext(I18nContext);\r\n\r\n const onToggle = useCallback((ev, checked) => {\r\n const noCheckedValue = keepInitValueWhenToggle ? initLocations : [];\r\n const updatedData = {\r\n ...data,\r\n useParentLevel: checked,\r\n currentLevelSettings: {\r\n ...currentLevelSettings,\r\n currentLocations: checked ? noCheckedValue : currentLocations,\r\n targetOption: checked ? locationTargetsOptionKeys.everywhere : locationTargetsOptionKeys.specific,\r\n },\r\n };\r\n\r\n setData({\r\n ...updatedData,\r\n errors: undefined,\r\n });\r\n }, [currentLevelSettings, currentLocations, data, initLocations, keepInitValueWhenToggle, setData]);\r\n\r\n return (\r\n <Fragment>\r\n <Stack tokens={{ childrenGap: 32 }}>\r\n {showUserParentLevelToggle &&\r\n <Toggle label={i18n.getString(_TL_('Use my campaign settings'))} defaultChecked={useParentLevel} onChange={onToggle} inlineLabel />\r\n }\r\n <LocationTargetSettingWithoutError\r\n {...props}\r\n setData={\r\n newData => setData({\r\n ...data,\r\n ...newData,\r\n errors: undefined,\r\n })\r\n }\r\n />\r\n {checkShouldShowErrors(data) && <Errors errors={data.errors} />}\r\n </Stack>\r\n </Fragment>\r\n );\r\n};\r\n\r\nLocationTargetSetting.propTypes = {\r\n data: PropTypes.shape({\r\n currentLevelSettings: PropTypes.shape({}),\r\n errors: PropTypes.arrayOf({}),\r\n }).isRequired,\r\n setData: PropTypes.func.isRequired,\r\n showUserParentLevelToggle: PropTypes.bool,\r\n keepInitValueWhenToggle: PropTypes.bool,\r\n};\r\n\r\nLocationTargetSetting.defaultProps = {\r\n showUserParentLevelToggle: false,\r\n keepInitValueWhenToggle: false,\r\n};\r\n","\r\nimport _ from 'underscore';\r\nimport { locationTargetsOptionKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport {\r\n fillAdditionalInfoToBundleLocationCriterions,\r\n convertIntentOption,\r\n compareAndProcessLocations,\r\n getLocationHash,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\n\r\nconst setParentForCampaign = (targets, campaign) => targets.map((criterion) => {\r\n if (campaign.Id) {\r\n return {\r\n ...criterion,\r\n Campaign: {\r\n Id: campaign.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n CampaignName: campaign.name.value,\r\n };\r\n});\r\n\r\nconst setParentForAdGroup = (targets, adGroup, campaign) => targets.map((criterion) => {\r\n if (adGroup.Id) {\r\n return {\r\n ...criterion,\r\n AdGroup: {\r\n Id: adGroup.Id,\r\n },\r\n };\r\n }\r\n return {\r\n ...criterion,\r\n CampaignName: campaign.Name,\r\n AdGroupName: adGroup.name.value,\r\n };\r\n});\r\n\r\nexport const convertLocationStateToLocationSchemaCampaign = (location, bundleLocationCriterions, campaign, adGroup) => {\r\n const {\r\n currentLocations,\r\n targetOption,\r\n } = location.currentLevelSettings;\r\n let {\r\n initLocations = [],\r\n } = location.currentLevelSettings;\r\n\r\n const isTargetEverywhere = targetOption === locationTargetsOptionKeys.everywhere || location.useParentLevel === true;\r\n let finalLocations = [];\r\n const intent = {\r\n Id: location.currentLevelSettings.intentId,\r\n CriterionType: 'LocationIntentCriterion',\r\n Criterion: {\r\n Type: 'LocationIntentCriterion',\r\n LocationIntentCriterion: {\r\n IntentOption: convertIntentOption(location.currentLevelSettings),\r\n },\r\n },\r\n };\r\n\r\n if (isTargetEverywhere) {\r\n finalLocations = [];\r\n } else if (targetOption === locationTargetsOptionKeys.bundleOrDefaultMarket) {\r\n if (location.bidMode === true) {\r\n finalLocations = currentLocations;\r\n } else {\r\n finalLocations = fillAdditionalInfoToBundleLocationCriterions(currentLocations, bundleLocationCriterions);\r\n }\r\n } else if (targetOption === locationTargetsOptionKeys.specific) {\r\n if (campaign.bidStrategy.option === 'Commission') {\r\n // filter out new added included locations\r\n finalLocations = currentLocations.filter(x => !(x.SelectionStatus === 'Included'));\r\n const includedInitLocations = initLocations.filter(x => x.SelectionStatus === 'Included' && x.Criterion.Type !== 'Radius');\r\n const excludedInitLocations = initLocations.filter(x => x.SelectionStatus === 'Excluded');\r\n const finalHashDict = _.object(_.map(finalLocations, lt => [getLocationHash(lt), lt]));\r\n const finalExcludedLocationIds = finalLocations.map(x => x.Criterion.LocationCriterion.LocationId);\r\n // delete the conflicted locations\r\n const conflictedLocations = includedInitLocations.filter((x) => {\r\n if (_.has(finalHashDict, getLocationHash(x))) {\r\n return true;\r\n }\r\n if (!_.isEmpty(_.intersection(x.Criterion.LocationCriterion.EnclosingLocationIds, finalExcludedLocationIds))) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n initLocations = conflictedLocations.concat(excludedInitLocations);\r\n } else {\r\n finalLocations = currentLocations;\r\n }\r\n }\r\n\r\n finalLocations = compareAndProcessLocations(initLocations, finalLocations);\r\n\r\n if (campaign.bidStrategy.option !== 'Commission') {\r\n finalLocations = finalLocations.concat([intent]);\r\n }\r\n\r\n finalLocations = adGroup ? setParentForAdGroup(finalLocations, adGroup, campaign) : setParentForCampaign(finalLocations, campaign);\r\n\r\n return finalLocations;\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { BackboneInstanceWrapper } from '@bingads-webui-react/backbone-instance-wrapper';\r\nimport { validateLocations } from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { checkShouldShowErrors, locationTargetsOptionKeys, LocalizationKeys } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport function useToggleExpander(init = false) {\r\n const [expanded, setExpanded] = useState(init);\r\n\r\n return [expanded, () => setExpanded(!expanded)];\r\n}\r\n\r\nexport function useBackboneView(viewFactory, onViewCreated, { managed = false, onViewRemoved, getCreatedView } = {}) {\r\n const [backboneView, setBackboneView] = useState(null);\r\n\r\n useEffect(() => {\r\n let view = getCreatedView != null ? getCreatedView() : undefined;\r\n if (view == null) {\r\n view = viewFactory();\r\n onViewCreated(view);\r\n }\r\n setBackboneView(view);\r\n return () => {\r\n if (onViewRemoved != null) {\r\n onViewRemoved();\r\n }\r\n };\r\n }, [onViewCreated, viewFactory, onViewRemoved, getCreatedView]);\r\n\r\n if (backboneView) {\r\n return (<BackboneInstanceWrapper instance={backboneView} managed={managed} />);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport const usePatch = (patchFunc, key) => useCallback((value) => {\r\n patchFunc(key, value);\r\n}, [patchFunc, key]);\r\n\r\nexport const globalErrorMsg = _TL_(\"*Something's wrong.\");\r\n\r\nexport const getLocationTargetErrorMessage = (location, bidStrategyType) => {\r\n if (checkShouldShowErrors(location)) {\r\n return globalErrorMsg;\r\n }\r\n if (validateLocations(location, bidStrategyType)) {\r\n return globalErrorMsg;\r\n }\r\n return null;\r\n};\r\n\r\nconst getLocationsString = (i18n, settings, isAdGroupLevel = false, bidStrategyType) => {\r\n if (settings == null) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n const {\r\n targetOption,\r\n currentLocations = [],\r\n } = settings;\r\n\r\n let isTargetEverywhere = targetOption === locationTargetsOptionKeys.everywhere;\r\n if (isAdGroupLevel) {\r\n isTargetEverywhere = currentLocations.length === 0;\r\n }\r\n\r\n if (isTargetEverywhere) {\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n let details = '';\r\n let includedLocations = currentLocations.filter(x => x.SelectionStatus === 'Included');\r\n const excludedLocations = currentLocations.filter(x => x.SelectionStatus === 'Excluded');\r\n if (bidStrategyType === 'Commission') {\r\n includedLocations = [];\r\n }\r\n if (includedLocations.length) {\r\n details += 'Included locations: ';\r\n includedLocations.forEach((target, index) => {\r\n details += target.location;\r\n details += `: ${i18n.getString(LocalizationKeys[target.bidAdjustmentDropdown])}`;\r\n details += `: ${target.bidAdjustmentInput}%`;\r\n if (index < includedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n if (excludedLocations.length) {\r\n if (includedLocations.length) {\r\n details += ', ';\r\n }\r\n details += 'Excluded locations: ';\r\n excludedLocations.forEach((target, index) => {\r\n details += target.location;\r\n if (index < excludedLocations.length - 1) {\r\n details += ', ';\r\n }\r\n });\r\n }\r\n return details;\r\n};\r\n\r\nexport const getLocationTargetTitleDetails = (i18n, location, isAdGroupLevel, bidStrategyType) => {\r\n const {\r\n parentLevelSettings,\r\n currentLevelSettings,\r\n useParentLevel,\r\n } = location;\r\n\r\n if (useParentLevel) {\r\n if (isAdGroupLevel) {\r\n return getLocationsString(i18n, parentLevelSettings);\r\n }\r\n return i18n.getString(_TL_('Targeting everywhere.'));\r\n }\r\n\r\n return getLocationsString(i18n, currentLevelSettings, isAdGroupLevel, bidStrategyType);\r\n};\r\n\r\nexport const getGridTargetTitleDetails = (i18n, params, symbol = ': ', formatDateValue) => {\r\n let details = '';\r\n if (params.useParentLevel) {\r\n const len = params.parentLevelSettings.length;\r\n params.parentLevelSettings.forEach((key, index) => {\r\n Object.keys(key).forEach((k, i) => {\r\n if (key[k] === '' || k === 'Status' || k === 'Id') {\r\n details += '';\r\n } else if (k === 'bidAdjustmentInput') {\r\n details += `: ${key[k]}%`;\r\n } else if (k === 'bidAdjustmentDropdown') {\r\n details += `: ${LocalizationKeys[key[k]] ? i18n.getString(LocalizationKeys[key[k]]) : key[k]}`;\r\n } else if (key[k] instanceof Date) {\r\n details += `${i === 0 ? '' : symbol}${formatDateValue(key[k])}`;\r\n } else if (k === 'day' || k === 'dates' || k === 'targeted' || k === 'device') {\r\n details += `${i === 0 ? '' : symbol}${LocalizationKeys[key[k]] ? i18n.getString(LocalizationKeys[key[k]]) : key[k]}`;\r\n } else {\r\n details += `${i === 0 ? '' : symbol}${key[k]}`;\r\n }\r\n });\r\n if (details && index < len - 1) {\r\n details += ', ';\r\n }\r\n });\r\n } else {\r\n const len = params.currentLevelSettings.length;\r\n details = '';\r\n params.currentLevelSettings.forEach((key, index) => {\r\n // eslint-disable-next-line no-plusplus\r\n for (let i = 0; i < Object.keys(key).length; i++) {\r\n const k = Object.keys(key)[i];\r\n if (key[k] === '' || k === 'Status' || k === 'Id') {\r\n details += '';\r\n } else if (k === 'bidAdjustmentInput') {\r\n details += `: ${key[k]}%`;\r\n } else if (k === 'bidAdjustmentDropdown') {\r\n details += `: ${LocalizationKeys[key[k]] ? i18n.getString(LocalizationKeys[key[k]]) : key[k]}`;\r\n } else if (key[k] instanceof Date) {\r\n details += `${i === 0 ? '' : symbol}${formatDateValue(key[k])}`;\r\n } else if (k === 'day' || k === 'dates' || k === 'targeted' || k === 'device') {\r\n details += `${i === 0 ? '' : symbol}${LocalizationKeys[key[k]] ? i18n.getString(LocalizationKeys[key[k]]) : key[k]}`;\r\n } else {\r\n details += `${i === 0 ? '' : symbol}${key[k]}`;\r\n }\r\n }\r\n if (details && index < len - 1) {\r\n details += ', ';\r\n }\r\n });\r\n details = details || `${i18n.getString(_TL_('(no selection)'))}`;\r\n }\r\n return details;\r\n};\r\n\r\nexport const getUrlOptionsDetails = (i18n, urlOptions) => {\r\n let details = '';\r\n if (urlOptions.TrackingUrlTemplate) {\r\n details += `${LocalizationKeys.TrackingUrlTemplate ? i18n.getString(LocalizationKeys.TrackingUrlTemplate) : 'TrackingUrlTemplate'}: ${urlOptions.TrackingUrlTemplate}, `;\r\n }\r\n if (urlOptions.FinalUrlSuffix) {\r\n details += `${LocalizationKeys.FinalUrlSuffix ? i18n.getString(LocalizationKeys.FinalUrlSuffix) : 'FinalUrlSuffix'}: ${urlOptions.FinalUrlSuffix}, `;\r\n }\r\n if (urlOptions.UrlCustomParameters && urlOptions.UrlCustomParameters.length > 0) {\r\n details += `${LocalizationKeys.UrlCustomParameters ? i18n.getString(LocalizationKeys.UrlCustomParameters) : 'UrlCustomParameters'}: ${JSON.stringify(urlOptions.UrlCustomParameters)}, `;\r\n }\r\n const reg = /,$/gi;\r\n details = details.trim().replace(reg, '');\r\n return details;\r\n};\r\n\r\nexport const getExclusionsDetails = (i18n, exclusions) => {\r\n let details = '';\r\n let exclusionsValue = exclusions;\r\n if (exclusionsValue.Exclusions) {\r\n exclusionsValue = exclusions.Exclusions;\r\n }\r\n\r\n if (exclusionsValue.ExcludedSites) {\r\n details += `${i18n.getString(LocalizationKeys.ExcludedSites)}: ${exclusionsValue.ExcludedSites}, `;\r\n }\r\n if (exclusionsValue.ExcludedIPs) {\r\n details += `${i18n.getString(LocalizationKeys.ExcludedIPs)}: ${exclusionsValue.ExcludedIPs}, `;\r\n }\r\n const reg = /,$/gi;\r\n details = details.trim().replace(reg, '');\r\n return details;\r\n};\r\n\r\nexport const Disclaimer = ({ message }) => (\r\n <div className={classNames('alert', 'alert-info')} role=\"alert\">\r\n <div className=\"alert-image\" />\r\n <div className=\"alert-info-inline\">\r\n <span>{message}</span>\r\n </div>\r\n </div>);\r\n\r\nDisclaimer.propTypes = {\r\n message: PropTypes.string.isRequired,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport classnames from 'classnames';\r\nimport AdScheduleView from '@bingads-webui-campaign-legacy/ad-schedule/view/index';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { advancedSettingsSectionStyle, toggleButtonStyle, datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport {\r\n creationCommonStyle\r\n} from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { useBackboneView } from '../shared';\r\n\r\nconst getStyles = (__, core) =>\r\n ({\r\n '@global': {\r\n ...datePickerStyle(core),\r\n },\r\n adScheduleContainer: {\r\n '& .advanced-scheduling-grid': {\r\n width: '918px',\r\n },\r\n ...creationCommonStyle(core),\r\n ...advancedSettingsSectionStyle(core),\r\n '& .radio-inline': {\r\n display: 'block',\r\n },\r\n '& .adschedule-targets-container': {\r\n borderTop: 'unset',\r\n paddingTop: '0px',\r\n },\r\n '& .toggle-campaign-settings-switch.form-control-static[data-bind]': {\r\n display: 'inline-block',\r\n textDecoration: 'none',\r\n paddingRight: '8px',\r\n float: 'left',\r\n },\r\n ...toggleButtonStyle(core),\r\n '& .date-settings-intro': {\r\n paddingLeft: 0,\r\n },\r\n '& .date-settings': {\r\n '& .col-sm-12': {\r\n paddingLeft: 0,\r\n },\r\n '& table': {\r\n width: '500px',\r\n '& td': {\r\n width: '100%',\r\n display: 'block',\r\n },\r\n },\r\n },\r\n '& .alert-danger': {\r\n backgroundColor: 'unset',\r\n color: '#A80000',\r\n },\r\n },\r\n });\r\n\r\n// reference: private/campaign-legacy/packages/campaign-targeting/view/campaign-targeting.js\r\nexport const AdSchedule = React.memo((props) => {\r\n const {\r\n setAdScheduleView,\r\n getAdScheduleView,\r\n options,\r\n getCreatedView,\r\n managed,\r\n } = props;\r\n const adScheduleReactWrapper = useBackboneView(useCallback(() => new AdScheduleView({\r\n ...options,\r\n }).render(), [options]), setAdScheduleView, { managed, getCreatedView });\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n return (\r\n <div\r\n className={classnames(classes.adScheduleContainer)}\r\n onFocus={() => {\r\n const view = getAdScheduleView();\r\n if (view && view.koModel && !_.isEmpty((view.koModel.errors()))) {\r\n // defer to trigger click event.\r\n _.delay(view.clearApiErrors.bind(view), 200);\r\n }\r\n }}\r\n >\r\n <div className=\"adschedule-targets-container\">\r\n {adScheduleReactWrapper}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nAdSchedule.propTypes = {\r\n setAdScheduleView: PropTypes.func.isRequired,\r\n getAdScheduleView: PropTypes.func.isRequired,\r\n getCreatedView: PropTypes.func,\r\n options: PropTypes.shape({}),\r\n managed: PropTypes.bool,\r\n};\r\n\r\nAdSchedule.defaultProps = {\r\n options: {\r\n level: 'campaign',\r\n model: {\r\n },\r\n },\r\n managed: false,\r\n getCreatedView: null,\r\n};\r\n","export const HotelErrorToErrorMessageMapping = {\r\n CampaignServiceInvalidDeviceTargetBidAdjustment: _TL_('The bid adjustment is not valid.'),\r\n CampaignServiceIncompleteDeviceCriterionSet: _TL_('The entity must either be explicitly associated with all device criterion types (Computer, Tablet, Smartphone) or should not have any device criterion.'),\r\n InvalidCheckInDateTarget: _TL_('The check-in date target is not valid.'),\r\n};\r\n","/* eslint-disable no-plusplus */\r\nimport _, { chain } from 'underscore';\r\nimport $ from 'jquery';\r\nimport decimal from '@bingads-webui-component-legacy/humanize/decimal';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { notificationApi } from '@bingads-webui-campaign/notification-center';\r\nimport * as i18nErrors from '@bingads-webui-component-legacy/api-errors-campaign/index';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport timeZoneMapper from '@bingads-webui-component-legacy/timezonemapper/index';\r\nimport * as scrollUtils from '@bingads-webui-component-legacy/extension/scrollTo';\r\n\r\nimport {\r\n deviceDefaultSetting,\r\n advancedBookingDefaultSetting,\r\n checkinDayDefaultSetting,\r\n userSetDatesDefaultSetting,\r\n checkinDateDefaultSetting,\r\n lengthOfStayDefaultSetting,\r\n} from '@bingads-webui-campaign/hotel-common-targets';\r\nimport { HotelErrorToErrorMessageMapping } from './components/override-error';\r\nimport { audienceAdsOptionKeys } from './components/audience-ads/utility';\r\n\r\n\r\nexport function collectCriterions(feature, unSupportedFeatures, criterions) {\r\n if (unSupportedFeatures.includes(feature)) {\r\n return [];\r\n }\r\n return criterions;\r\n}\r\n\r\nexport const countNumberOfDigits = (num) => {\r\n const number = num.toString().split('.')[1];\r\n return _.isUndefined(number) ? 0 : number.length;\r\n};\r\n\r\nexport const getAccountCurrencyCode = serverContext => (serverContext && serverContext.CurrentAccount && serverContext.CurrentAccount.CurrencyCode) || 'USD';\r\n\r\nexport const numberErrorCode = {\r\n RequiredField: 'RequiredField',\r\n InValidNumber: 'InValidNumber',\r\n OutOfRange: 'OutOfRange',\r\n OutOfRangeNotIncludeMin: 'OutOfRangeNotIncludeMin',\r\n NotPositive: 'NotPositive',\r\n MaxLength: 'MaxLength',\r\n WholeNumber: 'WholeNumber',\r\n};\r\n\r\nexport const getNumberErrorMsg = ({\r\n code, i18n, min, max,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n return i18n.getString(_TL_('Required field'));\r\n case numberErrorCode.InValidNumber:\r\n return i18n.getString(_TL_('Field requires numeric value'));\r\n case numberErrorCode.WholeNumber:\r\n return i18n.getString(_TL_('Number should be a whole number'));\r\n case numberErrorCode.OutOfRange:\r\n return i18n.getString(_TL_('Number should be between {{min}} and {{max}}'), { min: min && decimal.fromFloatToStringNoTrailingZero(min), max: max && decimal.fromFloatToStringNoTrailingZero(max) });\r\n case numberErrorCode.OutOfRangeNotIncludeMin:\r\n return i18n.getString(_TL_('Number should be larger than {{min}} and no more than {{max}}'), { min: min && decimal.fromFloatToStringNoTrailingZero(min), max: max && decimal.fromFloatToStringNoTrailingZero(max) });\r\n case numberErrorCode.MaxLength:\r\n return i18n.getString(_TL_('Number should not exceed max length'));\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nexport const validateNumber = ({\r\n value,\r\n min,\r\n max,\r\n notRequired,\r\n shouldBePositive,\r\n isInteger,\r\n digitLength,\r\n notIncludeMin,\r\n}) => {\r\n const isValidNumber = typeof value === 'number' ? true : decimal.isValid(value);\r\n\r\n if (value === '' || value == null) {\r\n if (notRequired) {\r\n return null;\r\n }\r\n return numberErrorCode.RequiredField;\r\n } else if (!isValidNumber) {\r\n return numberErrorCode.InValidNumber;\r\n }\r\n\r\n if (isInteger && (Number(value) !== parseInt(value, 10))) {\r\n return numberErrorCode.WholeNumber;\r\n }\r\n\r\n if (digitLength && countNumberOfDigits(value) > digitLength) {\r\n return numberErrorCode.MaxLength;\r\n }\r\n\r\n const number = decimal.fromLocalToFloat(value);\r\n if (shouldBePositive) {\r\n if (number < 0) {\r\n return numberErrorCode.NotPositive;\r\n }\r\n }\r\n\r\n if (notIncludeMin) {\r\n if (number <= min || number > max) {\r\n return numberErrorCode.OutOfRangeNotIncludeMin;\r\n }\r\n }\r\n\r\n if (number < min || number > max) {\r\n return numberErrorCode.OutOfRange;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const bidStrategyOptionKeys = {\r\n ManualCpc: 'ManualCpc',\r\n PercentCpc: 'PercentCpc',\r\n Commission: 'Commission',\r\n};\r\n\r\nconst bidConst = {\r\n min: 0.05,\r\n max: 1000,\r\n};\r\nexport const getBidErrorMsg = ({\r\n code, i18n, min = bidConst.min, max = bidConst.max, isPercent,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n if (isPercent) {\r\n return i18n.getString(_TL_('Enter a percent'));\r\n }\r\n return i18n.getString(_TL_('Enter a bid'));\r\n default:\r\n return getNumberErrorMsg({\r\n code, i18n, min, max,\r\n });\r\n }\r\n};\r\n\r\nexport function convertODataObjectToCampaignState(ODataObject) {\r\n const data = {\r\n Id: ODataObject.Id,\r\n name: {\r\n value: ODataObject.Name,\r\n },\r\n audienceAds: {\r\n currentLevelSettings: {\r\n option: ODataObject.NativeBidAdjustment == null || ODataObject.NativeBidAdjustment >= 0 ? audienceAdsOptionKeys.Increase : audienceAdsOptionKeys.Decrease,\r\n value: ODataObject.NativeBidAdjustment == null ? 0 : Math.abs(ODataObject.NativeBidAdjustment),\r\n },\r\n parentLevelSettings: {\r\n },\r\n useParentLevel: false,\r\n },\r\n budget: {\r\n option: 'Individual',\r\n individualOption: 'true',\r\n amount: ODataObject.Budget && ODataObject.Budget.Amount ? decimal.fromFloatToStringNoTrailingZero(ODataObject.Budget.Amount) : 0,\r\n },\r\n bidStrategy: {\r\n option: ODataObject.BiddingScheme ? ODataObject.BiddingScheme.Type : 'ManualCpc',\r\n PercentCpc: ODataObject.BiddingScheme && ODataObject.BiddingScheme.MaxPercentCpc && decimal.fromFloatToStringNoTrailingZero(ODataObject.BiddingScheme.MaxPercentCpc),\r\n Commission: ODataObject.BiddingScheme && ODataObject.BiddingScheme.CommissionRate && decimal.fromFloatToStringNoTrailingZero(ODataObject.BiddingScheme.CommissionRate),\r\n },\r\n urlOptions: {\r\n TrackingUrlTemplate: ODataObject.TrackingUrlTemplate,\r\n FinalUrlSuffix: ODataObject.FinalUrlSuffix,\r\n UrlCustomParameters: ODataObject.UrlCustomParameters,\r\n },\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n AdScheduleUseSearcherTimeZone: ODataObject.AdScheduleUseSearcherTimeZone,\r\n };\r\n return data;\r\n}\r\n\r\nfunction commonConverODataObjectToTargetsState({\r\n ODataObject, criterionType, keyCb, key, defaultSetting,\r\n}) {\r\n const commonTargetCriterion = {};\r\n chain(ODataObject)\r\n .filter(item => item && item.Criterion &&\r\n item.Criterion['@odata.type'] === criterionType && item.CriterionBid)\r\n .value()\r\n .forEach((item) => {\r\n commonTargetCriterion[keyCb(item)] = {\r\n Id: item.Id,\r\n bidAdjustmentDropdown: `${item.CriterionBid.Multiplier < 0 ? 'Decrease by' : 'Increase by'}`,\r\n bidAdjustmentInput: item.CriterionBid.Multiplier < 0 ? -(item.CriterionBid.Multiplier - 0) : item.CriterionBid.Multiplier,\r\n };\r\n });\r\n\r\n // by default settings sort\r\n const commonSettings = chain(defaultSetting)\r\n .map(item => ({\r\n ...item,\r\n Id: commonTargetCriterion[item[key]] && commonTargetCriterion[item[key]].Id,\r\n bidAdjustmentDropdown: commonTargetCriterion[item[key]] ? commonTargetCriterion[item[key]].bidAdjustmentDropdown : 'Increase by',\r\n bidAdjustmentInput: commonTargetCriterion[item[key]] ? commonTargetCriterion[item[key]].bidAdjustmentInput : 0,\r\n })).value();\r\n return commonSettings;\r\n}\r\n\r\nfunction commonConverODataObjectToRangeTargetsState({\r\n ODataObject, criterionType, key1, key2, MTKey1, MTKey2,\r\n}) {\r\n const commonTargetCriterion = [];\r\n chain(ODataObject)\r\n .filter(item => item && item.Criterion &&\r\n item.Criterion['@odata.type'] === criterionType && item.CriterionBid)\r\n .value()\r\n .forEach((item) => {\r\n commonTargetCriterion.push({\r\n [key1]: item.Criterion[MTKey1],\r\n [key2]: item.Criterion[MTKey2],\r\n bidAdjustmentDropdown: `${item.CriterionBid.Multiplier < 0 ? 'Decrease by' : 'Increase by'}`,\r\n bidAdjustmentInput: item.CriterionBid.Multiplier < 0 ? -(item.CriterionBid.Multiplier - 0) : item.CriterionBid.Multiplier,\r\n Id: item.Id,\r\n Status: item.Status,\r\n });\r\n });\r\n return commonTargetCriterion;\r\n}\r\n\r\nexport function converODataObjectToDeviceState(ODataObject) {\r\n const DeviceMap = {\r\n Tablets: _TL_('Tablet'),\r\n Computers: _TL_('Computer'),\r\n Smartphones: _TL_('Smartphone'),\r\n };\r\n return commonConverODataObjectToTargetsState({\r\n ODataObject, criterionType: '#Model.DeviceCriterion', keyCb(item) { return DeviceMap[item.Criterion.DeviceName]; }, key: 'device', defaultSetting: deviceDefaultSetting,\r\n });\r\n}\r\n\r\nexport function converODataObjectToABWState(ODataObject) {\r\n return commonConverODataObjectToRangeTargetsState({\r\n ODataObject, criterionType: '#Model.AdvanceBookingWindowCriterion', key1: 'minimumDays', key2: 'maximumDays', MTKey1: 'MinDays', MTKey2: 'MaxDays',\r\n });\r\n}\r\n\r\nexport function converODataObjectToLengthOfStayState(ODataObject) {\r\n return commonConverODataObjectToRangeTargetsState({\r\n ODataObject, criterionType: '#Model.LengthOfStayCriterion', key1: 'minimumNumber', key2: 'maximumNumber', MTKey1: 'MinNights', MTKey2: 'MaxNights',\r\n });\r\n}\r\n\r\nexport function converODataObjectToCheckinDayState(ODataObject) {\r\n return commonConverODataObjectToTargetsState({\r\n ODataObject, criterionType: '#Model.CheckInDayCriterion', keyCb(item) { return item.Criterion.CheckInDay; }, key: 'day', defaultSetting: checkinDayDefaultSetting,\r\n });\r\n}\r\n\r\nexport function converODataObjectToCheckinDateState(ODataObject) {\r\n const criterionType = '#Model.CheckInDateCriterion';\r\n const key1 = 'startDate';\r\n const key2 = 'endDate';\r\n const MTKey1 = 'StartDate';\r\n const MTKey2 = 'EndDate';\r\n\r\n const commonTargetCriterion = [];\r\n chain(ODataObject)\r\n .filter(item => item && item.Criterion &&\r\n item.Criterion['@odata.type'] === criterionType && item.CriterionBid)\r\n .value()\r\n .forEach((item) => {\r\n commonTargetCriterion.push({\r\n [key1]: new Date(item.Criterion[MTKey1]),\r\n [key2]: new Date(item.Criterion[MTKey2]),\r\n bidAdjustmentDropdown: `${item.CriterionBid.Multiplier < 0 ? 'Decrease by' : 'Increase by'}`,\r\n bidAdjustmentInput: item.CriterionBid.Multiplier < 0 ? -(item.CriterionBid.Multiplier - 0) : item.CriterionBid.Multiplier,\r\n Id: item.Id,\r\n Status: item.Status,\r\n });\r\n });\r\n return commonTargetCriterion;\r\n}\r\n\r\nexport function converODataObjectToUserSetDatesState(ODataObject) {\r\n const UserSetDatesMap = {\r\n UserSelection: 'Selected date',\r\n DefaultSelection: 'Default date',\r\n };\r\n return commonConverODataObjectToTargetsState({\r\n ODataObject, criterionType: '#Model.DateSelectionTypeCriterion', keyCb(item) { return UserSetDatesMap[item.Criterion.HotelDateSelectionType]; }, key: 'dates', defaultSetting: userSetDatesDefaultSetting,\r\n });\r\n}\r\n\r\nexport function send(activity, message, others = {}) {\r\n activity.signal(stringifySync({ messageType: message, ...others }));\r\n}\r\n\r\nexport function sendErrors(activity, message, response) {\r\n try {\r\n const { errors } = response;\r\n const errorCodes = _.chain(errors).map(error => error.Error || error.Code).uniq().value();\r\n errorCodes.forEach((error) => {\r\n send(activity, message, { error });\r\n });\r\n // eslint-disable-next-line no-empty\r\n } catch (err) {\r\n }\r\n}\r\n\r\nexport function createDefaultHotelGroup(cid, aid, campaignId, adGroupId, type, bid) {\r\n let defaultHotelGroup = {\r\n Id: -1,\r\n ParentId: null,\r\n RateBidAmount: null,\r\n IsLeaf: true,\r\n IsExcluded: false,\r\n IsBidLandscapeEnable: false,\r\n Condition: {\r\n Operand: 'All',\r\n Attribute: null,\r\n },\r\n CampaignId: parseInt(campaignId, 10),\r\n AdGroupId: parseInt(adGroupId, 10),\r\n };\r\n\r\n if (type === 'FixedBid') {\r\n defaultHotelGroup = {\r\n ...defaultHotelGroup,\r\n BidAmount: {\r\n Bid: {\r\n Amount: bid && decimal.fromLocalToFloat(bid),\r\n },\r\n },\r\n };\r\n } else {\r\n defaultHotelGroup = {\r\n ...defaultHotelGroup,\r\n RateBidAmount: {\r\n RateAmount: {\r\n Amount: bid && decimal.fromLocalToFloat(bid),\r\n },\r\n },\r\n };\r\n }\r\n\r\n const defaultHotelGroupPayload = {\r\n HotelListingGroupsToAdd: [\r\n defaultHotelGroup,\r\n ],\r\n HotelListingGroupsToDelete: [],\r\n };\r\n\r\n return edmCampaign.Customers.$withKey(cid).Accounts\r\n .$withKey(aid).Campaigns.$withKey(campaignId).AdGroups.$withKey(adGroupId).HotelListingGroups['Default.UpdateHotelListingTree']\r\n .$makeCall({ functionParams: {}, payload: defaultHotelGroupPayload }).toPromise();\r\n}\r\n\r\nexport function getCampaignData(cid, aid, campaignId) {\r\n return new Promise(resolve =>\r\n edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Campaigns.$withKey(campaignId).get({\r\n select: ['Budget'],\r\n }).toPromise()\r\n .then((response) => {\r\n resolve(convertODataObjectToCampaignState(response));\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n resolve({});\r\n }));\r\n}\r\n\r\nexport function parseDayTimeRanges(targets, resetId = false) {\r\n const schedulingRows = [];\r\n\r\n targets.forEach((target) => {\r\n const criterion = target.Criterion;\r\n const multiplier = target.CriterionBid.Multiplier;\r\n\r\n schedulingRows.push({\r\n Id: resetId ? '' : target.Id,\r\n Day: criterion.Day,\r\n StartHour: criterion.FromHour,\r\n StartMinute: criterion.FromMinute,\r\n EndHour: criterion.ToHour,\r\n EndMinute: criterion.ToMinute,\r\n BidAdjustmentType: multiplier < 0 ? -1 : 1,\r\n BidAdjustmentAmount: window.Math.abs(multiplier),\r\n });\r\n });\r\n\r\n return schedulingRows;\r\n}\r\n\r\nexport function getAdGroupTargetsCriterions({\r\n type, cid, aid, campaignId, adGroupId,\r\n}) {\r\n return new Promise(resolve =>\r\n edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Campaigns.$withKey(campaignId).AdGroups.$withKey(adGroupId).AdGroupCriterions.$cast('Model.AdGroupCriterion').get({\r\n filter: {\r\n where: type,\r\n },\r\n }).toPromise()\r\n .then((response) => {\r\n resolve(response.value);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n resolve([]);\r\n }));\r\n}\r\n\r\nexport function getCampaignTargetsCriterions({\r\n type, cid, aid, campaignId,\r\n}) {\r\n return new Promise(resolve =>\r\n edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Campaigns.$withKey(campaignId).CampaignCriterions.$cast('Model.CampaignCriterion').get({\r\n filter: {\r\n where: type,\r\n },\r\n }).toPromise()\r\n .then((response) => {\r\n resolve(response.value);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n resolve([]);\r\n }));\r\n}\r\n\r\nfunction analyzeHotelSettings(ODataObject) {\r\n const { Settings } = ODataObject;\r\n if (Settings) {\r\n const HotelSeting = Settings.find(x => x['@odata.type'] === '#Model.HotelSetting');\r\n if (HotelSeting) {\r\n const HotelAdGroupType = HotelSeting.HotelAdGroupType || '';\r\n return ({\r\n adFormat: {\r\n HPA: HotelAdGroupType.includes('HotelAd'),\r\n PPA: HotelAdGroupType.includes('PropertyAd'),\r\n },\r\n });\r\n }\r\n }\r\n return ({\r\n adFormat: {\r\n HPA: false,\r\n PPA: false,\r\n },\r\n });\r\n}\r\n\r\nfunction getBaseBid(ODataObject) {\r\n const data = {\r\n };\r\n if (ODataObject.PercentCpcBid) {\r\n data.percentCpcBid = ODataObject.PercentCpcBid && ODataObject.PercentCpcBid.RateAmount && ODataObject.PercentCpcBid.RateAmount.Amount;\r\n data.percentCpcBid = data.percentCpcBid && decimal.fromFloatToStringNoTrailingZero(data.percentCpcBid);\r\n }\r\n if (ODataObject.CommissionRate) {\r\n data.commissionRate = ODataObject.CommissionRate && ODataObject.CommissionRate.RateAmount && ODataObject.CommissionRate.RateAmount.Amount;\r\n data.commissionRate = data.commissionRate && decimal.fromFloatToStringNoTrailingZero(data.commissionRate);\r\n }\r\n data.searchBid = ODataObject.CpcBid && decimal.fromFloatToStringNoTrailingZero(ODataObject.CpcBid);\r\n return data;\r\n}\r\n\r\nexport function convertODataObjectToAdGroupState(ODataObject) {\r\n return {\r\n TimeZone: timeZoneMapper.getAccountTimeZone(),\r\n Id: ODataObject.Id,\r\n name: {\r\n value: ODataObject.Name,\r\n },\r\n audienceAds: {\r\n currentLevelSettings: {\r\n option: ODataObject.NativeBidAdjustment == null || ODataObject.NativeBidAdjustment >= 0 ? audienceAdsOptionKeys.Increase : audienceAdsOptionKeys.Decrease,\r\n value: ODataObject.NativeBidAdjustment == null ? 0 : Math.abs(ODataObject.NativeBidAdjustment),\r\n },\r\n parentLevelSettings: {\r\n },\r\n useParentLevel: ODataObject.NativeBidAdjustment == null,\r\n },\r\n StartDate: ODataObject.StartDate,\r\n EndDate: ODataObject.EndDate,\r\n Status: ODataObject.Status,\r\n AdDistribution: ODataObject.AdDistribution,\r\n AdScheduleUseSearcherTimeZone: ODataObject.AdScheduleUseSearcherTimeZone,\r\n baseBid: getBaseBid(ODataObject),\r\n ...analyzeHotelSettings(ODataObject),\r\n urlOptions: {\r\n TrackingUrlTemplate: ODataObject.TrackingUrlTemplate,\r\n FinalUrlSuffix: ODataObject.FinalUrlSuffix,\r\n UrlCustomParameters: ODataObject.UrlCustomParameters,\r\n },\r\n };\r\n}\r\n\r\nexport function getAdGroupData(cid, aid, campaignId, adGroupId) {\r\n return new Promise(resolve =>\r\n edmCampaign.Customers.$withKey(cid).Accounts.$withKey(aid).Campaigns.$withKey(campaignId).AdGroups.$withKey(adGroupId).get({\r\n }).toPromise()\r\n .then((response) => {\r\n resolve(convertODataObjectToAdGroupState(response));\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n resolve({});\r\n }));\r\n}\r\n\r\nfunction getTargetCriterionType(type) {\r\n if (type.indexOf('DeviceOS Criterion') > -1) {\r\n return 'device';\r\n }\r\n if (type.indexOf('Advance Booking Window Criterion') > -1) {\r\n return 'ABW';\r\n }\r\n if (type.indexOf('Length of Stay Criterion') > -1) {\r\n return 'lengthOfStay';\r\n }\r\n if (type.indexOf('Check In Day Criterion') > -1) {\r\n return 'checkinDay';\r\n }\r\n if (type.indexOf('Check In Date Criterion') > -1) {\r\n return 'checkinDate';\r\n }\r\n if (type.indexOf('Hotel Date Selection Type Criterion') > -1) {\r\n return 'userSetDates';\r\n }\r\n if (type.indexOf('Location Intent Criterion') > -1 || type.indexOf('Location Criterion') > -1) {\r\n return 'location';\r\n }\r\n return null;\r\n}\r\n\r\nexport function updateDeviceByResponse(criterion, device, patchCampaignOrAdgroup) {\r\n const DeviceMap = {\r\n Tablets: 'Tablet',\r\n Computers: 'Computer',\r\n Smartphones: 'Smartphone',\r\n };\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n targeted: 'Targeted',\r\n device: DeviceMap[currentCriterion.Criterion.DeviceCriterion.DeviceName],\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = deviceDefaultSetting;\r\n }\r\n const tempDevice = {\r\n ...device,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('device', tempDevice);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nexport function updateABWByResponse(criterion, ABW, patchCampaignOrAdgroup) {\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n minimumDays: currentCriterion.Criterion.AdvanceBookingWindowCriterion.MinDays,\r\n maximumDays: currentCriterion.Criterion.AdvanceBookingWindowCriterion.MaxDays,\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = advancedBookingDefaultSetting;\r\n }\r\n const tempABW = {\r\n ...ABW,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('ABW', tempABW);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nexport function updateCheckinDayByResponse(criterion, checkinDay, patchCampaignOrAdgroup) {\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n day: currentCriterion.Criterion.CheckInDayCriterion.CheckInDay,\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = checkinDayDefaultSetting;\r\n }\r\n const tempCheckinDay = {\r\n ...checkinDay,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('checkinDay', tempCheckinDay);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nexport function updateLengthOfStayByResponse(criterion, lengthOfStay, patchCampaignOrAdgroup) {\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n minimumNumber: currentCriterion.Criterion.LengthofStayCriterion.MinNights,\r\n maximumNumber: currentCriterion.Criterion.LengthofStayCriterion.MaxNights,\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = lengthOfStayDefaultSetting;\r\n }\r\n const tempLengthOfStay = {\r\n ...lengthOfStay,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('lengthOfStay', tempLengthOfStay);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nexport function updateCheckinDateByResponse(criterion, checkinDate, patchCampaignOrAdgroup) {\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n startDate: new Date(currentCriterion.Criterion.CheckInDateCriterion.StartDate),\r\n endDate: new Date(currentCriterion.Criterion.CheckInDateCriterion.EndDate),\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = checkinDateDefaultSetting;\r\n }\r\n const tempCheckinDate = {\r\n ...checkinDate,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('checkinDate', tempCheckinDate);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nexport function updateUserSetDatesByResponse(criterion, userSetDates, patchCampaignOrAdgroup) {\r\n const UserSetDatesMap = {\r\n UserSelection: 'Selected date',\r\n DefaultSelection: 'Default date',\r\n };\r\n\r\n let tempCurrentLevelSettings = [];\r\n for (let j = 0; j < criterion.length; j++) {\r\n const currentCriterion = criterion[j];\r\n if (currentCriterion.Status !== 'Deleted') {\r\n tempCurrentLevelSettings.push({\r\n dates: UserSetDatesMap[currentCriterion.Criterion.DateSelectionTypeCriterion.HotelDateSelectionType],\r\n bidAdjustmentDropdown: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? 'Increase by' : 'Decrease by',\r\n bidAdjustmentInput: currentCriterion.Criterion.BidAdjustment - 0 >= 0 ? currentCriterion.Criterion.BidAdjustment - 0 : -currentCriterion.Criterion.BidAdjustment,\r\n Id: currentCriterion.Id,\r\n Status: currentCriterion.Status,\r\n });\r\n }\r\n }\r\n if (tempCurrentLevelSettings.length === 0) {\r\n tempCurrentLevelSettings = userSetDatesDefaultSetting;\r\n }\r\n const tempUserSetDates = {\r\n ...userSetDates,\r\n currentLevelSettings: tempCurrentLevelSettings,\r\n reset: true,\r\n };\r\n if (patchCampaignOrAdgroup) {\r\n patchCampaignOrAdgroup('userSetDates', tempUserSetDates);\r\n }\r\n return tempCurrentLevelSettings;\r\n}\r\n\r\nfunction expandSettingsWithErrors(response, subViews) {\r\n const properties = _.groupBy(response.entity.errors, 'property');\r\n const urlOptionsHaveErrors = _.has(properties, 'TrackingUrlTemplate') || _.has(properties, 'UrlCustomParameters') || _.has(properties, 'FinalUrlSuffix');\r\n if (urlOptionsHaveErrors) {\r\n subViews.urlOptionsView.expandSettingsWithApiErrors(_.has(properties, 'TrackingUrlTemplate'), _.has(properties, 'UrlCustomParameters'), _.has(properties, 'FinalUrlSuffix'));\r\n }\r\n}\r\n\r\nfunction errorElements(level) {\r\n return $(`.hotel-${level}-shared .error-string,.hotel-${level}-shared .error, .hotel-${level}-shared .alert-danger`).filter(':visible');\r\n}\r\n\r\nexport function scrollToErrors(level) {\r\n setTimeout(() => { scrollUtils.scrollAndCenter(errorElements(level)); }, 0);\r\n}\r\n\r\nexport function showWarning(level, i18n, removeLastWarning) {\r\n if (removeLastWarning) {\r\n removeLastWarning();\r\n }\r\n const id = notificationApi.showWarning(i18n.getString(_TL_('Please correct the following errors.')));\r\n const interval = {};\r\n const timeout = 500;\r\n const removeWarningInterval = () => {\r\n if (interval.id) {\r\n notificationApi.dismiss(id);\r\n clearInterval(interval.id);\r\n interval.id = undefined;\r\n }\r\n };\r\n const dismissFunc = () => {\r\n // clear the error automatically,\r\n // TODO: check the error from react component state or via jquery DOM?\r\n if (errorElements(level).length === 0) {\r\n removeWarningInterval();\r\n }\r\n };\r\n interval.id = setInterval(dismissFunc, timeout);\r\n return removeWarningInterval;\r\n}\r\n\r\nfunction handleCommonTargetsError(entity, i18n, errors) {\r\n const allTargetsApiErrors = {};\r\n for (let i = 0; i < errors.length; i++) {\r\n const currentError = errors[i];\r\n for (let j = 0; j < entity.length; j++) {\r\n const currentEntity = entity[j];\r\n if (currentError['Client Id'] === currentEntity['Client Id']) {\r\n if (!allTargetsApiErrors[getTargetCriterionType(currentError.Type)]) {\r\n allTargetsApiErrors[getTargetCriterionType(currentError.Type)] = [];\r\n }\r\n const key = HotelErrorToErrorMessageMapping[currentEntity.errors[0].code];\r\n const newHotelErrMsg = key ? i18n.getString(key) : undefined;\r\n const apiErrMsg = newHotelErrMsg || currentEntity.errors[0].message;\r\n if (allTargetsApiErrors[getTargetCriterionType(currentError.Type)].indexOf(apiErrMsg) === -1) {\r\n allTargetsApiErrors[getTargetCriterionType(currentError.Type)].push(apiErrMsg);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return allTargetsApiErrors;\r\n}\r\n\r\nfunction parseEntityApiErrors(response, level) {\r\n let errors = (response.entity && response.entity.errors) || [];\r\n\r\n if (level === 'campaign' && response.entity && response.entity.Id) {\r\n let adGroupErrors = [];\r\n // Collect ad group errors\r\n if (response.errors) {\r\n adGroupErrors = i18nErrors.getBulkApiErrors(response.errors.filter(error => error.Type === 'AdGroup Error')).map(error => ({ ...error, property: 'General' }));\r\n }\r\n errors = errors.concat(adGroupErrors);\r\n }\r\n\r\n if (errors && errors.length) {\r\n const general = 'General';\r\n const ignoredErrors = ['TrackingUrlTemplate', 'UrlCustomParameters', 'FinalUrlSuffix'];\r\n const classified = ['Name'];\r\n errors = errors.filter(error => !ignoredErrors.includes(error.property));\r\n errors.forEach((error) => {\r\n const target = error;\r\n if (_.isEmpty(target.property) || !classified.includes(target.property)) {\r\n target.property = general;\r\n }\r\n });\r\n return _.groupBy(errors, 'property');\r\n }\r\n return {};\r\n}\r\n\r\nexport function mergeAdGroupStateWithErrors(state, errors) {\r\n const {\r\n entityApiErrors,\r\n targetsApiErrors,\r\n } = errors;\r\n return {\r\n ...state,\r\n name: {\r\n ...state.name,\r\n errors: entityApiErrors.Name ? [...entityApiErrors.Name] : [],\r\n },\r\n location: {\r\n ...state.location,\r\n errors: targetsApiErrors.location ? [...targetsApiErrors.location] : [],\r\n },\r\n };\r\n}\r\n\r\nexport function mergeCampaignStateWithErrors(state, errors) {\r\n const {\r\n entityApiErrors,\r\n targetsApiErrors,\r\n } = errors;\r\n return {\r\n ...state,\r\n name: {\r\n ...state.name,\r\n errors: entityApiErrors.Name ? [...entityApiErrors.Name] : [],\r\n },\r\n location: {\r\n ...state.location,\r\n errors: targetsApiErrors.location ? [...targetsApiErrors.location] : [],\r\n },\r\n };\r\n}\r\n\r\nfunction handleErrors(response, i18n, subViews, criterionsType, level) {\r\n if (response && response.entity && !response.entity.Id) {\r\n // If campaign is not created, show only the entity errors,\r\n return {\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: {},\r\n entityApiErrors: parseEntityApiErrors(response, level),\r\n };\r\n }\r\n\r\n _.each(subViews, (view) => {\r\n if (_.isFunction(view.handleErrors)) {\r\n response.errors = view.handleErrors(response);\r\n }\r\n });\r\n\r\n let urlOptionsHaveErrors = false;\r\n const advancedSettinsApiErrors = {};\r\n if (response.entity.errors) {\r\n const properties = _.groupBy(response.entity.errors, 'property');\r\n subViews.urlOptionsView.handleApiErrors(properties);\r\n urlOptionsHaveErrors = _.has(properties, 'TrackingUrlTemplate') || _.has(properties, 'UrlCustomParameters') || _.has(properties, 'FinalUrlSuffix');\r\n if (urlOptionsHaveErrors) {\r\n if (!advancedSettinsApiErrors.urlOptions) {\r\n advancedSettinsApiErrors.urlOptions = [];\r\n }\r\n if (_.has(properties, 'TrackingUrlTemplate')) { advancedSettinsApiErrors.urlOptions.push({ TrackingUrlTemplate: properties.TrackingUrlTemplate }); }\r\n if (_.has(properties, 'UrlCustomParameters')) { advancedSettinsApiErrors.urlOptions.push({ UrlCustomParameters: properties.UrlCustomParameters || 'ssss' }); }\r\n if (_.has(properties, 'FinalUrlSuffix')) { advancedSettinsApiErrors.urlOptions.push({ FinalUrlSuffix: properties.FinalUrlSuffix || 'ssssddd' }); }\r\n }\r\n response.errors = _.reject(response.errors, err => err.Property === 'TrackingUrlTemplate' || err.Property === 'UrlCustomParameters');\r\n }\r\n\r\n expandSettingsWithErrors(response, subViews);\r\n\r\n return {\r\n targetsApiErrors: handleCommonTargetsError(response.entity && response.entity[criterionsType], i18n, response.errors),\r\n advancedSettinsApiErrors,\r\n entityApiErrors: parseEntityApiErrors(response, level),\r\n };\r\n}\r\n\r\nconst defaultErrorObject = {\r\n targetsApiErrors: {},\r\n advancedSettinsApiErrors: {},\r\n entityApiErrors: {},\r\n};\r\n\r\nexport function handleApiErrors(response, i18n, subViews, level) {\r\n const criterionsType = level === 'campaign' ? 'CampaignCriterions' : 'AdGroupCriterions';\r\n\r\n if (_.isUndefined(response) || _.isNull(response)) {\r\n return defaultErrorObject;\r\n }\r\n\r\n if (response.errors && !response.entity) {\r\n // Ajax error [400] - RowCountExceeded\r\n // TODO show context error in page\r\n return {\r\n ...defaultErrorObject,\r\n entityApiErrors: {\r\n General: i18nErrors.getODataErrors(response.errors),\r\n },\r\n };\r\n }\r\n\r\n if (response === 'exclusion error') {\r\n return defaultErrorObject;\r\n }\r\n\r\n if (response.errors) {\r\n const processItems = [`${criterionsType}`].concat(Object.prototype.hasOwnProperty.call(response.entity, 'AdExtensionAssociations') ? ['AdExtensionAssociations'] : []);\r\n i18nErrors.getPartial(response, processItems);\r\n scrollToErrors(level);\r\n return handleErrors(response, i18n, subViews, criterionsType, level);\r\n }\r\n return defaultErrorObject;\r\n}\r\n\r\n\r\nexport function clearSubViewApiErrors(subViews) {\r\n _.each(subViews, (view) => {\r\n if (_.isFunction(view.clearApiErrors)) {\r\n view.clearApiErrors();\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function invalidateCache(entityName, ids) {\r\n if (edmCampaign['odata.cache']) {\r\n edmCampaign['odata.cache'].invalidateTypeCache(entityName, null, '');\r\n if (!_.isEmpty(ids)) {\r\n _.each(ids, id => edmCampaign['odata.cache'].invalidateTypeCache(entityName, id, ''));\r\n }\r\n }\r\n}\r\n\r\n\r\nexport const subscribeUrlOptions = (context, globalErrorMsg) => {\r\n context.urlOptionsView.trackingTemplate.ko_model.getTrackingTemplate.subscribe(() => {\r\n const urlOptionsApiErrors = context.state.advancedSettinsApiErrors.urlOptions;\r\n const newUrlOptionsApiErrors = [];\r\n if (urlOptionsApiErrors && urlOptionsApiErrors.length) {\r\n urlOptionsApiErrors.forEach((item) => {\r\n if (Object.keys(item)[0] !== 'TrackingUrlTemplate') { newUrlOptionsApiErrors.push(item); }\r\n });\r\n context.urlOptionsView.trackingTemplate.ko_model.trackingTemplateErrors([]);\r\n context.patchAdvancedSettinsApiErrors('urlOptions', newUrlOptionsApiErrors);\r\n }\r\n if (!newUrlOptionsApiErrors.length && context.urlOptionsView.isValid()) {\r\n context.patchErrMsg('urlOptions', '');\r\n } else {\r\n context.patchErrMsg('urlOptions', globalErrorMsg);\r\n }\r\n });\r\n context.urlOptionsView.finalUrlSuffix.viewModel.errorMessages.subscribe(() => {\r\n const urlOptionsApiErrors = context.state.advancedSettinsApiErrors.urlOptions;\r\n const newUrlOptionsApiErrors = [];\r\n if (urlOptionsApiErrors && urlOptionsApiErrors.length) {\r\n urlOptionsApiErrors.forEach((item) => {\r\n if (Object.keys(item)[0] !== 'FinalUrlSuffix') { newUrlOptionsApiErrors.push(item); }\r\n });\r\n if (context.urlOptionsView.options.isFinalURLSuffixEnabled) {\r\n context.urlOptionsView.finalUrlSuffix.viewModel.externalErrors([]);\r\n }\r\n context.patchAdvancedSettinsApiErrors('urlOptions', newUrlOptionsApiErrors);\r\n }\r\n if (!newUrlOptionsApiErrors.length && context.urlOptionsView.isValid()) {\r\n context.patchErrMsg('urlOptions', '');\r\n } else {\r\n context.patchErrMsg('urlOptions', globalErrorMsg);\r\n }\r\n });\r\n context.urlOptionsView.customParams.viewModel.parameterArray.subscribe(() => {\r\n const urlOptionsApiErrors = context.state.advancedSettinsApiErrors.urlOptions;\r\n const newUrlOptionsApiErrors = [];\r\n if (urlOptionsApiErrors && urlOptionsApiErrors.length) {\r\n urlOptionsApiErrors.forEach((item) => {\r\n if (Object.keys(item)[0] !== 'UrlCustomParameters') { newUrlOptionsApiErrors.push(item); }\r\n });\r\n context.urlOptionsView.customParams.viewModel.parametersError([]);\r\n context.patchAdvancedSettinsApiErrors('urlOptions', newUrlOptionsApiErrors);\r\n }\r\n if (!newUrlOptionsApiErrors.length && context.urlOptionsView.isValid()) {\r\n context.patchErrMsg('urlOptions', '');\r\n } else {\r\n context.patchErrMsg('urlOptions', globalErrorMsg);\r\n }\r\n });\r\n};\r\n\r\nexport const subscribeSiteExclusion = (context) => {\r\n context.siteExclusionView.viewModel.getExclusions.subscribe(() => {\r\n const baseExclusionApiErrors = context.state.advancedSettinsApiErrors.baseExclusion;\r\n if (baseExclusionApiErrors && baseExclusionApiErrors.length) {\r\n const newExclusionApiErrors = [];\r\n baseExclusionApiErrors.forEach((item) => {\r\n if (Object.keys(item)[0] !== 'siteErrors') { newExclusionApiErrors.push(item); }\r\n });\r\n context.siteExclusionView.clearApiErrors();\r\n context.patchAdvancedSettinsApiErrors('baseExclusion', newExclusionApiErrors);\r\n if (newExclusionApiErrors.length === 0) {\r\n context.patchErrMsg('baseExclusion', '');\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport const subscribeIPExclusion = (context) => {\r\n context.IPExclusionView.viewModel.getExclusions.subscribe(() => {\r\n const baseExclusionApiErrors = context.state.advancedSettinsApiErrors.baseExclusion;\r\n if (baseExclusionApiErrors && baseExclusionApiErrors.length) {\r\n const newExclusionApiErrors = [];\r\n baseExclusionApiErrors.forEach((item) => {\r\n if (Object.keys(item)[0] !== 'ipErrors') { newExclusionApiErrors.push(item); }\r\n });\r\n context.IPExclusionView.clearApiErrors();\r\n context.patchAdvancedSettinsApiErrors('baseExclusion', newExclusionApiErrors);\r\n if (newExclusionApiErrors.length === 0) {\r\n context.patchErrMsg('baseExclusion', '');\r\n }\r\n }\r\n });\r\n};\r\n","import { validateNumber, numberErrorCode } from '../../utility';\r\n\r\nexport const audienceAdsOptionKeys = {\r\n Increase: 'Increase',\r\n Decrease: 'Decrease',\r\n};\r\n\r\nexport function getAudienceData(audienceAds) {\r\n const data = audienceAds.useParentLevel ? audienceAds.parentLevelSettings : audienceAds.currentLevelSettings;\r\n return data;\r\n}\r\n\r\n\r\nexport const audienceAdsOptions = i18n => [\r\n {\r\n key: audienceAdsOptionKeys.Increase, text: i18n.getString(_TL_('Increase by')),\r\n },\r\n {\r\n key: audienceAdsOptionKeys.Decrease, text: i18n.getString(_TL_('Decrease by')),\r\n },\r\n];\r\n\r\nexport const getAudienceAds = (audienceAds) => {\r\n if (audienceAds.useParentLevel) {\r\n return {\r\n NativeBidAdjustment: null,\r\n };\r\n }\r\n\r\n const {\r\n currentLevelSettings,\r\n } = audienceAds;\r\n\r\n const {\r\n option,\r\n value,\r\n } = currentLevelSettings;\r\n\r\n if (option === audienceAdsOptionKeys.Decrease) {\r\n return {\r\n NativeBidAdjustment: -value,\r\n };\r\n }\r\n return {\r\n NativeBidAdjustment: value,\r\n };\r\n};\r\n\r\nconst maxIn = 900;\r\nconst maxDe = 100;\r\n\r\nconst getMinMax = (data) => {\r\n if (data == null) {\r\n return {\r\n min: 0,\r\n max: maxIn,\r\n };\r\n }\r\n\r\n if (data.option === audienceAdsOptionKeys.Increase) {\r\n return {\r\n min: 0,\r\n max: maxIn,\r\n };\r\n }\r\n return {\r\n min: 0,\r\n max: maxDe,\r\n };\r\n};\r\n\r\nexport const getAudienceAdsDetails = ({ rawData, i18n }) => {\r\n const data = getAudienceData(rawData);\r\n let { value } = data;\r\n const { option } = data;\r\n value = option === audienceAdsOptionKeys.Increase ? value : -value;\r\n return i18n.getString(_TL_('Audience ads bid adjustment: {{value}}%'), { value });\r\n};\r\n\r\nexport const validateAudienceAds = (rawData) => {\r\n const data = getAudienceData(rawData);\r\n const { min, max } = getMinMax(data);\r\n const { value } = data;\r\n return validateNumber({\r\n value, min, max, shouldBePositive: true, isInteger: true,\r\n });\r\n};\r\n\r\nexport const isAudienceAdsValid = rawData => validateAudienceAds(rawData) == null;\r\n\r\nexport const getAudiencesAdsErrorMsg = ({\r\n code, i18n,\r\n}) => {\r\n switch (code) {\r\n case numberErrorCode.RequiredField:\r\n return i18n.getString(_TL_('The bid adjustment cannot be empty.'));\r\n case numberErrorCode.InValidNumber:\r\n case numberErrorCode.NotPositive:\r\n case numberErrorCode.WholeNumber:\r\n return i18n.getString(_TL_('Enter a positive, whole number.'));\r\n case numberErrorCode.OutOfRange:\r\n return i18n.getString(_TL_('The maximum increase is {{maxIn}}%; the maximum decrease is {{maxDe}}%.'), { maxIn, maxDe });\r\n default:\r\n return null;\r\n }\r\n};\r\n","/* eslint-disable no-script-url */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback, useContext } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { Dropdown, Label, Stack, TextField } from '@bingads-webui-react/fabric-control';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { ErrorString, SpanWithComponent, checkShouldShowError } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { audienceAdsOptionKeys, audienceAdsOptions, getAudiencesAdsErrorMsg, validateAudienceAds, getAudienceData } from './utility';\r\n\r\nconst getStyles = () => ({\r\n audienceAdsContainer: {\r\n },\r\n});\r\n\r\nfunction getValue(audienceAds) {\r\n const data = getAudienceData(audienceAds);\r\n return data.value;\r\n}\r\n\r\nconst BidAdjustment = React.memo((props) => {\r\n const {\r\n audienceAds,\r\n setAudienceAds,\r\n } = props;\r\n const currentValue = getValue(audienceAds);\r\n const readOnly = audienceAds.useParentLevel;\r\n\r\n return (\r\n <div className=\"bid-adjustment\">\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <TextField\r\n value={currentValue}\r\n placeholder=\"\"\r\n ariaLabel=\"bid-adjustment-label\"\r\n styles={{ fieldGroup: { width: 80 } }}\r\n onBlur={() => { setAudienceAds({ isDirty: true }); }}\r\n onChange={(e, value) => { setAudienceAds({ value, isDirty: true }); }}\r\n disabled={readOnly}\r\n />\r\n <span className=\"percent-mark\">%</span>\r\n </Stack>\r\n </div>\r\n );\r\n});\r\n\r\nBidAdjustment.propTypes = {\r\n audienceAds: PropTypes.shape({}),\r\n setAudienceAds: PropTypes.func.isRequired,\r\n};\r\n\r\nBidAdjustment.defaultProps = {\r\n audienceAds: {},\r\n};\r\n\r\nfunction getSelectedKey(audienceAds) {\r\n const data = audienceAds.useParentLevel ? audienceAds.parentLevelSettings : audienceAds.currentLevelSettings;\r\n return data.option || audienceAdsOptionKeys.Increase;\r\n}\r\n\r\nexport const AudienceAds = React.memo((props) => {\r\n const {\r\n audienceAds,\r\n setAudienceAds,\r\n } = props;\r\n\r\n const mySetAudienceAds = useCallback((partialUpdate) => {\r\n setAudienceAds({\r\n ...audienceAds,\r\n currentLevelSettings: {\r\n ...audienceAds.currentLevelSettings,\r\n ...partialUpdate,\r\n },\r\n isDirty: partialUpdate.isDirty || audienceAds.isDirty,\r\n });\r\n }, [audienceAds, setAudienceAds]);\r\n\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n const i18n = useContext(I18nContext);\r\n const audienceAdsBidAdjustmentText = i18n.getString(_TL_('Audience ads bid adjustment'));\r\n const labelId = 'audience-ads-label';\r\n const shouldShowError = checkShouldShowError(audienceAds);\r\n const error = getAudiencesAdsErrorMsg({ code: validateAudienceAds(audienceAds), i18n });\r\n const selectedKey = getSelectedKey(audienceAds);\r\n const readOnly = audienceAds.useParentLevel;\r\n\r\n return (\r\n <div className={classnames(classes.audienceAdsContainer, 'audience-ads')}>\r\n <Label className=\"audience-ads\" id={labelId} >\r\n <SpanWithComponent\r\n SpanText={audienceAdsBidAdjustmentText}\r\n Component={() => (\r\n <HelpPopup\r\n topic=\"pop_BA_NativeAd_BidAdj\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: audienceAdsBidAdjustmentText })}\r\n />)}\r\n />\r\n </Label>\r\n <div className=\"audience-ads-options\">\r\n <Stack horizontal verticalAlign=\"center\" tokens={{ childrenGap: 4 }}>\r\n <Dropdown\r\n aria-label=\"audience-ads-options-label\"\r\n options={audienceAdsOptions(i18n)}\r\n defaultSelectedKey={selectedKey}\r\n styles={{\r\n dropdown: {\r\n width: 133,\r\n },\r\n }}\r\n disabled={readOnly}\r\n onChange={(e, option) => mySetAudienceAds({ option: option.key })}\r\n />\r\n <BidAdjustment {...props} setAudienceAds={mySetAudienceAds} />\r\n </Stack>\r\n </div>\r\n {shouldShowError && error && <ErrorString error={error} />}\r\n </div>\r\n );\r\n});\r\n\r\nAudienceAds.propTypes = {\r\n audienceAds: PropTypes.shape({}),\r\n setAudienceAds: PropTypes.func.isRequired,\r\n};\r\n\r\nAudienceAds.defaultProps = {\r\n audienceAds: {},\r\n};\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport BaseExclusionView from '@bingads-webui-campaign-legacy/advanced-settings/view/base-exclusion';\r\nimport exclusionRepository from '@bingads-webui-campaign-legacy/advanced-settings/util/exclusion-repository';\r\nimport _ from 'underscore';\r\nimport { merge } from '@bingads-webui/primitive-utilities';\r\nimport { sharedStylesFromSelDesign } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport React, { useContext, useCallback, useState, useEffect } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { SpanWithComponent } from '@bingads-webui-campaign-react/wizard-shared-components';\r\nimport { useBackboneView } from '../shared';\r\n\r\nconst getStyles = () => ({\r\n '@global': merge(\r\n {},\r\n sharedStylesFromSelDesign()\r\n ),\r\n baseExclusionContainer: {\r\n '& .exclusion-wraper .row': {\r\n marginLeft: 0,\r\n marginRight: 0,\r\n },\r\n },\r\n});\r\n\r\n\r\nconst SiteExclusionView = ({ options }) => {\r\n const baseExclusionReactWrapper = useBackboneView(useCallback(() => new BaseExclusionView({\r\n exclusions: _.result(options.exclusions, 'ExcludedSites'),\r\n exclusionType: 'site',\r\n level: options.level,\r\n campaignExclusions: _.result(options.campaignExclusions, 'ExcludedSites'),\r\n }).render(), [options.campaignExclusions, options.exclusions, options.level]), options.setSiteExclusionView);\r\n return <>{baseExclusionReactWrapper}</>;\r\n};\r\nSiteExclusionView.propTypes = {\r\n options: PropTypes.shape({}).isRequired,\r\n};\r\nSiteExclusionView.defaultProps = {\r\n};\r\n\r\n\r\nconst IPExclusionView = ({ options }) => {\r\n const baseExclusionReactWrapper = useBackboneView(useCallback(() => new BaseExclusionView({\r\n exclusions: _.result(options.exclusions, 'ExcludedIPs'),\r\n exclusionType: 'ip',\r\n }).render(), [options.exclusions]), options.setIPExclusionView);\r\n return <>{baseExclusionReactWrapper}</>;\r\n};\r\nIPExclusionView.propTypes = {\r\n options: PropTypes.shape({}).isRequired,\r\n};\r\nIPExclusionView.defaultProps = {};\r\n\r\n\r\n// reference: private/campaign-legacy/packages/advanced-settings/view/advancedSettings.js\r\nexport const BaseExclusion = React.memo((props) => {\r\n const {\r\n patchData, setSiteExclusionView, setIPExclusionView, options: {\r\n level, campaignId, adgroupId, showSiteExclusion, showIPExclusion,\r\n },\r\n } = props;\r\n const classes = useDefaultStyles(getStyles);\r\n const i18n = useContext(I18nContext);\r\n const baseExclusionText = i18n.getString(_TL_('Exclusions'));\r\n const exclusionDesc = _TL_('Which websites should not show your ads and which IP addresses should be blocked from seeing your ads?');\r\n const webSiteExclusionDesc = _TL_('Which websites should not show your ads?');\r\n\r\n let currentSiteExclusionView = null;\r\n let currentIPExclusionView = null;\r\n if (showSiteExclusion) {\r\n currentSiteExclusionView = <SiteExclusionView options={{ level, setSiteExclusionView }} />;\r\n }\r\n if (showIPExclusion) {\r\n currentIPExclusionView = <IPExclusionView options={{ setIPExclusionView }} />;\r\n }\r\n const [siteExclusion, setSiteExclusion] = useState(currentSiteExclusionView);\r\n const [IPExclusion, setIPExclusion] = useState(currentIPExclusionView);\r\n\r\n\r\n useEffect(() => {\r\n if (!campaignId) { return; }\r\n exclusionRepository.load(campaignId, adgroupId, level)\r\n .then(([campaignExclusions, adgroupExclusions]) => {\r\n const exclusions = level === 'campaign' ? campaignExclusions : adgroupExclusions;\r\n patchData('exclusions', exclusions);\r\n if (showSiteExclusion) {\r\n setSiteExclusion(<SiteExclusionView options={{\r\n level, campaignExclusions, exclusions, setSiteExclusionView,\r\n }}\r\n />);\r\n }\r\n if (showIPExclusion) {\r\n setIPExclusion(<IPExclusionView options={{ exclusions, setIPExclusionView }} />);\r\n }\r\n });\r\n }, [campaignId, adgroupId, level]);\r\n\r\n return (\r\n <div className={classnames(classes.baseExclusionContainer)}>\r\n <div className=\"camp-adg-shared-label\">\r\n <SpanWithComponent\r\n SpanText={baseExclusionText}\r\n Component={() => (\r\n <HelpPopup\r\n topic=\"pop_BA_Settings_Exclusions\"\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: baseExclusionText })}\r\n />)}\r\n />\r\n </div>\r\n <div className=\"exclusion-wraper\">\r\n <div className=\"form-control-static\">{i18n.getString(level === 'campaign' ? exclusionDesc : webSiteExclusionDesc)}</div>\r\n {showSiteExclusion && siteExclusion}\r\n {showIPExclusion && IPExclusion}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nBaseExclusion.propTypes = {\r\n patchData: PropTypes.func.isRequired,\r\n setSiteExclusionView: PropTypes.func.isRequired,\r\n setIPExclusionView: PropTypes.func,\r\n options: PropTypes.shape({}),\r\n};\r\n\r\nBaseExclusion.defaultProps = {\r\n options: {\r\n },\r\n setIPExclusionView() {},\r\n};\r\n","import { creationCommonStyle, settingsCommonStyles } from '@bingads-webui-campaign-react/campaign-adgroup-settings-shared-styles';\r\nimport { uurlTestToolStyle, convertToLocalStyle, glyphIconStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getStyles = (_, core) => ({\r\n urlOptionsContainer: {\r\n ...creationCommonStyle(core),\r\n ...settingsCommonStyles(core),\r\n ...uurlTestToolStyle(core),\r\n ...convertToLocalStyle(glyphIconStyle(core)),\r\n marginLeft: '-15px',\r\n backgroundColor: `${core && core.palette && core.palette.white}`,\r\n '& .control-label': {\r\n marginTop: 0,\r\n },\r\n // private\\ui-next\\packages\\settings-page\\src\\styles\\custom-params.js\r\n '& #customParametersSettings': {\r\n '& .custom-param__key-field': {\r\n width: '155px',\r\n display: 'inline-block',\r\n },\r\n '& .closeimage.custom-param__close-button': {\r\n position: 'static',\r\n },\r\n '& .custom-param__value-field': {\r\n width: '260px',\r\n display: 'inline-block',\r\n },\r\n '& .custom-param-entry': {\r\n '& .control-label': {\r\n display: 'inline-block',\r\n },\r\n '& input.form-control': {\r\n display: 'inline-block',\r\n },\r\n '& label.control-label': {\r\n display: 'inline-block',\r\n marginLeft: '5px',\r\n marginRight: '5px',\r\n },\r\n },\r\n '& .custom-param__key-container': {\r\n display: 'inline-block',\r\n },\r\n '& .flex-row-dynamic': {\r\n verticalAlign: 'initial',\r\n },\r\n },\r\n // private\\ui-next\\packages\\top-grid-panel\\src\\upgraded-url-override-style.js\r\n '& .custom-params-template .custom-param-entry': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .custom-params-template .custom-param-entry td': {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n },\r\n '& .custom-params-template .flex-row-fixed.custom-param__key-container': {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n },\r\n '& .custom-params-template .flex-row-fixed.custom-param__key-container .control-label': {\r\n whiteSpace: 'pre',\r\n },\r\n '& .custom-params-template .flex-row-fixed.custom-param__key-container input.form-control.custom-param__key-field': {\r\n margin: '0px 5px',\r\n },\r\n '& .custom-params-template .flex-row-dynamic input.form-control.custom-param__value-field': {\r\n marginLeft: '5px',\r\n },\r\n '& .custom-params-template .closeimage.custom-param__close-button': {\r\n height: '20px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '&:before': {\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n content: '\"\\\\E711\"',\r\n },\r\n },\r\n '& .custom-param__close-button': {\r\n marginLeft: 10,\r\n cursor: 'pointer',\r\n },\r\n // hotel campaign new ui\r\n '& .tracking-template,& .final-url-suffix , & .custom-parameters': {\r\n width: 'auto',\r\n marginLeft: '-15px',\r\n },\r\n '& .tracking-template .form-control, & .final-url-suffix .form-control': {\r\n width: '435px',\r\n },\r\n '& span.is-error, & .font-error': {\r\n color: `${core.semanticColors && core.semanticColors.errorIcon}`,\r\n },\r\n '& .helpbutton': {\r\n marginRight: '5px',\r\n },\r\n },\r\n});\r\n\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport urlOptionsTemplate from '@bingads-webui-campaign-legacy/advanced-settings/template/url-options.pug';\r\nimport UpgradedUrlOptions from '@bingads-webui-component-legacy/upgraded-url/view/advancedSettingsUrlOptions';\r\nimport '@bingads-webui-campaign/ko-stop-binding';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React, { useCallback } from 'react';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getStyles } from './style';\r\nimport { useBackboneView, } from '../shared';\r\n\r\n\r\n// reference: private/campaign-legacy/packages/advanced-settings/view/advancedSettings.js\r\nexport const UrlOptions = React.memo((props) => {\r\n const {\r\n setUrlOptionsView, options: {\r\n level, campaignId, adgroupId, model,\r\n },\r\n } = props;\r\n\r\n const urlOptions = new UpgradedUrlOptions({\r\n editMode: true,\r\n entityType: level,\r\n isNewUI: true,\r\n trackingTemplate: _.result(model, 'TrackingUrlTemplate'),\r\n finalUrlSuffix: _.result(model, 'FinalUrlSuffix'),\r\n customParameters: _.isEmpty(model.UrlCustomParameters) ? undefined : model.UrlCustomParameters,\r\n urlOptionsTemplate,\r\n showUurlTestTool: false,\r\n campaignId,\r\n adGroupId: adgroupId,\r\n });\r\n const urlOptionsReactWrapper = useBackboneView(useCallback(() => urlOptions.render(), [model]), setUrlOptionsView, { managed: true });\r\n const classes = useDefaultStyles(getStyles);\r\n\r\n // useEffect(() => { urlOptions.expandSettings(true, true, true); }, [model]);\r\n\r\n return (\r\n <div className={classnames(classes.urlOptionsContainer)}>\r\n <div className=\"urloptions-wraper clearfix\">\r\n {urlOptionsReactWrapper}\r\n </div>\r\n </div>\r\n );\r\n}, (prevProps, nextProps) => prevProps.options.model === nextProps.options.model);\r\n\r\nUrlOptions.propTypes = {\r\n setUrlOptionsView: PropTypes.func.isRequired,\r\n options: PropTypes.shape({}),\r\n};\r\n\r\nUrlOptions.defaultProps = {\r\n options: {\r\n },\r\n};\r\n","import classnames from 'classnames';\r\nimport React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { Label, Checkbox, Stack } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SpanWithComponent, ErrorString } from '@bingads-webui-campaign-react/wizard-shared-components';\r\n\r\nexport const isAdFormatValid = adFormat => adFormat.HPA || adFormat.PPA;\r\n\r\nexport const defaultAdFormat = {\r\n HPA: true,\r\n PPA: true,\r\n};\r\n\r\nconst CheckBox = (props) => {\r\n const {\r\n infoText,\r\n field,\r\n setAdFormat,\r\n isChecked,\r\n helpId,\r\n adFormat,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const onChange = useCallback((event, checked) => {\r\n setAdFormat({\r\n ...adFormat,\r\n [field]: checked,\r\n isDirty: true,\r\n });\r\n }, [adFormat, field, setAdFormat]);\r\n\r\n return (\r\n <Checkbox\r\n onRenderLabel={() => (\r\n <SpanWithComponent\r\n SpanText={infoText}\r\n Component={() => (\r\n <HelpPopup\r\n topic={helpId}\r\n aria-label={i18n.getString(_TL_('Click to learn more about {{item}}'), { item: infoText })}\r\n />)}\r\n />)}\r\n checked={isChecked(field)}\r\n onChange={onChange}\r\n className={field}\r\n />);\r\n};\r\n\r\nCheckBox.propTypes = {\r\n infoText: PropTypes.string.isRequired,\r\n field: PropTypes.string.isRequired,\r\n setAdFormat: PropTypes.func.isRequired,\r\n isChecked: PropTypes.func.isRequired,\r\n helpId: PropTypes.string.isRequired,\r\n adFormat: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nconst getStyles = () => ({\r\n HotelAdFormat: {\r\n '& .description': {\r\n marginBottom: '12px',\r\n },\r\n },\r\n});\r\n\r\nexport const AdFormat = React.memo((props) => {\r\n const {\r\n setAdFormat,\r\n adFormat,\r\n scenario,\r\n permissions,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const HPAText = i18n.getString(_TL_('Hotel price ad (HPA)'));\r\n const PPAText = i18n.getString(_TL_('Property promotion ad (PPA)'));\r\n const classes = useDefaultStyles(getStyles);\r\n const isChecked = useCallback(key => adFormat[key] === true, [adFormat]);\r\n const IsRenameHotelToLodgingEnabled = permissions && permissions.dynamic && permissions.dynamic.IsRenameHotelToLodgingEnabled;\r\n\r\n return (\r\n <div className={classnames('hotel-ad-format', 'section', classes.HotelAdFormat)}>\r\n <div className=\"title\">\r\n <Label>\r\n {IsRenameHotelToLodgingEnabled ? i18n.getString(_TL_('Property ad format')) : i18n.getString(_TL_('Hotel ad format'))}\r\n </Label>\r\n <div className=\"description\">\r\n {IsRenameHotelToLodgingEnabled ? i18n.getString(_TL_('Determines the ad type you want to create for this property ad group.')) : i18n.getString(_TL_('Determines the ad type you want to create for this hotel ad group.'))}\r\n </div>\r\n </div>\r\n <div className=\"checkboxes\">\r\n <Stack tokens={{ childrenGap: 12 }}>\r\n <CheckBox key=\"HPA\" field=\"HPA\" infoText={HPAText} helpId=\"pop_BA_HotelPriceAds\" isChecked={isChecked} adFormat={adFormat} setAdFormat={setAdFormat} scenario={scenario} />\r\n <CheckBox key=\"PPA\" field=\"PPA\" infoText={PPAText} helpId=\"pop_BA_PropertyPromotionAds\" isChecked={isChecked} adFormat={adFormat} setAdFormat={setAdFormat} scenario={scenario} />\r\n </Stack>\r\n </div>\r\n {!isAdFormatValid(adFormat) &&\r\n <ErrorString error={i18n.getString(_TL_('At least one ad format option must be selected'))} />}\r\n </div>);\r\n});\r\n\r\nAdFormat.propTypes = {\r\n adFormat: PropTypes.shape({}),\r\n setAdFormat: PropTypes.func.isRequired,\r\n scenario: PropTypes.string.isRequired,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({\r\n IsRenameHotelToLodgingEnabled: PropTypes.bool,\r\n }),\r\n }),\r\n};\r\n\r\nAdFormat.defaultProps = {\r\n adFormat: {},\r\n permissions: {\r\n dynamic: {\r\n IsRenameHotelToLodgingEnabled: false,\r\n },\r\n },\r\n};\r\n\r\n","import PropTypes from 'prop-types';\r\n\r\nexport const ImageModelPropTypes = PropTypes.shape({\r\n FinalSrc: PropTypes.string,\r\n Src: PropTypes.string,\r\n Width: PropTypes.number,\r\n Height: PropTypes.number,\r\n CropSettings: PropTypes.shape({\r\n SourceX: PropTypes.number,\r\n SourceY: PropTypes.number,\r\n SourceWidth: PropTypes.number,\r\n SourceHeight: PropTypes.number,\r\n }),\r\n IsIncluded: PropTypes.bool,\r\n});\r\n","import _ from 'underscore';\r\n\r\nimport {\r\n ImageExperienceImage, constants as C\r\n} from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nconst AspectRatioTolerance = 0.01;\r\n\r\n// Attention!!: DO NOT touch this algorithm unless sync with MT/DE.\r\n// This logic is also implemented on DE side.\r\n// originalBoxToCrop { SourceWidth, SourceHeight, SourceX, SourceY }\r\nexport const getCenterCroppedSettings = (originalBoxToCrop, aspectRatio, shouldIgnoreCropSetting, setCroppingType) => {\r\n const {\r\n SourceWidth: centerContainerWidth,\r\n SourceHeight: centerContainerHeight,\r\n } = originalBoxToCrop;\r\n const originalRatio = centerContainerWidth / centerContainerHeight;\r\n const cropSettings = _.defaults({}, originalBoxToCrop);\r\n\r\n if (shouldIgnoreCropSetting) {\r\n return cropSettings;\r\n }\r\n\r\n if (Math.abs(originalRatio - aspectRatio) > AspectRatioTolerance) {\r\n // If the target ratio is narrower than the original\r\n if (aspectRatio <= originalRatio) {\r\n // Use the same height, get the width from the original height\r\n const scaledSourceWidth = Math.round(cropSettings.SourceHeight * aspectRatio);\r\n\r\n // Since we use the full height, Y is still 0\r\n // Make sure we crop the middle section horionzontally\r\n const centerX =\r\n Math.round((cropSettings.SourceWidth - scaledSourceWidth) / 2) + cropSettings.SourceX;\r\n\r\n cropSettings.SourceWidth = scaledSourceWidth;\r\n cropSettings.SourceX = centerX;\r\n } else {\r\n // Use the same width, get the height from the original width\r\n const scaledSourceHeight = Math.round(cropSettings.SourceWidth / aspectRatio);\r\n\r\n // We use full width, X is 0.\r\n // Make sure we crop the middle section vertically\r\n const middleY = Math.round((\r\n cropSettings.SourceHeight - scaledSourceHeight) / 2) + cropSettings.SourceY;\r\n\r\n cropSettings.SourceHeight = scaledSourceHeight;\r\n cropSettings.SourceY = middleY;\r\n }\r\n }\r\n\r\n if (setCroppingType) {\r\n cropSettings.CroppingType = 'CenterCrop';\r\n }\r\n\r\n return cropSettings;\r\n};\r\n\r\nexport const getAutoCroppedImagesForRatios = ({\r\n originalImageToCrop,\r\n aspectRatios,\r\n maxCropBox,\r\n imageOption = C.defaultImageOption,\r\n aspectRatioOption = C.defaultAspectRatioOption,\r\n isRecommendedImage = false,\r\n defaultRatioToInclude, // optional, if omit, compute a ratio from aspectRatios\r\n disableEdit = false,\r\n useOriginalImageSize = false,\r\n setCroppingType = false,\r\n}) => {\r\n const width = useOriginalImageSize ? originalImageToCrop.OriginalWidth : originalImageToCrop.Width;\r\n const height = useOriginalImageSize ? originalImageToCrop.OriginalHeight : originalImageToCrop.Height;\r\n const src = useOriginalImageSize ? originalImageToCrop.OriginalUrl : originalImageToCrop.Src;\r\n const boxToCrop = maxCropBox || {\r\n SourceWidth: width,\r\n SourceHeight: height,\r\n SourceX: 0,\r\n SourceY: 0,\r\n };\r\n const defaultRatio = defaultRatioToInclude ||\r\n (imageOption === C.imageOptionKeys.Logo && aspectRatioOption ?\r\n _.result(aspectRatios, aspectRatioOption) :\r\n C.getDefaultRatio(boxToCrop.SourceWidth, boxToCrop.SourceHeight, aspectRatios));\r\n\r\n const imagesToReturn = _.map(\r\n aspectRatios,\r\n (cropInfo) => {\r\n const croppedImageData = {\r\n id: originalImageToCrop.Id,\r\n idString: originalImageToCrop.IdString,\r\n src,\r\n width,\r\n height,\r\n text: originalImageToCrop.Text,\r\n source: originalImageToCrop.source,\r\n originalSourceType: originalImageToCrop.originalSourceType,\r\n };\r\n\r\n // By default, the whole image is the crop setting\r\n const cropSettings = getCenterCroppedSettings(boxToCrop, cropInfo.aspectRatio, cropInfo.shouldIgnoreCropSetting, setCroppingType);\r\n\r\n croppedImageData.cropSettings = cropSettings;\r\n croppedImageData.type = cropInfo.type;\r\n croppedImageData.associationType = cropInfo.associationType;\r\n croppedImageData.isLogo = cropInfo.isLogo;\r\n croppedImageData.isPortrait = cropInfo.isPortrait;\r\n croppedImageData.isIncluded = cropInfo.aspectRatio === _.result(defaultRatio, 'aspectRatio');\r\n croppedImageData.isRecommendedImage = isRecommendedImage;\r\n croppedImageData.disableEdit = disableEdit;\r\n\r\n return new ImageExperienceImage(croppedImageData);\r\n }\r\n );\r\n\r\n return imagesToReturn;\r\n};\r\n\r\nexport const processCroppedImages = ({\r\n imageOption,\r\n croppedImages,\r\n aspectRatios,\r\n isMultimediaAdinMSANEnabled,\r\n}) => {\r\n croppedImages.forEach((image) => {\r\n if (imageOption !== C.imageOptionKeys.Logo) {\r\n if (isMultimediaAdinMSANEnabled) {\r\n image.setIncluded(true);\r\n image.setAutoCropping(true);\r\n }\r\n\r\n const aspectRatio = _.findWhere(aspectRatios, { type: image.type });\r\n if (image.width < aspectRatio.minSize[0] || image.height < aspectRatio.minSize[1]) {\r\n image.setIncluded(false);\r\n }\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * Return the image objects\r\n *\r\n * @param {Object} originalImageToCrop - ImageExperienceImage Object\r\n * @param {boolean} isMultimediaAd - If it is responsive for Multimedia Ads\r\n * @param {object} maxCropBox - Max crop box\r\n * @returns {Array} - Array of image objects\r\n */\r\nexport const getAutoCroppedImages = ({\r\n originalImageToCrop,\r\n isMultimediaAd = false,\r\n isMultimediaAdinMSANEnabled,\r\n maxCropBox,\r\n imageOption = C.defaultImageOption,\r\n aspectRatioOption = C.defaultAspectRatioOption,\r\n isRecommendedImage = false,\r\n isCombinedMsanAndMmaAspectRatios,\r\n disableEdit = false,\r\n isMMAV2Enabled = false,\r\n isDisplayAds = false,\r\n isPortraitImage = false,\r\n isBoost200x100ImageEnabled = false,\r\n isBoostNewAspectRatioSupportEnabled = false,\r\n isStoreAppProng = false,\r\n isStoreAppSpotLight = false,\r\n isStoreAppTransparentLogo = false,\r\n isLinkedInAd = false,\r\n isUnifiedAppCampaignWindowsStore = false,\r\n setCroppingType = false,\r\n isPMaxAspectRatiosV2Enabled = false,\r\n}) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n imageOption,\r\n isMMAV2Enabled,\r\n isDisplayAds,\r\n isPortraitImage,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n isStoreAppProng,\r\n isStoreAppSpotLight,\r\n isStoreAppTransparentLogo,\r\n isLinkedInAd,\r\n isUnifiedAppCampaignWindowsStore,\r\n isPMaxAspectRatiosV2Enabled,\r\n });\r\n\r\n // wrap all logics into method getAutoCroppedImagesForRatios\r\n const autoCroppingImages = getAutoCroppedImagesForRatios({\r\n originalImageToCrop,\r\n aspectRatios,\r\n maxCropBox,\r\n imageOption,\r\n aspectRatioOption,\r\n isRecommendedImage,\r\n disableEdit,\r\n useOriginalImageSize: isDisplayAds,\r\n setCroppingType,\r\n });\r\n\r\n processCroppedImages({\r\n imageOption,\r\n croppedImages: autoCroppingImages,\r\n aspectRatios,\r\n isMultimediaAdinMSANEnabled,\r\n });\r\n\r\n return autoCroppingImages;\r\n};\r\n","import { constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nfunction validateCropSettings({\r\n tag,\r\n originalImage,\r\n cropSettings,\r\n minWidth,\r\n minHeight,\r\n aspectRatio,\r\n logger,\r\n isExpandedImage = false,\r\n}) {\r\n if (originalImage.width < cropSettings.SourceWidth) {\r\n logger.trace(`${tag} provided invalid cropsettings for ${aspectRatio} originalWidth:${originalImage.width} ${tag}CropWidth:${cropSettings.SourceWidth} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (originalImage.height < cropSettings.SourceHeight) {\r\n logger.trace(`${tag} provided invalid cropsettings for ${aspectRatio} originalHeight:${originalImage.height} ${tag}CropHeight:${cropSettings.SourceHeight} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceHeight < 0) {\r\n logger.trace(`${tag} provided invalid SourceHeight ${cropSettings.SourceHeight} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceWidth < 0) {\r\n logger.trace(`${tag} provided invalid SourceWidth ${cropSettings.SourceWidth} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceX < 0) {\r\n logger.trace(`${tag} provided invalid X ${cropSettings.SourceX} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceY < 0) {\r\n logger.trace(`${tag} provided invalid Y ${cropSettings.SourceY} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceX + cropSettings.SourceWidth > originalImage.width) {\r\n logger.trace(`${tag} dimensions exceed width of image: CropX: ${cropSettings.SourceX} CropWidth: ${cropSettings.SourceWidth} ImageWidth: ${originalImage.width} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (cropSettings.SourceY + cropSettings.SourceHeight > originalImage.height) {\r\n logger.trace(`${tag} dimensions exceed height of image: CropY ${cropSettings.SourceY} CropHeight: ${cropSettings.SourceHeight} ImageWidth: ${originalImage.height} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (minWidth && minWidth > cropSettings.SourceWidth) {\r\n logger.trace(`${tag} width does not meet minWidth: CropWidth: ${cropSettings.SourceWidth} MinWidth: ${minWidth} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n if (minHeight && minHeight > cropSettings.SourceHeight) {\r\n logger.trace(`${tag} height does not meet minHeight: CropHeight: ${cropSettings.SourceHeight} MinHeight: ${minHeight} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n const tolerance = 0.01;\r\n if (!isExpandedImage && Math.abs((cropSettings.SourceWidth / cropSettings.SourceHeight) - (originalImage.width / originalImage.height)) < tolerance) {\r\n logger.trace(`${tag} target aspect ratio equal to the origin image aspect ratio: CropHeight: ${cropSettings.SourceHeight} CropWidth: ${cropSettings.SourceWidth} OriginHeight: ${originalImage.height} OriginWidth:${originalImage.width} imageSrc:${originalImage.Src}`);\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateSmartCropSettings({\r\n originalImage,\r\n cropSettings,\r\n minWidth,\r\n minHeight,\r\n aspectRatio,\r\n smartCropActivity,\r\n}) {\r\n return validateCropSettings({\r\n tag: 'Smart crop',\r\n originalImage,\r\n cropSettings,\r\n minWidth,\r\n minHeight,\r\n aspectRatio,\r\n logger: smartCropActivity,\r\n });\r\n}\r\n\r\nexport function validateExpandedCropSettings({\r\n imageExpansionType,\r\n expandedImageWidth,\r\n expandedImageHeight,\r\n expandedImageUrl,\r\n cropSettings,\r\n aspectRatio,\r\n minWidth,\r\n minHeight,\r\n logger,\r\n}) {\r\n // if it's None, means the new image cropping data is not available\r\n // will fallback to use the original image cropping data (smart crop)\r\n if (imageExpansionType === C.ImageExpansionType.None) {\r\n return true;\r\n }\r\n const originalImage = {\r\n width: expandedImageWidth,\r\n height: expandedImageHeight,\r\n Src: expandedImageUrl,\r\n };\r\n\r\n if (!expandedImageWidth || !expandedImageHeight) {\r\n logger.trace(`invalid expanded image dimensions: width: ${expandedImageWidth} height: ${expandedImageHeight}`);\r\n // can't recover from this error\r\n throw new Error(`invalid expanded image dimensions: width: ${expandedImageWidth} height: ${expandedImageHeight}`);\r\n }\r\n\r\n return validateCropSettings({\r\n tag: `ImageFitting[${imageExpansionType}]`,\r\n originalImage,\r\n cropSettings,\r\n minWidth,\r\n minHeight,\r\n aspectRatio,\r\n logger,\r\n isExpandedImage: true,\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { convertAspectRatioToDecimal } from '@bingads-webui-campaign/media-common-utils';\r\nimport {\r\n ImageExperienceImage, constants as C\r\n} from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nimport {\r\n getAutoCroppedImages,\r\n getAutoCroppedImagesForRatios,\r\n processCroppedImages\r\n} from './get-cropped-image';\r\nimport { validateSmartCropSettings } from './validate-crop-settings';\r\n\r\n\r\n/**\r\n * Return the image objects\r\n *\r\n * @param {Object} mediaRepository - Media repository to get smart crop settings\r\n * @param {Object} originalImageToCrop - ImageExperienceImage Object\r\n * @param {string} originalImageToCrop.Src - source of the image\r\n * @param {Number} originalImageToCrop.width - width of the image\r\n * @param {Number} originalImageToCrop.height - height of the image\r\n * @param {Object} smartCropActivity - instrumentation for smart crop\r\n * @param {Object} isMultimediaAd - true if current is mma\r\n * @param {Object} isMultimediaAdinMSANEnabled - true if current is msan mma\r\n * @returns {Array} - Array of image objects\r\n */\r\nexport const getSmartCroppedImagesAsync = ({\r\n mediaRepository,\r\n originalImageToCrop,\r\n smartCropActivity,\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n imageOption = C.defaultImageOption,\r\n aspectRatioOption = C.defaultAspectRatioOption,\r\n isImageAdExtensionMode,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isMMAV2Enabled,\r\n isMSANBoostEnabled,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n isAudienceAdSmartCropEnabled,\r\n isPmaxSmartCropEnabled,\r\n isDisplayAds,\r\n isAudienceAd,\r\n isStoreAppProng = false,\r\n isStoreAppSpotLight = false,\r\n isStoreAppTransparentLogo = false,\r\n isLinkedInAd = false,\r\n isUnifiedAppCampaignWindowsStore = false,\r\n setCroppingType = false,\r\n isPMaxAspectRatiosV2Enabled = false,\r\n}) => {\r\n if (!(\r\n (isMultimediaAd) ||\r\n (isAudienceAdSmartCropEnabled && isDisplayAds) ||\r\n (isAudienceAdSmartCropEnabled && isMultimediaAdinMSANEnabled && isAudienceAd) ||\r\n (isAudienceAdSmartCropEnabled && isImageAdExtensionMode) ||\r\n (isPmaxSmartCropEnabled && isCombinedMsanAndMmaAspectRatios)\r\n ) || isMSANBoostEnabled || isStoreAppProng || isStoreAppSpotLight || isStoreAppTransparentLogo\r\n || isLinkedInAd || isUnifiedAppCampaignWindowsStore) {\r\n return Promise.resolve(getAutoCroppedImages({\r\n originalImageToCrop,\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n imageOption,\r\n aspectRatioOption,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isMMAV2Enabled,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n isDisplayAds,\r\n isStoreAppProng,\r\n isStoreAppSpotLight,\r\n isStoreAppTransparentLogo,\r\n isLinkedInAd,\r\n isUnifiedAppCampaignWindowsStore,\r\n isPMaxAspectRatiosV2Enabled,\r\n }));\r\n }\r\n\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n imageOption,\r\n isDisplayAds,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n isMMAV2Enabled,\r\n isPMaxAspectRatiosV2Enabled,\r\n });\r\n const defaultRatio = imageOption === C.imageOptionKeys.Logo && aspectRatioOption ?\r\n _.result(aspectRatios, aspectRatioOption) :\r\n C.getDefaultRatio(originalImageToCrop.Width, originalImageToCrop.Height, aspectRatios);\r\n\r\n const placementSettings = _.map(aspectRatios, cropInfo => ({\r\n aspectRatio: cropInfo.aspectRatio,\r\n type: cropInfo.type,\r\n associationType: cropInfo.associationType,\r\n stringKey: cropInfo.stringKey,\r\n previewTypeStringKey: cropInfo.previewTypeStringKey,\r\n imagePreviewHeight: cropInfo.imagePreviewHeight,\r\n minSize: cropInfo.minSize,\r\n previewSettings: cropInfo.previewSettings,\r\n }));\r\n let imagesToReturn = [];\r\n const aspectRatiosWithSmartCrop = {};\r\n\r\n return mediaRepository.generateSmartCrop({\r\n imageUrl: originalImageToCrop.Src,\r\n placementSettings: _.reject(placementSettings, i => i.type === 'OriginalImage'),\r\n }).then((assets) => {\r\n imagesToReturn = _.compact(_.map(assets, (asset) => {\r\n const croppedImageData = {\r\n id: originalImageToCrop.Id,\r\n idString: originalImageToCrop.IdString,\r\n src: originalImageToCrop.Src,\r\n width: originalImageToCrop.width,\r\n height: originalImageToCrop.height,\r\n source: originalImageToCrop.source,\r\n originalSourceType: originalImageToCrop.originalSourceType,\r\n };\r\n const cropSettings = {\r\n SourceWidth: asset.Width,\r\n SourceHeight: asset.Height,\r\n SourceX: asset.X,\r\n SourceY: asset.Y,\r\n };\r\n if (setCroppingType) {\r\n cropSettings.CroppingType = 'SmartCrop';\r\n }\r\n\r\n croppedImageData.cropSettings = cropSettings;\r\n const ratioDecimalStr = convertAspectRatioToDecimal(asset.AspectRatio);\r\n const placementSetting = _.find(aspectRatios, ratio =>\r\n ratio.aspectRatio.toString() === ratioDecimalStr);\r\n const minSize = _.propertyOf(placementSetting)('minSize') || [];\r\n\r\n croppedImageData.type = _.propertyOf(placementSetting)('type');\r\n croppedImageData.associationType = _.propertyOf(placementSetting)('associationType');\r\n croppedImageData.isLogo = _.propertyOf(placementSetting)('isLogo');\r\n croppedImageData.isPortrait = _.propertyOf(placementSetting)('isPortrait');\r\n croppedImageData.isIncluded = defaultRatio &&\r\n ratioDecimalStr === _.result(defaultRatio, 'aspectRatio').toString();\r\n\r\n if (!validateSmartCropSettings({\r\n cropSettings,\r\n originalImage: originalImageToCrop,\r\n aspectRatio: _.propertyOf(placementSetting)('aspectRatio'),\r\n minWidth: minSize.length === 2 && minSize[0],\r\n minHeight: minSize.length === 2 && minSize[1],\r\n smartCropActivity,\r\n })) {\r\n return null;\r\n }\r\n\r\n aspectRatiosWithSmartCrop[croppedImageData.type] = true;\r\n\r\n return new ImageExperienceImage(croppedImageData);\r\n }));\r\n }).catch(() => {\r\n // swallow the error\r\n }).then(() => {\r\n if (imagesToReturn.length < Object.keys(aspectRatios).length) {\r\n const missingAspectRatios =\r\n _.pick(aspectRatios, ({ type }) => !aspectRatiosWithSmartCrop[type]);\r\n const autoCropSettings =\r\n getAutoCroppedImagesForRatios({\r\n originalImageToCrop,\r\n aspectRatios: missingAspectRatios,\r\n defaultRatioToInclude: defaultRatio,\r\n setCroppingType,\r\n });\r\n\r\n imagesToReturn = imagesToReturn.concat(autoCropSettings);\r\n }\r\n\r\n processCroppedImages({\r\n croppedImages: imagesToReturn,\r\n isMultimediaAdinMSANEnabled,\r\n aspectRatios,\r\n });\r\n\r\n return imagesToReturn;\r\n });\r\n};\r\n","import Promise from 'bluebird';\r\n\r\nexport const getGenericImageObjectAsync = (genericImageSource) => {\r\n const nativeImageObject = new Image();\r\n\r\n let resolver = null;\r\n\r\n const getImagePromise = new Promise((resolve) => {\r\n resolver = resolve;\r\n });\r\n\r\n nativeImageObject.onload = () => {\r\n resolver({\r\n Src: nativeImageObject.src,\r\n Width: nativeImageObject.naturalWidth,\r\n Height: nativeImageObject.naturalHeight,\r\n Type: 'Image191x100',\r\n });\r\n };\r\n\r\n nativeImageObject.src = genericImageSource;\r\n\r\n return getImagePromise;\r\n};\r\n","const aspectRatioStrings = {\r\n Image191x100: '191X100',\r\n Image4x1: '400X100',\r\n Image1x1: '100X100',\r\n Image1x2: '50X100',\r\n Image178x100: '178X100',\r\n Image172x100: '172X100',\r\n Image169x100: '169X100',\r\n Image150x100: '150X100',\r\n Image155x100: '155X100',\r\n Image133x100: '133X100',\r\n Image93x100: '93X100',\r\n Image201x100: '201X100',\r\n Image200x100: '200X100',\r\n Image153x100: '153X100',\r\n Image124x100: '124X100',\r\n Image120x100: '120X100',\r\n};\r\n\r\nconst aspectRationStringsForPmax = {\r\n Image191x100: 'AssetGroup191X100',\r\n Image4x1: 'AssetGroup400X100',\r\n Image1x1: 'AssetGroup100X100',\r\n Image1x2: 'AssetGroup100X200',\r\n Image178x100: 'AssetGroup178X100',\r\n Image150x100: 'AssetGroup150X100',\r\n Image133x100: 'AssetGroup133X100',\r\n};\r\n\r\nconst aspectRationStringsForPmaxV2 = {\r\n Image191x100: 'AssetGroup191X100',\r\n Image4x1: 'AssetGroup400X100',\r\n Image1x1: 'AssetGroup100X100',\r\n Image1x2: 'AssetGroup100X200',\r\n Image201x100: 'MSAN201X100',\r\n Image169x100: 'MSAN169X100',\r\n Image153x100: 'MSAN153X100',\r\n Image124x100: 'MSAN124X100',\r\n};\r\n\r\nexport const getMediaPlacementType = ({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isPMaxAspectRatiosV2Enabled,\r\n type,\r\n}) => {\r\n if (isCombinedMsanAndMmaAspectRatios) {\r\n return isPMaxAspectRatiosV2Enabled\r\n ? `${aspectRationStringsForPmaxV2[type]}`\r\n : `${aspectRationStringsForPmax[type]}`;\r\n }\r\n let adType = 'ImageExtension';\r\n if (isMultimediaAd) {\r\n adType = 'MultiMediaAd';\r\n } else if (isMultimediaAdinMSANEnabled) {\r\n adType = 'MSAN';\r\n }\r\n\r\n return `${adType}${aspectRatioStrings[type]}`;\r\n};\r\n\r\n","/* eslint-disable no-param-reassign */\r\nimport { find } from 'underscore';\r\nimport { getMediaPlacementType } from './get-media-placement-type';\r\n\r\nexport function updatePlacementWithBaseCropSettings({\r\n placement,\r\n mtImgObject,\r\n IsCroppingbasedOriginal = false,\r\n setCroppingType = false,\r\n}) {\r\n if (mtImgObject.CropSettingOnOriginal) {\r\n const { SourceX, SourceY } = mtImgObject.CropSettingOnOriginal;\r\n\r\n placement.BaseImage.setCropSettings(mtImgObject.CropSettingOnOriginal);\r\n placement.BaseImage.src = mtImgObject.OriginalUrl;\r\n placement.BaseImage.height = mtImgObject.OriginalHeight;\r\n placement.BaseImage.width = mtImgObject.OriginalWidth;\r\n\r\n placement.src = mtImgObject.OriginalUrl;\r\n placement.height = mtImgObject.OriginalHeight;\r\n placement.width = mtImgObject.OriginalWidth;\r\n\r\n if (!IsCroppingbasedOriginal) {\r\n // transform any auto/smart cropping back to the dimensions of the original image\r\n placement.cropSettings.SourceX += SourceX;\r\n placement.cropSettings.SourceY += SourceY;\r\n }\r\n\r\n if (setCroppingType) {\r\n // bulk cropping are all manual crop\r\n placement.cropSettings.CroppingType = 'ManualCrop';\r\n }\r\n }\r\n}\r\n\r\nexport function updatePlacementWithPlacementSettings({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isPMaxAspectRatiosV2Enabled,\r\n placement,\r\n mtImgObject,\r\n updatePlacementSettings,\r\n setCroppingType = false,\r\n}) {\r\n if (updatePlacementSettings &&\r\n mtImgObject.PlacementSettings && mtImgObject.PlacementSettings.length > 0) {\r\n const currentType = getMediaPlacementType({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isPMaxAspectRatiosV2Enabled,\r\n type: placement.type,\r\n });\r\n const { CropSetting } =\r\n find(mtImgObject.PlacementSettings, ({ MediaPlacementType }) => (\r\n MediaPlacementType === currentType\r\n )) || {};\r\n if (CropSetting) {\r\n placement.setCropSettings(CropSetting);\r\n\r\n if (setCroppingType) {\r\n // bulk cropping are all manual crop\r\n placement.cropSettings.CroppingType = 'ManualCrop';\r\n }\r\n }\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nclass ImageSizeValidationError extends Error {\r\n constructor({\r\n imageWidth,\r\n imageHeight,\r\n minWidth,\r\n minHeight,\r\n }) {\r\n super('SizeValidationError'); // if you change this, please update getMultiAddedImageErrorMessage\r\n\r\n this.imageWidthInternal = imageWidth;\r\n this.imageHeightInternal = imageHeight;\r\n this.minWidthInternal = minWidth;\r\n this.minHeightInternal = minHeight;\r\n }\r\n\r\n get imageWidth() {\r\n return this.imageWidthInternal;\r\n }\r\n\r\n get imageHeight() {\r\n return this.imageHeightInternal;\r\n }\r\n\r\n get minWidth() {\r\n return this.minWidthInternal;\r\n }\r\n\r\n get minHeight() {\r\n return this.minHeightInternal;\r\n }\r\n}\r\n\r\nclass ImageLoadError extends Error {\r\n constructor() {\r\n super('ImageLoadError');\r\n }\r\n}\r\n\r\nconst getImageDetailAsync = (url) => {\r\n const img = new Image();\r\n\r\n let imageLoadedResolve = null;\r\n let imageLoadedReject = null;\r\n const imageLoadedPromise = new Promise((resolve, reject) => {\r\n imageLoadedResolve = resolve;\r\n imageLoadedReject = reject;\r\n });\r\n\r\n img.src = url;\r\n\r\n img.onload = () => {\r\n imageLoadedResolve(img);\r\n };\r\n\r\n img.onerror = (err) => {\r\n imageLoadedReject(new ImageLoadError(err));\r\n };\r\n\r\n return imageLoadedPromise;\r\n};\r\n\r\nconst validateImageWithDimension = function (\r\n width,\r\n height,\r\n imageType,\r\n isMultimediaAd = false,\r\n imageOption = C.defaultImageOption,\r\n isMMAV2Enabled = false,\r\n isCombinedMsanAndMmaAspectRatios = false,\r\n isDisplayAds = false,\r\n isPortraitImage = false,\r\n isStoreAppProng = false,\r\n isStoreAppSpotLight = false,\r\n isStoreAppTransparentLogo = false,\r\n isUnifiedAppCampaignWindowsStore = false,\r\n isLinkedInAd = false,\r\n isPMaxAspectRatiosV2Enabled = false,\r\n isBrandKit = false\r\n) {\r\n const minimumSizeForImage =\r\n C.getMinimumSizeForImage(\r\n imageType,\r\n isMultimediaAd,\r\n imageOption,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isMMAV2Enabled,\r\n isDisplayAds,\r\n isPortraitImage,\r\n false /* isBoost200x100ImageEnabled */,\r\n false /* isBoostNewAspectRatioSupportEnabled */,\r\n isStoreAppProng,\r\n isStoreAppSpotLight,\r\n isStoreAppTransparentLogo,\r\n isLinkedInAd,\r\n isUnifiedAppCampaignWindowsStore,\r\n isPMaxAspectRatiosV2Enabled,\r\n isBrandKit\r\n );\r\n\r\n if (width < minimumSizeForImage[0] ||\r\n height < minimumSizeForImage[1]) {\r\n return new ImageSizeValidationError({\r\n imageWidth: width,\r\n imageHeight: height,\r\n minWidth: minimumSizeForImage[0],\r\n minHeight: minimumSizeForImage[1],\r\n });\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst validateImageSyncAsyncWithDimensionParams = ({\r\n imageSource,\r\n minimumHeight,\r\n minimumWidth,\r\n}) => {\r\n const img = new Image();\r\n\r\n let imageLoadedResolve = null;\r\n let imageLoadedReject = null;\r\n const imageLoadedPromise = new Promise((resolve, reject) => {\r\n imageLoadedResolve = resolve;\r\n imageLoadedReject = reject;\r\n });\r\n\r\n img.src = imageSource;\r\n\r\n img.onload = () => {\r\n if (img.naturalWidth < minimumWidth ||\r\n img.naturalHeight < minimumHeight) {\r\n imageLoadedReject(new ImageSizeValidationError({\r\n imageWidth: img.naturalWidth,\r\n imageHeight: img.naturalHeight,\r\n minWidth: minimumWidth,\r\n minHeight: minimumHeight,\r\n }));\r\n } else {\r\n imageLoadedResolve();\r\n }\r\n };\r\n\r\n img.onerror = (err) => {\r\n imageLoadedReject(new ImageLoadError(err));\r\n };\r\n\r\n return imageLoadedPromise;\r\n};\r\n\r\nconst validateImageSizeAsync = function (\r\n imageSource,\r\n imageType,\r\n isMultimediaAd = false,\r\n imageOption = C.defaultImageOption,\r\n isMMAV2Enabled = false,\r\n isCombinedMsanAndMmaAspectRatios = false,\r\n isDisplayAds = false,\r\n isPortraitImage = false,\r\n isStoreAppProng = false,\r\n isStoreAppSpotLight = false,\r\n isStoreAppTransparentLogo = false,\r\n isLinkedInAd = false,\r\n isPMaxAspectRatiosV2Enabled = false,\r\n isBrandKit = false\r\n) {\r\n const minimumSize = C.getMinimumSizeForImage(imageType, isMultimediaAd, imageOption, isCombinedMsanAndMmaAspectRatios, isMMAV2Enabled, isDisplayAds, isPortraitImage, false /* isBoost200x100ImageEnabled */, false /* isBoostNewAspectRatioSupportEnabled */, isStoreAppProng, isStoreAppSpotLight, isStoreAppTransparentLogo, isLinkedInAd, false /* isUnifiedAppCampaignWindowsStore */, isPMaxAspectRatiosV2Enabled, isBrandKit);\r\n\r\n return validateImageSyncAsyncWithDimensionParams({\r\n imageSource,\r\n minimumHeight: minimumSize[1],\r\n minimumWidth: minimumSize[0],\r\n });\r\n};\r\n\r\nfunction getImageValidationErrorMessage(e, i18n, isMultiple = false, skipDimension = false) {\r\n const error = _.result(e, 'message', '');\r\n\r\n // If image failed in upscale, we also treat them as validation error.\r\n if (e instanceof ImageSizeValidationError || error === 'ImageAIUpScaleFailed') {\r\n let stringTemplateKey = isMultiple ? 'ImageExperience_MultipleUpload_SizeValidationFailTemplate' : 'ImageExperience_SizeValidationFailTemplate';\r\n if (skipDimension) {\r\n stringTemplateKey = isMultiple ? 'ImageExperience_MultipleUpload_SizeValidationFailTemplate_WithoutDimension' : 'ImageExperience_SizeValidationFailTemplate_WithoutDimension';\r\n }\r\n /* istanbul ignore else */\r\n if (e.isDueToResizing) {\r\n stringTemplateKey = skipDimension ? 'ImageExperience_SizeValidationFailTemplate_WithDetail_WithoutDimension' : 'ImageExperience_SizeValidationFailTemplate_WithDetail';\r\n }\r\n\r\n return i18n.getString(stringTemplateKey, {\r\n width: e.minWidth,\r\n height: e.minHeight,\r\n });\r\n }\r\n\r\n if (error) {\r\n return i18n.getString(`ImageExperience_Error_${error}`) || error;\r\n }\r\n return null;\r\n}\r\n\r\nfunction getMultiAddedImageErrorMessage(errors, i18n) {\r\n const uniqErrors = _.chain(errors).uniq().filter(e => _.isString(e)).value();\r\n const hasValidateError = _.some(uniqErrors, e => e.indexOf('SizeValidationError') > -1);\r\n const hasApiError = _.some(uniqErrors, e => e.indexOf('SizeValidationError') === -1);\r\n\r\n if (hasValidateError && hasApiError) {\r\n return i18n.getString('ImageExperience_Error_MixedError');\r\n } else if (hasValidateError) {\r\n return i18n.getString('ImageExperience_Error_ValidationError');\r\n } else if (hasApiError) {\r\n return i18n.getString('ImageExperience_Error_APIError');\r\n }\r\n\r\n return '';\r\n}\r\n\r\n\r\nconst validateMultipleImagesSizesAsync = ({\r\n imageSources,\r\n minimumHeight,\r\n minimumWidth,\r\n}) => {\r\n const validations = [];\r\n\r\n _.each(imageSources, (imageSource) => {\r\n validations.push(validateImageSyncAsyncWithDimensionParams({\r\n imageSource,\r\n minimumHeight,\r\n minimumWidth,\r\n }));\r\n });\r\n\r\n return Promise.all(validations);\r\n};\r\n\r\nexport {\r\n ImageSizeValidationError, ImageLoadError,\r\n validateImageSizeAsync,\r\n validateImageWithDimension,\r\n validateImageSyncAsyncWithDimensionParams,\r\n validateMultipleImagesSizesAsync,\r\n getImageValidationErrorMessage,\r\n getMultiAddedImageErrorMessage,\r\n getImageDetailAsync,\r\n};\r\n","import _ from 'underscore';\r\n// import { convertAspectRatioToDecimal } from '@bingads-webui-campaign/media-common-utils';\r\nimport { ImageExperienceImage, constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nimport {\r\n getCenterCroppedSettings,\r\n processCroppedImages\r\n} from './get-cropped-image';\r\nimport {\r\n validateSmartCropSettings,\r\n validateExpandedCropSettings,\r\n} from './validate-crop-settings';\r\n\r\nconst ORIGINAL_IMAGE = 'OriginalImage';\r\n/**\r\n * Return the image objects\r\n *\r\n * @param {Object} originalImageToExpand - ImageExperienceImage Object\r\n * @param {string} originalImageToExpand.Src - source of the image\r\n * @param {Number} originalImageToExpand.width - width of the image\r\n * @param {Number} originalImageToExpand.height - height of the image\r\n * @param {Object} isMultimediaAd - true if current is mma\r\n * @param {Object} isMultimediaAdinMSANEnabled - true if current is msan mma\r\n * @returns {Array} - Array of image objects, ImageExperienceImage[]\r\n */\r\nexport const getExpandedImages = ({\r\n originalImageToExpand,\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n isMMAV2Enabled,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n logger,\r\n isPMaxAspectRatiosV2Enabled,\r\n}) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd,\r\n isMultimediaAdinMSANEnabled,\r\n isCombinedMsanAndMmaAspectRatios,\r\n imageOption: C.imageOptionKeys.Image,\r\n isMMAV2Enabled,\r\n isBoost200x100ImageEnabled,\r\n isBoostNewAspectRatioSupportEnabled,\r\n isPMaxAspectRatiosV2Enabled,\r\n });\r\n const defaultRatio = C.getDefaultRatio(originalImageToExpand.Width, originalImageToExpand.Height, aspectRatios);\r\n\r\n const expandedImageObj = {\r\n expandedImageHeight: originalImageToExpand.expandedImageHeight,\r\n expandedImageWidth: originalImageToExpand.expandedImageWidth,\r\n expandedImageCropSettings: originalImageToExpand.expandedImageCropSettings,\r\n originalImageCropSettings: originalImageToExpand.originalImageCropSettings || originalImageToExpand.cropSettings,\r\n imageExpansionType: originalImageToExpand.imageExpansionType,\r\n paddingColor: originalImageToExpand.paddingColor,\r\n };\r\n\r\n const {\r\n expandedImageUrl,\r\n expandedImageHeight,\r\n expandedImageWidth,\r\n expandedImageCropSettings, // [{AspectRatio:double, CropSetting: {SourceHeight, SourceWidth, SourceX, SourceY}}]\r\n originalImageCropSettings, // [{AspectRatio:double, CropSetting: {SourceHeight, SourceWidth, SourceX, SourceY}}]\r\n paddingColor,\r\n imageExpansionType,\r\n } = expandedImageObj || {};\r\n\r\n // combine original and expanded crop settings by aspect ratio\r\n const cropMetaData = {};\r\n _.each(originalImageCropSettings, (crop) => {\r\n const croppingType = imageExpansionType === C.ImageExpansionType.Outpainting || crop.AspectRatio === ORIGINAL_IMAGE ? C.CroppingType.CenterCrop : C.CroppingType.SmartCrop;\r\n cropMetaData[crop.AspectRatio] = { originCrop: { ...crop.CropSetting, CroppingType: croppingType } };\r\n });\r\n _.each(expandedImageCropSettings, (crop) => {\r\n cropMetaData[crop.AspectRatio] = { ...cropMetaData[crop.AspectRatio], expandedCrop: crop.CropSetting, CroppingType: C.CroppingType.CenterCrop };\r\n });\r\n _.each(aspectRatios, (placementSetting) => {\r\n const key = placementSetting.type === ORIGINAL_IMAGE ? ORIGINAL_IMAGE : placementSetting.aspectRatio;\r\n cropMetaData[key] = { ...cropMetaData[key], placementSetting };\r\n });\r\n\r\n const imageList = _.compact(_.map(cropMetaData, ({ originCrop, expandedCrop, placementSetting }) => {\r\n const expandedImageData = {\r\n id: originalImageToExpand.Id,\r\n idString: originalImageToExpand.IdString,\r\n src: originalImageToExpand.Src,\r\n width: originalImageToExpand.width,\r\n height: originalImageToExpand.height,\r\n source: originalImageToExpand.source,\r\n\r\n // image extension properties\r\n imageExpansionType,\r\n expandedImageUrl,\r\n expandedImageWidth,\r\n expandedImageHeight,\r\n expandedImageCropSettings: expandedCrop,\r\n originalImageCropSettings: originCrop,\r\n paddingColor,\r\n };\r\n\r\n const curAspectRatio = _.propertyOf(placementSetting)('aspectRatio');\r\n const ratioDecimalStr = `${curAspectRatio}`;\r\n const minSize = _.propertyOf(placementSetting)('minSize') || [];\r\n\r\n expandedImageData.type = _.propertyOf(placementSetting)('type');\r\n expandedImageData.associationType = _.propertyOf(placementSetting)('associationType');\r\n expandedImageData.isLogo = _.propertyOf(placementSetting)('isLogo');\r\n expandedImageData.isPortrait = _.propertyOf(placementSetting)('isPortrait');\r\n expandedImageData.isIncluded = defaultRatio && ratioDecimalStr === _.result(defaultRatio, 'aspectRatio').toString();\r\n\r\n\r\n // validate smart croping on original image\r\n if (!originCrop || !validateSmartCropSettings({\r\n cropSettings: originCrop,\r\n originalImage: originalImageToExpand,\r\n aspectRatio: curAspectRatio,\r\n minWidth: minSize.length === 2 && minSize[0],\r\n minHeight: minSize.length === 2 && minSize[1],\r\n smartCropActivity: logger,\r\n })) {\r\n // fill missing aspect ratios with central crop\r\n expandedImageData.originalImageCropSettings = getCenterCroppedSettings({\r\n SourceX: 0, SourceY: 0, SourceWidth: originalImageToExpand.Width, SourceHeight: originalImageToExpand.Height,\r\n }, curAspectRatio, false, true);\r\n\r\n if (expandedImageData.type !== ORIGINAL_IMAGE) {\r\n // this ratios are the reason why we need to expand the image\r\n logger.trace(`Invalid original crop settings for aspect ratio: ${curAspectRatio}, imageSrc: ${originalImageToExpand.Src}, ${JSON.stringify(originCrop)}, ${JSON.stringify(expandedImageData.originalImageCropSettings)}`);\r\n }\r\n }\r\n\r\n // validate expanded crop settings on expanded image\r\n if (!expandedCrop || !validateExpandedCropSettings({\r\n imageExpansionType,\r\n expandedImageWidth,\r\n expandedImageHeight,\r\n expandedImageUrl,\r\n cropSettings: expandedCrop,\r\n aspectRatio: curAspectRatio,\r\n minWidth: minSize.length === 2 && minSize[0],\r\n minHeight: minSize.length === 2 && minSize[1],\r\n logger,\r\n })) {\r\n expandedImageData.expandedImageCropSettings = undefined;\r\n\r\n if (expandedImageData.type !== ORIGINAL_IMAGE) {\r\n // but this should not happen, because this is what we try to fix by image expansion\r\n logger.error(`Invalid expanded crop settings for aspect ratio: ${curAspectRatio}, imageSrc: ${originalImageToExpand.Src}, ${JSON.stringify(expandedCrop)}, ${JSON.stringify(expandedImageData.expandedImageCropSettings)}, ${JSON.stringify(expandedImageData.expandedImageCropSettings)}`);\r\n }\r\n }\r\n\r\n return new ImageExperienceImage(expandedImageData);\r\n }));\r\n\r\n processCroppedImages({\r\n croppedImages: imageList,\r\n isMultimediaAdinMSANEnabled,\r\n aspectRatios,\r\n });\r\n\r\n return imageList;\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { odata } from '@bingads-webui/http-util';\r\n\r\nconst getAccountSettingRepository = ({ aid, cid, oDataConfig }) => ({\r\n getAccountSettings: (settings) => {\r\n const url = `${oDataConfig.oDataPath}/Customers(${cid})/Accounts(${aid})?$select=${settings.join(',')}`;\r\n return odata.get(url, { oDataToken: oDataConfig.oDataToken });\r\n },\r\n});\r\n\r\nexport const getAssetEnhancementSettings = ({\r\n aid, cid, oDataConfig,\r\n}) => {\r\n const settings = ['AssetAIEnhancementOptout'];\r\n const accountSettingRepository = getAccountSettingRepository({ aid, cid, oDataConfig });\r\n return accountSettingRepository.getAccountSettings(settings).then((response) => {\r\n const pickedSettings = _.pick(response, settings);\r\n return pickedSettings || {};\r\n });\r\n};\r\n","import _ from 'underscore';\r\n\r\nconst serializecsvRow = (imageInfo, aid) => {\r\n let url;\r\n let metadata;\r\n let baseId;\r\n let sourceType;\r\n\r\n if (_.isString(imageInfo)) {\r\n url = imageInfo;\r\n } else {\r\n ({\r\n url, metadata, baseId, sourceType,\r\n } = imageInfo);\r\n }\r\n\r\n // some image urls have commas, which will\r\n // interfere with bulk upsert operation\r\n const encodedUrl = url.replace(/,/g, encodeURIComponent(','));\r\n\r\n return `Image,Active,GenericImage,,,${aid},${encodedUrl},${baseId || ''},${metadata || ''},${sourceType || ''}`;\r\n};\r\n\r\nexport const serializeCSV = (imageInfos, aid) => {\r\n if (_.isEmpty(imageInfos)) {\r\n return [];\r\n }\r\n\r\n const csvHeader = 'Type,Status,Sub Type,Id, Name,Parent Id,Url,Base id,Metadata,Source Type';\r\n const csvFormat = 'Format Version,,,,6,,,,';\r\n const csvRows = _.map(imageInfos, imageInfo => serializecsvRow(imageInfo, aid));\r\n const csv = _.flatten([csvHeader, csvFormat, csvRows]);\r\n\r\n return csv;\r\n};\r\n\r\n\r\nexport const extractIds = (csvData) => {\r\n let errorColIndex = -1;\r\n let imageIdColIndex = -1;\r\n const headers = csvData[0];\r\n\r\n _.each(headers, (col, index) => {\r\n if (col === 'Id') {\r\n imageIdColIndex = index;\r\n }\r\n if (col === 'Error') {\r\n errorColIndex = index;\r\n }\r\n });\r\n\r\n if (imageIdColIndex < 0 && errorColIndex < 0) {\r\n return [];\r\n }\r\n\r\n const ids = [];\r\n // first line is header, second line is format version. needs to be skipped.\r\n const data = csvData.slice(2);\r\n _.each(data, (row) => {\r\n if (errorColIndex !== -1 && row[errorColIndex]) {\r\n ids.push({ code: row[errorColIndex] });\r\n } else if (imageIdColIndex !== -1) {\r\n ids.push(row[imageIdColIndex]);\r\n }\r\n });\r\n\r\n return ids;\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { serializeCSV, extractIds } from './bulkify';\r\n\r\nconst MAX_RECOMEND_TIMEOUT = 60 * 1000; // set recommend timeout to 60 seconds\r\n\r\nexport const parseImageFitResponse = (res) => {\r\n const ret = {\r\n expandedImageUrl: res.ImageUrl,\r\n imageExpansionType: res.ImageExpansionType, // None/WhitePadding/SingleColorPadding/Outpainting\r\n\r\n // [{aspectRatio:double, cropSetting: {sourceHeight, sourceWidth, sourceX, sourceY}}]\r\n originalImageCropSettings: _.map(res.OriginalImageCropSetting, crop => ({\r\n AspectRatio: crop.aspectRatio,\r\n CropSetting: {\r\n SourceHeight: crop.cropSetting && crop.cropSetting.sourceHeight,\r\n SourceWidth: crop.cropSetting && crop.cropSetting.sourceWidth,\r\n SourceX: crop.cropSetting && crop.cropSetting.sourceX,\r\n SourceY: crop.cropSetting && crop.cropSetting.sourceY,\r\n },\r\n })),\r\n // [{aspectRatio:double, cropSetting: {sourceHeight, sourceWidth, sourceX, sourceY}}]\r\n expandedImageCropSettings: _.map(res.ImageCropSetting, crop => ({\r\n AspectRatio: crop.aspectRatio,\r\n CropSetting: {\r\n SourceHeight: crop.cropSetting && crop.cropSetting.sourceHeight,\r\n SourceWidth: crop.cropSetting && crop.cropSetting.sourceWidth,\r\n SourceX: crop.cropSetting && crop.cropSetting.sourceX,\r\n SourceY: crop.cropSetting && crop.cropSetting.sourceY,\r\n },\r\n })),\r\n expandedImageWidth: res.ImageDimension && res.ImageDimension.w,\r\n expandedImageHeight: res.ImageDimension && res.ImageDimension.h,\r\n paddingColor: res.PaddingColor,\r\n };\r\n return ret;\r\n};\r\n\r\nexport class ImageOData {\r\n constructor(cid, aid, oDataConfig, timeout) {\r\n this.cid = cid;\r\n this.aid = aid;\r\n this.baseURL = `${oDataConfig.odataPath}/Customers(${this.cid})/Accounts(${this.aid})/`;\r\n this.orderByDefault = 'UploadedTime';\r\n this.orderDefault = 'desc';\r\n this.oDataConfig = {\r\n oDataToken: oDataConfig.odataToken,\r\n oDataTokenType: oDataConfig.oDataTokenType,\r\n applicationName: oDataConfig.applicationName,\r\n beforeSend: oDataConfig.beforeSend,\r\n };\r\n this.maxTimeout = timeout || MAX_RECOMEND_TIMEOUT;\r\n }\r\n\r\n /**\r\n * Gets previously uploaded images (20).\r\n * @param {number} sortById - id for the sort criteria\r\n * @param {string} searchTerm - search term for query\r\n * @return {Promise} Response from the oData call.\r\n */\r\n getExistingImages({\r\n sortQuery,\r\n searchTerm,\r\n pageNumber,\r\n pageSize,\r\n filterTerm = '',\r\n }) {\r\n const top = pageSize;\r\n const skip = pageNumber * pageSize;\r\n\r\n const filterArray = [];\r\n\r\n if (searchTerm && searchTerm.length > 0) {\r\n filterArray.push(`contains(Text, '${searchTerm}')`);\r\n }\r\n\r\n if (filterTerm && filterTerm.length > 0) {\r\n filterArray.push(filterTerm);\r\n }\r\n\r\n const filterQuery = filterArray.length > 0 ? `&$filter=${filterArray.join(' and ')}` : '';\r\n\r\n const url = `${this.baseURL}/Images?mediaenabledentityfilter=ResponsiveAd&${sortQuery}${filterQuery}`;\r\n\r\n const query = {\r\n $top: top,\r\n $skip: skip,\r\n count: true,\r\n };\r\n\r\n return odata.get(url, _.extend({ data: query }, this.oDataConfig));\r\n }\r\n\r\n /**\r\n * Gets previously uploaded images\r\n * @param {string} sortBy - sort by\r\n * @param {string} sortDirection - 'asc'/'desc',\r\n * @param {string} searchTerm - search term for query\r\n * @param {number} minWidth - filter by min-width\r\n * @param {number} minHeight - filter by min-height\r\n * @param {string} dateAddedStart - filter by UploadedTime\r\n * @param {string} dateAddedEnd - filter by UploadedTime\r\n * @param {string} sourceType - 'Unknown', 'UserUploaded', 'GoogleImported',\r\n * @param {number} skip,\r\n * @param {number} count,\r\n * @return {Promise} Response from the oData call.\r\n */\r\n getImages({\r\n sortBy,\r\n sortDirection,\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n sourceType,\r\n skip,\r\n count,\r\n }) {\r\n // compose sort query\r\n let sortQuery = sortBy ? `$orderby=${sortBy}` : '';\r\n if (sortQuery && sortDirection) {\r\n sortQuery += ` ${sortDirection}`;\r\n }\r\n\r\n // $filter\r\n const filters = [];\r\n if (searchTerm) {\r\n // use BroadSearchFields to search both image name and image id\r\n filters.push(`contains(BroadSearchFields, '${searchTerm}')`);\r\n }\r\n if (minWidth) {\r\n filters.push(`Width gt ${minWidth}`);\r\n }\r\n if (minHeight) {\r\n filters.push(`Height gt ${minHeight}`);\r\n }\r\n if (dateAddedStart && dateAddedEnd && dateAddedStart === dateAddedEnd) {\r\n filters.push(`UploadedTime eq ${dateAddedStart}`);\r\n } else {\r\n if (dateAddedStart) {\r\n filters.push(`UploadedTime ge ${dateAddedStart}`);\r\n }\r\n if (dateAddedEnd) {\r\n filters.push(`UploadedTime le ${dateAddedEnd}`);\r\n }\r\n }\r\n if (sourceType) {\r\n filters.push(`SourceType eq '${sourceType}'`);\r\n }\r\n let searchQuery = filters.join(' and ');\r\n if (searchQuery) {\r\n searchQuery = `$filter=${searchQuery}`;\r\n }\r\n\r\n const params = sortQuery && searchQuery ? `${sortQuery}&${searchQuery}` : (sortQuery || searchQuery);\r\n const url = `${this.baseURL}Images?mediaenabledentityfilter=ResponsiveAd&${params}`;\r\n\r\n const query = {\r\n $top: count,\r\n $skip: skip,\r\n count: true,\r\n };\r\n\r\n return odata.get(url, _.extend({ data: query }, this.oDataConfig));\r\n }\r\n\r\n /**\r\n * Gets image specified by the id.\r\n * @param {number} imageId Id of the image to be requested.\r\n * @param {boolean} isImageFittingEnabled - if the image fitting is enabled or not\r\n * @param {string} adType - for different adType, MT returns image fittings with different assets ratios\r\n * @return {Promise} Response from the oData call.\r\n */\r\n getImageByIdAsync(imageId, isImageFittingEnabled, adType = 'Audience') {\r\n let url = `${this.baseURL}Images(${imageId})`;\r\n if (isImageFittingEnabled) {\r\n url = `${url}?AdType=${adType}`;\r\n }\r\n\r\n return odata.get(url, this.oDataConfig);\r\n }\r\n\r\n uploadImageAsync(imageData, activityLogger = null, inProgress = null, isLogo = false, name = '') { // eslint-disable-line max-len\r\n if (activityLogger) {\r\n // Log upload image data\r\n const dataToLog = JSON.stringify(imageData).substr(0, 100);\r\n\r\n activityLogger.trace(JSON.stringify(dataToLog));\r\n }\r\n\r\n let processedImageData = imageData;\r\n\r\n const base64 = 'base64,';\r\n const base64Index = imageData.indexOf(base64);\r\n\r\n processedImageData = base64Index > -1\r\n ? imageData.substr(base64Index + base64.length)\r\n : imageData;\r\n\r\n const url = `${this.baseURL}Images`;\r\n\r\n const requestBody = {\r\n Data: processedImageData,\r\n Type: isLogo ? 'Logo' : 'GenericImage',\r\n };\r\n\r\n if (name) {\r\n requestBody.Text = name;\r\n }\r\n\r\n return odata.post(url, _.extend({ data: requestBody, progress: inProgress }, this.oDataConfig))\r\n .then(\r\n image => ({ imageId: image.value, errors: [] }),\r\n error => this.processUploadSingleImageRejection(error, activityLogger)\r\n );\r\n }\r\n\r\n updateImageAsync(imageData) {\r\n const url = `${this.baseURL}Images(${imageData.Id})`;\r\n\r\n const requestBody = {\r\n Text: imageData.Text,\r\n Type: imageData.Type,\r\n Url: imageData.Url,\r\n Data: imageData.Data,\r\n };\r\n\r\n return odata.patch(url, _.extend({ data: requestBody }, this.oDataConfig));\r\n }\r\n\r\n deleteImageAsync(imageData) {\r\n const url = `${this.baseURL}Images(${imageData.IdString})`;\r\n\r\n return odata.delete(url, this.oDataConfig);\r\n }\r\n\r\n /**\r\n * Cleans the error response object and sets error messages into an array.\r\n * @param {object} error Object with errors returned by the oData call.\r\n * @param {Object} activityLogger - logger object for activity\r\n *\r\n * @return {array} Array of error messages.\r\n */\r\n processUploadSingleImageRejection(error, activityLogger) {\r\n // const errMsg = this.i18nErrors.getODataErrors(error.body.value);\r\n // _.each(errMsg, (err) => {\r\n // errors.push(err.message);\r\n // });\r\n\r\n if (activityLogger) {\r\n activityLogger.error(JSON.stringify(error));\r\n }\r\n\r\n return error && error.body && error.body.value;\r\n }\r\n\r\n /**\r\n * Save image asset by url and meta data,\r\n * @param {array} imageInfos Array of image info including url and metaData\r\n *\r\n * @return {Promise} Array of image ids. Different metaData will generate different image id.\r\n */\r\n bulkSaveImagesByUrl = (imageInfos) => {\r\n const url = `${this.baseURL}/Default.BulkUpsert`;\r\n const csvRows = serializeCSV(imageInfos, this.aid);\r\n\r\n if (_.isEmpty(csvRows)) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return odata.post(url, _.defaults({\r\n data: { CsvRows: csvRows },\r\n }, this.oDataConfig)).timeout(this.maxTimeout)\r\n .then((res) => {\r\n if (_.isEmpty(res)) {\r\n return [];\r\n }\r\n\r\n return extractIds(res);\r\n });\r\n };\r\n\r\n addAsset = ({\r\n url,\r\n sourceType,\r\n }) => {\r\n const requestUrl = `${this.baseURL}Folders/Default.AddAsset`;\r\n const requestBody = {\r\n FolderId: null,\r\n Asset: {\r\n '@odata.type': '#Model.Image',\r\n Url: url,\r\n Type: 'GenericImage',\r\n SourceType: sourceType,\r\n },\r\n };\r\n\r\n return odata.post(requestUrl, _.extend({ data: requestBody }, this.oDataConfig))\r\n .then(res => res.value);\r\n };\r\n\r\n imageFit = ({\r\n imageUrl,\r\n placements, // [{ aspectRatio: doulbe, minHeight: int }]\r\n skipOutpainting = false,\r\n }) => {\r\n const url = `${this.baseURL}Images/Default.FitImageWithCustomCrop?enableOutpainting=${!skipOutpainting}`;\r\n const requestBody = {\r\n ImageUrl: imageUrl,\r\n Placements: placements,\r\n };\r\n\r\n const ret = odata.post(url, _.extend({ data: requestBody }, this.oDataConfig)).then((res) => {\r\n // map the property names of response data\r\n const value = parseImageFitResponse(res);\r\n return value;\r\n });\r\n return ret;\r\n };\r\n}\r\n","export const EntityName = {\r\n AccountEntity: 'Account',\r\n AdGroupEntity: 'AdGroup',\r\n AdEntity: 'Ad',\r\n AuctionInsightEntity: 'AuctionInsight',\r\n AudiencesAssociationEntity: 'AdGroupAudienceAssociation',\r\n AssetGroupEntity: 'AssetGroup',\r\n CampaignEntity: 'Campaign',\r\n KeywordEntity: 'Keyword',\r\n SearchTermEntity: 'SearchTerm',\r\n DsaTargetEntity: 'DsaTarget',\r\n PortfolioBidStrategyEntity: 'PortfolioBidStrategy',\r\n};\r\n\r\nexport const EdmEntityName = {\r\n AccountEdmEntity: 'Accounts',\r\n AdEdmEntity: 'Ads',\r\n AdGroupEdmEntity: 'AdGroups',\r\n AdGroupCriterionEdmEntity: 'AdGroupCriterions',\r\n AssetGroupEdmEntity: 'AssetGroups',\r\n CampaignEdmEntity: 'Campaigns',\r\n CampaignCriterionEdmEntity: 'CampaignCriterions',\r\n KeywordEdmEntity: 'Keywords',\r\n AudienceCriterionWithBIEdmEntity: 'AudienceCriterionWithBIs',\r\n DsaTargetEdmEntity: 'DsaTargets',\r\n PortfolioBidStrategyEdmEntity: 'PortfolioBidStrategies',\r\n};\r\n\r\n// For entities like DsaTarget, they should escape the logic of quering\r\n// on their parent entities even if no filter is applied\r\nexport const PersistentEntity = [\r\n EntityName.DsaTargetEntity,\r\n EntityName.PortfolioBidStrategyEntity,\r\n // Accounts Summary should always query on the Account entity, regardless of filter.\r\n EntityName.AccountEntity,\r\n];\r\n","// Start your code from here for component inlinechart-query-builder\r\nimport _ from 'underscore';\r\nimport * as Constants from './constants';\r\n\r\nexport class InlineChartRequest {\r\n constructor(options) {\r\n this.edm = options.edm;\r\n this.state = options.state;\r\n this.pageContext = options.pageContext;\r\n }\r\n\r\n getParentLevels = () => {\r\n const currentCampaign = this.pageContext.CurrentCampaign;\r\n const currentAdGroup = this.pageContext.CurrentAdGroup;\r\n const parentLevels = [];\r\n\r\n if (currentCampaign) {\r\n parentLevels.push({\r\n name: Constants.EdmEntityName.CampaignEdmEntity,\r\n id: currentCampaign.Id,\r\n });\r\n }\r\n\r\n if (currentAdGroup) {\r\n parentLevels.push({\r\n name: Constants.EdmEntityName.AdGroupEdmEntity,\r\n id: currentAdGroup.Id,\r\n });\r\n }\r\n\r\n return parentLevels;\r\n };\r\n\r\n getDefaultEntityBaseOnParentLevels = (parentLevels) => {\r\n let entity = Constants.EntityName.CampaignEntity;\r\n const currentCampaign = this.pageContext.CurrentCampaign;\r\n const isPerfMaxCampaign = _.findWhere(currentCampaign?.CampaignSettings, { '@odata.type': '#Model.PerformanceMaxSetting' });\r\n const isAppCampaign = _.findWhere(currentCampaign?.CampaignSettings, { '@odata.type': '#Model.AppSetting' });\r\n\r\n if (parentLevels && parentLevels.constructor === Array && parentLevels.length > 0) {\r\n if (parentLevels[parentLevels.length - 1].name ===\r\n Constants.EdmEntityName.AdGroupEdmEntity) {\r\n entity = Constants.EntityName.AdEntity;\r\n } else if (parentLevels[parentLevels.length - 1].name ===\r\n Constants.EdmEntityName.CampaignEdmEntity) {\r\n if (isPerfMaxCampaign || isAppCampaign) {\r\n entity = Constants.EntityName.AssetGroupEntity;\r\n } else {\r\n entity = Constants.EntityName.AdGroupEntity;\r\n }\r\n }\r\n }\r\n\r\n return entity;\r\n };\r\n\r\n isFilterActive = (filter) => {\r\n const filterString = filter && filter.odataV4 ?\r\n filter.odataV4({ ignoreCase: false }) : '';\r\n return (!!filterString);\r\n };\r\n\r\n getCurrentEntity = (entity, filter) => {\r\n if (_.contains(Constants.PersistentEntity, entity)) {\r\n return entity;\r\n }\r\n\r\n // When there is no filter applied, PerformanceTimeSerieis request for all entities\r\n // (Adsgroup, Ads, Kewords) needs to query on Campaign entity inorder to improve\r\n // MT performance.\r\n // the PerformanceData fetched is for Account or Campaign based on the parent level.\r\n // Always use default parent entity if current entity is SearchTerm\r\n if (!this.isFilterActive(filter) || entity === Constants.EntityName.SearchTermEntity) {\r\n // No filters or SearchTerm use default parent entity\r\n return this.getDefaultEntityBaseOnParentLevels(this.getParentLevels());\r\n }\r\n return entity || this.getDefaultEntityBaseOnParentLevels(this.getParentLevels());\r\n };\r\n\r\n formatDateString = (dateStr) => {\r\n const leftPadding = s => ((s.length === 1) ? `0${s}` : s);\r\n const dt = new Date(Date.parse(dateStr));\r\n const year = `${dt.getFullYear()}`;\r\n const month = `${dt.getMonth() + 1}`;\r\n const day = `${dt.getDate()}`;\r\n\r\n return `${year}-${leftPadding(month)}-${leftPadding(day)}`;\r\n };\r\n\r\n getEntityCollectionName = (name) => {\r\n const nameMapping = {\r\n Campaign: Constants.EdmEntityName.CampaignEdmEntity,\r\n Keyword: Constants.EdmEntityName.KeywordEdmEntity,\r\n Account: Constants.EdmEntityName.AccountEdmEntity,\r\n // Negative keywords also show keyword performance trend\r\n NegativeKeyword: Constants.EdmEntityName.KeywordEdmEntity,\r\n // Negative keyword lists also show keyword performance trend\r\n NegativeKeywordList: Constants.EdmEntityName.KeywordEdmEntity,\r\n AdGroup: Constants.EdmEntityName.AdGroupEdmEntity,\r\n AssetGroup: Constants.EdmEntityName.AssetGroupEdmEntity,\r\n Ad: Constants.EdmEntityName.AdEdmEntity,\r\n CampaignCriterion: Constants.EdmEntityName.CampaignCriterionEdmEntity,\r\n AdGroupCriterion: Constants.EdmEntityName.AdGroupCriterionEdmEntity,\r\n AudienceCriterionWithBI: Constants.EdmEntityName.AudienceCriterionWithBIEdmEntity,\r\n DsaTarget: Constants.EdmEntityName.DsaTargetEdmEntity,\r\n PortfolioBidStrategy: Constants.EdmEntityName.PortfolioBidStrategyEdmEntity,\r\n };\r\n\r\n if (nameMapping[name]) {\r\n return nameMapping[name];\r\n }\r\n return name;\r\n };\r\n\r\n generateRequest = (context, metric) => {\r\n const request = {};\r\n const entity = context.currentEntity\r\n ? this.getCurrentEntity(context.currentEntity, context.filter)\r\n : Constants.EntityName.CampaignEntity;\r\n\r\n let accountModes = null;\r\n if (entity === Constants.EntityName.AccountEntity\r\n && this.pageContext.CurrentTabId === 'Performance') {\r\n if (this.pageContext.CurrentGridName === 'SmartPerformanceGrid') {\r\n accountModes = 'Smart';\r\n } else if (this.pageContext.CurrentGridName === 'PerformanceGrid') {\r\n accountModes = 'Expert';\r\n }\r\n }\r\n\r\n if (entity === Constants.EntityName.CampaignEntity ||\r\n entity === Constants.EntityName.AdGroupEntity ||\r\n entity === Constants.EntityName.AdEntity ||\r\n entity === Constants.EntityName.KeywordEntity) {\r\n request.currentCustomerId = this.pageContext.CurrentCustomer.Id;\r\n }\r\n\r\n _.extend(request, {\r\n parentLevels: this.getParentLevels(),\r\n edmEntity: this.getEntityCollectionName(entity),\r\n entity,\r\n startDate: context.period\r\n ? this.formatDateString(context.period.start)\r\n : null,\r\n endDate: context.period\r\n ? this.formatDateString(context.period.end)\r\n : null,\r\n compareStartDate: context.period && context.period.compared\r\n ? this.formatDateString(context.period.compared.start)\r\n : null,\r\n compareEndDate: context.period && context.period.compared\r\n ? this.formatDateString(context.period.compared.end)\r\n : null,\r\n granularity: context.granularity,\r\n metrics: context.metric || metric,\r\n filters: context.currentEntity === Constants.EntityName.SearchTermEntity\r\n ? null // Ignore filters on SearchTerm\r\n : context.filter,\r\n movingAverage: context.isMovingAverageOn,\r\n });\r\n if (accountModes) {\r\n _.extend(request, {\r\n accountModes,\r\n });\r\n }\r\n return request;\r\n };\r\n\r\n getQuery = context => this.generateRequest(context, 'All');\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport * as Constants from './constants';\r\nimport { InlineChartRequest } from './inline-chart-request';\r\n\r\nexport class InlineChartService {\r\n constructor(options) {\r\n this.request = new InlineChartRequest(options);\r\n this.jsdata = options.jsdata;\r\n this.edm = options.edm;\r\n }\r\n\r\n findAll = context => (new Promise((resolve, reject) => {\r\n const filterObj = context.filter;\r\n // Ignore filter string for SearchTerm\r\n const filterString = filterObj && filterObj.odataV4\r\n && context.currentEntity !== Constants.EntityName.SearchTermEntity ?\r\n filterObj.odataV4({ ignoreCase: false }) :\r\n '';\r\n\r\n const request = this.request.getQuery(context);\r\n if (!this.jsdata.PerformanceTimeSeries || !this.jsdata.PerformanceTimeSeries.findAll) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line consistent-return\r\n return this.jsdata.PerformanceTimeSeries.findAll(\r\n {\r\n where: filterString,\r\n entitySet: this.getScope(request).toJSON(),\r\n },\r\n {\r\n // bypass cache, as inline chart needs data aligned with grid, we need always\r\n // update to date here use bypassCache instead of cacheResponse as elsewhere\r\n // (performance card) may cache the response\r\n bypassCache: true,\r\n }\r\n ).then((rawData) => {\r\n resolve(rawData);\r\n }, reject);\r\n }));\r\n\r\n getScope = (request) => {\r\n let navigation = null;\r\n\r\n navigation = this.getNavigation(request.edmEntity);\r\n\r\n _.each(request.parentLevels, (nav) => {\r\n const navLocal = nav;\r\n if (navLocal && _.isString(navLocal.id)) {\r\n navLocal.id = parseInt(nav.id, 10);\r\n }\r\n navigation = navigation[navLocal.name].$withKey(navLocal.id);\r\n });\r\n\r\n if (request && request.edmEntity) {\r\n navigation = navigation[request.edmEntity];\r\n }\r\n\r\n const entitySetArgs = {\r\n granularity: `Enum.Granularity'${request.granularity}'`,\r\n startDate: request.startDate,\r\n endDate: request.endDate,\r\n comparisonStartDate: request.compareStartDate ? request.compareStartDate : null,\r\n comparisonEndDate: request.compareEndDate ? request.compareEndDate : null,\r\n metrics: `'${request.metrics}'`,\r\n movingAverage: request.movingAverage,\r\n };\r\n\r\n if (request.currentCustomerId) {\r\n entitySetArgs.currentCustomerId = request.currentCustomerId;\r\n }\r\n\r\n const isHierarchical = request.edmEntity === Constants.EdmEntityName.AccountEdmEntity;\r\n if (isHierarchical && request.accountModes) {\r\n entitySetArgs.accountModes = `'${request.accountModes}'`;\r\n }\r\n\r\n const entitySet = navigation[isHierarchical ? 'Default.HierarchicalPerformanceTimeSeries' : 'Default.PerformanceTimeSeries'].$call(entitySetArgs);\r\n return entitySet;\r\n };\r\n\r\n getNavigation = (entityType) => {\r\n switch (entityType) {\r\n case Constants.EdmEntityName.AccountEdmEntity:\r\n return this.edm.currentCustomer;\r\n case Constants.EdmEntityName.CampaignEdmEntity:\r\n return this.edm.currentAccount;\r\n default:\r\n return this.edm.currentAccount;\r\n }\r\n };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport { InlineChart } from '@bingads-webui-campaign-react/inline-chart';\r\nimport { InlineChartService } from '@bingads-webui-campaign/inline-chart-service';\r\nimport { InlineChartPreferences } from '@bingads-webui-campaign/inline-chart-preferences';\r\nimport { FluctuationService } from '@bingads-webui-campaign/fluctuation-service';\r\nimport { perfMarkerPropTypes } from '@bingads-webui/performance-marker';\r\n\r\n/**\r\n * Creates an inline chart with an accompanying data source and set of chart options.\r\n */\r\nexport class InlineChartWrapper extends React.PureComponent {\r\n static propTypes = {\r\n /**\r\n * grid-preferences adapter.\r\n */\r\n adapter: PropTypes.shape({\r\n registerSubadapter: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * Used for adding a date change listener.\r\n */\r\n addDateChangeListener: PropTypes.func.isRequired,\r\n /**\r\n * Entity data model.\r\n */\r\n edm: PropTypes.shape({\r\n currentAccount: PropTypes.any,\r\n currentCustomer: PropTypes.any,\r\n }).isRequired,\r\n\r\n /**\r\n * New data range as props for inline-chart whenever there is a date range update\r\n */\r\n dateRange: PropTypes.shape({}),\r\n /**\r\n * Type of entity to fetch chart data for.\r\n */\r\n entityType: PropTypes.string,\r\n /**\r\n * Filter object.\r\n */\r\n filter: PropTypes.shape({\r\n odataV4: PropTypes.func,\r\n }),\r\n /**\r\n * i18n\r\n * */\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n formatDate: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * Path to use for inline images like fluctuation-bulb.png.\r\n */\r\n imagePath: PropTypes.string,\r\n /**\r\n * instrumentation component.\r\n */\r\n instrumentation: PropTypes.shape({\r\n addScenario: PropTypes.func,\r\n inlineChart: PropTypes.shape({\r\n create: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n /**\r\n * True if Fluctuations feature is enabled.\r\n */\r\n isFluctuationsEnabled: PropTypes.bool,\r\n IsFluctuationExperimentEnabled: PropTypes.bool,\r\n /**\r\n * True if chart should be visible.\r\n */\r\n isShowChart: PropTypes.bool.isRequired,\r\n\r\n /**\r\n * True if chart panel should be hidden.\r\n */\r\n hideChartPanel: PropTypes.bool,\r\n\r\n /**\r\n * jsdata resource used for fetching chart data.\r\n */\r\n jsdata: PropTypes.shape({\r\n PerformanceTimeSeries: PropTypes.shape({\r\n findAll: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n /**\r\n * PageContext component.\r\n */\r\n pageContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentCampaign: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentAccount: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentUser: PropTypes.shape({\r\n Id: PropTypes.number,\r\n }),\r\n CurrentTabId: PropTypes.string,\r\n }).isRequired,\r\n /**\r\n * config component.\r\n */\r\n pathConfig: PropTypes.shape({\r\n get: PropTypes.func,\r\n }).isRequired,\r\n /**\r\n * preferenceService component.\r\n */\r\n preferenceService: PropTypes.shape({}).isRequired,\r\n /**\r\n * Resize window change listener to set highchart container width.\r\n */\r\n resizeChartListener: PropTypes.func.isRequired,\r\n resizeEventHandler: PropTypes.func,\r\n /**\r\n * state component.\r\n */\r\n state: PropTypes.shape({}).isRequired,\r\n /**\r\n * grid-preferences store.\r\n */\r\n store: PropTypes.shape({}).isRequired,\r\n /**\r\n * Auth token used by Fluctuation service.\r\n */\r\n token: PropTypes.string,\r\n /**\r\n * Theme colors, can be null\r\n */\r\n seriesColors: PropTypes.shape({\r\n primary: PropTypes.shape({\r\n original: PropTypes.string,\r\n comparative: PropTypes.string,\r\n }),\r\n secondary: PropTypes.shape({\r\n original: PropTypes.string,\r\n comparative: PropTypes.string,\r\n }),\r\n }),\r\n\r\n /**\r\n * Current gridCriterion Type\r\n */\r\n gridCriterionType: PropTypes.string,\r\n\r\n perfMarker: perfMarkerPropTypes,\r\n\r\n serverContext: PropTypes.shape({}),\r\n\r\n gridDataSource: PropTypes.shape({}),\r\n\r\n defaultPrimaryMetric: PropTypes.number,\r\n scope: PropTypes.shape({}),\r\n };\r\n\r\n static defaultProps = {\r\n entityType: null,\r\n filter: null,\r\n imagePath: null,\r\n isFluctuationsEnabled: false,\r\n IsFluctuationExperimentEnabled: false,\r\n hideChartPanel: false,\r\n resizeEventHandler: noop,\r\n token: null,\r\n seriesColors: null,\r\n gridCriterionType: '',\r\n dateRange: null,\r\n perfMarker: null,\r\n serverContext: null,\r\n gridDataSource: null,\r\n defaultPrimaryMetric: null,\r\n scope: {},\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n\r\n // dataSource and chartOptions are created only once during construction\r\n this.dataSource = this.getDataSource();\r\n this.chartOptions = this.getChartOptions();\r\n }\r\n\r\n getDataSource() {\r\n const {\r\n edm,\r\n jsdata,\r\n pageContext,\r\n state,\r\n } = this.props;\r\n\r\n return new InlineChartService({\r\n edm,\r\n jsdata,\r\n pageContext,\r\n state,\r\n });\r\n }\r\n\r\n /**\r\n * Creates the chartOptions object used for dependency injection of legacy components.\r\n * @param {Object} options - Dictionary of legacy components.\r\n * @returns {Object} chartOptions object to be passed in as an InlineChart prop.\r\n */\r\n getChartOptions() {\r\n const {\r\n adapter,\r\n addDateChangeListener,\r\n entityType,\r\n imagePath,\r\n instrumentation,\r\n isFluctuationsEnabled,\r\n IsFluctuationExperimentEnabled,\r\n pageContext,\r\n pathConfig,\r\n preferenceService,\r\n resizeChartListener,\r\n resizeEventHandler,\r\n state,\r\n store,\r\n token,\r\n seriesColors,\r\n gridCriterionType,\r\n hideChartPanel,\r\n defaultPrimaryMetric,\r\n } = this.props;\r\n\r\n const preferences = new InlineChartPreferences(\r\n store,\r\n pathConfig,\r\n adapter,\r\n preferenceService\r\n );\r\n\r\n return {\r\n isFluctuationsEnabled,\r\n isFluctuationsExperiementEnabled: IsFluctuationExperimentEnabled,\r\n hideChartPanel,\r\n defaultPrimaryMetric,\r\n fluctuationService: FluctuationService,\r\n entityType,\r\n preference: preferences,\r\n pageContext,\r\n instrumentation,\r\n token,\r\n pageState: state,\r\n addDateChangeListener,\r\n resizeChartListener,\r\n resizeEventHandler,\r\n imagePath,\r\n seriesColors,\r\n gridCriterionType,\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n i18n,\r\n filter,\r\n isShowChart,\r\n dateRange,\r\n perfMarker,\r\n serverContext,\r\n gridDataSource,\r\n scope,\r\n } = this.props;\r\n\r\n return (<InlineChart\r\n isShowChart={isShowChart}\r\n scope={scope}\r\n i18n={i18n}\r\n filter={filter}\r\n dataSource={this.dataSource}\r\n options={this.chartOptions}\r\n dateRange={dateRange}\r\n perfMarker={perfMarker}\r\n serverContext={serverContext}\r\n gridDataSource={gridDataSource}\r\n />);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { InlineChartWrapper } from './inline-chart-wrapper';\r\n\r\nexport class InlineChartView extends Backbone.View {\r\n constructor(options) {\r\n super(options);\r\n\r\n this.filter = options.filter;\r\n this.isShowChart = true;\r\n this.options = _.omit(options, 'filter', 'isShowChart', 'resizeChartListener');\r\n }\r\n\r\n toggleView() {\r\n this.isShowChart = !this.isShowChart;\r\n this.render();\r\n }\r\n\r\n filterUpdated = (filter) => {\r\n this.filter = filter;\r\n this.render();\r\n };\r\n\r\n resizeChartListener = (handler) => {\r\n this.resizeListener = handler;\r\n };\r\n\r\n resizeChart = (width) => {\r\n if (this.resizeListener && width) {\r\n // Invoke the resize chart listener\r\n this.resizeListener(width);\r\n }\r\n };\r\n\r\n render() {\r\n ReactDOM.render(<InlineChartWrapper\r\n filter={this.filter}\r\n isShowChart={this.isShowChart}\r\n resizeChartListener={this.resizeChartListener}\r\n {...this.options}\r\n />, this.el);\r\n return this;\r\n }\r\n\r\n remove() {\r\n if (this.resizeListener) {\r\n // Invoke the resize chart listener\r\n this.resizeListener = null;\r\n }\r\n ReactDOM.unmountComponentAtNode(this.el);\r\n return super.remove();\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport $ from 'jquery';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { segmentationTypeEnum } from '@bingads-webui-campaign/segmentation-utilities';\r\nimport griddownloadtemplate from '../../template/gridDownload.pug';\r\nimport { getViewModel } from '../viewmodel/gridDownload';\r\n\r\nconst excelDownloadRowLimit = 1000000;\r\nexport const getInlineDownloadBaseDownloadV1Loader = ({\r\n i18n,\r\n pageContext,\r\n actionMap,\r\n userVoice,\r\n s$ReportRule,\r\n s$i18n,\r\n}) => {\r\n const supportedDownloadFormats = _.intersection(s$ReportRule.properties.Format.enum, [\r\n 'Csv',\r\n 'Tsv',\r\n 'Xlsx',\r\n 'Csvzip',\r\n ]);\r\n /**\r\n * @typedef {Object} Repository\r\n * @property {Function} download - download according to given params and return a Promise\r\n */\r\n class InlineDownloadBaseDownloadV1 extends Backbone.View {\r\n /**\r\n * Initialize this Base Download view.\r\n * @param {Object} options - options to this Backbone View\r\n * @param {DownloadFormat[]} downloadFormats - Used download formats in this view\r\n * @see [DownloadFormat]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FInternal%2FEntity%2FInlineReport%2FDownloadFormat.cs&version=GBmaster&_a=contents}\r\n * @param {SegmentationType[]} segmentationTypes - Used segmentation types in this view\r\n * @see [SegmentationType]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FEntity%2FAggregator2%2FSegmentationType.cs&version=GBmaster&_a=contents}\r\n * @param {Repository} repository - Inline download repository which does the real work\r\n * @param {Object} data - data shown in the form, under schema of ReportRule\r\n * @return {void}\r\n */\r\n initialize({\r\n gridId,\r\n totalRecordCount,\r\n repository,\r\n downloadFormats = supportedDownloadFormats,\r\n segmentationTypes = segmentationTypeEnum,\r\n validateSegmentType = () => true,\r\n isFeedbackEnabled = pageContext.Permissions.IsFeedbackEnabled,\r\n data,\r\n }) {\r\n this.repository = repository;\r\n\r\n this.gridId = gridId;\r\n this.turnOffSegmentation = _.isEmpty(segmentationTypes);\r\n\r\n const segmentType = data.SegmentationTypes[0];\r\n this.segmentType = _.contains(segmentationTypes, segmentType) ? segmentType : null;\r\n const GridDownloadViewModel = getViewModel({\r\n i18n,\r\n s$i18n,\r\n pageContext,\r\n });\r\n this.ko_model = new GridDownloadViewModel({\r\n downloadFormats,\r\n segmentationTypes,\r\n });\r\n this.totalRecordCount = totalRecordCount;\r\n this.validateSegmentType = validateSegmentType;\r\n this.isFeedbackEnabled = isFeedbackEnabled;\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .inlinereportdownload-panel .btn-download': 'download',\r\n 'click .inlinereportdownload-panel .btn-cancel': 'cancel',\r\n 'click .inlinereportdownload-panel .dropdown-submenu .dropdown-menu a': 'setSubmenuDefault',\r\n 'click .inlinereportdownload-panel .dropdown-submenu .dropdown-menu a span': 'setSubmenuDefault',\r\n 'mouseenter .inlinereportdownload-panel .dropdown-submenu a': 'showSubmenu',\r\n 'mouseenter .inlinereportdownload-panel .dropdown-aligned li a': 'hideSubmenu',\r\n /** for caller to listen to\r\n 'hideToolbar' : 'onNotifyCaller',\r\n showToolbar' : 'onNotifyCaller' */\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.html(griddownloadtemplate({\r\n i18n,\r\n viewModel: this.ko_model,\r\n }));\r\n ko.applyBindings(this.ko_model, this.el.firstChild);\r\n this.$el.show();\r\n this.trigger('hideToolbar');\r\n if (!this.turnOffSegmentation) {\r\n this.setDefaultSegmentType();\r\n this.$('.segmentOptionGroup').show();\r\n } else {\r\n this.$('.segmentOptionGroup').hide();\r\n }\r\n\r\n if (this.isFeedbackEnabled) {\r\n // this is 3rd party code, need to wait for #feedback-label in the dom, so defer the action;\r\n _.defer(() => {\r\n userVoice.addTrigger('#feedback-label', 'Segmentation', 'Download report');\r\n });\r\n } else {\r\n this.$('#feedback-label').hide();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n download() {\r\n const selectedDownloadType = this.ko_model.downloadType().value;\r\n let selectedSegmentationType;\r\n\r\n if (!this.turnOffSegmentation) {\r\n selectedSegmentationType = (this.ko_model.segmentType() && this.ko_model.segmentType().value !== 'None') ? this.ko_model.segmentType().value : undefined;\r\n if (!this.validateSegmentType(selectedSegmentationType)) {\r\n return;\r\n }\r\n }\r\n\r\n if (selectedDownloadType === 'Xlsx' && this.totalRecordCount > excelDownloadRowLimit) {\r\n this.ko_model.showError('RowLimitExceeded');\r\n return;\r\n }\r\n\r\n // This will enforce cache token to be added to download request\r\n // Only add cache token when segment is the same as in the grid otherwise it is invalid so\r\n // no need to add to the request\r\n if (actionMap) {\r\n actionMap.registerActionMapExtension('taskitems', (metadata) => {\r\n if (!this.turnOffSegmentation\r\n && (metadata && this.segmentType === selectedSegmentationType)) {\r\n metadata.gridIds = [this.gridId]; // eslint-disable-line\r\n } else {\r\n metadata.gridIds = []; // eslint-disable-line\r\n }\r\n return metadata;\r\n });\r\n }\r\n\r\n this.repository.download({\r\n Format: selectedDownloadType,\r\n SegmentationTypes: selectedSegmentationType ? [selectedSegmentationType] : [],\r\n }).then(() => {\r\n this.clear();\r\n }).catch((err) => {\r\n alert(err.message);\r\n });\r\n\r\n this.clear();\r\n }\r\n\r\n cancel() {\r\n this.clear();\r\n }\r\n\r\n remove() {\r\n this.clear();\r\n super.remove();\r\n }\r\n\r\n clear() {\r\n this.undelegateEvents();\r\n ko.cleanNode(this.el);\r\n this.$el.empty();\r\n this.$el.hide();\r\n this.trigger('showToolbar');\r\n }\r\n\r\n setDefaultSegmentType() {\r\n if (this.segmentType) {\r\n const gridSegmentType = this.segmentType;\r\n let matchingSegmentType = null;\r\n _.each(this.ko_model.segmentTypes, (segment) => {\r\n if (segment.children) {\r\n _.each(segment.children, (childSegment) => {\r\n if (childSegment.value === gridSegmentType) {\r\n matchingSegmentType = childSegment;\r\n }\r\n });\r\n } else if (segment.value === gridSegmentType) {\r\n matchingSegmentType = segment;\r\n }\r\n });\r\n this.ko_model.segmentType(matchingSegmentType);\r\n }\r\n }\r\n\r\n setSubmenuDefault(event) {\r\n const target = $(event.target);\r\n target.attr('aria-expanded', 'false');\r\n target.parents('ul').filter(':first').hide();\r\n }\r\n\r\n showSubmenu(event) {\r\n const target = $(event.target);\r\n target.attr('aria-expanded', 'true');\r\n target.siblings('ul').filter(':first').show();\r\n }\r\n\r\n hideSubmenu(event) {\r\n const target = $(event.target);\r\n target.parents('li').siblings('li').children('a[aria-haspopup=true]').attr('aria-expanded', 'false');\r\n target.parents('li').siblings('li').children('ul').hide();\r\n }\r\n }\r\n return InlineDownloadBaseDownloadV1;\r\n};\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport {\r\n localizeSegmentationType,\r\n getSupportedSegmentationTree,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\n\r\nexport const getViewModel = ({\r\n i18n,\r\n s$i18n,\r\n pageContext,\r\n}) => {\r\n function menuItem(type) {\r\n return {\r\n text: localizeSegmentationType({ i18n, type }),\r\n value: type,\r\n children: null,\r\n };\r\n }\r\n class ViewModel {\r\n constructor({\r\n downloadFormats,\r\n segmentationTypes,\r\n // gridId\r\n }) {\r\n const supportedSegmentationTree = getSupportedSegmentationTree({\r\n permissions: pageContext.Permissions,\r\n segmentationTypes,\r\n });\r\n\r\n const segmentOptions = _.map(supportedSegmentationTree, ({ children, name }) => {\r\n if (children) {\r\n return {\r\n text: localizeSegmentationType({ i18n, type: name }),\r\n value: name,\r\n children: _.map(children, childItem => menuItem(childItem.name)),\r\n };\r\n }\r\n\r\n return menuItem(name);\r\n });\r\n\r\n // TODO: [yaoyao] [zhish] uncomment when MT is ready for HourOfDay.\r\n // if(gridId === \"CampaignsGrid\" || gridId === \"AdGroupGrid\") {\r\n // tSubMenu.push(menuItemHourOfDay);\r\n // }\r\n\r\n this.downloadTypes = _.map(downloadFormats, enumItem => ({\r\n text: s$i18n.enum('DownloadFormat', enumItem),\r\n value: enumItem,\r\n }));\r\n this.downloadType = ko.observable(this.downloadTypes[0]);\r\n this.segmentTypes = segmentOptions;\r\n this.segmentType = ko.observable(this.segmentTypes[0]);\r\n\r\n // Error Message Handling\r\n this.errorMessage = ko.observable('');\r\n this.showError = (errorId) => {\r\n const errorMapping = {\r\n RowLimitExceeded: i18n.getString('GridDownloadLimit_RowsExceeded_Alert'),\r\n };\r\n\r\n this.errorMessage(errorMapping[errorId]);\r\n };\r\n\r\n // Enable download or not? Depends on if we are showing error message\r\n this.enableDownload = ko.pureComputed(() => (_.isEmpty(this.errorMessage())));\r\n }\r\n }\r\n return ViewModel;\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\n// In Accounts Summary page, odata component won't fill Account ID as Account ID doesn't exist\r\n// But MT buggy implementation still need Account ID\r\nexport class UtilFunctions {\r\n constructor(options) {\r\n this.i18n = options.i18n;\r\n this.getODataErrors = options.getODataErrors;\r\n this.PageContext = options.pageContext;\r\n }\r\n\r\n getURLWithScope = (urlWithoutScope, isCustomerLevel = false) => (isCustomerLevel ?\r\n `Customers(${this.PageContext.CurrentCustomer.Id})/${urlWithoutScope}` :\r\n `Customers(${this.PageContext.CurrentCustomer.Id})/Accounts(${this.PageContext.CurrentAccount.Id})/${urlWithoutScope}`);\r\n\r\n convertServerSideErrors = (errors) => {\r\n const serverErrors = _.uniq(this.getODataErrors(errors), false, error => error.message);\r\n\r\n const aggregateError = new Promise.AggregateError();\r\n\r\n if (_.isEmpty(serverErrors)) {\r\n aggregateError.push(new Error(this.i18n.getString('GridDownloadFailureMessage')));\r\n }\r\n\r\n aggregateError.push(...serverErrors);\r\n aggregateError.message = this.i18n.formatList(serverErrors.map(err => err.message));\r\n return aggregateError;\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { lockDownSelectionDateRange } from '@bingads-webui-campaign/date-range-utilities';\r\nimport { download } from '@bingads-webui/download-service';\r\nimport poll from './poller';\r\n\r\nimport { UtilFunctions } from './util';\r\n\r\nexport class DownloadReportFunctions {\r\n constructor(options) {\r\n this.i18n = options.i18n;\r\n this.edm = options.edm;\r\n this.odata = options.odata;\r\n this.jsdata = options.jsdata;\r\n this.state = options.state;\r\n this.cm = options.cm;\r\n this.pageContext = options.pageContext;\r\n this.getODataErrors = options.getODataErrors;\r\n this.scheduler = options.scheduler;\r\n this.utils = new UtilFunctions({\r\n i18n: this.i18n,\r\n pageContext: this.pageContext,\r\n getODataErrors: this.getODataErrors,\r\n });\r\n this.isReportLabelsAccountRequest = this.pageContext.CurrentTabId &&\r\n (this.pageContext.CurrentTabId === 'Reportlabelsaccount' || this.pageContext.CurrentTabId === 'Labelsaccount');\r\n }\r\n createRule = (Rule) => {\r\n const {\r\n Entity,\r\n Type,\r\n } = Rule;\r\n\r\n const headers = {\r\n 'x-ms-lastwritetime': this.cm.getCacheHint({\r\n adapter: 'odata',\r\n resource: Entity, // this may not be always correct\r\n }) || 'Max',\r\n };\r\n\r\n if (Entity === 'Campaign' ||\r\n Entity === 'Ad' ||\r\n Entity === 'AdGroup' ||\r\n Entity === 'Keyword') {\r\n Rule.CurrentCustomerId = this.pageContext.CurrentCustomer.Id; // eslint-disable-line no-param-reassign, max-len\r\n }\r\n\r\n // for downloading Account, we need use URL under specific Account, this is MT bug\r\n return this.odata.post(\r\n this.utils.getURLWithScope('TaskItems?$expand=TaskItemExecutions', Type === 'Email' && Entity === 'Account' && !this.isReportLabelsAccountRequest),\r\n {\r\n data: Rule,\r\n headers,\r\n }\r\n ).catch(({ errors } = {}) => {\r\n throw this.utils.convertServerSideErrors(errors);\r\n });\r\n }\r\n\r\n createReportRule = ReportRule =>\r\n this.createRule(_.extend({\r\n '@odata.type': '#Model.ReportRule',\r\n Type: 'Report',\r\n Name: 'ReportDownload',\r\n Cron: '',\r\n }, ReportRule));\r\n\r\n\r\n createReportRuleFromReportEmailRule = ({\r\n Entity,\r\n Format,\r\n Headers,\r\n SegmentationTypes,\r\n Selection,\r\n // used to activate customer hierarchy workflow\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n SaveReport, // used by DimensionRow for HotelCenter BI Grids\r\n FeedId, // used by Feed Item\r\n\r\n // other not used properties\r\n IncludeEditableColumns,\r\n IncludeNonPerformingHotels,\r\n EntityContextType,\r\n SharedEntityType,\r\n NegativeKeywordListId,\r\n }) => {\r\n const reportRule = {\r\n Entity,\r\n Format,\r\n Headers,\r\n SegmentationTypes,\r\n Selection,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n SaveReport,\r\n\r\n IncludeEditableColumns,\r\n IncludeNonPerformingHotels,\r\n EntityContextType,\r\n SharedEntityType,\r\n NegativeKeywordListId,\r\n };\r\n\r\n return this.createReportRule(FeedId ? _.extend({ FeedId }, reportRule) : reportRule);\r\n }\r\n\r\n createReportEmailRule = (ReportEmailRule) => {\r\n const {\r\n Entity,\r\n } = ReportEmailRule;\r\n\r\n return this.createRule(_.extend({\r\n '@odata.type': '#Model.ReportEmailRule',\r\n // MT limitation, we need different type for customer & account level entities\r\n Type: (Entity === 'Account' || this.isReportLabelsAccountRequest) ? 'Email' : 'ReportAccountEmail',\r\n SaveReport: true,\r\n CustomerId: Number(this.state.get('customer_id')),\r\n AccountIds: (Entity === 'Account' || this.isReportLabelsAccountRequest) ? [] : [Number(this.state.get('account_id'))],\r\n }, ReportEmailRule));\r\n }\r\n\r\n downloadTaskItemExecution = (TaskItemExecution) => {\r\n let alertId = '';\r\n alertId = window.App.views.alertCenter.showConfirmation(this.i18n.getString('GridDownloadStatusMessage'), alertId);\r\n\r\n return poll({\r\n executionId: TaskItemExecution.Id,\r\n scheduler: this.scheduler,\r\n odata: this.odata,\r\n i18n: this.i18n,\r\n pageContext: this.pageContext,\r\n getODataErrors: this.getODataErrors,\r\n })\r\n .finally(() => window.App.views.alertCenter.dismiss(alertId))\r\n .then(download)\r\n .delay(4000); // Adding this to avoid fast cleanup before iframe src is fired in chrome\r\n }\r\n\r\n scheduleAndDownload = (ReportEmailRule) => {\r\n const { Name } = ReportEmailRule;\r\n\r\n return Promise.all([\r\n this.createReportRuleFromReportEmailRule(ReportEmailRule),\r\n _.isEmpty(Name) ?\r\n null :\r\n this.createReportEmailRule(ReportEmailRule),\r\n ]).spread(({\r\n TaskItemExecutions = [],\r\n } = {}) => {\r\n if (TaskItemExecutions[0]) {\r\n return TaskItemExecutions[0];\r\n }\r\n\r\n throw new Error(this.i18n.getString('GridDownloadFailureMessage'));\r\n }).then(this.downloadTaskItemExecution);\r\n }\r\n\r\n downloadReportEmailRule = ReportEmailRule =>\r\n this.scheduleAndDownload(_.defaults({\r\n Name: null,\r\n }, ReportEmailRule));\r\n\r\n\r\n downloadReportEmailRuleExecution = ({ // eslint-disable-line\r\n StartedAt,\r\n TaskItem: {\r\n Id: TaskItemId,\r\n },\r\n }) => {\r\n const machineStartedAt = new Date(StartedAt.substr(0, 19));\r\n\r\n const taskItemEntitySet = this.edm.currentAccount ?\r\n this.edm.currentAccount.TaskItems :\r\n this.edm.currentCustomer.TaskItems;\r\n\r\n return this.jsdata.TaskItem.find(TaskItemId, {\r\n entitySet: taskItemEntitySet,\r\n }).then(TaskItem => this.downloadReportEmailRule(_.defaults({\r\n Selection: lockDownSelectionDateRange({\r\n Selection: TaskItem.Selection,\r\n today: machineStartedAt,\r\n i18n: this.i18n,\r\n }),\r\n }, TaskItem)));\r\n }\r\n}\r\n\r\n","import Promise from 'bluebird';\r\nimport { UtilFunctions } from './util';\r\n\r\nconst excelLimitExceededErrorCode = 18000;\r\nconst pollIntervalTimeout = 5000;\r\nconst maxPollCount = 60;\r\nconst maxSuccessiveFailureCount = 5;\r\n\r\nexport default function poll({\r\n executionId,\r\n scheduler,\r\n odata,\r\n i18n,\r\n pageContext,\r\n getODataErrors,\r\n}) {\r\n const utils = new UtilFunctions({\r\n i18n,\r\n pageContext,\r\n getODataErrors,\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n let successiveFailureCount = 0;\r\n let pollCount = 0;\r\n\r\n // Define task and event handler\r\n const recurringTask = scheduler.createTask({\r\n task: () => {\r\n pollCount += 1;\r\n if (pollCount > maxPollCount) {\r\n recurringTask.stop();\r\n return Promise.reject(new Error(i18n.getString('GridDownloadFailureMessage')));\r\n }\r\n\r\n return odata.get(utils.getURLWithScope(`TaskItemExecutions(${executionId})`));\r\n },\r\n schedule: pollIntervalTimeout,\r\n });\r\n\r\n recurringTask.on('success', ({\r\n data,\r\n stopTask,\r\n }) => {\r\n successiveFailureCount = 0;\r\n if (data) {\r\n const { Status, ResultId } = data;\r\n\r\n if (Status === 'Completed') {\r\n stopTask();\r\n resolve(ResultId);\r\n } else if (Status === 'Failed' || Status === 'RetryNeeded') {\r\n stopTask();\r\n if (ResultId === excelLimitExceededErrorCode) {\r\n reject(new Error(i18n.getString('GridDownloadLimit_RowsExceeded_Alert')));\r\n } else {\r\n reject(new Error(i18n.getString('GridDownloadFailureMessage')));\r\n }\r\n }\r\n }\r\n });\r\n\r\n recurringTask.on('error', ({ error: eventError = new Error() }) => {\r\n successiveFailureCount += 1;\r\n if (maxSuccessiveFailureCount <= successiveFailureCount) {\r\n recurringTask.stop();\r\n reject(eventError);\r\n }\r\n });\r\n\r\n recurringTask.start();\r\n });\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { startsWith } from 'underscore.string';\r\nimport { convertStateDateRangeToSelection } from '@bingads-webui-campaign/date-range-utilities';\r\nimport { ODATA_PREFIX } from '@bingads-webui-universal/custom-column-utils';\r\nimport { DownloadReportFunctions } from './download-report';\r\n\r\nexport const getInlineDownloadCampaignODataRepository = ({\r\n i18n,\r\n state,\r\n edm,\r\n odata,\r\n jsdata,\r\n cm,\r\n pageContext,\r\n getODataErrors,\r\n scheduler,\r\n}) => {\r\n class InlineDownloadCampaignODataRepository {\r\n constructor({\r\n odataColumnNames,\r\n localizedHeaders,\r\n filterUrlParam,\r\n serializedFilter,\r\n entity,\r\n processReportRule = _.identity,\r\n isForVNext,\r\n p$daterange,\r\n }) {\r\n this.processReportRule = processReportRule;\r\n this.entity = entity;\r\n this.customColumnIds = _.filter(odataColumnNames, name => startsWith(name, ODATA_PREFIX));\r\n\r\n // for AdCustomizerAttributes columns, we don't includ them in download file now\r\n // header and queryString are corresbonding one by one. example:\r\n // QueryString: \"$select=Status,Name,PerformanceMetrics/7146825582481\"\r\n // Headers: [\"Status\", \"Campaign\", null]\r\n\r\n if (pageContext.Permissions.IsRSAAdCustomizerEnabled) {\r\n this.localizedHeaders = localizedHeaders;\r\n this.queryString = [\r\n ...filterUrlParam ? [filterUrlParam] : [],\r\n `$select=${odataColumnNames}`,\r\n ].join('&');\r\n } else {\r\n this.localizedHeaders = _.filter(localizedHeaders, (header, index) =>\r\n !_.isString(odataColumnNames[index]) || !odataColumnNames[index].startsWith('AdCustomizerAttributes'));\r\n\r\n this.queryString = [\r\n ...filterUrlParam ? [filterUrlParam] : [],\r\n `$select=${_.filter(odataColumnNames, columnName => !_.isString(columnName) || !columnName.startsWith('AdCustomizerAttributes'))}`,\r\n ].join('&');\r\n }\r\n\r\n this.serializedFilter = serializedFilter;\r\n this.isForVNext = isForVNext;\r\n this.p$daterange = p$daterange;\r\n this.DownloadReportFunctions = new DownloadReportFunctions({\r\n i18n,\r\n edm,\r\n odata,\r\n jsdata,\r\n state,\r\n cm,\r\n pageContext,\r\n getODataErrors,\r\n scheduler,\r\n });\r\n }\r\n\r\n download({\r\n Cron,\r\n EndTime,\r\n Format,\r\n Name,\r\n NotificationDeliveryOption,\r\n SegmentationTypes,\r\n StartTime,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }) {\r\n const daterangePromise = this.isForVNext ? this.p$daterange() : Promise.resolve(state.get('$daterange'));\r\n const CampaignId = Number(state.get('campaign_id') || _.chain(pageContext)\r\n .result('CurrentCampaign')\r\n .result('Id')\r\n .value());\r\n\r\n return daterangePromise.then(($daterange) => {\r\n const {\r\n DateRange,\r\n ComparisonDateRange,\r\n } = convertStateDateRangeToSelection({\r\n $daterange,\r\n i18n,\r\n isForVNext: this.isForVNext,\r\n });\r\n const rule = this.processReportRule({\r\n // common properties for ReportRule & ReportEmailRule\r\n Entity: this.entity,\r\n Format,\r\n Headers: this.localizedHeaders,\r\n // This is an array and eventually we will have multiple segments that user can select\r\n SegmentationTypes,\r\n Selection: _.pick({\r\n DateRange,\r\n QueryString: this.queryString,\r\n ComparisonDateRange,\r\n CampaignId,\r\n AdGroupId: Number(state.get('adgroup_id')),\r\n }, Boolean),\r\n // properties only for ReportEmailRule\r\n Cron,\r\n EndTime,\r\n Name,\r\n NotificationDeliveryOption: NotificationDeliveryOption ? _.defaults({\r\n '@odata.type': '#Model.EmailNotificationDeliveryOption',\r\n }, NotificationDeliveryOption) : null,\r\n StartTime,\r\n Filter: this.serializedFilter,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n });\r\n\r\n if (rule.AccountModes == null) {\r\n delete rule.AccountModes;\r\n }\r\n\r\n return this.DownloadReportFunctions.scheduleAndDownload(rule);\r\n });\r\n }\r\n }\r\n return InlineDownloadCampaignODataRepository;\r\n};\r\n","import _ from 'underscore';\r\n// import { globalContext } from '@bingads-webui-campaign/injection-context';\r\nimport { UtilFunctions } from './util';\r\n\r\n// const edm = globalContext.requireDefault('component/edm-campaign/index');\r\n// const jsdata = globalContext.require('component/js-data-campaign/index');\r\n// const s$ReportEmailRule = globalContext.require('$/schema!campaign/ReportEmailRule');\r\n\r\nexport class UpdateRulesFunctions {\r\n constructor(options) {\r\n this.edm = options.edm;\r\n this.jsdata = options.jsdata;\r\n this.i18n = options.i18n;\r\n this.pageContext = options.pageContext;\r\n this.getODataErrors = options.getODataErrors;\r\n this.s$ReportEmailRule = options.s$ReportEmailRule;\r\n }\r\n\r\n updateRule = (id, update) => {\r\n const utils = new UtilFunctions({\r\n i18n: this.i18n,\r\n pageContext: this.pageContext,\r\n getODataErrors: this.getODataErrors,\r\n });\r\n return this.jsdata.TaskItem\r\n .update(id, update, {\r\n entitySet: this.edm.currentAccount\r\n ? this.edm.currentAccount.TaskItems\r\n : this.edm.currentCustomer.TaskItems,\r\n })\r\n .catch(({ errors }) => {\r\n throw utils.convertServerSideErrors(errors);\r\n });\r\n }\r\n\r\n updateReportEmailRule = (rule) => {\r\n const update = _.extend({\r\n '@odata.type': '#Model.ReportEmailRule',\r\n }, _.pick(rule, ..._.keys(this.s$ReportEmailRule.properties)));\r\n\r\n if (!update.Cron) {\r\n update.Cron = '';\r\n }\r\n\r\n // when no email needed to be sent, Cron is meaningless, so MT will reject non-empty Cron\r\n if (update.NotificationDeliveryOption) {\r\n update.NotificationDeliveryOption['@odata.type'] = '#Model.EmailNotificationDeliveryOption';\r\n } else {\r\n update.Cron = '';\r\n }\r\n\r\n // deprecated property\r\n delete update.Selection.PeriodComparisonDateRange;\r\n\r\n return this.updateRule(update.Id, update);\r\n };\r\n\r\n updateReportEmailRuleState = ({\r\n Id,\r\n State,\r\n Type,\r\n }) => (\r\n this.updateRule(\r\n Id,\r\n {\r\n '@odata.type': '#Model.ReportEmailRule',\r\n State,\r\n Type,\r\n }\r\n )\r\n )\r\n\r\n deleteReportEmailRules = rules => (\r\n this.jsdata.TaskItem.updateAll({}, {\r\n reqs: _.map(rules, ({ Type, Id }) => ({\r\n '@odata.type': '#Model.ReportEmailRule',\r\n State: 'Deleted',\r\n Type,\r\n Id,\r\n })),\r\n }, {\r\n action: 'PATCH',\r\n id: 'Id',\r\n processParam: param => _.pick(param, '@odata.type', 'State', 'Type'),\r\n entitySet: this.edm.currentAccount\r\n ? this.edm.currentAccount.TaskItems\r\n : this.edm.currentCustomer.TaskItems,\r\n })\r\n )\r\n}\r\n","export const None = -1;\r\nexport const Daily = 0;\r\nexport const Weekly = 1;\r\nexport const Monthly = 2;\r\n\r\nexport function getFrequencyDefaultCron(frequency) {\r\n switch (frequency) {\r\n case None:\r\n return null;\r\n case Daily:\r\n return '0 0 * * * *';\r\n case Weekly:\r\n return '0 0 * * 0 *';\r\n case Monthly:\r\n return '0 0 1 * * *';\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport function getCronModel(cron, cronFormatter) {\r\n return cron ? cronFormatter.parse(cron) : { frequency: None };\r\n}\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InlineDownloadSelect } from '@bingads-webui-campaign/inline-download-select';\r\nimport { None, Daily, Weekly, Monthly } from './util';\r\n\r\nexport default function Frequency({\r\n cronFormatter,\r\n i18n,\r\n onChange,\r\n selected,\r\n}) {\r\n return (\r\n <InlineDownloadSelect\r\n items={[None, Daily, Weekly, Monthly]}\r\n onSelect={onChange}\r\n renderItem={frequency => (\r\n <span className=\"text-capitalize\">\r\n {frequency === None ?\r\n i18n.getString('InlineDownloadReports_EmailAndScheduling_Frequency_None') :\r\n cronFormatter.formatCronFrequency(frequency)}\r\n </span>\r\n )}\r\n selected={selected}\r\n />\r\n );\r\n}\r\n\r\nFrequency.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n formatCronFrequency: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n selected: PropTypes.oneOf([None, Daily, Weekly, Monthly]).isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { InlineDownloadSelect } from '@bingads-webui-campaign/inline-download-select';\r\n\r\nexport default function Hour({\r\n cronFormatter,\r\n onChange,\r\n selected,\r\n}) {\r\n const translations = cronFormatter.getHoursOfDay();\r\n\r\n return (\r\n <div data-field=\"hour\">\r\n <InlineDownloadSelect\r\n items={_.range(0, 24)}\r\n onSelect={onChange}\r\n renderItem={hour => translations[hour]}\r\n selected={selected}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nHour.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n getHoursOfDay: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n selected: PropTypes.number.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport Hour from './hour';\r\nimport { Daily } from './util';\r\n\r\nexport default function DailyExtra({\r\n cronFormatter,\r\n hour,\r\n i18n,\r\n onChange,\r\n}) {\r\n return (\r\n <ReactTemplate\r\n model={{\r\n hour: (\r\n <Hour\r\n cronFormatter={cronFormatter}\r\n onChange={(selectedHour) => {\r\n onChange(cronFormatter.toCronString({\r\n frequency: Daily,\r\n hour: selectedHour,\r\n }));\r\n }}\r\n selected={hour}\r\n />\r\n ),\r\n }}\r\n template={i18n.getString('InlineDownloadReports_EmailAndScheduling_Frequency_Daily_Template')}\r\n />\r\n );\r\n}\r\n\r\nDailyExtra.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n toCronString: PropTypes.func,\r\n }).isRequired,\r\n hour: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { InlineDownloadSelect } from '@bingads-webui-campaign/inline-download-select';\r\n\r\nexport default function DayOfWeek({\r\n cronFormatter,\r\n onChange,\r\n selected,\r\n}) {\r\n const translations = cronFormatter.getDaysOfWeek();\r\n\r\n return (\r\n <div data-field=\"dayOfWeek\">\r\n <InlineDownloadSelect\r\n items={_.range(0, 7)}\r\n onSelect={onChange}\r\n renderItem={item => translations[item]}\r\n selected={selected}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nDayOfWeek.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n getDaysOfWeek: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n selected: PropTypes.number.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport DayOfWeek from './day-of-week';\r\nimport Hour from './hour';\r\nimport { Weekly } from './util';\r\n\r\nexport default function WeeklyExtra({\r\n cronFormatter,\r\n dayOfWeek,\r\n hour,\r\n i18n,\r\n onChange,\r\n}) {\r\n return (\r\n <ReactTemplate\r\n model={{\r\n dayOfWeek: (\r\n <DayOfWeek\r\n cronFormatter={cronFormatter}\r\n onChange={(selectedDayOfWeek) => {\r\n onChange(cronFormatter.toCronString({\r\n dayOfWeek: selectedDayOfWeek,\r\n frequency: Weekly,\r\n hour,\r\n }));\r\n }}\r\n selected={dayOfWeek}\r\n />\r\n ),\r\n hour: (\r\n <Hour\r\n cronFormatter={cronFormatter}\r\n onChange={(selectedHour) => {\r\n onChange(cronFormatter.toCronString({\r\n dayOfWeek,\r\n frequency: Weekly,\r\n hour: selectedHour,\r\n }));\r\n }}\r\n selected={hour}\r\n />\r\n ),\r\n }}\r\n template={i18n.getString('InlineDownloadReports_EmailAndScheduling_Frequency_Weekly_Template')}\r\n />\r\n );\r\n}\r\n\r\nWeeklyExtra.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n toCronString: PropTypes.func,\r\n }).isRequired,\r\n dayOfWeek: PropTypes.number.isRequired,\r\n hour: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { InlineDownloadSelect } from '@bingads-webui-campaign/inline-download-select';\r\n\r\nexport default function DayOfMonth({\r\n cronFormatter,\r\n onChange,\r\n selected,\r\n}) {\r\n const translations = cronFormatter.getDaysOfMonth();\r\n\r\n return (\r\n <div data-field=\"dayOfMonth\">\r\n <InlineDownloadSelect\r\n // MT Task Engine only supports 28 days\r\n // items={_.range(1, 32)}\r\n items={_.range(1, 29)}\r\n onSelect={onChange}\r\n renderItem={item => translations[item]}\r\n selected={selected}\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nDayOfMonth.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n getDaysOfMonth: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n selected: PropTypes.number.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ReactTemplate } from '@bingads-webui-react/react-template';\r\nimport DayOfMonth from './day-of-month';\r\nimport Hour from './hour';\r\nimport { Monthly } from './util';\r\n\r\nexport default function MonthlyExtra({\r\n cronFormatter,\r\n dayOfMonth,\r\n hour,\r\n i18n,\r\n onChange,\r\n}) {\r\n return (\r\n <ReactTemplate\r\n model={{\r\n dayOfMonth: (\r\n <DayOfMonth\r\n cronFormatter={cronFormatter}\r\n onChange={(selectedDayOfMonth) => {\r\n onChange(cronFormatter.toCronString({\r\n dayOfMonth: selectedDayOfMonth,\r\n frequency: Monthly,\r\n hour,\r\n }));\r\n }}\r\n selected={dayOfMonth}\r\n />\r\n ),\r\n hour: (\r\n <Hour\r\n cronFormatter={cronFormatter}\r\n onChange={(selectedHour) => {\r\n onChange(cronFormatter.toCronString({\r\n dayOfMonth,\r\n frequency: Monthly,\r\n hour: selectedHour,\r\n }));\r\n }}\r\n selected={hour}\r\n />\r\n ),\r\n }}\r\n template={i18n.getString('InlineDownloadReports_EmailAndScheduling_Frequency_Monthly_Template')}\r\n />\r\n );\r\n}\r\n\r\nMonthlyExtra.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n toCronString: PropTypes.func,\r\n }).isRequired,\r\n dayOfMonth: PropTypes.number.isRequired,\r\n hour: PropTypes.number.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { None, Daily, Weekly, Monthly, getCronModel } from './util';\r\nimport DailyExtra from './daily-extra';\r\nimport WeeklyExtra from './weekly-extra';\r\nimport MonthlyExtra from './monthly-extra';\r\n\r\nexport default function Extra({\r\n cronFormatter,\r\n cron,\r\n i18n,\r\n onChange,\r\n}) {\r\n const {\r\n frequency,\r\n dayOfMonth,\r\n dayOfWeek,\r\n hour,\r\n } = getCronModel(cron, cronFormatter);\r\n\r\n switch (frequency) {\r\n case Daily:\r\n return (\r\n <DailyExtra\r\n cronFormatter={cronFormatter}\r\n hour={hour}\r\n i18n={i18n}\r\n onChange={onChange}\r\n />\r\n );\r\n case Weekly:\r\n return (\r\n <WeeklyExtra\r\n cronFormatter={cronFormatter}\r\n dayOfWeek={dayOfWeek}\r\n hour={hour}\r\n i18n={i18n}\r\n onChange={onChange}\r\n />\r\n );\r\n case Monthly:\r\n return (\r\n <MonthlyExtra\r\n cronFormatter={cronFormatter}\r\n dayOfMonth={dayOfMonth}\r\n hour={hour}\r\n i18n={i18n}\r\n onChange={onChange}\r\n />\r\n );\r\n case None:\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nExtra.propTypes = {\r\n cronFormatter: PropTypes.shape({\r\n toCronString: PropTypes.func,\r\n }).isRequired,\r\n cron: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CronFormatter } from '@bingads-webui/cron-formatter';\r\nimport { getFrequencyDefaultCron, getCronModel } from './util';\r\nimport Frequency from './frequency';\r\nimport Extra from './extra';\r\n\r\nexport class InlineDownloadCronEditor extends React.PureComponent {\r\n static propTypes = {\r\n cron: PropTypes.string, // eslint-disable-line\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n }\r\n\r\n static defaultProps = {\r\n cron: undefined,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.cronFormatter = new CronFormatter({ i18n: props.i18n });\r\n }\r\n\r\n onChangeFrequency = frequency => this.onChangeCron(getFrequencyDefaultCron(frequency));\r\n\r\n onChangeCron = cron => this.props.onChange(cron);\r\n\r\n render() {\r\n const {\r\n cron,\r\n i18n,\r\n } = this.props;\r\n const {\r\n cronFormatter,\r\n onChangeCron,\r\n onChangeFrequency,\r\n } = this;\r\n\r\n const {\r\n frequency,\r\n } = getCronModel(cron, cronFormatter);\r\n\r\n return (\r\n <div className=\"inline-download-cron-editor\">\r\n <div data-field=\"frequency\">\r\n <Frequency\r\n cronFormatter={cronFormatter}\r\n i18n={i18n}\r\n onChange={onChangeFrequency}\r\n selected={frequency}\r\n />\r\n </div>\r\n <Extra\r\n cronFormatter={cronFormatter}\r\n cron={cron}\r\n i18n={i18n}\r\n onChange={onChangeCron}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport { EmailNotificationDeliveryOptionEditor } from '@bingads-webui-campaign/email-notification-delivery-option-editor';\r\nimport { InlineDownloadCronEditor } from '@bingads-webui-campaign/inline-download-cron-editor';\r\nimport { KendoStringDatePicker } from '@bingads-webui-react/kendo-date-picker';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nconst dateMethodOptions = {\r\n raw: 'yyyy-MM-dd',\r\n};\r\nexport default class InlineDownloadEmailFrequencyEditor extends React.PureComponent {\r\n static propTypes = {\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']).isRequired,\r\n data: PropTypes.shape({ // eslint-disable-line\r\n NotificationDeliveryOption: PropTypes.shape({\r\n CustomUserIds: PropTypes.arrayOf(PropTypes.number),\r\n EmailOption: PropTypes.string,\r\n }),\r\n Cron: PropTypes.string,\r\n StartTime: PropTypes.string,\r\n EndTime: PropTypes.string,\r\n }).isRequired,\r\n currentUserId: PropTypes.number.isRequired,\r\n s$i18n: PropTypes.shape({\r\n property: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n FormGroup: PropTypes.func.isRequired,\r\n loadUsers: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n className: PropTypes.string,\r\n }\r\n\r\n static defaultProps = {\r\n className: '',\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.startTimeRef = React.createRef();\r\n this.endTimeRef = React.createRef();\r\n }\r\n\r\n\r\n componentDidUpdate() {\r\n // Select all elements with the class \"k-state-disabled\"\r\n if (this.startTimeRef.current) {\r\n this.bindTheA11yEvent(this.startTimeRef.current);\r\n }\r\n if (this.endTimeRef.current) {\r\n this.bindTheA11yEvent(this.endTimeRef.current);\r\n }\r\n }\r\n\r\n\r\n onChange = ({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n }) => {\r\n const data = _.defaults({\r\n NotificationDeliveryOption, Cron, StartTime, EndTime,\r\n }, this.props.data);\r\n\r\n if (data.NotificationDeliveryOption) {\r\n if (data.Cron) {\r\n this.props.onChange({\r\n NotificationDeliveryOption: data.NotificationDeliveryOption,\r\n Cron: data.Cron,\r\n StartTime: data.StartTime,\r\n EndTime: data.EndTime,\r\n });\r\n } else {\r\n this.props.onChange({\r\n NotificationDeliveryOption: data.NotificationDeliveryOption,\r\n Cron: data.Cron,\r\n StartTime: null,\r\n EndTime: null,\r\n });\r\n }\r\n } else {\r\n this.props.onChange({\r\n NotificationDeliveryOption: null,\r\n Cron: null,\r\n StartTime: null,\r\n EndTime: null,\r\n });\r\n }\r\n }\r\n\r\n onNotificationDeliveryOptionChange = (NotificationDeliveryOption) => {\r\n this.onChange({ NotificationDeliveryOption });\r\n }\r\n\r\n onCronChange = (Cron) => {\r\n this.onChange({ Cron });\r\n }\r\n\r\n onStartTimeChange = (StartTime) => {\r\n this.onChange({ StartTime });\r\n }\r\n\r\n onEndTimeChange = (EndTime) => {\r\n this.onChange({ EndTime });\r\n }\r\n\r\n setDisabledForA11y = () => {\r\n // Select all elements with the class \"k-state-disabled\"\r\n const elements = document.querySelectorAll('.k-animation-container div[aria-hidden=\"false\"] .k-state-disabled');\r\n elements.forEach((element) => {\r\n element.setAttribute('aria-disabled', 'true');\r\n element.setAttribute('tabindex', '-1');\r\n });\r\n }\r\n\r\n bindTheA11yEvent = (parent) => {\r\n const picker = parent.querySelector('.kendo-date-picker .clickable');\r\n picker.onclick = () => {\r\n _.debounce(() => {\r\n const target = document.querySelector('.k-animation-container div[aria-hidden=\"false\"]');\r\n /* istanbul ignore next */\r\n target.addEventListener('focusin', () => {\r\n _.debounce(() => {\r\n this.setDisabledForA11y();\r\n }, 200)();\r\n });\r\n this.setDisabledForA11y();\r\n }, 200)();\r\n };\r\n }\r\n\r\n render() {\r\n const {\r\n currentUserId,\r\n s$i18n,\r\n i18n,\r\n FormGroup,\r\n allUsersType,\r\n loadUsers,\r\n isForVNext,\r\n className,\r\n } = this.props;\r\n\r\n const {\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n } = this.props.data;\r\n\r\n const min = i18n.formatDate(new Date(), dateMethodOptions);\r\n const usedStartTime = StartTime ? StartTime.substr(0, 10) : StartTime;\r\n const usedEndTime = EndTime ? EndTime.substr(0, 10) : EndTime;\r\n const frequencyText = s$i18n.property('ReportEmailRule', 'Cron');\r\n\r\n return (\r\n <div className={classNames('inline-download-email-frequency-editor', className)}>\r\n <FormGroup\r\n label={i18n.getString('InlineDownloadReports_EmailAndScheduling_SendReportTo')}\r\n >\r\n <EmailNotificationDeliveryOptionEditor\r\n isForVNext={isForVNext}\r\n currentUserId={currentUserId}\r\n model={NotificationDeliveryOption}\r\n onChange={this.onNotificationDeliveryOptionChange}\r\n allUsersType={allUsersType}\r\n i18n={i18n}\r\n loadUsers={loadUsers}\r\n ariaLabel={i18n.getString('InlineDownloadReports_EmailAndScheduling_SendReportTo')}\r\n />\r\n </FormGroup>\r\n {\r\n NotificationDeliveryOption ? (\r\n <React.Fragment>\r\n <FormGroup\r\n id=\"gridDownloadFredquency\"\r\n label={(\r\n <React.Fragment>\r\n {frequencyText}\r\n <HelpPopup topic=\"pop_BA_InlineDownload_Frequency\" aria-label={i18n.getString('Click to learn more about {{item}}', { item: frequencyText })} />\r\n </React.Fragment>\r\n )}\r\n >\r\n <InlineDownloadCronEditor\r\n cron={Cron}\r\n i18n={i18n}\r\n onChange={this.onCronChange}\r\n />\r\n </FormGroup>\r\n {\r\n Cron ? (\r\n <React.Fragment>\r\n <FormGroup\r\n labelId=\"gridDownloadStartTimeLabel\"\r\n label={s$i18n.property('ReportEmailRule', 'StartTime')}\r\n >\r\n <div ref={this.startTimeRef} className=\"inline-download-start-time-editor\">\r\n <KendoStringDatePicker\r\n i18n={i18n}\r\n onChange={this.onStartTimeChange}\r\n min={min}\r\n max={usedEndTime || undefined}\r\n value={usedStartTime}\r\n dateMethodOptions={dateMethodOptions}\r\n ariaLabelledby=\"gridDownloadStartTimeLabel\"\r\n />\r\n </div>\r\n </FormGroup>\r\n <FormGroup\r\n labelId=\"gridDownloadEndTimeLabel\"\r\n label={s$i18n.property('ReportEmailRule', 'EndTime')}\r\n >\r\n <div ref={this.endTimeRef} className=\"inline-download-end-time-editor\">\r\n <KendoStringDatePicker\r\n i18n={i18n}\r\n onChange={this.onEndTimeChange}\r\n min={usedStartTime || min}\r\n value={usedEndTime}\r\n dateMethodOptions={dateMethodOptions}\r\n ariaLabelledby=\"gridDownloadEndTimeLabel\"\r\n />\r\n </div>\r\n </FormGroup>\r\n </React.Fragment>\r\n ) : null\r\n }\r\n </React.Fragment>\r\n ) : null\r\n }\r\n </div>\r\n );\r\n }\r\n}\r\n","/* eslint-disable jsx-a11y/label-has-for */\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\n\r\nexport default function FormGroup(props) {\r\n const {\r\n children,\r\n label,\r\n labelId,\r\n } = props;\r\n\r\n const id = props.id || _.uniqueId('form-group-');\r\n\r\n return (\r\n <div className=\"form-group\">\r\n <label\r\n className={classnames('col-sm-4', 'control-label')}\r\n htmlFor={id}\r\n id={labelId}\r\n >\r\n {label}\r\n </label>\r\n <div className=\"col-sm-8\">\r\n <div id={id}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nFormGroup.propTypes = {\r\n children: PropTypes.element.isRequired,\r\n id: PropTypes.string,\r\n label: PropTypes.string.isRequired,\r\n labelId: PropTypes.string,\r\n};\r\n\r\nFormGroup.defaultProps = {\r\n id: null,\r\n labelId: undefined,\r\n};\r\n","\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n InlineDownloadSelect,\r\n InlineDownloadMultiLevelSelect\r\n} from '@bingads-webui-campaign/inline-download-select';\r\nimport {\r\n getSupportedSegmentationTree,\r\n localizeSegmentationType,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport { Button } from '@bingads-webui-react/primitive-unthemed';\r\nimport FormGroup from './form-group';\r\n\r\nexport const getV1Part = ({ i18n, s$i18n, pageContext }) => {\r\n class V1Part extends React.Component {\r\n static propTypes = {\r\n data: PropTypes.shape({ // eslint-disable-line\r\n Format: PropTypes.string,\r\n SegmentationTypes: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n }),\r\n downloadFormats: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n segmentationTypes: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n downloadBoxRole: PropTypes.string,\r\n downloadFormatsRole: PropTypes.string,\r\n }\r\n\r\n static defaultProps = {\r\n downloadBoxRole: 'menu',\r\n downloadFormatsRole: 'menuitem',\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n // init format and segmentation types\r\n this.props.onChange(this.getFormatandSementationTypes());\r\n }\r\n\r\n onChange = ({ Format, SegmentationTypes }) => {\r\n const data = _.defaults({\r\n Format, SegmentationTypes,\r\n }, this.props.data);\r\n this.props.onChange(data);\r\n };\r\n\r\n getFormatandSementationTypes() {\r\n const {\r\n downloadFormats,\r\n segmentationTypes,\r\n data,\r\n } = this.props;\r\n\r\n const validSegmentationTypes = data.SegmentationTypes.filter(e => segmentationTypes.indexOf(e) >= 0 || e === 'None');\r\n\r\n const Format = _.contains(downloadFormats, data.Format) ?\r\n data.Format : downloadFormats[0];\r\n const SegmentationTypes = validSegmentationTypes.length > 0 ?\r\n validSegmentationTypes : (['None']);\r\n\r\n return { Format, SegmentationTypes };\r\n }\r\n\r\n updateSegment(name, idx) {\r\n const { SegmentationTypes } = this.getFormatandSementationTypes();\r\n const currentSegment = SegmentationTypes;\r\n const updatedSegment = [...currentSegment.slice(0, idx), name, ...currentSegment.slice(idx + 1)]; // eslint-disable-line\r\n this.onChange({\r\n SegmentationTypes: updatedSegment,\r\n });\r\n }\r\n\r\n deleteSegment(name) {\r\n const { SegmentationTypes } = this.getFormatandSementationTypes();\r\n const currentSegment = SegmentationTypes;\r\n const deleteIndex = currentSegment.indexOf(name);\r\n const updatedSegment = [...currentSegment.slice(0, deleteIndex), ...currentSegment.slice(deleteIndex + 1)]; // eslint-disable-line\r\n this.onChange({\r\n SegmentationTypes: updatedSegment,\r\n });\r\n\r\n const segmentButtons = document.querySelectorAll('.segment-row button.dropdown-toggle');\r\n if (segmentButtons && segmentButtons.length > 0) {\r\n segmentButtons[0].focus();\r\n }\r\n }\r\n\r\n addSegment(name, idx) {\r\n this.updateSegment(name, idx);\r\n\r\n const segmentButtons = document.querySelectorAll('.segment-row button.dropdown-toggle');\r\n if (segmentButtons && segmentButtons.length > 0) {\r\n segmentButtons[0].focus();\r\n }\r\n }\r\n\r\n render() {\r\n const {\r\n downloadFormats,\r\n segmentationTypes,\r\n isForVNext,\r\n } = this.props;\r\n\r\n const {\r\n SegmentationTypes,\r\n Format,\r\n } = this.getFormatandSementationTypes();\r\n\r\n const showAddSegment = pageContext.Permissions.IsMultiSegmentInlineDownloadEnabled && SegmentationTypes.length === 1 && SegmentationTypes[0] !== 'None'; // eslint-disable-line\r\n const showSecondSegment = pageContext.Permissions.IsMultiSegmentInlineDownloadEnabled && SegmentationTypes.length === 2; // eslint-disable-line\r\n const showDeleteSegment = pageContext.Permissions.IsMultiSegmentInlineDownloadEnabled && SegmentationTypes.length === 2; // eslint-disable-line\r\n\r\n const showAddSegmentContent = showAddSegment ? (\r\n <React.Fragment>\r\n <div>\r\n <Button\r\n onClick={() => this.addSegment('None', 1)}\r\n className=\"add-target\"\r\n >\r\n <span className=\"add_icon spritedimage spritedimagealign\" />\r\n {i18n.getString('InlineDownload_AddSegment')}\r\n </Button>\r\n </div>\r\n </React.Fragment>\r\n ) : null;\r\n\r\n const showSecondSegmentContent = showSecondSegment ? (\r\n <React.Fragment>\r\n <InlineDownloadMultiLevelSelect\r\n isForVNext={isForVNext}\r\n items={getSupportedSegmentationTree({\r\n permissions: pageContext.Permissions,\r\n segmentationTypes,\r\n })}\r\n onSelect={({ name }) => {\r\n this.updateSegment(name, 1);\r\n }}\r\n renderItem={item => localizeSegmentationType({ i18n, type: item.name })}\r\n selected={{\r\n name: SegmentationTypes[1],\r\n }}\r\n onClick={({ name }) => this.deleteSegment(name)}\r\n showDeleteSegment={showDeleteSegment}\r\n deleteSegmentAriaLabel={i18n.getString('InlineDownload_Remove_Nth_Segment', { index: 2 })}\r\n />\r\n </React.Fragment>\r\n ) : null;\r\n const formatText = s$i18n.property('ReportEmailRule', 'Format');\r\n const segmentText = s$i18n.property('ReportEmailRule', 'SegmentationTypes');\r\n\r\n return (\r\n <React.Fragment>\r\n <FormGroup\r\n label={(\r\n <React.Fragment>\r\n {formatText}\r\n <HelpPopup topic=\"pop_BA_InlineDownload_Format\" aria-label={i18n.getString('Click to learn more about {{item}}', { item: formatText })} />\r\n </React.Fragment>\r\n )}\r\n >\r\n <InlineDownloadSelect\r\n items={downloadFormats}\r\n onSelect={(format) => {\r\n this.onChange({\r\n Format: format,\r\n });\r\n }}\r\n renderItem={item => s$i18n.enum('DownloadFormat', item) || item}\r\n selected={Format}\r\n role={this.props.downloadBoxRole}\r\n childRole={this.props.downloadFormatsRole}\r\n />\r\n </FormGroup>\r\n {\r\n _.isEmpty(segmentationTypes) ? null : (\r\n <FormGroup\r\n label={(\r\n <React.Fragment>\r\n {segmentText}\r\n <HelpPopup topic=\"pop_BA_InlineDownload_Segment\" aria-label={i18n.getString('Click to learn more about {{item}}', { item: segmentText })} />\r\n </React.Fragment>\r\n )}\r\n >\r\n <InlineDownloadMultiLevelSelect\r\n isForVNext={isForVNext}\r\n items={getSupportedSegmentationTree({\r\n permissions: pageContext.Permissions,\r\n segmentationTypes,\r\n })}\r\n onSelect={({ name }) => {\r\n this.updateSegment(name, 0);\r\n }}\r\n renderItem={item => localizeSegmentationType({ i18n, type: item.name })}\r\n selected={{\r\n name: SegmentationTypes[0],\r\n }}\r\n onClick={({ name }) => this.deleteSegment(name)}\r\n showDeleteSegment={showDeleteSegment}\r\n deleteSegmentAriaLabel={i18n.getString('InlineDownload_Remove_Nth_Segment', { index: 1 })}\r\n />\r\n {showAddSegmentContent}\r\n {showSecondSegmentContent}\r\n </FormGroup>\r\n )\r\n }\r\n\r\n </React.Fragment>\r\n );\r\n }\r\n }\r\n\r\n return V1Part;\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { InlineDownloadEmailFrequencyEditor } from '@bingads-webui-campaign/inline-download-email-frequency-editor';\r\nimport { Checkbox } from '@bingads-webui-react/checkbox';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\nimport FormGroup from './form-group';\r\n\r\nexport default class EmailAndScheduleReport extends React.Component {\r\n static propTypes = {\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']).isRequired,\r\n data: PropTypes.shape({ // eslint-disable-line\r\n NotificationDeliveryOption: PropTypes.shape({\r\n CustomUserIds: PropTypes.arrayOf(PropTypes.number),\r\n EmailOption: PropTypes.object,\r\n }),\r\n Cron: PropTypes.string,\r\n StartTime: PropTypes.string,\r\n EndTime: PropTypes.string,\r\n }).isRequired,\r\n currentUserId: PropTypes.number.isRequired,\r\n s$i18n: PropTypes.shape({\r\n property: PropTypes.func,\r\n }).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n loadUsers: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = { checked: Boolean(props.data.NotificationDeliveryOption) };\r\n }\r\n\r\n onChange({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n }) {\r\n const { checked } = this.state;\r\n const data = _.defaults({\r\n NotificationDeliveryOption, Cron, StartTime, EndTime,\r\n }, this.props.data);\r\n\r\n if (checked && data.NotificationDeliveryOption) {\r\n this.props.onChange({\r\n NotificationDeliveryOption: data.NotificationDeliveryOption,\r\n Cron: data.Cron,\r\n StartTime: data.StartTime,\r\n EndTime: data.EndTime,\r\n });\r\n } else {\r\n this.props.onChange({\r\n NotificationDeliveryOption: null,\r\n Cron: null,\r\n StartTime: null,\r\n EndTime: null,\r\n });\r\n }\r\n }\r\n\r\n onCheck = (event) => {\r\n const { checked } = event.target;\r\n\r\n this.setState({ checked }, () => { this.onChange({}); });\r\n }\r\n\r\n onEmailFrequencyChange = ({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n }) => {\r\n this.onChange({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n });\r\n }\r\n\r\n render() {\r\n const {\r\n s$i18n,\r\n i18n,\r\n data,\r\n currentUserId,\r\n allUsersType,\r\n loadUsers,\r\n isForVNext,\r\n } = this.props;\r\n\r\n const {\r\n checked,\r\n } = this.state;\r\n const emailAndSchedulingLabel = i18n.getString('InlineDownloadReports_EmailAndScheduling_Label');\r\n\r\n return (\r\n <div className=\"inline-download-form__email-and-schedule-report\">\r\n <Checkbox\r\n checked={checked}\r\n onChange={this.onCheck}\r\n >\r\n {emailAndSchedulingLabel}\r\n <HelpPopup topic=\"pop_BA_InlineDownload_ScheduleEmailReport\" aria-label={i18n.getString('Click to learn more about {{item}}', { item: emailAndSchedulingLabel })} />\r\n </Checkbox>\r\n {\r\n checked ? (\r\n <InlineDownloadEmailFrequencyEditor\r\n isForVNext={isForVNext}\r\n data={data}\r\n currentUserId={currentUserId}\r\n s$i18n={s$i18n}\r\n i18n={i18n}\r\n onChange={this.onEmailFrequencyChange}\r\n FormGroup={FormGroup}\r\n allUsersType={allUsersType}\r\n loadUsers={loadUsers}\r\n />\r\n ) : null\r\n }\r\n </div>\r\n );\r\n }\r\n}\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { Checkbox } from '@bingads-webui-react/checkbox';\r\nimport { HelpPopup } from '@bingads-webui-react/help-popup';\r\n\r\nconst MaxLengthOfReportName = 85;\r\n\r\nexport default class SaveAsCustomReport extends React.PureComponent {\r\n static propTypes = {\r\n isForVNext: PropTypes.bool.isRequired,\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']).isRequired,\r\n data: PropTypes.shape({ // eslint-disable-line\r\n Name: PropTypes.string,\r\n }).isRequired,\r\n disabled: PropTypes.bool.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n }\r\n\r\n static getDerivedStateFromProps({ data, disabled, onChange }, prevState) {\r\n const { checked = false, name = data.Name } = prevState;\r\n\r\n const update = {\r\n checked: (data.Name || disabled) ? true : checked,\r\n name: _.isString(name) ? name : '',\r\n };\r\n\r\n if (_.isEqual(update, prevState)) {\r\n return null;\r\n }\r\n\r\n onChange(update.checked ? update.name : null);\r\n return update;\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n onChange = () => {\r\n const { checked, name } = this.state;\r\n this.props.onChange(checked ? name : null);\r\n }\r\n\r\n onCheck = (event) => {\r\n const { checked } = event.target;\r\n\r\n this.setState({\r\n checked,\r\n }, this.onChange);\r\n }\r\n\r\n onInput = (event) => {\r\n this.setState({\r\n name: event.target.value,\r\n }, this.onChange);\r\n }\r\n\r\n render() {\r\n const {\r\n allUsersType,\r\n disabled,\r\n i18n,\r\n isForVNext,\r\n } = this.props;\r\n\r\n const {\r\n checked,\r\n name,\r\n } = this.state;\r\n const saveReportLabel = i18n.getString('InlineDownloadReports_EmailAndScheduling_SaveReport_Label');\r\n\r\n return (\r\n <div className=\"inline-download-form__save-as-custom-report\">\r\n <Checkbox\r\n checked={checked}\r\n disabled={disabled}\r\n onChange={this.onCheck}\r\n >\r\n <p>\r\n {(\r\n <React.Fragment>\r\n {saveReportLabel}\r\n <HelpPopup\r\n topic={\r\n allUsersType === 'Account' ?\r\n 'pop_BA_InlineDownload_SaveReportCamp' :\r\n 'pop_BA_InlineDownload_SaveReportAcct'\r\n }\r\n aria-label={i18n.getString('Click to learn more about {{item}}', { item: saveReportLabel })}\r\n />\r\n </React.Fragment>\r\n )}\r\n </p>\r\n {\r\n checked ? (\r\n <React.Fragment>\r\n <input\r\n onInput={event => this.onInput(event)}\r\n // The next line is required to fix compatibility issue on Safari\r\n // https://msasg.visualstudio.com/Bing_Ads/_workitems/edit/3007412/\r\n onClick={event => event.preventDefault()}\r\n type=\"text\"\r\n value={name}\r\n placeholder={i18n.getString('InlineDownloadReports_ReportName')}\r\n maxLength={MaxLengthOfReportName}\r\n />\r\n <p>\r\n {i18n.getString(isForVNext\r\n ? 'InlineDownloadReports_EmailAndScheduling_SaveReport_Desc_New'\r\n : 'InlineDownloadReports_EmailAndScheduling_SaveReport_Desc', {\r\n title: allUsersType === 'Account' ?\r\n i18n.getString('InlineDownloadReports_Campaigns_Title') :\r\n i18n.getString('InlineDownloadReports_AccountsSummary_Title'),\r\n })}\r\n </p>\r\n </React.Fragment>\r\n ) : null\r\n }\r\n </Checkbox>\r\n </div>\r\n );\r\n }\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid, no-script-url */\r\nimport classnames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport { GiveFeedback } from '@bingads-webui-campaign-react/give-feedback';\r\nimport {\r\n segmentationTree,\r\n segmentationType,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { getV1Part } from './v1-part';\r\nimport { getV2Part } from './v2-part';\r\n\r\nconst excelDownloadRowLimit = 1000000;\r\n\r\nexport function validateGoalSegmentationTypes(types) {\r\n if (_.contains(types, segmentationType.GoalCategory) &&\r\n _.contains(types, segmentationType.GoalName)) { return false; }\r\n\r\n return true;\r\n}\r\n\r\nexport function validateTimeSegmentationTypes(types) {\r\n // validation fail if both types are under 'Time'.\r\n const timeArray = _.find(segmentationTree, { name: 'Time' });\r\n\r\n return _.size(types) < 2\r\n || _.isUndefined(_.find(timeArray.children, { name: types[0] }))\r\n || _.isUndefined(_.find(timeArray.children, { name: types[1] }));\r\n}\r\n\r\nexport const getInlineReactForm = ({\r\n i18n,\r\n pageContext,\r\n s$i18n,\r\n loadUsers,\r\n}) => {\r\n class InlineDownloadForm extends React.Component {\r\n static propTypes = {\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']).isRequired,\r\n data: PropTypes.shape({ // eslint-disable-line\r\n Format: PropTypes.string,\r\n SegmentationTypes: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n NotificationDeliveryOption: PropTypes.shape({\r\n CustomUserIds: PropTypes.arrayOf(PropTypes.number),\r\n EmailOption: PropTypes.object,\r\n }),\r\n Cron: PropTypes.string,\r\n StartTime: PropTypes.string,\r\n EndTime: PropTypes.string,\r\n Name: PropTypes.string,\r\n IsCustomerHierachyRequest: PropTypes.bool,\r\n AccountModes: PropTypes.arrayOf(PropTypes.string),\r\n }).isRequired,\r\n downloadFormats: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n segmentationTypes: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n isFeedbackEnabled: PropTypes.bool.isRequired,\r\n totalRecordCount: PropTypes.number.isRequired,\r\n onDownload: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n downloadBoxRole: PropTypes.string,\r\n downloadFormatsRole: PropTypes.string,\r\n };\r\n\r\n static defaultProps = {\r\n downloadBoxRole: 'menu',\r\n downloadFormatsRole: 'menuitem',\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = _.defaults(props.data, {\r\n Name: null,\r\n });\r\n this.V1Part = getV1Part({\r\n i18n,\r\n s$i18n,\r\n pageContext,\r\n });\r\n\r\n this.V2Part = getV2Part({\r\n s$i18n,\r\n i18n,\r\n pageContext,\r\n loadUsers,\r\n });\r\n }\r\n\r\n onDownload = () => {\r\n const {\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n } = this.state;\r\n\r\n this.props.onDownload({\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n });\r\n }\r\n\r\n onCancel = () => this.props.onCancel()\r\n\r\n render() {\r\n const {\r\n allUsersType,\r\n downloadFormats,\r\n segmentationTypes,\r\n totalRecordCount,\r\n isFeedbackEnabled,\r\n isForVNext,\r\n } = this.props;\r\n\r\n const errors = [\r\n ...(this.state.Format === 'Xlsx' && totalRecordCount > excelDownloadRowLimit) ?\r\n [i18n.getString('InlineReportDownload_RowsExceeded_Alert')] :\r\n [],\r\n ...(!_.isNull(this.state.Name) && _.isEmpty(this.state.Name.trim())) ?\r\n [i18n.getString('Error_Campaign_API_TaskNameInvalid')] :\r\n [],\r\n ...(!validateTimeSegmentationTypes(this.state.SegmentationTypes)) ?\r\n [i18n.getString('Multiple_Time_Based_Segmentation_Not_Supported')] :\r\n [],\r\n ...(!validateGoalSegmentationTypes(this.state.SegmentationTypes)) ?\r\n [i18n.getString('Multiple_Goal_Based_Segmentation_Not_Supported')] :\r\n [],\r\n ];\r\n return (\r\n <div className={classnames('panel', 'inline-download-form')}>\r\n <div className=\"panel-heading\">\r\n <h1 className=\"panel-title\">\r\n {i18n.getString('InlineDownload_DownloadReportOptions')}\r\n {isFeedbackEnabled ? (\r\n <GiveFeedback\r\n featureName=\"Segmentation\"\r\n areaName=\"Download report\"\r\n >\r\n {i18n.getString('GridDownload_GiveFeedback_Label')}\r\n </GiveFeedback>\r\n ) : null}\r\n </h1>\r\n </div>\r\n <div className=\"panel-body\">\r\n <form className={classnames('form', 'form-horizontal')}>\r\n <this.V1Part\r\n isForVNext={isForVNext}\r\n data={{\r\n Format: this.state.Format,\r\n SegmentationTypes: this.state.SegmentationTypes,\r\n }}\r\n downloadFormats={downloadFormats}\r\n segmentationTypes={segmentationTypes}\r\n onChange={({\r\n Format,\r\n SegmentationTypes,\r\n }) => {\r\n this.setState({\r\n Format,\r\n SegmentationTypes,\r\n });\r\n }}\r\n downloadBoxRole={this.props.downloadBoxRole}\r\n downloadFormatsRole={this.props.downloadFormatsRole}\r\n />\r\n <this.V2Part\r\n isForVNext={isForVNext}\r\n allUsersType={allUsersType}\r\n data={{\r\n NotificationDeliveryOption: this.state.NotificationDeliveryOption,\r\n Cron: this.state.Cron,\r\n StartTime: this.state.StartTime,\r\n EndTime: this.state.EndTime,\r\n Name: this.state.Name,\r\n AccountModes: this.state.AccountModes,\r\n }}\r\n onChange={({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n AccountModes,\r\n }) => {\r\n this.setState({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n AccountModes,\r\n });\r\n }}\r\n />\r\n {\r\n _.isEmpty(errors) ? null : (\r\n <div className=\"form-group\">\r\n <div className=\"col-sm-12\">\r\n <div className={classnames('alert', 'alert-warning')} role=\"alert\">\r\n <span className=\"alert-image\" />\r\n {\r\n errors.map(error => (\r\n <span>{error}</span>\r\n ))\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n <button\r\n className={classnames('btn', 'btn-primary', 'btn-download')}\r\n disabled={!_.isEmpty(errors)}\r\n onClick={this.onDownload}\r\n type=\"button\"\r\n >\r\n {i18n.getString('InlineReportDownload_Download_Button')}\r\n </button>\r\n <button\r\n className={classnames('btn', 'btn-default', 'btn-cancel')}\r\n onClick={this.onCancel}\r\n type=\"button\"\r\n >\r\n {i18n.getString('Cancel')}\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n return InlineDownloadForm;\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport EmailAndScheduleReport from './email-and-schedule-report';\r\nimport SaveAsCustomReport from './save-as-custom-report';\r\n\r\nexport const getV2Part = ({\r\n s$i18n,\r\n i18n,\r\n pageContext,\r\n loadUsers,\r\n}) => {\r\n function V2Part({\r\n isForVNext,\r\n allUsersType,\r\n data,\r\n onChange,\r\n }) {\r\n return (\r\n <React.Fragment>\r\n <EmailAndScheduleReport\r\n isForVNext={isForVNext}\r\n allUsersType={allUsersType}\r\n currentUserId={pageContext.CurrentUser.Id}\r\n data={data}\r\n s$i18n={s$i18n}\r\n i18n={i18n}\r\n loadUsers={() => loadUsers({ allUsersType })}\r\n onChange={({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n }) => {\r\n onChange(_.defaults({\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n }, data));\r\n }}\r\n />\r\n <SaveAsCustomReport\r\n isForVNext={isForVNext}\r\n allUsersType={allUsersType}\r\n data={{\r\n Name: data.Name,\r\n }}\r\n disabled={Boolean(data.NotificationDeliveryOption)}\r\n i18n={i18n}\r\n onChange={Name => onChange(_.defaults({\r\n Name,\r\n }, data))}\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n\r\n V2Part.propTypes = {\r\n isForVNext: PropTypes.bool.isRequired,\r\n allUsersType: PropTypes.oneOf(['Customer', 'Account']).isRequired,\r\n data: PropTypes.shape({ // eslint-disable-line\r\n NotificationDeliveryOption: PropTypes.shape({\r\n CustomUserIds: PropTypes.arrayOf(PropTypes.number),\r\n EmailOption: PropTypes.object,\r\n }),\r\n Cron: PropTypes.string,\r\n StartTime: PropTypes.string,\r\n EndTime: PropTypes.string,\r\n Name: PropTypes.string,\r\n }).isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n };\r\n\r\n return V2Part;\r\n};\r\n\r\n","import Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport _ from 'underscore';\r\nimport {\r\n segmentationTypeEnum,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { getInlineReactForm } from '../../form';\r\n\r\nexport const getInlineDownloadForm = ({\r\n pageContext,\r\n actionMap,\r\n s$ReportRule,\r\n i18n,\r\n s$i18n,\r\n loadUsers,\r\n}) => {\r\n const supportedDownloadFormats = _.intersection(s$ReportRule.properties.Format.enum, [\r\n 'Csv',\r\n 'Tsv',\r\n 'Xlsx',\r\n 'Csvzip',\r\n ]);\r\n /**\r\n * @typedef {Object} Repository\r\n * @property {Function} download - download according to given params and return a Promise\r\n */\r\n class InlineDownloadForm extends Backbone.View {\r\n /**\r\n * Initialize this Base Download view.\r\n * @param {Object} options - options to this Backbone View\r\n * @param {DownloadFormat[]} options.downloadFormats - Used download formats in this view\r\n * @see [DownloadFormat]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FInternal%2FEntity%2FInlineReport%2FDownloadFormat.cs&version=GBmaster&_a=contents}\r\n * @param {SegmentationType[]} segmentationTypes - Used segmentation types in this view\r\n * @see [SegmentationType]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FEntity%2FAggregator2%2FSegmentationType.cs&version=GBmaster&_a=contents}\r\n * @param {Repository} options.repository - Inline download repository which does the real work\r\n * @param {Object} options.data - data shown in the form, under schema of ReportRule\r\n * @param {Bool} isForVNext - true if used in vnext\r\n * @return {void}\r\n */\r\n initialize({\r\n gridId,\r\n totalRecordCount = 0,\r\n repository,\r\n downloadFormats = supportedDownloadFormats,\r\n segmentationTypes = segmentationTypeEnum,\r\n validateSegmentType = () => true,\r\n isFeedbackEnabled = pageContext.Permissions.IsFeedbackEnabled,\r\n data,\r\n allUsersType,\r\n isForVNext = false,\r\n }) {\r\n this.repository = repository;\r\n\r\n this.gridId = gridId;\r\n this.turnOffSegmentation = _.isEmpty(segmentationTypes);\r\n\r\n this.data = data;\r\n if (gridId === 'SmartPerformanceGrid') {\r\n this.data.AccountModes = ['Smart'];\r\n } else if (gridId === 'PerformanceGrid') {\r\n this.data.AccountModes = ['Expert'];\r\n }\r\n\r\n this.downloadFormats = downloadFormats;\r\n this.segmentationTypes = segmentationTypes;\r\n this.totalRecordCount = totalRecordCount;\r\n this.validateSegmentType = validateSegmentType;\r\n this.isFeedbackEnabled = isFeedbackEnabled;\r\n\r\n this.allUsersType = allUsersType;\r\n this.isForVNext = isForVNext;\r\n this.Form = getInlineReactForm({\r\n i18n,\r\n pageContext,\r\n s$i18n,\r\n loadUsers,\r\n });\r\n }\r\n\r\n render() {\r\n this.$el.show();\r\n this.trigger('hideToolbar');\r\n ReactDOM.render(\r\n (\r\n <this.Form\r\n isForVNext={this.isForVNext}\r\n allUsersType={this.allUsersType}\r\n data={this.data}\r\n downloadFormats={this.downloadFormats}\r\n segmentationTypes={this.segmentationTypes}\r\n totalRecordCount={this.totalRecordCount}\r\n isFeedbackEnabled={this.isFeedbackEnabled}\r\n onDownload={({\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }) => {\r\n this.download({\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n });\r\n }}\r\n onCancel={() => this.clear()}\r\n />\r\n ), this.el\r\n );\r\n\r\n return this;\r\n }\r\n\r\n download({\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }) {\r\n const selectedDownloadType = Format;\r\n const selectedSegmentationType = SegmentationTypes[0];\r\n const validSegmentationTypes = _.uniq(_.intersection(SegmentationTypes, this.segmentationTypes)); // eslint-disable-line\r\n\r\n if (!this.turnOffSegmentation && !this.validateSegmentType(selectedSegmentationType)) {\r\n return;\r\n }\r\n\r\n // This will enforce cache token to be added to download request\r\n // Only add cache token when segment is the same as in the grid otherwise it is invalid so\r\n // no need to add to the request\r\n if (actionMap) {\r\n actionMap.registerActionMapExtension('taskitems', (metadata) => {\r\n if (!this.turnOffSegmentation\r\n && (metadata && selectedSegmentationType === this.data.SegmentationTypes[0])) {\r\n metadata.gridIds = [this.gridId]; // eslint-disable-line\r\n } else {\r\n metadata.gridIds = []; // eslint-disable-line\r\n }\r\n return metadata;\r\n });\r\n }\r\n\r\n this.repository.download({\r\n Format: selectedDownloadType,\r\n SegmentationTypes: validSegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron: Cron || '',\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }).then(() => {\r\n this.clear();\r\n }).catch((err) => {\r\n alert(err.message);\r\n });\r\n\r\n this.clear();\r\n }\r\n\r\n remove() {\r\n this.clear();\r\n super.remove();\r\n }\r\n\r\n clear() {\r\n this.$el.empty();\r\n this.$el.hide();\r\n this.trigger('showToolbar');\r\n }\r\n }\r\n\r\n return InlineDownloadForm;\r\n};\r\n","/* istanbul ignore file */\r\nimport React from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n segmentationTypeEnum,\r\n} from '@bingads-webui-campaign/segmentation-utilities';\r\nimport { getInlineReactForm } from '../../form';\r\n\r\nexport const getInlineDownloadFormReact = ({\r\n pageContext,\r\n actionMap,\r\n s$ReportRule,\r\n i18n,\r\n s$i18n,\r\n loadUsers,\r\n}) => {\r\n const supportedDownloadFormats = _.intersection(s$ReportRule.properties.Format.enum, [\r\n 'Csv',\r\n 'Tsv',\r\n 'Xlsx',\r\n 'Csvzip',\r\n ]);\r\n\r\n function InlineDownloadFormReact(props) {\r\n /**\r\n * @param {Object} options - options to this Backbone View\r\n * @param {DownloadFormat[]} options.downloadFormats - Used download formats in this view\r\n * @see [DownloadFormat]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FInternal%2FEntity%2FInlineReport%2FDownloadFormat.cs&version=GBmaster&_a=contents}\r\n * @param {SegmentationType[]} segmentationTypes - Used segmentation types in this view\r\n * @see [SegmentationType]{@link https://msasg.visualstudio.com/Bing_Ads/_git/AdsAppsMT#path=%2Fprivate%2FCampaign%2FMT%2FSource%2FInterface%2FEntity%2FAggregator2%2FSegmentationType.cs&version=GBmaster&_a=contents}\r\n * @param {Repository} options.repository - Inline download repository which does the real work\r\n * @param {Object} options.data - data shown in the form, under schema of ReportRule\r\n * @param {Bool} isForVNext - true if used in vnext\r\n * @return {void}\r\n */\r\n const currentProps = props;\r\n\r\n const {\r\n // unlike backbone, we prefer a function callback rather than trigger event.\r\n toggleToolbarVisibility,\r\n gridId,\r\n totalRecordCount = 0,\r\n repository,\r\n downloadFormats = supportedDownloadFormats,\r\n segmentationTypes = segmentationTypeEnum,\r\n validateSegmentType = () => true,\r\n isFeedbackEnabled = pageContext.Permissions.IsFeedbackEnabled,\r\n data,\r\n allUsersType,\r\n isForVNext = false,\r\n clearAfterDownloadCall = true,\r\n downloadBoxRole = 'menu',\r\n downloadFormatsRole = 'menuitem',\r\n } = currentProps;\r\n\r\n const turnOffSegmentation = _.isEmpty(segmentationTypes);\r\n\r\n if (gridId === 'SmartPerformanceGrid') {\r\n data.AccountModes = ['Smart'];\r\n } else if (gridId === 'PerformanceGrid') {\r\n data.AccountModes = ['Expert'];\r\n }\r\n\r\n const Form = getInlineReactForm({\r\n i18n,\r\n pageContext,\r\n s$i18n,\r\n loadUsers,\r\n });\r\n\r\n function clear() {\r\n toggleToolbarVisibility();\r\n }\r\n\r\n function download({\r\n Format,\r\n SegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron,\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }) {\r\n const selectedDownloadType = Format;\r\n const selectedSegmentationType = SegmentationTypes[0];\r\n const validSegmentationTypes = _.uniq(_.intersection(SegmentationTypes, segmentationTypes)); // eslint-disable-line\r\n\r\n if (!turnOffSegmentation && !validateSegmentType(selectedSegmentationType)) {\r\n return;\r\n }\r\n\r\n // This will enforce cache token to be added to download request\r\n // Only add cache token when segment is the same as in the grid otherwise it is invalid so\r\n // no need to add to the request\r\n if (actionMap) {\r\n actionMap.registerActionMapExtension('taskitems', (metadata) => {\r\n if (!turnOffSegmentation\r\n && (metadata && selectedSegmentationType === data.SegmentationTypes[0])) {\r\n metadata.gridIds = [gridId]; // eslint-disable-line\r\n } else {\r\n metadata.gridIds = []; // eslint-disable-line\r\n }\r\n return metadata;\r\n });\r\n }\r\n\r\n repository.download({\r\n Format: selectedDownloadType,\r\n SegmentationTypes: validSegmentationTypes,\r\n NotificationDeliveryOption,\r\n Cron: Cron || '',\r\n StartTime,\r\n EndTime,\r\n Name,\r\n IsCustomerHierachyRequest,\r\n AccountModes,\r\n }).then(() => {\r\n if (clearAfterDownloadCall) {\r\n clear();\r\n }\r\n }).catch((err) => {\r\n alert(err.message);\r\n });\r\n\r\n clear();\r\n }\r\n\r\n return (\r\n <Form\r\n isForVNext={isForVNext}\r\n allUsersType={allUsersType}\r\n data={data}\r\n downloadFormats={downloadFormats}\r\n segmentationTypes={segmentationTypes}\r\n totalRecordCount={totalRecordCount}\r\n isFeedbackEnabled={isFeedbackEnabled}\r\n onDownload={download}\r\n onCancel={clear}\r\n downloadBoxRole={downloadBoxRole}\r\n downloadFormatsRole={downloadFormatsRole}\r\n />\r\n );\r\n }\r\n\r\n return InlineDownloadFormReact;\r\n};\r\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\r\n/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/anchor-is-valid, jsx-a11y/interactive-supports-focus */\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { submitEvent } from '@bingads-webui-universal/accessibility-helper';\r\n\r\nexport function Dropdown(props) {\r\n const {\r\n button,\r\n isMultiLevelDropdown,\r\n children,\r\n role,\r\n } = props;\r\n\r\n return (\r\n <div className=\"btn-group\">\r\n <button\r\n className={classnames('btn', 'btn-default', 'dropdown-toggle', 'legacy-dropdown-toggle')}\r\n type=\"button\"\r\n data-toggle=\"dropdown\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n >\r\n {button}\r\n <span\r\n className=\"caret\"\r\n />\r\n </button>\r\n <ul\r\n className={classnames('dropdown-menu', isMultiLevelDropdown ? 'legacy-multi-level-dropdown-menu' : '')}\r\n role={role}\r\n aria-label={button}\r\n >\r\n {children}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n\r\nDropdown.propTypes = {\r\n button: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.string,\r\n ]).isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.string,\r\n PropTypes.arrayOf(PropTypes.element),\r\n ]).isRequired,\r\n isMultiLevelDropdown: PropTypes.bool,\r\n role: PropTypes.string,\r\n};\r\n\r\nDropdown.defaultProps = {\r\n isMultiLevelDropdown: false,\r\n role: 'menu',\r\n};\r\n\r\nexport function DropdownLi(props) {\r\n const {\r\n children,\r\n onClick,\r\n selected,\r\n role,\r\n } = props;\r\n\r\n const onClickHandler = (e) => {\r\n onClick();\r\n e.target.closest('.btn-group').querySelector('.btn').focus();\r\n };\r\n\r\n const onClickWrapper = submitEvent(() => onClick());\r\n const focusWrapper = submitEvent(e => e.target.closest('.btn-group').querySelector('.btn').focus());\r\n const onKeyPressHandler = (e) => {\r\n onClickWrapper(e);\r\n focusWrapper(e);\r\n };\r\n\r\n return (\r\n <li role=\"presentation\">\r\n <a\r\n role={role}\r\n tabIndex={0}\r\n onClick={onClickHandler}\r\n onKeyPress={onKeyPressHandler}\r\n className=\"clickable\"\r\n aria-selected={selected}\r\n >\r\n <span>{children}</span>\r\n </a>\r\n </li>\r\n );\r\n}\r\n\r\nDropdownLi.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.string,\r\n ]).isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n selected: PropTypes.bool,\r\n role: PropTypes.string,\r\n};\r\n\r\nDropdownLi.defaultProps = {\r\n selected: false,\r\n role: 'menuitem',\r\n};\r\n\r\nexport function DropdownSubMenu(props) {\r\n const {\r\n isForVNext,\r\n button,\r\n children,\r\n } = props;\r\n\r\n return (\r\n <li className=\"dropdown-submenu\" role=\"presentation\">\r\n <a role=\"menuitem\" aria-haspopup=\"true\" tabIndex={0}>\r\n <span>{button}</span>\r\n <span className={isForVNext ? 'caret' : classnames('spritedimage', 'toolbar-icon', 'grid-expand-icon', 'pull-right')} />\r\n </a>\r\n <ul\r\n className=\"dropdown-menu\"\r\n role=\"menu\"\r\n >\r\n {children}\r\n </ul>\r\n </li>\r\n );\r\n}\r\n\r\nDropdownSubMenu.propTypes = {\r\n button: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.string,\r\n ]).isRequired,\r\n children: PropTypes.oneOfType([\r\n PropTypes.element,\r\n PropTypes.string,\r\n ]).isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n};\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Dropdown, DropdownLi } from './dropdown';\r\n\r\nexport function InlineDownloadSelect({\r\n items,\r\n getItemId,\r\n onSelect,\r\n renderItem,\r\n selected,\r\n role,\r\n childRole,\r\n}) {\r\n return (\r\n <Dropdown\r\n button={renderItem(selected)}\r\n role={role}\r\n >\r\n {items.map((item, index) => (\r\n <DropdownLi\r\n key={getItemId(item, index)}\r\n onClick={() => {\r\n if (item !== selected) {\r\n onSelect(item);\r\n }\r\n }}\r\n selected={item === selected}\r\n role={childRole}\r\n >\r\n {renderItem(item, index)}\r\n </DropdownLi>\r\n ))}\r\n </Dropdown>\r\n );\r\n}\r\n\r\nInlineDownloadSelect.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.any).isRequired,\r\n getItemId: PropTypes.func,\r\n onSelect: PropTypes.func.isRequired,\r\n renderItem: PropTypes.func,\r\n selected: PropTypes.any, // eslint-disable-line\r\n role: PropTypes.string,\r\n childRole: PropTypes.string,\r\n};\r\n\r\nInlineDownloadSelect.defaultProps = {\r\n getItemId: (item, index) => String(index),\r\n renderItem: () => null,\r\n selected: null,\r\n role: 'menu',\r\n childRole: 'menuitem',\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport { Dropdown, DropdownLi, DropdownSubMenu } from './dropdown';\r\n\r\nexport class InlineDownloadMultiLevelSelect extends React.Component {\r\n static propTypes = {\r\n // Same as structure defined in @bingads-webui/json-tree-parser\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n name: PropTypes.string,\r\n children: PropTypes.arrayOf(PropTypes.any),\r\n })).isRequired,\r\n getItemId: PropTypes.func,\r\n onSelect: PropTypes.func.isRequired,\r\n isForVNext: PropTypes.bool.isRequired,\r\n renderItem: PropTypes.func.isRequired,\r\n selected: PropTypes.any, // eslint-disable-line\r\n onClick: PropTypes.func.isRequired,\r\n showDeleteSegment: PropTypes.bool.isRequired,\r\n deleteSegmentAriaLabel: PropTypes.string,\r\n };\r\n\r\n static defaultProps = {\r\n getItemId: () => _.uniqueId(),\r\n selected: null,\r\n deleteSegmentAriaLabel: '',\r\n };\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n return {\r\n selected: nextProps.selected || prevState.selected,\r\n };\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n onSelect = (item) => {\r\n this.setState({\r\n selected: item,\r\n }, () => this.props.onSelect(item));\r\n };\r\n\r\n onDeleteSegmentKeyDown = (e, selected) => {\r\n if (e.keyCode === 13 || e.keyCode === 32) { // Enter: 13, Space: 32\r\n this.props.onClick(selected);\r\n e.preventDefault();\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n items,\r\n getItemId,\r\n renderItem,\r\n isForVNext,\r\n onClick,\r\n showDeleteSegment,\r\n deleteSegmentAriaLabel,\r\n } = this.props;\r\n\r\n const {\r\n selected,\r\n } = this.state;\r\n\r\n const renderLi = item => (\r\n <DropdownLi\r\n key={getItemId(item)}\r\n onClick={() => this.onSelect(item)}\r\n >\r\n {renderItem(item)}\r\n </DropdownLi>\r\n );\r\n\r\n const deleteSegment = showDeleteSegment ? (\r\n <i\r\n onClick={() => onClick(selected)}\r\n onKeyDown={e => this.onDeleteSegmentKeyDown(e, selected)}\r\n tabIndex=\"0\"\r\n role=\"button\"\r\n style={{ cursor: 'pointer' }}\r\n className=\"glyphicon glyphicon-remove\"\r\n aria-label={deleteSegmentAriaLabel}\r\n />\r\n ) : null;\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"segment-row\">\r\n <Dropdown\r\n button={renderItem(selected)}\r\n isMultiLevelDropdown\r\n >\r\n {items.map(item => (\r\n item.children ? (\r\n <DropdownSubMenu\r\n isForVNext={isForVNext}\r\n key={getItemId(item)}\r\n button={renderItem(item)}\r\n >\r\n {item.children.map(child => (\r\n renderLi(child)\r\n ))}\r\n </DropdownSubMenu>\r\n ) : (\r\n renderLi(item)\r\n )\r\n ))}\r\n </Dropdown>\r\n {deleteSegment}\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nexport class BaseLocationRecommendationModel {\r\n constructor({\r\n deps,\r\n }) {\r\n this.locationRecommendations = ko.observable([]);\r\n this.locationImpressionGain = ko.computed(() =>\r\n _.reduce(\r\n this.locationRecommendations(),\r\n (ret, { EstimatedIncreaseInImpressions }) => ret + EstimatedIncreaseInImpressions,\r\n 0\r\n ));\r\n this.locationTrafficGain = ko.computed(() => {\r\n const idList = [];\r\n const { QueriesFiltered, QueriesPassedLocationFiltering } =\r\n _.reduce(this.locationRecommendations(), (ret, recommend) => {\r\n const campaignId = _.chain(ret).result('Campaign').result('Id').value();\r\n let passedFiltering = 0;\r\n if (!_.contains(idList, campaignId)) {\r\n idList.push(campaignId);\r\n passedFiltering = recommend.QueriesPassedLocationFiltering;\r\n }\r\n return {\r\n QueriesFiltered: ret.QueriesFiltered + recommend.QueriesFiltered,\r\n QueriesPassedLocationFiltering:\r\n ret.QueriesPassedLocationFiltering + passedFiltering,\r\n };\r\n }, { QueriesFiltered: 0, QueriesPassedLocationFiltering: 0 });\r\n\r\n const totalTraffic = QueriesPassedLocationFiltering;\r\n if (totalTraffic === 0) {\r\n return 0;\r\n }\r\n return deps.i18n.formatPercentToFixed(QueriesFiltered / totalTraffic);\r\n });\r\n }\r\n}\r\n","import ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport { BaseLocationRecommendationModel } from './base-location-recommendation-model';\r\n\r\nexport default class Model extends BaseLocationRecommendationModel {\r\n constructor({\r\n i18n,\r\n scope,\r\n isExpanded,\r\n }) {\r\n super({\r\n deps: {\r\n i18n,\r\n },\r\n });\r\n this.campaignLength = ko.computed(() => _.chain(this.locationRecommendations())\r\n .pluck('Campaign')\r\n .pluck('Id')\r\n .uniq()\r\n .size()\r\n .value());\r\n this.description = ko.computed(() => i18n.getString('Inline_Location_Recommendation_Description', {\r\n trafficGain: this.locationTrafficGain(),\r\n impressionGain: this.locationImpressionGain(),\r\n }));\r\n this.selectedItems = ko.observableArray([]);\r\n this.isActionButtonEnabled = ko.computed(() => this.selectedItems().length > 0);\r\n this.banner = ko.computed(() => {\r\n let key = 'Inline_Location_Recommendation_Account_Banner';\r\n if (_.isFinite(scope.campaignId)) {\r\n key = 'Inline_Location_Recommendation_Campaign_Banner';\r\n }\r\n return i18n.getString(key, {\r\n recommendationCount: _.size(this.locationRecommendations()),\r\n trafficGain: this.locationTrafficGain(),\r\n impressionGain: this.locationImpressionGain(),\r\n campaignNumber: this.campaignLength(),\r\n });\r\n });\r\n this.hasRecommendation = ko.computed(() => _.size(this.locationRecommendations()) > 0);\r\n this.isExpanded = ko.observable(isExpanded);\r\n this.clickCollapse = () => {\r\n this.isExpanded(!this.isExpanded());\r\n };\r\n this.criterions = ko.observableArray([]);\r\n this.recommendationsOnMap = ko.observableArray([]);\r\n this.isMapShow = ko.computed(() =>\r\n _.size(this.criterions()) > 0 || _.size(this.recommendationsOnMap()) > 0);\r\n this.showLocationsRecommendationsGrid = ko.computed(() =>\r\n this.hasRecommendation() || this.isMapShow());\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\nimport { LocationRecommendationGrid } from '@bingads-webui-campaign/location-recommendation-grid';\r\nimport inlineTemplate from './inline-template.pug';\r\nimport locationGridAccountTemplate from './location-grid-account-template.pug';\r\nimport locationGridCampaignTemplate from './location-grid-campaign-template.pug';\r\nimport locationGridTemplate from './location-grid-template.pug';\r\nimport Model from './model';\r\n\r\n// Start your code from here for component inline-location-recommendation\r\nconst recommendationType = 'NewLocationTargetOpportunity';\r\nconst channel = 'campaignsetting';\r\nconst templates = {\r\n inlineTemplate,\r\n locationGridAccountTemplate,\r\n locationGridCampaignTemplate,\r\n};\r\n\r\nfunction logViewEvent(deps, opportunitys) {\r\n const { logger, constants } = deps;\r\n _.each(opportunitys, ({ OpportunityId: id, Campaign = {} }) => {\r\n logger.logMessage(\r\n [constants.LOGCATEGORY.TRACE],\r\n constants.LOGLEVEL.INFO,\r\n 'Recommendations',\r\n {\r\n type: recommendationType,\r\n typeId: 216, // opportunity type id, correspond to recommendation type https://msasg.visualstudio.com/Bing_Ads/_git/AdInsights?path=%2Fprivate%2FMTv2%2FPlugins%2FOpportunity%2FSchema%2FOpportunityType.cs&version=GBmaster\r\n id,\r\n campaignId: Campaign.Id,\r\n isClick: false,\r\n channel,\r\n }\r\n );\r\n });\r\n}\r\n\r\nexport class InlineLocationRecommendation extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.deps = options.deps;\r\n this.dataSource = options.dataSource;\r\n this.isAllSelected = false;\r\n this.i18n = this.deps.i18n;\r\n this.model = new Model({\r\n i18n: this.i18n,\r\n scope: options.scope,\r\n isExpanded: !!options.isExpanded,\r\n });\r\n this.alertHelper = new this.deps.AlertHelper({ i18n: this.i18n });\r\n this.isAccountLevel = !_.isFinite(options.scope.campaignId);\r\n const columns = this.isAccountLevel ? [\r\n 'Campaign',\r\n 'Location',\r\n 'Impression',\r\n 'Dismiss',\r\n ] : ['Location',\r\n 'Impression',\r\n 'Dismiss',\r\n ];\r\n this.locationRecommendationGrid = new LocationRecommendationGrid({\r\n columns,\r\n dataSource: {\r\n type: 'memory',\r\n data: [],\r\n },\r\n hasPagination: this.isAccountLevel,\r\n selectAllByDefault: !this.isAccountLevel,\r\n ...options,\r\n }).render();\r\n this.locationRecommendationGrid.on('selectChanged', selectedItems => this.model.selectedItems(selectedItems));\r\n this.locationRecommendationGrid.on('isAllSelected', (isAllSelected) => { this.isAllSelected = isAllSelected; });\r\n this.locationRecommendationGrid.on('dismiss', recommendation => this.dismissRecommendations([recommendation]));\r\n this.locationRecommendationGrid.on('mouseover:recommendation', recommendation => this.mouseOverRecommendation(recommendation));\r\n this.locationRecommendationGrid.on('mouseout:recommendation', recommendation => this.mouseOutRecommendation(recommendation));\r\n this.displayedRecommendations = [];\r\n this.locationRecommendationGrid.on('display:recommendations', (recommendations) => {\r\n if (this.model.isExpanded()) {\r\n logViewEvent(this.deps, recommendations);\r\n return;\r\n }\r\n this.displayedRecommendations = recommendations;\r\n });\r\n\r\n const isMapLoaded = window.Microsoft && window.Microsoft.Maps && window.Microsoft.Maps.loadModule;\r\n this.showMap = isMapLoaded && ((!this.isAccountLevel && this.options.isCampaignLevelLocation)\r\n || _.isFinite(options.scope.adgroupId));\r\n if (this.showMap) {\r\n const MapView = this.deps.LocationMap;\r\n this.mapView = new MapView({\r\n disableInfoBoxGroupList: ['included', 'excluded'],\r\n mapHeight: this.options.mapHeight,\r\n }).render();\r\n\r\n this.mapView.on('target:recommendation', recommendation => this.targetRecommendations([recommendation]));\r\n this.mapView.on('dismiss:recommendation', recommendation => this.dismissRecommendations([recommendation]));\r\n\r\n this.model.locationRecommendations.subscribe((recommendations) => {\r\n if (this.model.isExpanded() || this.options.showRecommendationsOnMap) {\r\n this.updateRecommendedLocations(recommendations);\r\n }\r\n });\r\n\r\n if (!this.options.showRecommendationsOnMap) {\r\n if (!this.model.isMapShow()) {\r\n this.mapView.$el.hide();\r\n }\r\n\r\n this.model.isMapShow.subscribe((show) => {\r\n if (show) {\r\n this.mapView.$el.show();\r\n } else {\r\n this.mapView.$el.hide();\r\n }\r\n });\r\n }\r\n }\r\n this.model.locationRecommendations.subscribe((recommendations) => {\r\n this.trigger('update:recommendations', recommendations);\r\n });\r\n this.model.isExpanded.subscribe((isExpanded) => {\r\n const recommendations = isExpanded ? this.model.locationRecommendations() : [];\r\n if (isExpanded) {\r\n this.trigger('expand:collapse');\r\n if (!_.isEmpty(this.displayedRecommendations)) {\r\n logViewEvent(this.deps, this.displayedRecommendations);\r\n this.displayedRecommendations = [];\r\n }\r\n } else {\r\n this.trigger('close:collapse');\r\n }\r\n this.updateRecommendedLocations(recommendations);\r\n });\r\n\r\n this.template = locationGridTemplate;\r\n if (options.template) {\r\n this.template = _.isString(options.template) ? templates[options.template] : options.template;\r\n }\r\n this.on('refresh', () => {\r\n this.refreshLocation();\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click .apply': 'apply',\r\n 'click .cancel': 'cancel',\r\n 'click .dismiss': 'dismiss',\r\n };\r\n }\r\n\r\n updateRecommendedLocations(recommendations) {\r\n this.refreshMap();\r\n if (this.mapView) {\r\n this.mapView.updateRecommendedLocations(recommendations);\r\n this.model.recommendationsOnMap(recommendations);\r\n }\r\n }\r\n\r\n refreshMap() {\r\n if (this.mapView) {\r\n this.mapView.rebindEventBus();\r\n }\r\n }\r\n\r\n refreshLocation() {\r\n const {\r\n isCampaignLevelLocation,\r\n } = this.options;\r\n if (isCampaignLevelLocation) { // only have recommendation on campaign level\r\n this.model.selectedItems([]);\r\n this.fetchRecommendations().finally(withUiBlock(this.$el));\r\n }\r\n if (this.showMap) {\r\n this.loadLocationCriterion();\r\n }\r\n }\r\n\r\n loadLocationCriterion() {\r\n const {\r\n scope: {\r\n campaignId,\r\n adgroupId,\r\n },\r\n excludedOnly,\r\n } = this.options;\r\n if (_.isUndefined(campaignId)) {\r\n return;\r\n }\r\n const schema = _.isFinite(adgroupId) ? this.deps.s$AdGroupCriterion :\r\n this.deps.s$CampaignCriterion;\r\n const criterionLevel = _.isFinite(adgroupId) ? 'adgroup' : 'campaign';\r\n const parentId = adgroupId || campaignId;\r\n this.deps.criterionLoader.load(campaignId, adgroupId, ['LocationCriterion', 'RadiusCriterion', 'LocationIntentCriterion'], schema)\r\n .then((criterions) => {\r\n let entities = _.chain(criterions)\r\n .filter(criterion =>\r\n criterion.Criterion.Type === 'Radius' || criterion.Criterion.Type === 'Location')\r\n .map(criterion =>\r\n this.deps.locationTargetConverter.buildLocationCriterionFromBiddableCampaignCriterion(\r\n criterion,\r\n criterionLevel,\r\n parentId\r\n ))\r\n .value();\r\n if (excludedOnly) {\r\n entities = entities.filter(entity => entity.SelectionStatus === 'Excluded');\r\n }\r\n this.model.criterions(entities);\r\n if (this.mapView) {\r\n this.mapView.waitUntilMapLoaded().then(() => {\r\n this.refreshMap();\r\n this.deps.jsDataCampaign.Intermediate.refresh('CampaignCriterion', entities, { destroyAll: true });\r\n });\r\n }\r\n });\r\n }\r\n\r\n fetchRecommendations() {\r\n return this.deps.recommendationRepository.getRecommendations({\r\n deps: this.deps,\r\n oppType: recommendationType,\r\n scope: this.options.scope,\r\n channel,\r\n top: this.options.scope.campaignId ? 5 : 500, // campaign level: 5; account level: 500\r\n skip: 0, // pagination on client side\r\n }).then((data) => {\r\n this.model.locationRecommendations(data.value);\r\n this.locationRecommendationGrid.trigger('update:data', data.value);\r\n }).catch(() => {\r\n this.model.locationRecommendations([]);\r\n this.locationRecommendationGrid.trigger('update:data', []);\r\n });\r\n }\r\n\r\n mouseOverRecommendation(recommendation) {\r\n const { Id } = recommendation || {};\r\n\r\n if (this.showMap && _.isFinite(Id)) {\r\n this.mapView.trigger('entity:highlight', Id);\r\n }\r\n }\r\n\r\n mouseOutRecommendation(recommendation) {\r\n const { Id } = recommendation || {};\r\n\r\n if (this.showMap && _.isFinite(Id)) {\r\n this.mapView.trigger('entity:reset', Id);\r\n }\r\n }\r\n\r\n targetRecommendations(recommends) {\r\n const recommendations = this.isAllSelected ? this.model.locationRecommendations() : recommends;\r\n const reqs = _.chain(recommendations)\r\n .map(recommend => _.pick(recommend, _.keys(this.deps.s$CampaignCriterion.properties)))\r\n .groupBy(recommend => recommend.Campaign.Id)\r\n .map(values => ({\r\n Id: values[0] && values[0].Campaign.Id,\r\n data: {\r\n CampaignCriterions: _.map(values, val => ({\r\n Campaign: _.pick(val.Campaign, 'Id'),\r\n SelectionStatus: 'Included',\r\n ..._.pick(val, ['Criterion', 'CriterionType']),\r\n })),\r\n },\r\n }))\r\n .value();\r\n let appliedRecommendations = recommendations;\r\n\r\n return Promise.map(reqs, req =>\r\n this.deps.jsDataCampaign.Campaign.update(req.Id, { reqs: [req] }, {\r\n adapter: 'bulk', cacheResponse: false, overrideResponse: true, batch: true,\r\n })).catch((e) => {\r\n // Failure as location already exists will be marked as success\r\n const failedCriterions = _.filter(e.entity.CampaignCriterions, criterion =>\r\n !!_.find(e.errors, error => error['Client Id'] === criterion['Client Id'] && error.ErrorNumber !== '1043'));\r\n\r\n appliedRecommendations = _.reject(recommendations, recommend =>\r\n !!_.find(failedCriterions, ({ Criterion }) => _.isEqual(Criterion, recommend.Criterion)));\r\n }).finally(() => {\r\n if (_.size(appliedRecommendations) > 0) {\r\n this.deps.recommendationRepository.applyRecommendations({\r\n deps: this.deps,\r\n recommendations: appliedRecommendations,\r\n recommendationType,\r\n scope: this.options.scope,\r\n isAll: this.isAllSelected &&\r\n _.size(recommendations) > 1 &&\r\n _.size(appliedRecommendations) === _.size(recommendations) &&\r\n !this.options.scope.campaignId,\r\n channel,\r\n }).then(() => {\r\n /*\r\n After sync with ad insight MT,\r\n even apply failed, ad insight still can track the recommendations,\r\n so we don't need to parse the response\r\n */\r\n this.alertHelper.showSuccess(this.i18n.getString('Apply_Location_recommendations_Success', {\r\n success: _.size(appliedRecommendations),\r\n total: _.size(recommendations),\r\n }));\r\n }).finally(() => {\r\n this.trigger('add:locations', appliedRecommendations);\r\n this.refreshLocation();\r\n this.trigger('operate:recommendations');\r\n }).finally(withUiBlock(this.$el));\r\n } else if (_.size(appliedRecommendations) === 0 &&\r\n _.size(recommendations) > 0) { // no recommendations target success\r\n this.alertHelper.showError(this.i18n.getString('Apply_Location_recommendations_Failed'));\r\n }\r\n });\r\n }\r\n\r\n dismissRecommendations(recommendations) {\r\n return this.deps.recommendationRepository.dismissRecommendations({\r\n deps: this.deps,\r\n recommendations,\r\n recommendationType,\r\n scope: this.options.scope,\r\n isAll: this.isAllSelected && _.size(recommendations) > 1 && !this.options.scope.campaignId,\r\n channel,\r\n }).then((data) => {\r\n const ret = {\r\n failed: 0,\r\n success: 0,\r\n ..._.countBy(data.Results, result => (result.ErrorCode > 0 ? 'failed' : 'success')),\r\n };\r\n this.alertHelper.showSuccess(this.i18n.getString('Dismiss_Location_recommendations_Success', {\r\n success: ret.success,\r\n total: _.size(recommendations),\r\n }));\r\n this.deps.CampaignCacheManager.invalidate('Campaign');\r\n this.refreshLocation();\r\n this.trigger('operate:recommendations');\r\n }).catch(() => {\r\n this.alertHelper.showError(this.i18n.getString('Dismiss_Location_recommendations_Failed'));\r\n }).finally(withUiBlock(this.$el));\r\n }\r\n\r\n apply() {\r\n const selectedItems = this.model.selectedItems();\r\n if (_.isEmpty(selectedItems)) {\r\n return;\r\n }\r\n this.targetRecommendations(this.model.selectedItems());\r\n }\r\n\r\n cancel(e) {\r\n this.trigger('cancel', e);\r\n }\r\n\r\n dismiss() {\r\n const selectedItems = this.model.selectedItems();\r\n if (_.isEmpty(selectedItems)) {\r\n return;\r\n }\r\n this.dismissRecommendations(this.model.selectedItems());\r\n }\r\n\r\n remove() {\r\n this.trigger('remove');\r\n if (this.mapView) {\r\n this.mapView.remove();\r\n }\r\n if (this.locationRecommendationGrid) {\r\n this.locationRecommendationGrid.remove();\r\n }\r\n super.remove();\r\n }\r\n\r\n expandCollapse() {\r\n const key = 'expandRecommendLocationsByDefault';\r\n const expandRecommendLocations = this.deps.sessionStorage.get(key);\r\n if (!expandRecommendLocations) {\r\n return;\r\n }\r\n this.deps.sessionStorage.invalidate(key);\r\n const $collpase = this.$('.alert-recommendation .alert-info-inline');\r\n if ($collpase.length > 0) {\r\n $collpase.click();\r\n }\r\n }\r\n\r\n render() {\r\n this.$el.html(this.template({\r\n i18n: this.i18n,\r\n showMap: this.showMap,\r\n }));\r\n ko.applyBindings(this.model, this.el);\r\n this.$('.location-recommendation-grid-container').append(this.locationRecommendationGrid.el);\r\n if (this.showMap) {\r\n this.$('.location-recommendation-map-container').append(this.mapView.el);\r\n }\r\n _.delay(() => this.refreshLocation(), 100);\r\n _.delay(() => this.expandCollapse(), 200);\r\n return this;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { decorate } from '@bingads-webui/dialog';\r\nimport { InlineLocationRecommendation } from './view';\r\n\r\nexport class InlineLocationRecommendationDialog extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.deps = options.deps;\r\n this.isRecommendationOperated = false;\r\n this.locationAdded = false;\r\n this.recommendations = [];\r\n }\r\n\r\n render() {\r\n const View = decorate(InlineLocationRecommendation, {\r\n title: this.deps.i18n.getString('Inline_Location_Recommendation_Dialog_Title'),\r\n position: 'center',\r\n width: 1050,\r\n maxWidth: 1050,\r\n });\r\n const viewOptions = {\r\n template: 'inlineTemplate',\r\n isCampaignLevelLocation: true,\r\n showRecommendationsOnMap: true,\r\n isExpanded: true,\r\n ...this.options,\r\n };\r\n this.view = new View(viewOptions).render();\r\n this.view.on('cancel', e => this.remove(e));\r\n this.view.on('add:locations', () => { this.locationAdded = true; });\r\n this.view.on('operate:recommendations', () => { this.isRecommendationOperated = true; });\r\n this.view.on('remove', () => {\r\n if (this.locationAdded) { // refresh when add locations\r\n this.trigger('refresh:recommendations');\r\n } else if (_.isEmpty(this.recommendations) && this.isRecommendationOperated) {\r\n this.trigger('refresh:recommendations');\r\n }\r\n });\r\n this.view.on('update:recommendations', (recommendations) => {\r\n this.recommendations = recommendations;\r\n if (_.size(recommendations) === 0) { // if no recommendations, remove dialog\r\n this.remove();\r\n }\r\n });\r\n return this;\r\n }\r\n\r\n remove() {\r\n if (this.view) {\r\n this.view.remove();\r\n }\r\n super.remove();\r\n }\r\n}\r\n","/* istanbul ignore file */\r\nimport { panelDecorator } from '@bingads-webui-campaign-react/panel-decorator';\r\nimport Backbone from 'backbone';\r\nimport _ from 'underscore';\r\nimport { InlineLocationRecommendation } from './view';\r\n\r\nexport class InlineLocationRecommendationPanel extends Backbone.View {\r\n initialize(options) {\r\n this.options = options;\r\n this.deps = options.deps;\r\n this.isRecommendationOperated = false;\r\n this.locationAdded = false;\r\n this.recommendations = [];\r\n }\r\n\r\n render() {\r\n const View = panelDecorator(InlineLocationRecommendation, {\r\n i18n: this.deps.i18n,\r\n panelReadyAriaLabel: this.deps.i18n.getString('Inline location recommendation side panel opened'),\r\n });\r\n const viewOptions = {\r\n title: this.deps.i18n.getString('Inline_Location_Recommendation_Dialog_Title'),\r\n // these events should keep consistance with dialog events\r\n // this part is difficult to test since the inside instance is difficult to get from outside\r\n // ignore this for the component and will add end to end test in feature scenarios.\r\n eventsToActions: [{\r\n event: 'cancel',\r\n action: this.remove.bind(this),\r\n }, {\r\n event: 'add:locations',\r\n action: () => { this.locationAdded = true; },\r\n }, {\r\n event: 'operate:recommendations',\r\n action: () => { this.isRecommendationOperated = true; },\r\n }, {\r\n event: 'remove',\r\n action: () => {\r\n if (this.locationAdded) { // refresh when add locations\r\n this.trigger('refresh:recommendations');\r\n } else if (_.isEmpty(this.recommendations) && this.isRecommendationOperated) {\r\n this.trigger('refresh:recommendations');\r\n }\r\n },\r\n }, {\r\n event: 'update:recommendations',\r\n action: (recommendations) => {\r\n this.recommendations = recommendations;\r\n if (_.size(recommendations) === 0) { // if no recommendations, remove dialog\r\n this.remove();\r\n }\r\n },\r\n }],\r\n onClose: this.remove.bind(this),\r\n template: 'inlineTemplate',\r\n isCampaignLevelLocation: true,\r\n showRecommendationsOnMap: true,\r\n isExpanded: true,\r\n ...this.options,\r\n };\r\n this.view = new View(viewOptions).render();\r\n return this;\r\n }\r\n\r\n remove() {\r\n if (this.view) {\r\n this.view.remove();\r\n }\r\n super.remove();\r\n }\r\n}\r\n","import { extensionEditorStyles, datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\nimport AppliedAllImage from '../media/img_applied_all.png';\r\nimport MoreOptsImage from '../media/img_more_opts.png';\r\n\r\nexport const getInlineOpportunityStyle = palette => ({\r\n '@global': Object.assign(\r\n datePickerStyle({ palette }),\r\n extensionEditorStyles({ palette })\r\n ),\r\n '.inline-opportunity-dialog button.close': {\r\n display: 'inline-block',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n fontSize: 21,\r\n fontStyle: 'normal',\r\n fontWeight: '400',\r\n lineHeight: '1',\r\n position: 'relative',\r\n top: 2,\r\n '&:hover': {\r\n opacity: 0.5,\r\n },\r\n },\r\n '.inline-opportunity-dialog .modal-dialog': {\r\n width: 1000,\r\n maxWidth: 1000,\r\n },\r\n '.inline-opportunity-dialog .modal-title': {\r\n fontWeight: 'bold',\r\n fontSize: 15,\r\n lineHeight: '20px',\r\n },\r\n '.inline-opportunity-dialog .modal-header': {\r\n padding: '20px 24px 0 24px',\r\n borderBottom: 'none',\r\n '& button.close:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n },\r\n\r\n '.inline-opportunity-dialog .ba-detail': {\r\n lineHeight: '1.5',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-overview': {\r\n display: 'flex',\r\n maxWidth: 800,\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-overview .ba-detail-overview-item': {\r\n flexDirection: 'row',\r\n padding: 16,\r\n border: '1px solid #ccc',\r\n boxSizing: 'border-box',\r\n width: '33.33%',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-overview .ba-detail-overview-item .ba-detail-estvalue': {\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n display: 'inline',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-overview .ba-detail-overview-item .ba-symbol': {\r\n marginLeft: 5,\r\n display: 'inline',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-overview .ba-detail-overview-item+.ba-detail-overview-item': {\r\n borderLeft: 'transparent',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-detail-actions': {\r\n margin: '20px 0 10px',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt': {\r\n maxWidth: 800,\r\n minWidth: 768,\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt>div': {\r\n paddingLeft: '0',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt .ba-opt-header': {\r\n fontWeight: 'bold',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt .ba-opt-lower-bid': {\r\n color: '#D90026',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt .ba-opt-raise-bid': {\r\n color: '#00882A',\r\n },\r\n '.inline-opportunity-dialog .ba-detail .ba-opt .checkbox': {\r\n fontWeight: 'normal',\r\n },\r\n '.inline-opportunity-dialog .campaignName': {\r\n overflowWrap: 'break-word',\r\n },\r\n\r\n '.inline-opportunity-loading-panel': {\r\n width: 250,\r\n fontFamily: 'Arial',\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n },\r\n '.inline-opportunity-loading-panel .title': {\r\n padding: 20,\r\n },\r\n '.inline-opportunity-loading-panel .title .blocker-image': {\r\n background: 'url(\\'../Images/Loader_Grey_30x30.gif\\') no-repeat',\r\n textAlign: 'left',\r\n position: 'absolute',\r\n height: 30,\r\n width: 30,\r\n zIndex: '10',\r\n },\r\n '.inline-opportunity-loading-panel .title .blocker-text': {\r\n verticalAlign: 'center',\r\n margin: '5px 0 0 40px',\r\n fontWeight: 'bold',\r\n fontSize: 14,\r\n },\r\n\r\n '.inline-opportunity-main-panel.panel': {\r\n marginBottom: '0',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-types-tab': {\r\n marginTop: '0',\r\n marginLeft: '-10px',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-types-tab .more-opportunities': {\r\n active: 'false',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-alert': {\r\n position: 'relative',\r\n minHeight: 30,\r\n maxHeight: 50,\r\n marginTop: 5,\r\n marginBottom: 5,\r\n lineHeight: '21px',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-alert button': {\r\n position: 'absolute',\r\n marginRight: 15,\r\n top: 6,\r\n right: -1,\r\n color: '#323130',\r\n },\r\n '.inline-opportunity-main-panel .action-entries': {\r\n borderSpacing: '0 5px',\r\n borderCollapse: 'separate',\r\n width: '100%',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-title': {\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry': {\r\n verticalAlign: 'top',\r\n minHeight: 125,\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry td': {\r\n padding: '20px 20px 15px 20px',\r\n border: '1px solid #cccccc',\r\n wordBreak: 'normal',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-title': {\r\n width: 255,\r\n backgroundColor: '#E5E5E5',\r\n borderRightWidth: '0',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-title .action-desc': {\r\n fontFamily: '\\'Segoe UI\\'',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-title .action-breadcrumb': {\r\n fontSize: 12,\r\n color: '#333',\r\n marginTop: 20,\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-detail': {\r\n verticalAlign: 'top',\r\n width: 650,\r\n position: 'relative',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-detail .action-buttons': {\r\n marginTop: 10,\r\n position: 'absolute',\r\n right: 20,\r\n bottom: 15,\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-detail .result-desc-detail': {\r\n marginTop: 20,\r\n marginBottom: 30,\r\n color: '#737373',\r\n fontSize: 12,\r\n height: 35,\r\n overflowY: 'auto',\r\n visibility: 'hidden',\r\n },\r\n '.inline-opportunity-main-panel .action-entries .action-entry .action-entry-detail:hover .result-desc-detail': {\r\n visibility: 'visible',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-footer': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n marginBottom: 8,\r\n marginTop: 8,\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-footnote': {\r\n flex: '1 1 auto',\r\n fontSize: '12px',\r\n lineHeight: '15px',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-footer .pagination-container': {\r\n flex: '0 0 auto',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-footer .pagination-container strong': {\r\n marginRight: 4,\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-closing-message': {\r\n marginTop: '0',\r\n textAlign: 'center',\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-closing-message span': {\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n fontSize: 14,\r\n fontFamily: 'Arial',\r\n fontWeight: 'bold',\r\n marginBottom: 48,\r\n },\r\n '.inline-opportunity-main-panel .inline-opportunity-closing-message .closing-img': {\r\n marginTop: 50,\r\n marginBottom: 38,\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n width: 341,\r\n height: 186,\r\n },\r\n '.inline-opportunity-closing-panel': {\r\n width: 475,\r\n fontFamily: 'Arial',\r\n margin: 'auto',\r\n },\r\n '.inline-opportunity-closing-panel .title': {\r\n padding: '20px 20px 15px 20px',\r\n fontSize: 14,\r\n },\r\n '.inline-opportunity-closing-panel .desc': {\r\n position: 'relative',\r\n padding: 20,\r\n },\r\n '.inline-opportunity-no-more-popover': {\r\n fontSize: 12,\r\n fontFamily: 'Arial',\r\n marginBottom: 10,\r\n minWidth: 245,\r\n },\r\n '.inline-opportunity-no-more-popover ul': {\r\n listStyleType: 'disc',\r\n paddingLeft: 15,\r\n },\r\n '.inline-opportunity-more-menu': {\r\n padding: 15,\r\n minWidth: '410px !important',\r\n maxWidth: 450,\r\n },\r\n '.inline-opportunity-more-menu .inline-opportunity-more-menu-content': {\r\n padding: '0',\r\n },\r\n '.inline-opportunity-more-menu .inline-opportunity-more-menu-content .content': {\r\n float: 'left !important',\r\n margin: '5px 10px 5px 5px',\r\n maxWidth: 350,\r\n },\r\n '.inline-opportunity-more-menu .inline-opportunity-more-menu-content .content span': {\r\n fontWeight: 'normal',\r\n },\r\n '.inline-opportunity-more-menu .inline-opportunity-more-menu-content .close': {\r\n position: 'inherit',\r\n float: 'right !important',\r\n },\r\n '.inline-opportunity-main-panel .new-feature-label': {\r\n marginLeft: '5px',\r\n marginBottom: '2px',\r\n color: '#A80000',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n verticalAlign: 'middle',\r\n },\r\n\r\n '.inline-opportunity-main-panel .btn-hero, .inline-opportunity-main-panel .btn-default': {\r\n minWidth: 70,\r\n },\r\n\r\n '.inline-opportunity-main-panel .btn-hero:disabled, .inline-opportunity-main-panel .btn-default:disabled': {\r\n borderColor: '#ccc',\r\n color: '#666',\r\n backgroundColor: '#f4f4f4',\r\n },\r\n\r\n '.inline-opportunity-main-panel .btn-hero': {\r\n color: '#fff',\r\n backgroundColor: '#337ab7',\r\n borderColor: '#2e6da4',\r\n marginRight: 7,\r\n '&:focus': {\r\n color: '#fff',\r\n backgroundColor: '#286090',\r\n borderColor: '#122b40',\r\n },\r\n '&:hover, &:active': {\r\n color: '#fff',\r\n backgroundColor: '#286090',\r\n borderColor: '#204d74',\r\n },\r\n },\r\n '.inline-opportunity-main-panel .btn-view': {\r\n marginRight: 7,\r\n },\r\n '.inline-opportunity-main-panel': {\r\n width: 950,\r\n fontFamily: 'Arial',\r\n\r\n '& .grid-hidden': {\r\n display: 'none',\r\n },\r\n\r\n '& .grid-previous, & .grid-next, & .grid-previous-disabled, & .grid-next-disabled': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n marginLeft: 8,\r\n marginRight: 8,\r\n },\r\n '& .grid-previous::before, & .grid-previous-disabled::before': {\r\n content: '\"\\\\E76B\"',\r\n },\r\n '& .grid-next::before, & .grid-next-disabled::before': {\r\n content: '\"\\\\E76C\"',\r\n },\r\n '& .grid-previous::before, & .grid-next::before': {\r\n color: '#605e5c',\r\n },\r\n '& .grid-previous-disabled::before, & .grid-next-disabled::before': {\r\n color: '#BEBBB8',\r\n },\r\n '& .grid-pager > span:nth-child(2)': {\r\n display: 'none',\r\n },\r\n '& input.pagination-number': {\r\n width: 40,\r\n marginLeft: 5,\r\n marginRight: 5,\r\n textAlign: 'center',\r\n borderColor: '#f3f2f1',\r\n backgroundColor: '#f3f2f1',\r\n cursor: 'default',\r\n border: 'none',\r\n },\r\n\r\n\r\n // [start]keyword selection style\r\n '& .keyword-selection-flex-table': {\r\n width: '100%',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header': {\r\n fontWeight: 'bold',\r\n paddingBottom: 8,\r\n },\r\n '& .keyword-selection-flex-table .flex-table-body': {\r\n maxHeight: '230px !important',\r\n borderTop: '1px solid #CCC',\r\n borderBottom: '1px solid #CCC',\r\n paddingTop: 8,\r\n overflowY: 'auto',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-body .flex-table-row': {\r\n marginBottom: 8,\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header, .keyword-selection-flex-table .flex-table-row': {\r\n display: 'flex',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header>div, .keyword-selection-flex-table .flex-table-row>div': {\r\n display: 'flex',\r\n flex: '0 0 50%',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header>span.source, .keyword-selection-flex-table .flex-table-row>span.source': {\r\n flex: '0 0 30%',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header>span.bid, .keyword-selection-flex-table .flex-table-row>span.bid': {\r\n flex: '0 0 20%',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header input.bid-input, .keyword-selection-flex-table .flex-table-row input.bid-input': {\r\n width: 60,\r\n margin: '-3px 0',\r\n border: '1px solid',\r\n borderColor: 'transparent',\r\n },\r\n '& .keyword-selection-flex-table .flex-table-header input.bid-input:hover, .keyword-selection-flex-table .flex-table-row input.bid-input:hover, .keyword-selection-flex-table .flex-table-header input.bid-input:active, .keyword-selection-flex-table .flex-table-row input.bid-input:active': {\r\n borderColor: '#bbb',\r\n },\r\n '& .keyword-selection-flex-table input': {\r\n marginRight: '.5em !important',\r\n },\r\n '& .keyword-selection-flex-table .bid-input-error.error': {\r\n float: 'right',\r\n },\r\n // [end]keyword selection style\r\n\r\n // [start]some basic style using in the opportunity\r\n '& .padding-zero': {\r\n padding: '0',\r\n },\r\n '& .margin-zero': {\r\n margin: '0',\r\n },\r\n '& .padding-left-five': {\r\n paddingLeft: 5,\r\n },\r\n '& .padding-top-five': {\r\n paddingTop: 5,\r\n },\r\n '& .padding-top-twenty': {\r\n paddingTop: 20,\r\n },\r\n '& .padding-left-twenty': {\r\n paddingLeft: 20,\r\n },\r\n '& .padding-right-twenty': {\r\n paddingRight: 20,\r\n },\r\n '& .margin-right-forty': {\r\n marginRight: 40,\r\n },\r\n '& .display-block': {\r\n display: 'block',\r\n },\r\n '& .background-color-white': {\r\n backgroundColor: 'white !important',\r\n },\r\n '& .margin-zero-important': {\r\n margin: '0 !important',\r\n },\r\n '& .type-bold': {\r\n fontWeight: 'bold',\r\n },\r\n '& .gray-type-bold': {\r\n color: '#666',\r\n fontWeight: 'bold',\r\n },\r\n // [end]some basic style using in the opportunity\r\n\r\n\r\n // [start] static-tiles\r\n '& .static-tiles .tiles': {\r\n display: 'flex',\r\n },\r\n '& .static-tiles .tile-outbox': {\r\n borderLeftWidth: 1,\r\n borderRightWidth: '0',\r\n borderTopWidth: 1,\r\n borderBottomWidth: 1,\r\n borderColor: '#CCCCCC',\r\n borderStyle: 'solid',\r\n display: 'inline-block',\r\n width: 237,\r\n overflow: 'hidden',\r\n },\r\n '& .static-tiles .tile-outbox:last-child': {\r\n borderRightWidth: 1,\r\n },\r\n '& .static-tiles .info-tile-content': {\r\n padding: 15,\r\n textAlign: 'left',\r\n },\r\n '& .static-tiles .info-tile-content .title': {\r\n fontSize: 11,\r\n color: '#444444',\r\n lineHeight: '17.5px',\r\n },\r\n '& .static-tiles .info-tile-content .content': {\r\n color: '#444444',\r\n },\r\n '& .static-tiles .info-tile-content .content .kpi-delta': {\r\n fontSize: 26,\r\n fontWeight: 'bold',\r\n display: 'inline',\r\n },\r\n '& .static-tiles .info-tile-content .content .kpi-symbol': {\r\n marginLeft: 5,\r\n display: 'inline',\r\n },\r\n '& .static-tiles .info-tile-content .footer': {\r\n fontSize: 11,\r\n color: '#333333',\r\n lineHeight: '17.5px',\r\n },\r\n // [end] static-tiles\r\n\r\n // [start]doublie list box\r\n '& .doubleListBox .selectedItemsHeader': {\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n maxWidth: 215,\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n },\r\n '& .doubleListBox .headerDelimiter, & .doubleListBox .selectedItemsCount': {\r\n display: 'inline-block',\r\n overflow: 'hidden',\r\n verticalAlign: 'middle',\r\n },\r\n '& .doubleListBox .dlb-source-container, & .doubleListBox .dlb-selected-container': {\r\n height: 243,\r\n backgroundColor: 'white',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n },\r\n '& .doubleListBox .dlb-source, & .doubleListBox .dlb-selected': {\r\n height: 243,\r\n backgroundColor: 'white',\r\n overflow: 'auto',\r\n },\r\n '& .doubleListBox .dlb-source-list, & .doubleListBox .dlb-selected-list': {\r\n height: 'auto',\r\n backgroundColor: 'white',\r\n overflow: 'auto',\r\n flexGrow: '1',\r\n },\r\n '& .doubleListBox .dlb-source': {\r\n marginRight: 1,\r\n },\r\n '& .doubleListBox .dlb-emptyMessage': {\r\n position: 'absolute',\r\n padding: '5px 10px',\r\n },\r\n '& .doubleListBox .dlbItem': {\r\n clear: 'both',\r\n padding: '7px 10px',\r\n margin: '0',\r\n },\r\n '& .doubleListBox .dlb-selectAll, & .doubleListBox .dlb-deselectAll': {\r\n clear: 'both',\r\n padding: '5px 10px',\r\n margin: '0',\r\n cursor: 'pointer',\r\n },\r\n '& .doubleListBox .dlb-selectAll span, & .doubleListBox .dlb-deselectAll span': {\r\n color: '#1470A5',\r\n display: 'inline-block',\r\n verticalAlign: 'top',\r\n },\r\n '& .doubleListBox .dlb-selectAll a, & .doubleListBox .dlb-deselectAll a': {\r\n display: 'inline-block',\r\n verticalAlign: 'top',\r\n },\r\n '& .doubleListBox .dlb-source .k-loading-mask': {\r\n display: 'none',\r\n },\r\n '& .doubleListBox .dlbItem-content': {\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n lineHeight: '17px',\r\n },\r\n '& .doubleListBox .dlbItem-content .statusIcon': {\r\n float: 'left !important',\r\n margin: '0 5px 0 0',\r\n },\r\n '& .doubleListBox .dlbItem-content .content-parent': {\r\n opacity: '.5',\r\n filter: 'alpha(opacity=50)',\r\n },\r\n '& .doubleListBox .dlbItem-content .content-data': {\r\n marginLeft: '0',\r\n },\r\n '& .doubleListBox .dlbItem:hover, & .doubleListBox .dlbItem.k-state-selected': {\r\n backgroundColor: '#f5f5f5',\r\n cursor: 'move',\r\n },\r\n '& .doubleListBox .dlb-selected .dlbItem': {\r\n backgroundColor: '#ddeeff',\r\n border: '1px solid #4d7ac3',\r\n margin: '1px 10px',\r\n },\r\n '& .doubleListBox .dlbItem.selected .dlbItem-content': {\r\n opacity: '.5',\r\n filter: 'alpha(opacity=50)',\r\n },\r\n '& .doubleListBox .dlbItem.disabled .arrow-button': {\r\n opacity: '.25',\r\n filter: 'alpha(opacity=25)',\r\n },\r\n '& .doubleListBox .dlbItem .dlbItem-customAction': {\r\n verticalAlign: 'top',\r\n display: 'none',\r\n },\r\n '& .doubleListBox .dlbItem:hover .dlbItem-customAction': {\r\n display: 'inline',\r\n },\r\n '& .doubleListBox .dlbItem.k-state-focused': {\r\n outline: '1px dashed #333333',\r\n },\r\n '& .doubleListBox .dlbItem.k-state-focused .dlbItem-customAction, & .doubleListBox .dlbItem.k-state-selected .dlbItem-customAction': {\r\n display: 'inline',\r\n },\r\n '& .doubleListBox .dlbItem .dlbItem-actions': {\r\n float: 'right',\r\n maxWidth: '40%',\r\n position: 'relative',\r\n clear: 'right',\r\n marginTop: 2,\r\n },\r\n '& .doubleListBox .dlb-selected .arrow-button.remove': {\r\n marginLeft: 4,\r\n marginRight: 10,\r\n float: 'left',\r\n },\r\n '& .doubleListBox .dlb-pager-container': {\r\n float: 'right',\r\n },\r\n '& .doubleListBox .emptyContainer': {\r\n height: 35,\r\n },\r\n '& .doubleListBox .arrow-button': {\r\n marginTop: 2,\r\n },\r\n '& .doubleListBox.singleListBox .dlb-source': {\r\n border: 'none',\r\n height: 270,\r\n },\r\n '& .doubleListBox.singleListBox .dlbItem:hover': {\r\n cursor: 'pointer',\r\n },\r\n '& .doubleListBox.singleListBox .dlbItem.selected': {\r\n backgroundColor: '#f5f5f5',\r\n },\r\n // [end]doublie list box\r\n\r\n // [start] ad extension opt\r\n '& .adextension-opportunity-tiles & .inline-opportunity-more-menu': {\r\n width: 300,\r\n minWidth: '300px !important',\r\n },\r\n '& .adextension-opportunity-actions .apply': {\r\n minWidth: 70,\r\n },\r\n '& .adextension-opportunity-actions .dismiss': {\r\n minWidth: 70,\r\n },\r\n '& .adextension-association-editor .association-editor': {\r\n backgroundColor: '#f5f5f5',\r\n },\r\n '& .adextension-association-editor .extension-editor-dblist-container': {\r\n marginBottom: '0',\r\n marginLeft: '0',\r\n marginRight: '0',\r\n },\r\n '& .create-link-Container': {\r\n marginLeft: 5,\r\n },\r\n '& .panel-form': {\r\n boxShadow: 'none',\r\n },\r\n '& .panel-title': {\r\n fontSize: '16px',\r\n paddingLeft: '18px',\r\n backgroundColor: '#E5E5E5',\r\n marginTop: 0,\r\n lineHeight: '30px',\r\n },\r\n // [end] ad extension opt\r\n\r\n // [start] arror icon\r\n '& .arrow-button': {\r\n display: 'inline-block',\r\n fontFamily: '\"MsAds MDL2 Assets\"',\r\n fontSize: 14,\r\n fontStyle: 'normal',\r\n fontWeight: 'normal',\r\n lineHeight: '1',\r\n marginLeft: 10,\r\n },\r\n '& .arrow-button.enabled:before': {\r\n content: '\"\\\\EDBF\"',\r\n },\r\n '& .arrow-button.remove:before': {\r\n content: '\"\\\\EDBE\"',\r\n },\r\n // [end] arror icon\r\n\r\n // [start] after applied\r\n '& .has-more-opt-img': {\r\n background: `transparent url(${MoreOptsImage}) no-repeat`,\r\n },\r\n '& .no-more-opt-img': {\r\n background: `transparent url(${AppliedAllImage}) no-repeat`,\r\n },\r\n // [end] after applied\r\n\r\n // [start] first page..\r\n '& .estimation-with-landscape .type1': {\r\n fontSize: '20px',\r\n lineHeight: '25px',\r\n },\r\n '& .opportunity-description-text': {\r\n color: '#A2A2A2',\r\n fontSize: '13px',\r\n },\r\n '& a.disabled': {\r\n color: '#CCC',\r\n },\r\n '& .error': {\r\n color: '#A80000',\r\n fontSize: '13px',\r\n fontWeight: 'normal',\r\n },\r\n // [end] first page..\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport { edmCampaign } from '@bingads-webui/edm-campaign';\r\n\r\nexport class InvestImageDataService {\r\n constructor({ cid, aid }) {\r\n this.cid = cid;\r\n this.aid = aid;\r\n }\r\n\r\n /**\r\n * Get the invest images or videos using edmCampaign\r\n *\r\n * @param {Object} options - options for getting\r\n * @param {Number} options.top - top\r\n * @param {Number} options.skip - skip\r\n * @param {Object} options.customQueries - key value pair for the additional queries.\r\n *\r\n * @returns {Promise} - Promise of getting the images\r\n */\r\n getInvestAssets(options) {\r\n const defaultOptions = {\r\n top: 20,\r\n skip: 0,\r\n customQueries: {},\r\n };\r\n\r\n const optionsWithDefault = _.defaults(options, defaultOptions);\r\n\r\n const payload = _.extend({\r\n $top: optionsWithDefault.top,\r\n $skip: optionsWithDefault.skip,\r\n }, optionsWithDefault.customQueries);\r\n\r\n const edm = edmCampaign\r\n .Customers\r\n .$withKey(this.cid)\r\n .Accounts\r\n .$withKey(this.aid)\r\n .XandrAssets;\r\n\r\n return edm.get(payload).toPromise();\r\n }\r\n\r\n /**\r\n * Upload the invest video using edmCampaign\r\n *\r\n * @param {Object} options - options for the asset payload\r\n * @param {String} options.Url - the video url\r\n * @param {Number} options.XandrAssetId - the invest video id\r\n * @param {String} options.Description - desription\r\n *\r\n * @returns {Promise} - Promise of uploading the video\r\n */\r\n addInvestVideoAsset(options) {\r\n const payload = {\r\n Asset: {\r\n '@odata.type': '#Model.Video',\r\n SourceType: 'XandrImported',\r\n Url: options.Url,\r\n XandrAssetId: options.XandrAssetId,\r\n Description: options.Description,\r\n },\r\n FolderId: null,\r\n };\r\n\r\n const edm = edmCampaign\r\n .Customers.$withKey(this.cid)\r\n .Accounts.$withKey(this.aid)\r\n .Folders['Default.AddAsset'];\r\n\r\n return edm.$makeCall({ payload }).toPromise();\r\n }\r\n}\r\n","import ko from 'knockout';\r\n\r\n// Knockout: Control descendant bindings.\r\nko.bindingHandlers.stopBinding = {\r\n init: () => ({\r\n controlsDescendantBindings: true,\r\n }),\r\n};\r\n\r\nko.virtualElements.allowedBindings.stopBinding = true;\r\n","import Promise from 'bluebird';\r\nimport requestPermissionTemplate from './request-permission-template.pug';\r\n\r\nexport function getRequestPermission({ i18n, deliveryStatus }) {\r\n return Promise.resolve(requestPermissionTemplate({\r\n i18n,\r\n deliveryStatus,\r\n showRequestPermissionBtn: false,\r\n }));\r\n}\r\n","import { ProjectionGridBaseColumn } from '@bingads-webui/projection-grid-base-column';\r\nimport locationColumnTemplate from './location-column-template.pug';\r\n\r\n/**\r\n * Displays location column.\r\n */\r\n\r\nfunction generateLocationName({\r\n i18n,\r\n criterion,\r\n}) {\r\n if (criterion.Type === 'Location') {\r\n return criterion.LocationCriterion.Name;\r\n }\r\n return i18n.getString('Inline_Location_Radius_Formatter', {\r\n lat: i18n.formatDecimalToFixed(criterion.RadiusCriterion.Latitude),\r\n long: i18n.formatDecimalToFixed(criterion.RadiusCriterion.Longitude),\r\n });\r\n}\r\n\r\nexport class Location extends ProjectionGridBaseColumn {\r\n constructor({ deps, columnOverrider, isForVNext }) {\r\n const localizedTitle = deps.i18n.getString('LocationGrid_Column_Header_Recommended_Location');\r\n\r\n super({\r\n name: 'Location',\r\n property: 'Criterion',\r\n title: 'LocationGrid_Column_Header_Recommended_Location',\r\n i18n: deps.i18n,\r\n bodyClasses: ['text-left'],\r\n helpId: '',\r\n sortable: ({ Criterion: criterion }) => generateLocationName({\r\n i18n: deps.i18n,\r\n criterion,\r\n }),\r\n helpAriaLabel: deps.i18n.getString('Click to learn more about {{item}}', { item: localizedTitle }),\r\n ...columnOverrider.Location,\r\n });\r\n this.i18n = deps.i18n;\r\n this.isForVNext = isForVNext;\r\n }\r\n\r\n template({ value }) {\r\n return locationColumnTemplate({\r\n Name: generateLocationName({\r\n i18n: this.i18n,\r\n criterion: value,\r\n }),\r\n isForVNext: this.isForVNext,\r\n });\r\n }\r\n}\r\n","import { ProjectionGridBaseColumn } from '@bingads-webui/projection-grid-base-column';\r\n\r\n/**\r\n * Displays impression column.\r\n */\r\n\r\nexport class Impression extends ProjectionGridBaseColumn {\r\n constructor({ deps, columnOverrider }) {\r\n const localizedTitle = deps.i18n.getString('LocationGrid_Column_Header_Estate_Impression');\r\n\r\n super({\r\n name: 'Impression',\r\n type: 'number',\r\n property: 'EstimatedIncreaseInImpressions',\r\n format: 'integer',\r\n title: 'LocationGrid_Column_Header_Estate_Impression',\r\n i18n: deps.i18n,\r\n helpId: 'pop_BA_LocationTargeting_EstImpr',\r\n sortable: true,\r\n helpAriaLabel: deps.i18n.getString('Click to learn more about {{item}}', { item: localizedTitle }),\r\n ...columnOverrider.Impression,\r\n });\r\n }\r\n}\r\n","import { ProjectionGridBaseColumn } from '@bingads-webui/projection-grid-base-column';\r\nimport dimissColumnTemplate from './dismiss-column-template.pug';\r\n\r\n/**\r\n * Displays dismiss column.\r\n */\r\n\r\nexport class Dismiss extends ProjectionGridBaseColumn {\r\n constructor({ deps, columnOverrider, gridRemoveAll }) {\r\n super({\r\n name: 'Dismiss',\r\n property: 'Performance',\r\n title: gridRemoveAll ? 'Location_Target_Grid_RemoveColumn' : ' ',\r\n i18n: deps.i18n,\r\n headClasses: gridRemoveAll ? ['recommendation-target-grid__removeall-header', 'text-right'] : [''],\r\n bodyClasses: ['text-right'],\r\n colClasses: ['col-selection'],\r\n html: gridRemoveAll ? `<a href='javascript:void(0)'><span>${deps.i18n.getString('Location_Target_Grid_RemoveColumn')}</span></a>` : '',\r\n ...columnOverrider.Dismiss,\r\n });\r\n this.deps = deps;\r\n }\r\n\r\n template() {\r\n return dimissColumnTemplate({\r\n i18n: this.deps.i18n,\r\n });\r\n }\r\n}\r\n","import { CampaignColumn as BaseCampaignColumn } from '@bingads-webui-campaign/campaignui-common-columns';\r\n\r\nexport class Campaign extends BaseCampaignColumn {\r\n constructor({ deps, scope }) {\r\n super({\r\n i18n: deps.i18n,\r\n scope,\r\n routeTemplate: ({ cid, aid, cmpid }) => `#customer/${cid}/account/${aid}/campaign/${cmpid}/edit/locations`,\r\n isForVNext: deps.isForVNext,\r\n });\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport projectionGrid from 'projection-grid';\r\nimport _ from 'underscore';\r\nimport { projectionGridScopeNavigator } from '@bingads-webui-campaign/projection-grid-scope-navigator';\r\nimport { crossPageSelectAllPlugin, crossPageSelectHeadRow } from '@bingads-webui/projection-grid-cross-page-select-all';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { paginationPlugin } from '@bingads-webui/projection-grid-pagination';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { assistedSelectionPlugin } from '@bingads-webui/projection-grid-assisted-selection';\r\nimport { mapColumnsConfig } from '@bingads-webui/projection-grid-base-column';\r\nimport template from './template.pug';\r\nimport * as PredefinedColumns from './column';\r\n\r\nexport class LocationRecommendationGrid extends Backbone.View {\r\n get events() {\r\n return {\r\n 'click span.dismiss-recommendation': _.bind(this.onDismissClick, this),\r\n };\r\n }\r\n\r\n initialize({\r\n deps,\r\n columns = [\r\n 'Campaign',\r\n 'Location',\r\n 'Impression',\r\n 'Dismiss',\r\n ],\r\n columnOverrider = {},\r\n hasPagination = true,\r\n hasSelection = true,\r\n dataSource = {\r\n type: 'memory',\r\n primaryKey: 'OpportunityId',\r\n data: [],\r\n },\r\n pageSize = 10,\r\n scope = {},\r\n selectAllByDefault = false,\r\n tableClasses = ['table', 'table-bordered', 'table-hover'],\r\n isForVNext,\r\n gridRemoveAll,\r\n }) {\r\n this.tableClasses = tableClasses;\r\n this.selectAllByDefault = selectAllByDefault;\r\n this.deps = deps;\r\n this.hasPagination = hasPagination;\r\n this.hasSelection = hasSelection;\r\n this.dataSource = dataSource;\r\n this.pageSize = pageSize;\r\n this.isForVNext = isForVNext;\r\n this.columns = _.chain(columns)\r\n .map(col => PredefinedColumns[col])\r\n .compact()\r\n .value();\r\n this.columns = mapColumnsConfig(this.columns, {\r\n deps, scope, columnOverrider, isForVNext, gridRemoveAll,\r\n });\r\n this.gridRemoveAll = gridRemoveAll;\r\n }\r\n\r\n onRemoveAllRecommendationClick() {\r\n this.trigger('removeAllRecommendation');\r\n }\r\n\r\n onDismissClick(event) {\r\n const recommendation = this.grid.gridView.itemOfElement(event.target);\r\n this.trigger('dismiss', recommendation);\r\n return false;\r\n }\r\n\r\n mouseOverItem(event) {\r\n const recommendation = this.grid.gridView.itemOfElement(event.target);\r\n this.trigger('mouseover:recommendation', recommendation);\r\n return false;\r\n }\r\n\r\n mouseOutItem(event) {\r\n const recommendation = this.grid.gridView.itemOfElement(event.target);\r\n this.trigger('mouseout:recommendation', recommendation);\r\n return false;\r\n }\r\n\r\n render() {\r\n this.$el.html(template({\r\n hasPagination: this.hasPagination,\r\n isForVNext: this.isForVNext,\r\n }));\r\n let gridFactory = projectionGrid\r\n .factory({ vnext: true })\r\n .use(placeholderPlugin)\r\n .use(uiBlockerPlugin)\r\n .use(a11yPlugin)\r\n .use(assistedSelectionPlugin);\r\n const headRows = ['column-header-rows'];\r\n if (this.hasPagination) {\r\n gridFactory = gridFactory.use(paginationPlugin)\r\n .use(crossPageSelectAllPlugin);\r\n headRows.unshift(crossPageSelectHeadRow());\r\n }\r\n\r\n if (this.deps.isForVNext) {\r\n gridFactory = gridFactory.use(projectionGridScopeNavigator);\r\n }\r\n\r\n this.grid = gridFactory.create({\r\n name: 'location-recommendation-grid',\r\n el: this.$('.location-grid-container'),\r\n dataSource: this.dataSource,\r\n tableClasses: this.tableClasses,\r\n rows: {\r\n headRows,\r\n },\r\n events: this.gridRemoveAll ? {\r\n 'mouseover tbody': _.bind(this.mouseOverItem, this),\r\n 'mouseout tbody': _.bind(this.mouseOutItem, this),\r\n 'click .recommendation-target-grid__removeall-header a': _.bind(this.onRemoveAllRecommendationClick, this),\r\n } : {\r\n 'mouseover tbody': _.bind(this.mouseOverItem, this),\r\n 'mouseout tbody': _.bind(this.mouseOutItem, this),\r\n },\r\n columns: this.columns,\r\n plugins: {\r\n a11y: { i18n: this.deps.i18n },\r\n crossPageSelectAll: {\r\n i18n: this.deps.i18n,\r\n },\r\n placeholder: {\r\n container: this.$('.placeholder-container'),\r\n text: this.deps.i18n.getString('LocationGrid_Content_No_Recommendation'),\r\n },\r\n pagination: {\r\n el: this.$('.grid-pager.pager'),\r\n pageSize: this.pageSize,\r\n availablePageSizes: [10, 20, 50, 100],\r\n enableRandomPage: false,\r\n },\r\n projectionGridScopeNavigator: this.deps.scope,\r\n },\r\n query: {\r\n orderby: [{\r\n direction: -1,\r\n key: 'EstimatedIncreaseInImpressions',\r\n }],\r\n },\r\n i18n: this.deps.i18n,\r\n sortableHeader: {\r\n name: 'Impression',\r\n directionIndex: 1,\r\n },\r\n selection: this.hasSelection ? {\r\n enabled: true,\r\n headClasses: ['text-center'],\r\n bodyClasses: ['text-center'],\r\n } : false,\r\n });\r\n\r\n this.grid.gridView.render();\r\n\r\n if (this.selectAllByDefault) {\r\n this.grid.gridView.once('didReload', () => {\r\n _.delay(() => this.grid.gridView.selectAll(), 10);\r\n });\r\n }\r\n\r\n this.grid.gridView.on('didSelect', () => {\r\n this.trigger('selectChanged', this.grid.gridView.selectedItems());\r\n this.trigger('isAllSelected', !!(this.grid.crossPageSelectAll && this.grid.crossPageSelectAll.isAllSelected));\r\n });\r\n\r\n this.grid.gridView.on('didReload', () => {\r\n _.delay(() => {\r\n this.trigger('display:recommendations', this.grid.gridView.itemArray);\r\n }, 10);\r\n });\r\n\r\n this.on('update:data', (data) => {\r\n this.grid.dataSource.data = data;\r\n if (this.selectAllByDefault) {\r\n this.grid.gridView.once('didReload', () => {\r\n _.delay(() => this.grid.gridView.selectAll(), 10);\r\n });\r\n } else { // work around to remove select cross page banner\r\n this.grid.gridView.once('didReload', () => {\r\n _.delay(() => {\r\n this.grid.gridView.selectAll();\r\n this.grid.gridView.deselectAll();\r\n }, 10);\r\n });\r\n }\r\n\r\n this.grid.gridView.refresh(true);\r\n });\r\n\r\n return this;\r\n }\r\n}\r\n","/* eslint-disable no-confusing-arrow */\r\nimport _ from 'underscore';\r\n\r\nexport const displayAdsAspectRatioConfig = {\r\n // display ad aspect ratios\r\n Image300x250: {\r\n aspectRatio: 1.2,\r\n aspectRatioAsRatio: '300:250',\r\n type: 'Image300x250',\r\n editorTitle: () => _TL_('Edit image: 300:250 aspect ratio'),\r\n },\r\n Image728x90: {\r\n aspectRatio: 8.088888888888889,\r\n aspectRatioAsRatio: '728:90',\r\n type: 'Image728x90',\r\n editorTitle: () => _TL_('Edit image: 728:90 aspect ratio'),\r\n },\r\n Image160x600: {\r\n aspectRatio: 0.26666666666666666,\r\n aspectRatioAsRatio: '160:600',\r\n type: 'Image160x600',\r\n editorTitle: () => _TL_('Edit image: 160:600 aspect ratio'),\r\n },\r\n Image300x600: {\r\n aspectRatio: 0.5,\r\n aspectRatioAsRatio: '300:600',\r\n type: 'Image300x600',\r\n editorTitle: () => _TL_('Edit image: 300:600 aspect ratio'),\r\n },\r\n Image120x600: {\r\n aspectRatio: 0.2,\r\n aspectRatioAsRatio: '120:600',\r\n type: 'Image120x600',\r\n editorTitle: () => _TL_('Edit image: 120:600 aspect ratio'),\r\n },\r\n Image468x60: {\r\n aspectRatio: 7.8,\r\n aspectRatioAsRatio: '468:60',\r\n type: 'Image468x60',\r\n editorTitle: () => _TL_('Edit image: 468:60 aspect ratio'),\r\n },\r\n Image336x280: {\r\n aspectRatio: 1.2,\r\n aspectRatioAsRatio: '336:280',\r\n type: 'Image336x280',\r\n editorTitle: () => _TL_('Edit image: 336:280 aspect ratio'),\r\n },\r\n Image250x250: {\r\n aspectRatio: 1,\r\n aspectRatioAsRatio: '250:250',\r\n type: 'Image250x250',\r\n editorTitle: () => _TL_('Edit image: 250:250 aspect ratio'),\r\n },\r\n Image180x150: {\r\n aspectRatio: 1.2,\r\n aspectRatioAsRatio: '180:150',\r\n type: 'Image180x150',\r\n editorTitle: () => _TL_('Edit image: 180:150 aspect ratio'),\r\n },\r\n Image970x250: {\r\n aspectRatio: 3.88,\r\n aspectRatioAsRatio: '970:250',\r\n type: 'Image970x250',\r\n editorTitle: () => _TL_('Edit image: 970:250 aspect ratio'),\r\n },\r\n Image234x60: {\r\n aspectRatio: 3.9,\r\n aspectRatioAsRatio: '234:60',\r\n type: 'Image234x60',\r\n editorTitle: () => _TL_('Edit image: 234:60 aspect ratio'),\r\n },\r\n Image970x90: {\r\n aspectRatio: 10.777777777777779,\r\n aspectRatioAsRatio: '970:90',\r\n type: 'Image970x90',\r\n editorTitle: () => _TL_('Edit image: 970:90 aspect ratio'),\r\n },\r\n Image320x50: {\r\n aspectRatio: 6.4,\r\n aspectRatioAsRatio: '320:50',\r\n type: 'Image320x50',\r\n editorTitle: () => _TL_('Edit image: 320:50 aspect ratio'),\r\n },\r\n Image300x50: {\r\n aspectRatio: 6,\r\n aspectRatioAsRatio: '300:50',\r\n type: 'Image300x50',\r\n editorTitle: () => _TL_('Edit image: 300:50 aspect ratio'),\r\n },\r\n Image320x480: {\r\n aspectRatio: 0.6666666666666666,\r\n aspectRatioAsRatio: '320:480',\r\n type: 'Image320x480',\r\n editorTitle: () => _TL_('Edit image: 320:480 aspect ratio'),\r\n },\r\n Image480x320: {\r\n aspectRatio: 1.5,\r\n aspectRatioAsRatio: '480:320',\r\n type: 'Image480x320',\r\n editorTitle: () => _TL_('Edit image: 480:320 aspect ratio'),\r\n },\r\n Image320x100: {\r\n aspectRatio: 3.2,\r\n aspectRatioAsRatio: '320:100',\r\n type: 'Image320x100',\r\n editorTitle: () => _TL_('Edit image: 320:100 aspect ratio'),\r\n },\r\n Image216x36: {\r\n aspectRatio: 6,\r\n aspectRatioAsRatio: '216:36',\r\n type: 'Image216x36',\r\n editorTitle: () => _TL_('Edit image: 216:36 aspect ratio'),\r\n },\r\n Image168x28: {\r\n aspectRatio: 6,\r\n aspectRatioAsRatio: '168:28',\r\n type: 'Image168x28',\r\n editorTitle: () => _TL_('Edit image: 168:28 aspect ratio'),\r\n },\r\n Image120x20: {\r\n aspectRatio: 6,\r\n aspectRatioAsRatio: '120:20',\r\n type: 'Image120x20',\r\n editorTitle: () => _TL_('Edit image: 120:20 aspect ratio'),\r\n },\r\n};\r\n\r\nexport const imageExtensionAspectRatioConfig = {\r\n // image extension aspect ratios\r\n Image172x100: {\r\n aspectRatio: 1.72,\r\n aspectRatioAsRatio: '172:100',\r\n type: 'Image172x100',\r\n editorTitle: () => _TL_('Edit image: 172:100 aspect ratio'),\r\n },\r\n Image155x100: {\r\n aspectRatio: 1.55,\r\n aspectRatioAsRatio: '155:100',\r\n type: 'Image155x100',\r\n editorTitle: () => _TL_('Edit image: 155:100 aspect ratio'),\r\n },\r\n Image93x100: {\r\n aspectRatio: 0.93,\r\n aspectRatioAsRatio: '93:100',\r\n type: 'Image93x100',\r\n editorTitle: () => _TL_('Edit image: 93:100 aspect ratio'),\r\n },\r\n};\r\n\r\nexport const boostAspectRatioConfig = {\r\n Image57x100: {\r\n aspectRatio: 0.57,\r\n aspectRatioAsRatio: '0.57:1',\r\n type: 'Image57x100',\r\n editorTitle: () => _TL_('Edit image: 0.57 : 1 aspect ratio'),\r\n },\r\n Image122x100: {\r\n aspectRatio: 1.225,\r\n aspectRatioAsRatio: '1.225:1',\r\n type: 'Image122x100',\r\n editorTitle: () => _TL_('Edit image: 1.225 : 1 aspect ratio'),\r\n },\r\n Image159x100: {\r\n aspectRatio: 1.59,\r\n aspectRatioAsRatio: '1.59:1',\r\n type: 'Image159x100',\r\n editorTitle: () => _TL_('Edit image: 1.59 : 1 aspect ratio'),\r\n },\r\n Image180x100: {\r\n aspectRatio: 1.805,\r\n aspectRatioAsRatio: '1.805:1',\r\n type: 'Image180x100',\r\n editorTitle: () => _TL_('Edit image: 1.805 : 1 aspect ratio'),\r\n },\r\n Image233x100: {\r\n aspectRatio: 2.33,\r\n aspectRatioAsRatio: '2.33:1',\r\n type: 'Image233x100',\r\n editorTitle: () => _TL_('Edit image: 2.33 : 1 aspect ratio'),\r\n },\r\n // Image320x100 use the one defined in displayAdsAspectRatioConfig\r\n};\r\n\r\nexport const aspectRatioConfig = {\r\n Image201x100: {\r\n aspectRatio: 2.01,\r\n aspectRatioAsRatio: '201:100',\r\n type: 'Image201x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 2.01 : 1 aspect ratio') : _TL_('Edit image: 2.01 : 1 aspect ratio'),\r\n },\r\n Image200x100: {\r\n aspectRatio: 2,\r\n aspectRatioAsRatio: '200:100',\r\n type: 'Image200x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 2 : 1 aspect ratio') : _TL_('Edit image: 2 : 1 aspect ratio'),\r\n },\r\n Image191x100: {\r\n aspectRatio: 1.91,\r\n aspectRatioAsRatio: '191:100',\r\n type: 'Image191x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.91 : 1 aspect ratio') : _TL_('Edit image: 1.91 : 1 aspect ratio'),\r\n },\r\n Image4x1: {\r\n aspectRatio: 4,\r\n aspectRatioAsRatio: '4:1',\r\n type: 'Image4x1',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 4 : 1 aspect ratio') : _TL_('Edit image: 4 : 1 aspect ratio'),\r\n },\r\n Image1x1: {\r\n aspectRatio: 1,\r\n aspectRatioAsRatio: '1:1',\r\n type: 'Image1x1',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1 : 1 aspect ratio') : _TL_('Edit image: 1 : 1 aspect ratio'),\r\n },\r\n Image1x2: {\r\n aspectRatio: 0.5,\r\n aspectRatioAsRatio: '1:2',\r\n type: 'Image1x2',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1 : 2 aspect ratio') : _TL_('Edit image: 1 : 2 aspect ratio'),\r\n },\r\n Image178x100: {\r\n aspectRatio: 1.78,\r\n aspectRatioAsRatio: '178:100',\r\n type: 'Image178x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.78 : 1 aspect ratio') : _TL_('Edit image: 1.78 : 1 aspect ratio'),\r\n },\r\n Image169x100: {\r\n aspectRatio: 1.69,\r\n aspectRatioAsRatio: '169:100',\r\n type: 'Image169x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.69 : 1 aspect ratio') : _TL_('Edit image: 1.69 : 1 aspect ratio'),\r\n },\r\n Image153x100: {\r\n aspectRatio: 1.53,\r\n aspectRatioAsRatio: '153:100',\r\n type: 'Image153x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.53 : 1 aspect ratio') : _TL_('Edit image: 1.53 : 1 aspect ratio'),\r\n },\r\n Image150x100: {\r\n aspectRatio: 1.5,\r\n aspectRatioAsRatio: '150:100',\r\n type: 'Image150x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.5 : 1 aspect ratio') : _TL_('Edit image: 1.5 : 1 aspect ratio'),\r\n },\r\n Image133x100: {\r\n aspectRatio: 1.33,\r\n aspectRatioAsRatio: '133:100',\r\n type: 'Image133x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.33 : 1 aspect ratio') : _TL_('Edit image: 1.33 : 1 aspect ratio'),\r\n },\r\n Image124x100: {\r\n aspectRatio: 1.24,\r\n aspectRatioAsRatio: '124:100',\r\n type: 'Image124x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.24 : 1 aspect ratio') : _TL_('Edit image: 1.24 : 1 aspect ratio'),\r\n },\r\n Image120x100: {\r\n aspectRatio: 1.20,\r\n aspectRatioAsRatio: '120:100',\r\n type: 'Image120x100',\r\n editorTitle: isLogo => isLogo ?\r\n _TL_('Edit logo: 1.20 : 1 aspect ratio') : _TL_('Edit image: 1.20 : 1 aspect ratio'),\r\n },\r\n ...displayAdsAspectRatioConfig,\r\n ...imageExtensionAspectRatioConfig,\r\n ...boostAspectRatioConfig,\r\n};\r\nconst getRatio = (width, height) => width / height;\r\n\r\nexport const getOriginalImageAspectRatio = (baseImage) => {\r\n if (baseImage && baseImage.Width > 0 && baseImage.Height > 0) {\r\n return getRatio(baseImage.Width, baseImage.Height);\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const getAllowedAspectRatio = (baseImage) => {\r\n if (baseImage && baseImage.Type) {\r\n return aspectRatioConfig[baseImage.Type].aspectRatio;\r\n }\r\n\r\n return 0;\r\n};\r\n\r\n// if type is passed, use type as aspect ratio,\r\n// otherwise calculate based on existing width, height info\r\nexport const getAspectRatio = (baseImage, cropSettings) => {\r\n const allowedAspectRatio = getAllowedAspectRatio(baseImage);\r\n\r\n // respect existing aspect ratio info if any\r\n if (allowedAspectRatio > 0) {\r\n return allowedAspectRatio;\r\n }\r\n\r\n // if no defined aspect ratio, use existing crop box to compute ratio\r\n if (cropSettings && cropSettings.SourceWidth > 0 && cropSettings.SourceHeight > 0) {\r\n return getRatio(cropSettings.SourceWidth, cropSettings.SourceHeight);\r\n }\r\n\r\n // lastly use original image to compute ratio\r\n return getOriginalImageAspectRatio(baseImage);\r\n};\r\n\r\n// use maxHeight as default height. If scaling width exceeds maxWidth, use maxWidth as default width\r\nexport const getResizeImageHeight = ({\r\n aspectRatio,\r\n maxWidth,\r\n maxHeight,\r\n}) => {\r\n if (aspectRatio > 0 && maxWidth > 0 && maxHeight > 0) {\r\n let height = maxHeight;\r\n\r\n if (height * aspectRatio > maxWidth) {\r\n height = Math.round(maxWidth / aspectRatio);\r\n }\r\n\r\n return height;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const convertAspectRatioDecimalToRatio = (aspectRatioAsDecimal) => {\r\n const { aspectRatioAsRatio } =\r\n _.find(aspectRatioConfig, ({ aspectRatio }) => aspectRatio === aspectRatioAsDecimal) || {};\r\n\r\n return aspectRatioAsRatio;\r\n};\r\n\r\nexport const convertAspectRatioToDecimal = (aspectRatioRatio) => {\r\n const { aspectRatio } =\r\n _.find(aspectRatioConfig, ({ aspectRatioAsRatio }) => aspectRatioRatio === aspectRatioAsRatio)\r\n || {};\r\n\r\n return aspectRatio ? `${aspectRatio}` : undefined;\r\n};\r\n","export const EffectChoiceKey = {\r\n None: 'None',\r\n DesignerEffects: 'DesignerEffects',\r\n BackgroundBlur: 'BackgroundBlur',\r\n BackgroundSolidColor: 'BackgroundSolidColor',\r\n};\r\n\r\nexport const EffectChoiceOrder = {\r\n [EffectChoiceKey.None]: 0,\r\n [EffectChoiceKey.DesignerEffects]: 1,\r\n [EffectChoiceKey.BackgroundBlur]: 2,\r\n [EffectChoiceKey.BackgroundSolidColor]: 3,\r\n};\r\n\r\nexport const MTSmartEffect = {\r\n Blur: 'bg_blur',\r\n BackgroundColorSwap: 'bg_color',\r\n SmartCrop: 'smart_crop',\r\n DesignerEffects: 'design_ideas',\r\n};\r\n\r\nexport const EffectChoiceMtSmartEffectMapping = {\r\n [EffectChoiceKey.BackgroundBlur]: MTSmartEffect.Blur,\r\n [EffectChoiceKey.BackgroundSolidColor]: MTSmartEffect.BackgroundColorSwap,\r\n [EffectChoiceKey.DesignerEffects]: MTSmartEffect.DesignerEffects,\r\n};\r\n","import { aspectRatioConfig } from './aspect-ratio-config';\r\n\r\nexport const getEditorTitle = (i18n, imageType, isLogo = false) => {\r\n let titleKey = isLogo ?\r\n _TL_('Edit logo') : _TL_('Edit image');\r\n let subTitle = null;\r\n\r\n if (imageType) {\r\n titleKey = aspectRatioConfig[imageType].editorTitle(isLogo);\r\n subTitle = isLogo ?\r\n i18n.getString(_TL_('Choose how your logo will look with this ad placement.')) :\r\n i18n.getString(_TL_('Choose how your image will look with this ad placement.'));\r\n }\r\n\r\n return [i18n.getString(titleKey), subTitle];\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport class BaseValidator {\r\n constructor(propertySchema) {\r\n this.propertySchema = propertySchema;\r\n }\r\n\r\n get requiredField() {\r\n throw new Error('requiredField Not implemented');\r\n }\r\n\r\n get config() {\r\n return {\r\n ignoreInvalidProperty: false,\r\n };\r\n }\r\n\r\n internalValidate() {\r\n throw new Error('internalValidate Not implemented');\r\n }\r\n\r\n enableCheck() {\r\n return !_.isUndefined(this.propertySchema[this.requiredField]);\r\n }\r\n\r\n validate(...args) {\r\n if (this.enableCheck()) {\r\n return this.internalValidate(...args);\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { BaseValidator } from './base-validator';\r\n\r\nconst validateObject = val => _.isObject(val);\r\nconst validateNumber = (val, propertySchema) => {\r\n const num = Number(val);\r\n\r\n if (_.isNaN(num)) {\r\n return false;\r\n }\r\n\r\n const { minimum, maximum } = propertySchema;\r\n\r\n return (_.isUndefined(minimum) || num >= minimum)\r\n && (_.isUndefined(minimum) || num <= maximum);\r\n};\r\nconst validateString = val => _.isString(val) && val.length > 0;\r\n\r\nconst TypeValidateConfig = {\r\n object: validateObject,\r\n number: validateNumber,\r\n string: validateString,\r\n};\r\n\r\nexport class TypeValidator extends BaseValidator {\r\n constructor(propertySchema) {\r\n super(propertySchema);\r\n\r\n const { type, minimum, maximum } = propertySchema;\r\n\r\n this.type = type;\r\n this.minimum = minimum;\r\n this.maximum = maximum;\r\n }\r\n\r\n get requiredField() {\r\n return 'type';\r\n }\r\n\r\n internalValidate(propertyValue) {\r\n const validateFunc = TypeValidateConfig[this.type];\r\n\r\n if (!validateFunc) {\r\n throw new Error(`There are no configured validateFunc for this type: ${this.type}`);\r\n }\r\n\r\n return validateFunc(propertyValue, this.propertySchema);\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nconst validateBeam = (str) => {\r\n const num = Number(str);\r\n\r\n if (_.isNaN(num)) {\r\n return false;\r\n }\r\n\r\n return num >= 0 && num <= 255;\r\n};\r\n\r\nexport function validateColor(propertyValue) {\r\n const beams = propertyValue.split(',');\r\n if (_.size(beams) !== 3) {\r\n return false;\r\n }\r\n\r\n return _.every(beams, validateBeam);\r\n}\r\n","import _ from 'underscore';\r\nimport { BaseValidator } from './base-validator';\r\nimport { validateColor } from './custom/validate-color';\r\n\r\nconst RegistedHandlers = {\r\n color: validateColor,\r\n};\r\n\r\nexport class CustomValidator extends BaseValidator {\r\n constructor(propertySchema) {\r\n super(propertySchema);\r\n\r\n const { custom } = propertySchema;\r\n\r\n if (_.isString(custom)) {\r\n this.validateFunc = RegistedHandlers[custom];\r\n }\r\n }\r\n\r\n get requiredField() {\r\n return 'custom';\r\n }\r\n\r\n internalValidate(propertyValue) {\r\n if (!this.validateFunc) {\r\n throw new Error('Invalid value for custom key');\r\n }\r\n\r\n return this.validateFunc(propertyValue);\r\n }\r\n}\r\n","import { TypeValidator } from './type-validator';\r\nimport { EnumValidator } from './enum-validator';\r\nimport { CustomValidator } from './custom-validator';\r\nimport { EffectKeyValidator } from './effect-key-validator';\r\n\r\nexport const ConfiguredValidators = [\r\n TypeValidator,\r\n EnumValidator,\r\n CustomValidator,\r\n EffectKeyValidator,\r\n];\r\n","import _ from 'underscore';\r\nimport { BaseValidator } from './base-validator';\r\n\r\nexport class EnumValidator extends BaseValidator {\r\n constructor(propertySchema) {\r\n super(propertySchema);\r\n\r\n this.enum = propertySchema.enum;\r\n }\r\n\r\n get requiredField() {\r\n return 'enum';\r\n }\r\n\r\n internalValidate(propertyValue) {\r\n return _.contains(this.enum, propertyValue);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { BaseValidator } from './base-validator';\r\n\r\nexport class EffectKeyValidator extends BaseValidator {\r\n constructor(propertySchema) {\r\n super(propertySchema);\r\n\r\n this.effectKey = propertySchema.effectKey;\r\n }\r\n\r\n get requiredField() {\r\n return 'effectKey';\r\n }\r\n\r\n get config() {\r\n return {\r\n ignoreInvalidProperty: true,\r\n };\r\n }\r\n\r\n internalValidate(propertyValue, effectKey) {\r\n return _.contains(this.effectKey, effectKey);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { EffectChoiceKey } from '@bingads-webui-campaign/media-common-utils';\r\n\r\n/*\r\nExample valid model:\r\n{\r\n effectSettings: {\r\n effectKey: 'xxx',\r\n effectOptions: {\r\n backgroundBlur: 30,\r\n backgroundColor: '91, 113, 129',\r\n designerEffect: '',\r\n },\r\n },\r\n}\r\n*/\r\n\r\nexport const EffectSettingsAlias = 'effect';\r\n// used when serializing\r\nexport const imageAssetSerializeSchema = {\r\n type: 'object',\r\n name: 'ImageAssetSerializeSchema',\r\n properties: {\r\n effectSettings: {\r\n type: 'object',\r\n alias: EffectSettingsAlias,\r\n nullable: false,\r\n properties: {\r\n effectKey: {\r\n type: 'string',\r\n alias: 'key',\r\n name: 'EffectKey',\r\n nullable: false,\r\n enum: [\r\n EffectChoiceKey.DesignerEffects,\r\n EffectChoiceKey.BackgroundBlur,\r\n EffectChoiceKey.BackgroundSolidColor,\r\n ],\r\n },\r\n effectOptions: {\r\n type: 'object',\r\n alias: 'ops',\r\n name: 'EffectOptions',\r\n nullable: false,\r\n properties: {\r\n designerEffect: {\r\n type: 'string',\r\n alias: 'dsgEft',\r\n name: 'DesignerEffectName',\r\n effectKey: [EffectChoiceKey.DesignerEffects],\r\n nullable: true,\r\n },\r\n backgroundBlur: {\r\n type: 'number',\r\n alias: 'bgBlur',\r\n name: 'BackgroundBlurAmount',\r\n minimum: 1,\r\n maximum: 100,\r\n effectKey: [EffectChoiceKey.BackgroundBlur],\r\n nullable: true,\r\n },\r\n backgroundColor: {\r\n type: 'string',\r\n alias: 'bgColor',\r\n name: 'BackgroundColorValue',\r\n custom: 'color',\r\n effectKey: [EffectChoiceKey.BackgroundSolidColor],\r\n nullable: true,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst invertSchemaAlias = schemaProperties =>\r\n _.reduce(schemaProperties, (memo, val, key) => {\r\n const newKey = val.alias;\r\n const newVal = { alias: key };\r\n if (val.properties) {\r\n newVal.properties = invertSchemaAlias(val.properties);\r\n }\r\n\r\n return {\r\n ...memo,\r\n [newKey]: newVal,\r\n };\r\n }, {});\r\n\r\nexport const imageAssetDeserializeSchema = {\r\n type: 'object',\r\n name: 'ImageAssetDeserializeSchema',\r\n properties: invertSchemaAlias(imageAssetSerializeSchema.properties),\r\n};\r\n","import _ from 'underscore';\r\nimport { ConfiguredValidators } from './property-validators/index';\r\nimport { imageAssetSerializeSchema, imageAssetDeserializeSchema } from './image-metadata-schema';\r\n\r\nconst validateProperty = ({\r\n propertyValue,\r\n propertySchema,\r\n effectKey,\r\n}) => {\r\n let result = true;\r\n let ignoreInvalidProperty = false;\r\n\r\n if (_.isUndefined(propertyValue)) {\r\n result = !!propertySchema.nullable;\r\n } else {\r\n for (let i = 0; i < ConfiguredValidators.length; i += 1) {\r\n const ValidatorClass = ConfiguredValidators[i];\r\n const instance = new ValidatorClass(propertySchema);\r\n const childResult = instance.validate(propertyValue, effectKey);\r\n\r\n // once there is failure by validator that could not ignore error, break\r\n if (!childResult && !instance.config.ignoreInvalidProperty) {\r\n result = false;\r\n ignoreInvalidProperty = false;\r\n\r\n break;\r\n }\r\n\r\n // if validatior is configured to ignore error, continue rest validations regardless of result\r\n if (!childResult && instance.config.ignoreInvalidProperty) {\r\n result = false;\r\n ignoreInvalidProperty = true;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n result,\r\n ignoreInvalidProperty,\r\n };\r\n};\r\n\r\n// Return true if all values including nested are null/undefined\r\n// e.g. For value: { a: { b: null }}, it returns true\r\nconst shouldFilterOut = (value) => {\r\n if (_.isObject(value)) {\r\n const hasValidKey = _.some(value, val => !shouldFilterOut(val));\r\n\r\n return !hasValidKey;\r\n }\r\n\r\n return _.isNull(value) || _.isUndefined(value);\r\n};\r\n\r\nconst processObjectWithSchema = ({\r\n obj,\r\n schema,\r\n validatePropertyFunc,\r\n}) => {\r\n const { result, ignoreInvalidProperty } = validatePropertyFunc({\r\n propertyValue: obj,\r\n propertySchema: schema,\r\n });\r\n\r\n if (!result && !ignoreInvalidProperty) {\r\n throw new Error(`Validate property ${schema.name || schema.alias} failed`);\r\n }\r\n\r\n // if ignoreInvalidProperty is true, return an empty value so it can be filtered out.\r\n if (!result) {\r\n return null;\r\n }\r\n\r\n if (_.isObject(obj)) {\r\n return _.reduce(obj, (memo, val, key) => {\r\n const childkeySchema = schema.properties[key];\r\n const newKey = childkeySchema.alias;\r\n\r\n if (!newKey) {\r\n throw new Error(`Unsupported! please add metadata to schema for key: ${key}`);\r\n }\r\n\r\n const newValue = processObjectWithSchema({\r\n obj: val,\r\n schema: childkeySchema,\r\n validatePropertyFunc,\r\n });\r\n\r\n if (shouldFilterOut(newValue)) {\r\n if (!childkeySchema.nullable) {\r\n throw new Error(`the value for key ${key} is empty, but from schema, nullable is not allowed`);\r\n }\r\n\r\n return memo;\r\n }\r\n\r\n return {\r\n ...memo,\r\n [newKey]: newValue,\r\n };\r\n }, {});\r\n }\r\n\r\n return obj;\r\n};\r\n\r\nconst validateDeserializeProperty = ({\r\n propertyValue,\r\n propertySchema,\r\n}) => {\r\n let result = true;\r\n\r\n _.keys(propertyValue).forEach((key) => {\r\n const childkeySchema = propertySchema.properties[key];\r\n\r\n if (!childkeySchema) {\r\n result = false;\r\n }\r\n });\r\n\r\n return {\r\n result,\r\n ignoreInvalidProperty: true,\r\n };\r\n};\r\n\r\nexport const extractInfoForSerialization = ({ obj, effectKey }) =>\r\n processObjectWithSchema({\r\n obj,\r\n schema: imageAssetSerializeSchema,\r\n validatePropertyFunc: options => validateProperty({ ...options, effectKey }),\r\n });\r\n\r\nexport const extractInfoForDeserialization = ({ obj }) =>\r\n processObjectWithSchema({\r\n obj,\r\n schema: imageAssetDeserializeSchema,\r\n validatePropertyFunc: validateDeserializeProperty, // no validators\r\n });\r\n","import _ from 'underscore';\r\nimport { EffectChoiceKey } from '@bingads-webui-campaign/media-common-utils';\r\nimport { stringifySync, parseSync } from '@bingads-webui/safe-json';\r\nimport { extractInfoForSerialization, extractInfoForDeserialization } from './validate-schema';\r\nimport { EffectSettingsAlias } from './image-metadata-schema';\r\n\r\nconst convertStateToMetadata = ({\r\n effectSettings,\r\n} = {}) => {\r\n const {\r\n effectKey,\r\n /* Should not save URL related stuff since it may expire anytime. */\r\n // effectSrc,\r\n effectOptions = {},\r\n } = effectSettings || {};\r\n const processEffect = effectKey && effectKey !== EffectChoiceKey.None;\r\n\r\n if (!processEffect) {\r\n return null;\r\n }\r\n\r\n const metaObject = extractInfoForSerialization({\r\n obj: {\r\n effectSettings: {\r\n effectKey,\r\n effectOptions,\r\n },\r\n },\r\n effectKey,\r\n });\r\n\r\n return metaObject;\r\n};\r\n\r\n/*\r\n * Attention: this is serialized and saved in db,\r\n * so need to consider backward compatibility when upgrading.\r\n */\r\nexport const buildImageAssetMetadataToSave = (assetModel) => {\r\n const metaObject = {};\r\n\r\n const placementMeta = convertStateToMetadata(assetModel);\r\n\r\n if (!_.isEmpty(placementMeta)) {\r\n _.extend(metaObject, placementMeta);\r\n }\r\n\r\n return metaObject;\r\n};\r\n\r\n// metadata is coupled with image content.\r\n// if we have same images with different metadata, this is not supported by MT asset entity.\r\nexport const serializeImageAssetMetadata = (assetModel, isBulkUpsert = true) => {\r\n if (_.isEmpty(assetModel)) {\r\n return '';\r\n }\r\n\r\n const metaObject = buildImageAssetMetadataToSave(assetModel);\r\n\r\n if (_.isEmpty(metaObject)) {\r\n return '';\r\n }\r\n\r\n const serialized = stringifySync(metaObject);\r\n\r\n return isBulkUpsert\r\n ? serialized.replace(/,/g, encodeURIComponent(',')) // Comma is reserved in bulk upsert call\r\n : serialized;\r\n};\r\n\r\nexport const deserializeImageAssetMetadata = (metaString) => {\r\n if (metaString) {\r\n const decoded = metaString.replace(new RegExp(encodeURIComponent(','), 'g'), ',');\r\n const metaObj = parseSync(decoded);\r\n\r\n let metaObjCopy = metaObj;\r\n if (metaObj && metaObj[EffectSettingsAlias]) {\r\n metaObjCopy = { [EffectSettingsAlias]: metaObj[EffectSettingsAlias] };\r\n }\r\n\r\n if (!_.isEmpty(metaObj)) {\r\n const model = extractInfoForDeserialization({ obj: metaObjCopy });\r\n\r\n return model;\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nlet cache = {};\r\nexport class AdGenerationDataService {\r\n constructor({\r\n cid,\r\n aid,\r\n cmpId = null,\r\n oDataConfig,\r\n }) {\r\n this.cid = cid;\r\n this.aid = aid;\r\n this.cmpId = cmpId;\r\n this.path = oDataConfig.odataPath;\r\n this.oDataConfig = {\r\n oDataToken: oDataConfig.odataToken,\r\n oDataTokenType: oDataConfig.oDataTokenType,\r\n applicationName: oDataConfig.applicationName,\r\n };\r\n this.odata = odata;\r\n }\r\n\r\n createRecommendRequestData({\r\n landingPageUrl,\r\n pageNumber = 1, // counting from 1\r\n pageSize = 30,\r\n forceInternalScrapingService = false,\r\n minimumResolution = { height: 152, width: 470 },\r\n headlines,\r\n descriptions,\r\n }) {\r\n const criteria = [];\r\n\r\n if (!_.isEmpty(headlines)) {\r\n criteria.push({\r\n Name: 'headlines',\r\n Value: headlines,\r\n });\r\n }\r\n\r\n if (!_.isEmpty(descriptions)) {\r\n criteria.push({\r\n Name: 'descriptions',\r\n Value: descriptions,\r\n });\r\n }\r\n\r\n return {\r\n endpoint: 'Default.CreateImageRecommendation',\r\n data: _.defaults({\r\n url: landingPageUrl,\r\n source: forceInternalScrapingService ? 'lp' : 'default',\r\n options: {\r\n WithThumbnail: true,\r\n MinWidth: minimumResolution.width,\r\n MinHeight: minimumResolution.height,\r\n },\r\n paging: {\r\n Page: pageNumber,\r\n PageSize: pageSize,\r\n },\r\n }, !_.isEmpty(criteria) && {\r\n rankingCriteria: {\r\n Type: 'text',\r\n Criteria: criteria,\r\n },\r\n }),\r\n };\r\n }\r\n\r\n // so that we don't need to change consuming place during API upgrade\r\n formatRawReponse(response) {\r\n return {\r\n ImageWip: response.Wip,\r\n Images: response.Images,\r\n ImagePaging: response.Paging ? {\r\n PageNumber: response.Paging.Page,\r\n PageSize: response.Paging.PageSize,\r\n TotalCount: response.Paging.TotalCount,\r\n } : {},\r\n };\r\n }\r\n\r\n recommend({\r\n landingPageUrl,\r\n pageNumber = 1, // counting from 1\r\n pageSize = 30,\r\n forceInternalScrapingService = false,\r\n minimumResolution = { height: 152, width: 470 },\r\n headlines,\r\n descriptions,\r\n }) {\r\n const { endpoint, data } = this.createRecommendRequestData({\r\n landingPageUrl,\r\n pageNumber,\r\n pageSize,\r\n forceInternalScrapingService,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n });\r\n const url = this.generateUrlWithScope(endpoint);\r\n const requestBody = _.extend({ data }, this.oDataConfig);\r\n\r\n return this.odata.post(\r\n url,\r\n requestBody\r\n ).then(response => this.formatRawReponse(response));\r\n }\r\n\r\n generate({ options }) {\r\n const serializedOptions = stringifySync(options);\r\n if (cache[serializedOptions]) {\r\n return cache[serializedOptions];\r\n }\r\n\r\n const url = this.generateUrlWithScope('Default.MediaGeneration');\r\n const requestBody = _.extend({\r\n data: options,\r\n }, this.oDataConfig);\r\n\r\n const fetchData = this.odata.post;\r\n cache[serializedOptions] = fetchData(url, requestBody)\r\n .then((response = {}) => {\r\n if (response.wip || !response.Assets) {\r\n cache[serializedOptions] = null;\r\n }\r\n return response;\r\n })\r\n .catch(() => {\r\n cache[serializedOptions] = null;\r\n });\r\n return cache[serializedOptions];\r\n }\r\n\r\n generateUrlWithScope(methodName) {\r\n return this.cmpId ? `${this.path}/Customers(${this.cid})/Accounts(${this.aid})/Campaigns(${this.cmpId})/${methodName}` :\r\n `${this.path}/Customers(${this.cid})/Accounts(${this.aid})/${methodName}`;\r\n }\r\n\r\n resetCache() {\r\n cache = {};\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { convertAspectRatioDecimalToRatio, MTSmartEffect } from '@bingads-webui-campaign/media-common-utils';\r\n\r\nexport class GenerateDataModel {\r\n constructor({\r\n filters,\r\n crop,\r\n imageUrl,\r\n jobId,\r\n assetType,\r\n fileFormat,\r\n }) {\r\n this.JobId = jobId;\r\n this.Image = {\r\n BaseImageUrl: imageUrl,\r\n Filters: filters,\r\n Crop: crop,\r\n };\r\n this.Output = {\r\n MediaType: assetType,\r\n Image: {\r\n Type: fileFormat,\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport class GenerateImageDataModel extends GenerateDataModel {\r\n constructor(options) {\r\n super({\r\n ...options,\r\n assetType: 'image',\r\n fileFormat: 'jpg',\r\n });\r\n }\r\n}\r\n\r\nexport class GenerateManualCropDataModel extends GenerateImageDataModel {\r\n constructor({\r\n jobId,\r\n cropSettings,\r\n imageUrl,\r\n }) {\r\n super({\r\n jobId,\r\n imageUrl,\r\n crop: {\r\n x: cropSettings.x,\r\n y: cropSettings.y,\r\n width: cropSettings.width,\r\n height: cropSettings.height,\r\n scale_x: 1,\r\n scale_y: 1,\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport class GenerateSmartCropDataModel extends GenerateImageDataModel {\r\n constructor({\r\n jobId,\r\n placementSettings,\r\n imageUrl,\r\n }) {\r\n super({\r\n filters: [{\r\n Name: MTSmartEffect.SmartCrop,\r\n Param: {\r\n ExpectedCrops: _.map(placementSettings, ({ aspectRatio, minSize }) => ({\r\n AspectRatio: convertAspectRatioDecimalToRatio(aspectRatio),\r\n MinHeight: minSize[1],\r\n })),\r\n },\r\n }],\r\n jobId,\r\n imageUrl,\r\n });\r\n }\r\n}\r\n\r\nexport class GenerateSmartEffectDataModel extends GenerateImageDataModel {\r\n constructor({\r\n jobId,\r\n smartEffects,\r\n imageUrl,\r\n }) {\r\n super({\r\n filters: _.map(smartEffects, ({ smartEffectName, smartEffectOptions }) => ({\r\n Name: smartEffectName,\r\n Param: smartEffectOptions,\r\n })),\r\n jobId,\r\n imageUrl,\r\n });\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\n\r\nimport { AdGenerationDataService } from './data-service';\r\nimport {\r\n GenerateManualCropDataModel,\r\n GenerateSmartCropDataModel,\r\n GenerateSmartEffectDataModel,\r\n} from './generate-schema';\r\n\r\nconst MAX_TIMEOUT = 5 * 60 * 1000; // set timeout to be 5 minutes\r\nconst POLL_INTERVAL = 1000; // set to 1000ms for now\r\n\r\nexport const MediaRepositoryTimeoutError = 'MediaRepositoryTimeoutError';\r\n\r\nexport class MediaRepository {\r\n constructor(options) {\r\n this.dataService = new AdGenerationDataService(options);\r\n }\r\n\r\n /**\r\n * Generates image with specified smart effects\r\n *\r\n * @param {imageUrl} URL for the base image to which smart effects will\r\n * be applied\r\n * @param {smartEffects} array of smart effect config objects with each\r\n * config object having schema { smartEffectName, smartEffectOptions }\r\n * @returns {Promise} Promise which will resolve with the generated assets once\r\n * the generate job finishes\r\n */\r\n generateEffect({ imageUrl, smartEffects }) {\r\n const effectOptions = new GenerateSmartEffectDataModel({ imageUrl, smartEffects });\r\n return this.createGenerateRequestWithPolling({ effectOptions });\r\n }\r\n\r\n /**\r\n * Generates smart crop for given image and placements\r\n *\r\n * @param {imageUrl} URL for the base image for which smart crop settings\r\n * will be generated\r\n * @param {placementSettings} array of placement settings with schema\r\n * following the convention in\r\n * bingads-webui-campaign-react/image-experience/src/constants\r\n * aspectRatio must be a Number (can be a decimal)\r\n * @returns {Promise} Promise which will resolve with the smart crop settings once\r\n * the generate job finishes\r\n */\r\n generateSmartCrop({ imageUrl, placementSettings }) {\r\n const effectOptions = new GenerateSmartCropDataModel({ imageUrl, placementSettings });\r\n return this.createGenerateRequestWithPolling({ effectOptions });\r\n }\r\n\r\n /**\r\n * Generates manual crop for given image and crop settings\r\n *\r\n * @param {imageUrl} URL for the base image for which smart crop settings\r\n * will be generated\r\n * @param {cropSettings} object with properties x, y, width, height; x and y\r\n * correspond to the top left origin of the crop bounding box\r\n * @returns {Promise} Promise which will resolve with the smart crop settings once\r\n * the generate job finishes\r\n */\r\n generateManualCrop({ imageUrl, cropSettings }) {\r\n const effectOptions = new GenerateManualCropDataModel({ imageUrl, cropSettings });\r\n return this.createGenerateRequestWithPolling({ effectOptions });\r\n }\r\n\r\n createGenerateRequestWithPolling({ effectOptions }) {\r\n const timerIds = {};\r\n const resetTimers = () => {\r\n if (timerIds.intervalId) {\r\n clearInterval(timerIds.intervalId);\r\n }\r\n if (timerIds.timeoutId) {\r\n clearTimeout(timerIds.timeoutId);\r\n }\r\n };\r\n\r\n return this.dataService.generate({ options: effectOptions }).then((response = {}) => {\r\n if (!response.wip) {\r\n return response.Assets;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n timerIds.intervalId = setInterval(() => {\r\n this.dataService.generate({ options: { JobId: response.JobId } })\r\n .then((newResponse = {}) => {\r\n if (!newResponse.wip) {\r\n resetTimers();\r\n resolve(newResponse.Assets);\r\n }\r\n }).catch((error) => {\r\n resetTimers();\r\n reject(error);\r\n });\r\n }, POLL_INTERVAL);\r\n\r\n timerIds.timeoutId = setTimeout(() => {\r\n resetTimers();\r\n reject(new Error(MediaRepositoryTimeoutError));\r\n }, MAX_TIMEOUT);\r\n });\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { createAsyncToken } from '@bingads-webui-universal/primitive-utilities';\r\n\r\nimport { AdGenerationDataService } from './data-service';\r\n\r\nconst MAX_RECOMEND_TIMEOUT = 30 * 1000; // set recommend timeout to 30 seconds\r\nconst RECOMMEND_POLL_INTERVAL = [500, 1000, 2000]; // polling intervals: 500ms, 1s, 2s, 2s, 2s ...\r\nconst OFFLINE_TIMEOUT = 15 * 1000; // set offline timeout for 15 seconds\r\n\r\nexport const RecommendationTimeoutError = 'RecommendationTimeoutError';\r\n\r\nexport class SuggestionPoller {\r\n constructor(options) {\r\n this.dataService = new AdGenerationDataService(options);\r\n this.intervalId = null;\r\n this.timeoutId = null;\r\n this.hasOfflineProcessingFinished = false;\r\n this.offlineProccesingTimeoutId = null;\r\n this.jobCompleteCallback = options.jobCompleteCallback;\r\n this.maxTimeout = options.timeout || MAX_RECOMEND_TIMEOUT;\r\n this.logger = options.logger;\r\n }\r\n\r\n cancel() {\r\n if (this.recommendPromiseBeforePolling) {\r\n this.recommendPromiseBeforePolling.cancel();\r\n this.recommendPromiseBeforePolling = null;\r\n }\r\n\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = null;\r\n }\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = null;\r\n }\r\n if (this.offlineProccesingTimeoutId) {\r\n clearTimeout(this.offlineProccesingTimeoutId);\r\n this.offlineProccesingTimeoutId = null;\r\n }\r\n\r\n this.hasOfflineProcessingFinished = false;\r\n }\r\n\r\n setJobCompleteCallback(callback) {\r\n this.jobCompleteCallback = callback;\r\n }\r\n\r\n handleError(error) {\r\n this.jobCompleteCallback({\r\n error,\r\n });\r\n\r\n this.logger.trace(`MediaRecommendationError: ${error};`);\r\n\r\n this.cancel();\r\n }\r\n\r\n doesResponseHaveImages(response) {\r\n return response && response.Images && response.Images.length > 0;\r\n }\r\n\r\n getMoreLandingPageSuggestions({\r\n landingPageUrl,\r\n pageNumber,\r\n forceInternalScrapingService = false,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n }) {\r\n if (!pageNumber || pageNumber <= 1) {\r\n throw new Error('For first page request, please call getLandingPageSuggestions to use polling');\r\n }\r\n\r\n return this.dataService.recommend({\r\n landingPageUrl,\r\n pageNumber,\r\n forceInternalScrapingService,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n });\r\n }\r\n\r\n getLandingPageSuggestions({\r\n landingPageUrl,\r\n enableOfflinePollingDelay = true,\r\n additionalCallback = _.noop,\r\n forceInternalScrapingService = false,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n }) {\r\n // clear any ongoing job if present\r\n this.cancel();\r\n\r\n this.logger.startSignal();\r\n\r\n this.recommendPromiseBeforePolling = createAsyncToken(this.dataService.recommend({\r\n landingPageUrl,\r\n forceInternalScrapingService,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n })).on({\r\n onSuccess: (response) => {\r\n if (!response.ImageWip && this.doesResponseHaveImages(response)) {\r\n this.jobCompleteCallback(response, forceInternalScrapingService);\r\n additionalCallback();\r\n\r\n this.logger.stopSignal('Got images', 'SuccessFetchImageSuggestions');\r\n } else {\r\n this.logger.trace('getLandingPageSuggestions: got no images from first request, start polling');\r\n\r\n if (enableOfflinePollingDelay) {\r\n this.offlineProccesingTimeoutId = setTimeout(() => {\r\n this.hasOfflineProcessingFinished = true;\r\n }, OFFLINE_TIMEOUT);\r\n } else {\r\n // do not enable offline processing delay when user is clicking the\r\n // refresh button\r\n this.hasOfflineProcessingFinished = true;\r\n }\r\n\r\n this.startPollingJob({\r\n landingPageUrl,\r\n additionalCallback,\r\n forceInternalScrapingService,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n });\r\n }\r\n },\r\n onError: (error) => {\r\n this.handleError(error);\r\n },\r\n });\r\n }\r\n\r\n startPollingJob({\r\n landingPageUrl,\r\n additionalCallback,\r\n forceInternalScrapingService = false,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n }) {\r\n let pollingCount = 0;\r\n let stopUpdateInterval = false;\r\n const cb = () => {\r\n if (!stopUpdateInterval) {\r\n pollingCount += 1;\r\n\r\n if (RECOMMEND_POLL_INTERVAL[pollingCount]) {\r\n clearInterval(this.intervalId);\r\n this.intervalId = setInterval(cb, RECOMMEND_POLL_INTERVAL[pollingCount]);\r\n } else {\r\n stopUpdateInterval = true;\r\n }\r\n }\r\n\r\n this.dataService.recommend({\r\n landingPageUrl,\r\n forceInternalScrapingService,\r\n minimumResolution,\r\n headlines,\r\n descriptions,\r\n }).then((response) => {\r\n const isResponseNotEmpty = this.doesResponseHaveImages(response);\r\n if (!response.ImageWip &&\r\n (this.hasOfflineProcessingFinished || isResponseNotEmpty)) {\r\n this.jobCompleteCallback(response, forceInternalScrapingService);\r\n additionalCallback();\r\n\r\n this.cancel();\r\n\r\n if (this.hasOfflineProcessingFinished && !isResponseNotEmpty) {\r\n this.logger.trace('MediaRecommendationError: NoImages;');\r\n this.logger.stopSignal('No image suggestions returned', 'NoDataFetchImageSuggestions');\r\n } else {\r\n this.logger.stopSignal('Got images', 'SuccessFetchImageSuggestions');\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n this.handleError(error);\r\n additionalCallback();\r\n });\r\n };\r\n\r\n this.intervalId = setInterval(() => {\r\n cb();\r\n }, RECOMMEND_POLL_INTERVAL[pollingCount]);\r\n\r\n this.timeoutId = setTimeout(() => {\r\n this.handleError(RecommendationTimeoutError);\r\n additionalCallback();\r\n this.logger.stopSignal('Timeout in polling service', 'TimeoutFetchImageSuggestions');\r\n }, this.maxTimeout);\r\n }\r\n}\r\n","import { map, first } from 'underscore';\r\nimport { RecommendationTimeoutError } from './poller';\r\n\r\nexport const hasMoreImagesToFetch = (response) => {\r\n if (response) {\r\n const { ImagePaging = {} } = response;\r\n const { TotalCount, PageNumber, PageSize } = ImagePaging;\r\n\r\n if (TotalCount > 0 && PageNumber > 0 && PageSize > 0) {\r\n // ideally later condition should be enough, but for safety, also check returned images size\r\n return TotalCount > PageNumber * PageSize;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const SuggestionStatus = {\r\n EmptyURL: 'EmptyURL',\r\n InvalidURL: 'InvalidURL',\r\n ServerError: 'ServerError',\r\n FetchInProgress: 'FetchInProgress',\r\n FetchSucceed: 'FetchSucceed',\r\n SelectSuggestionError: 'SelectSuggestionError',\r\n SelectSuggestionComplete: 'SelectSuggestionComplete',\r\n};\r\n\r\nconst mapSuggestionResponseToCarouselState = (status, response = {}, suggestion = {}) => {\r\n let carousel = {};\r\n\r\n switch (status) {\r\n case SuggestionStatus.EmptyURL:\r\n carousel = { isError: true, images: [], message: {} };\r\n break;\r\n case SuggestionStatus.InvalidURL:\r\n carousel = { isError: true, images: [], message: {} };\r\n break;\r\n case SuggestionStatus.ServerError: {\r\n if (response.error === RecommendationTimeoutError) {\r\n carousel = { isError: true, images: [], message: {} };\r\n } else {\r\n carousel = { isError: true, images: [], message: {} };\r\n }\r\n break;\r\n }\r\n case SuggestionStatus.FetchInProgress:\r\n carousel = { isError: false, images: [], message: {} };\r\n break;\r\n case SuggestionStatus.FetchSucceed:\r\n carousel = {\r\n isError: false,\r\n images: first(suggestion.images, 10),\r\n message: {},\r\n };\r\n break;\r\n default:\r\n throw new Error('unexpected status');\r\n }\r\n\r\n return carousel;\r\n};\r\n\r\nexport const mapSuggestionResponseToState = (status, response = {}, isSubdomainScraping) => {\r\n let suggestion = { };\r\n let carousel;\r\n\r\n switch (status) {\r\n case SuggestionStatus.EmptyURL:\r\n suggestion = { emptyURL: true };\r\n break;\r\n case SuggestionStatus.InvalidURL:\r\n suggestion = { invalidURL: true };\r\n break;\r\n case SuggestionStatus.ServerError: {\r\n if (response.error === RecommendationTimeoutError) {\r\n suggestion = { isTimeout: true };\r\n } else {\r\n suggestion = { unKnownError: true };\r\n }\r\n break;\r\n }\r\n case SuggestionStatus.FetchInProgress:\r\n suggestion = { inProgress: true };\r\n break;\r\n case SuggestionStatus.FetchSucceed:\r\n suggestion = {\r\n images: map(\r\n response && response.Images,\r\n ({ ImageUrl, ThumbnailUrl, SuggestionId }) => ({\r\n fullUrl: ImageUrl,\r\n thumbnailUrl: ThumbnailUrl || ImageUrl,\r\n suggestionId: SuggestionId,\r\n })\r\n ),\r\n hasMore: hasMoreImagesToFetch(response),\r\n };\r\n break;\r\n default:\r\n throw new Error('unexpected status');\r\n }\r\n\r\n if (!isSubdomainScraping) {\r\n carousel = mapSuggestionResponseToCarouselState(status, response, suggestion);\r\n }\r\n\r\n const returnObject = { suggestion };\r\n\r\n if (carousel) {\r\n returnObject.carousel = carousel;\r\n }\r\n\r\n return returnObject;\r\n};\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nfunction translateLanguageName(i18n, language) {\r\n return i18n.getString(`Language_${language}`);\r\n}\r\n\r\nexport default class ViewModel {\r\n constructor({\r\n selectedLanguages,\r\n suggestedLanguages,\r\n i18n,\r\n allLanguageExclusive,\r\n inEditMode,\r\n languages,\r\n }) {\r\n this.ALL_LANGUAGES = 'All';\r\n this.i18n = i18n;\r\n\r\n // make 'All' the first language\r\n let languagesSet = languages || [];\r\n\r\n if (_.contains(languagesSet, this.ALL_LANGUAGES)) {\r\n languagesSet = _.without(languagesSet, this.ALL_LANGUAGES);\r\n languagesSet.unshift(this.ALL_LANGUAGES);\r\n }\r\n\r\n this.allLanguageExclusive = ko.observable(allLanguageExclusive);\r\n\r\n this.inEditMode = ko.observable(inEditMode);\r\n\r\n this.languageOptions = _.map(languagesSet, language => (\r\n {\r\n Text: translateLanguageName(i18n, language),\r\n Value: language,\r\n }\r\n ));\r\n\r\n this.selectedLanguages = ko.observableArray(_.intersection(languagesSet, selectedLanguages));\r\n\r\n this.selectedLanguagesName = ko.computed(() =>\r\n _.map(this.selectedLanguages() || [], x => translateLanguageName(this.i18n, x)));\r\n\r\n this.suggestedLanguages = ko.observableArray(suggestedLanguages);\r\n\r\n this.suggestedLanguagesName = ko.computed(() =>\r\n _.map(this.suggestedLanguages(), x => translateLanguageName(this.i18n, x)));\r\n\r\n this.allLanguageSelected = ko.computed(() =>\r\n _.contains(this.selectedLanguages(), this.ALL_LANGUAGES));\r\n\r\n this.targetSuggestedLanguages = () => {\r\n this.inEditMode(true);\r\n this.selectedLanguages(this.suggestedLanguages() || []);\r\n this.suggestedLanguages([]);\r\n return true;\r\n };\r\n\r\n this.updateSuggestedLanguages = (newSuggestedLanguages) => {\r\n this.suggestedLanguages(_.intersection(newSuggestedLanguages, languagesSet));\r\n };\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport template from './template.pug';\r\nimport ViewModel from './viewmodel';\r\n\r\n/**\r\n* Provide languages display & edit functions\r\n*\r\n* <br>It enabled functions:\r\n* update the selector from display mode to edit modevs,\r\n* select from the provided languges,\r\n* update suggested languages,\r\n* adopt the suggested languages\r\n*\r\n* <br>Triggered event selectedLanguages:changed when user selection changes\r\n*/\r\nexport class MultiLanguageSelector extends Backbone.View {\r\n /**\r\n * Initilize view settings\r\n *\r\n * @param {Object} param - An object containing these default options for view:\r\n * @param {Object} param.i18nStrings - view customized description settings\r\n * @param {string} param.i18nStrings.Description - the customized string for view description\r\n * @param {string} param.i18nStrings.SuggestedLanguagesDescription -\r\n * the customized string for suggested languages description\r\n * @param {Object[]} param.languages - the languages set to choose from, default empty\r\n * @param {Object[]} param.suggestedLanguages - languages sugguested to choose, default empty\r\n * @param {boolean} param.inEditMode - whether the selector is in edit mode, default true\r\n * @param {boolean} param.allLanguageExclusive - whether 'all' language is exclusive\r\n * when true, select 'all' will disable all other selections\r\n * default true\r\n * @param {boolean} param.inSingleColumnVersion - whether to one language per row\r\n * (by default will be three)\r\n * @param {Object} param.i18n - the localization settings, by default return the provided key\r\n *\r\n * @returns {void} void\r\n */\r\n initialize({\r\n i18nStrings,\r\n languages,\r\n suggestedLanguages = [],\r\n selectedLanguages = [],\r\n inEditMode = true,\r\n allLanguageExclusive = true,\r\n inSingleColumnVersion = false,\r\n i18n = { getString: key => key },\r\n activityLogger,\r\n scenario,\r\n }) {\r\n this.options = _.defaults({\r\n i18nStrings,\r\n languages,\r\n suggestedLanguages,\r\n selectedLanguages,\r\n inEditMode,\r\n allLanguageExclusive,\r\n i18n,\r\n activityLogger,\r\n scenario,\r\n }, {\r\n i18nStrings: {\r\n Description: i18n.getString('MultiLanguageSelector_Description'),\r\n SuggestedLanguagesDescription: i18n.getString('MultiLanguageSelector_SuggestedLanguageDescription'),\r\n },\r\n });\r\n\r\n this.inSingleColumnVersion = inSingleColumnVersion;\r\n this.koModel = new ViewModel(this.options);\r\n this.koModel.selectedLanguages.subscribe((selectedLangauges) => {\r\n if (this.koModel.allLanguageExclusive() &&\r\n this.koModel.allLanguageSelected() &&\r\n selectedLangauges.length > 1) {\r\n this.koModel.selectedLanguages([this.koModel.ALL_LANGUAGES]);\r\n } else {\r\n this.trigger('selectedLanguages:changed', this.getSelectedLanguages());\r\n }\r\n }, this);\r\n\r\n this.logInteraction = _.once(() => {\r\n if (this.options.activityLogger) {\r\n this.options.activityLogger.signal(\r\n 'multi language selector language change',\r\n this.options.scenario\r\n );\r\n }\r\n });\r\n }\r\n\r\n get events() {\r\n return {\r\n 'click label.checkbox-inline': 'logInteraction',\r\n };\r\n }\r\n\r\n render() {\r\n this.$el.empty().append(template(_.extend(\r\n {\r\n i18n: this.options.i18n,\r\n SelectedLanguages: this.koModel.selectedLanguagesName().join(','),\r\n languageOptions: this.koModel.languageOptions,\r\n inSingleColumnVersion: this.inSingleColumnVersion,\r\n },\r\n this.options.i18nStrings\r\n )));\r\n ko.applyBindings(this.koModel, this.el);\r\n return this;\r\n }\r\n\r\n /**\r\n * Get suggested languages\r\n *\r\n * @returns {Object[]} selected languages\r\n */\r\n getSelectedLanguages() {\r\n return this.koModel.selectedLanguages();\r\n }\r\n\r\n /**\r\n * Get suggested languages names\r\n *\r\n * @returns {Object[]} selected language names\r\n */\r\n getSelectedLanguageNames() {\r\n return this.koModel.selectedLanguagesName();\r\n }\r\n\r\n /**\r\n * Update suggested languages\r\n *\r\n * @param {Object[]} languages - new suggested languages\r\n *\r\n * @returns {void} void\r\n */\r\n updateSuggestedLanguages(languages) {\r\n this.koModel.updateSuggestedLanguages(languages);\r\n }\r\n}\r\n","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Ch3 class=\\\"type-normal margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Subheader_Account_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3\\\"\\u003E\\u003Ch3 class=\\\"type-bold account-name margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.account.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (model.subAccount) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Ch3 class=\\\"type-normal\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Subheader_Subaccount_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-3\\\"\\u003E\\u003Ch3 class=\\\"type-bold sub-account-name\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.subAccount.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-warning clearfix not-in-pilot\\\"\\u003E\\u003Cdiv class=\\\"alert-icon warning\\\"\\u003E\\u003C\\u002Fdiv\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_NotInPilot')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bid-cap-panel form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"bid-selection\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12 radio\\\"\\u003E\\u003Clabel class=\\\"empty\\\"\\u003E\\u003Cinput\" + (\" class=\\\"bid-cap-radio\\\"\"+\" type=\\\"radio\\\" name=\\\"bid-radio\\\" value=\\\"empty\\\"\"+pug.attr(\"checked\", model.capSelection === 'empty', true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Max_Bid_Option_No_Cap')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-12 radio form-group\\\"\\u003E\\u003Clabel class=\\\"col-sm-3 bid-selection-label\\\"\\u003E\\u003Cinput\" + (\" class=\\\"bid-cap-radio\\\"\"+\" type=\\\"radio\\\" name=\\\"bid-radio\\\" value=\\\"cap\\\"\"+pug.attr(\"checked\", model.capSelection === 'cap', true, true)) + \"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Max_Bid_Option_With_Cap')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"col-sm-7\",model.capSelection === 'empty' ? 'hide' : 'show'], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"max-bid-input\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bid-multipliers-panel\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cul class=\\\"btn-group col-sm-12\\\"\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('deviceType' === model.selectedMultiplierType ? 'ui-tabs-selected' : '')], [true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_DeviceType_Multipliers_Label'), true, true)+\" data-type=\\\"deviceType\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_DeviceType_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('dateType' === model.selectedMultiplierType ? 'ui-tabs-selected' : ''),(model.isPayPerStay ? 'hide' : '')], [true,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_DateType_Multipliers_Label'), true, true)+\" data-type=\\\"dateType\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_DateType_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('siteType' === model.selectedMultiplierType ? 'ui-tabs-selected' : ''),(model.isPayPerStay ? 'hide' : '')], [true,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Label'), true, true)+\" data-type=\\\"siteType\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_SiteType_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('userCountry' === model.selectedMultiplierType ? 'ui-tabs-selected' : '')], [true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_UserCountry_Multipliers_Label'), true, true)+\" data-type=\\\"userCountry\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_UserCountry_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('lengthOfStay' === model.selectedMultiplierType ? 'ui-tabs-selected' : ''),(model.isPayPerStay ? 'hide' : '')], [true,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_Label'), true, true)+\" data-type=\\\"lengthOfStay\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_LengthOfStay_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('checkInDay' === model.selectedMultiplierType ? 'ui-tabs-selected' : ''),(model.isPayPerStay ? 'hide' : '')], [true,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_CheckinDay_Multipliers_Label'), true, true)+\" data-type=\\\"checkInDay\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_CheckinDay_Multipliers_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([('advancedBooking' === model.selectedMultiplierType ? ' ui-tabs-selected' : ''),(model.isPayPerStay ? 'hide' : '')], [true,true]), false, true)) + \"\\u003E\\u003Cspan\" + (pug.attr(\"class\", pug.classes([\"btn\",\"btn-default\",\"clickable\",(model.isUseParent ? 'disabled' : '')], [false,false,false,true]), false, true)+pug.attr(\"title\", view.i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_Label'), true, true)+\" data-type=\\\"advancedBooking\\\" tabindex=\\\"0\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_AdvancedBooking_Multipliers_Label_Short')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group bid-multipliers-content\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-type-multipliers-containter\",('deviceType' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"device-type-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-type-multipliers-containter\",('dateType' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"date-type-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"device-type-multipliers-containter\",('siteType' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"site-type-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"user-country-multipliers-containter\",('userCountry' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"user-country-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"length-of-stay-multipliers-containter\",('lengthOfStay' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"length-of-stay-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"check-in-day-multipliers-containter\",('checkInDay' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"check-in-day-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"advanced-booking-multipliers-containter\",('advancedBooking' === model.selectedMultiplierType ? 'show' : 'hide')], [false,true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"advanced-booking-multipliers\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (view.showUseParent) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid-multipliers-use-parent\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput\" + (pug.attrs(pug.merge([{\"type\": \"checkbox\",\"checked\": pug.escape((model.isUseParent===true))},model.isPayPerStay && !model.isPayPerStayPhase2Pilot ? { disabled: 'disabled' } : {}]), true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_Multipliers_UseParent_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([\"bid-multipliers-errors\",\"font-error\",model.errors.length ? 'show' : 'hide'], [false,false,true]), false, true)+\" role=\\\"alert\\\"\") + \"\\u003E\";\n// iterate model.errors\n;(function(){\n var $$obj = model.errors;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var error = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid-multipliers-error\\\"\\u003E\" + (pug.escape(null == (pug_interp = error) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var error = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"bid-multipliers-error\\\"\\u003E\" + (pug.escape(null == (pug_interp = error) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"device-type-multipliers form-horizontal\\\"\\u003E\\u003Cdiv data-ref=\\\"monday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"tuesday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"wednesday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"thursday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"friday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"saturday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"sunday-bid-multiplier\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"device-type-multipliers form-horizontal\\\"\\u003E\";\n// iterate view.listOfTypes\n;(function(){\n var $$obj = view.listOfTypes;\n if ('number' == typeof $$obj.length) {\n for (var type = 0, $$l = $$obj.length; type < $$l; type++) {\n var i18nKey = $$obj[type];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", type.toLowerCase() + '-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var type in $$obj) {\n $$l++;\n var i18nKey = $$obj[type];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", type.toLowerCase() + '-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"length-of-stay-multipliers form-horizontal\\\"\\u003E\";\n// iterate model.staySegments\n;(function(){\n var $$obj = model.staySegments;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var segment = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"length-of-stay-multiplier form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"data-ref\", segment.key+'-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 mulitplier-query-remove\\\"\\u003E\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-remove filter-query-remove__glyphicon clickable\\\"\"+pug.attr(\"title\", segment.key, true, true)+pug.attr(\"aria-label\", view.i18n.getString('Button_Delete'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var segment = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"length-of-stay-multiplier form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"data-ref\", segment.key+'-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 mulitplier-query-remove\\\"\\u003E\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-remove filter-query-remove__glyphicon clickable\\\"\"+pug.attr(\"title\", segment.key, true, true)+pug.attr(\"aria-label\", view.i18n.getString('Button_Delete'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"mulitpliers-query-add form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6 col-sm-offset-5 stay-nights-input\\\"\\u003E\\u003Cdiv data-ref=\\\"stay-nights-input\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 text-center\\\"\\u003E\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"add-new-query\",(model.isUseParent===true ? 'disabled' : '')], [false,true]), false, true)+\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Button_Add')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_mixins[\"multipliers-bid-list\"] = pug_interp = function(name, className, strategy, factorInput, isUseParent){\nvar block = (this && this.block), attributes = (this && this.attributes) || {};\npug_html = pug_html + \"\\u003Cdiv class=\\\"col-sm-4 control-label\\\"\\u003E\\u003Clabel\\u003E\" + (pug.escape(null == (pug_interp = name) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cselect\" + (pug.attr(\"class\", pug.classes([\"form-control\",\"select-strategy\",className], [false,false,true]), false, true)+pug.attr(\"disabled\", (isUseParent===true), true, true)+pug.attr(\"aria-label\", view.i18n.getString('HotelCenter_Overview_Multipliers_Bids_Strategy_Label'), true, true)) + \"\\u003E\\u003Coption\" + (\" value=\\\"increase\\\"\"+pug.attr(\"selected\", strategy === 'increase', true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_Multipliers_BidIncrease_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\\u003Coption\" + (\" value=\\\"decrease\\\"\"+pug.attr(\"selected\", strategy === 'decrease', true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Overview_Multipliers_BidDecrease_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-4\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"data-ref\", factorInput, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n};\npug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\";\npug_mixins[\"multipliers-bid-list\"](view.text, view.value, model.strategy, 'factor-input', model.isUseParent);\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"user-country-multipliers form-horizontal\\\"\\u003E\";\n// iterate model.selectedCountries\n;(function(){\n var $$obj = model.selectedCountries;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var country = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"user-country-multiplier form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"data-ref\", country.Key+'-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 mulitplier-query-remove\\\"\\u003E\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-remove filter-query-remove__glyphicon clickable\\\"\"+pug.attr(\"title\", country.Key, true, true)+pug.attr(\"aria-label\", view.i18n.getString('Button_Delete'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var country = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv class=\\\"user-country-multiplier form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-11\\\"\\u003E\\u003Cdiv\" + (pug.attr(\"data-ref\", country.Key+'-bid-multiplier', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 mulitplier-query-remove\\\"\\u003E\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-remove filter-query-remove__glyphicon clickable\\\"\"+pug.attr(\"title\", country.Key, true, true)+pug.attr(\"aria-label\", view.i18n.getString('Button_Delete'), true, true)+\" tabindex=\\\"0\\\" role=\\\"button\\\"\") + \"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Cdiv class=\\\"mulitpliers-query-add form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6 col-sm-offset-5\\\"\\u003E\\u003Cselect\" + (\" class=\\\"form-control country-list\\\"\"+pug.attr(\"disabled\", (model.isUseParent===true), true, true)) + \"\\u003E\";\n// iterate view.restCountries\n;(function(){\n var $$obj = view.restCountries;\n if ('number' == typeof $$obj.length) {\n for (var pug_index1 = 0, $$l = $$obj.length; pug_index1 < $$l; pug_index1++) {\n var country = $$obj[pug_index1];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", country.Key, true, true)+pug.attr(\"selected\", model.chooseCountry === country.Key, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = country.Value) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index1 in $$obj) {\n $$l++;\n var country = $$obj[pug_index1];\npug_html = pug_html + \"\\u003Coption\" + (pug.attr(\"value\", country.Key, true, true)+pug.attr(\"selected\", model.chooseCountry === country.Key, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = country.Value) ? \"\" : pug_interp)) + \"\\u003C\\u002Foption\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1 text-center\\\"\\u003E\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"add-new-query\",(model.isUseParent===true ? 'disabled' : '')], [false,true]), false, true)+\" href=\\\"javascript:void(0);\\\" role=\\\"button\\\"\") + \"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('Button_Add')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bid-strategy-panel form-horizontal\\\"\\u003E\\u003Clabel class=\\\"radio fixed\\\"\\u003E\\u003Cinput\" + (pug.attrs(pug.merge([{\"class\": \"bid-strategy-radio\",\"type\": \"radio\",\"role\": \"radio\",\"name\": pug.escape(view.cid),\"value\": \"fixed\",\"checked\": pug.escape(model.bidStrategy === view.strategy.fixed)},view.disabledAttr]), true)) + \"\\u003E\\u003Cspan class=\\\"type-normal cursor-pointer\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Strategy_Option_Fixed')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([model.bidStrategy === 'fixed' ? 'show' : 'hide'], [true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"fixed-bid-input\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\\u003Clabel class=\\\"radio percentage\\\"\\u003E\\u003Cinput\" + (pug.attrs(pug.merge([{\"class\": \"bid-strategy-radio\",\"type\": \"radio\",\"role\": \"radio\",\"name\": pug.escape(view.cid),\"value\": \"percentage\",\"checked\": pug.escape(model.bidStrategy === view.strategy.percentage)},view.disabledAttr]), true)) + \"\\u003E\\u003Cspan class=\\\"type-normal cursor-pointer\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Strategy_Option_Percentage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([model.bidStrategy === 'percentage' ? 'show' : 'hide'], [true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"percentage-bid-input\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\";\nif (view.isPayPerStayEnabled) {\npug_html = pug_html + \"\\u003Clabel class=\\\"radio payperstay\\\"\\u003E\\u003Cinput\" + (pug.attrs(pug.merge([{\"class\": \"bid-strategy-radio\",\"type\": \"radio\",\"role\": \"radio\",\"name\": pug.escape(view.cid),\"value\": \"payperstay\",\"checked\": pug.escape(model.bidStrategy === view.strategy.payperstay)},view.disabledPPSAttr]), true)) + \"\\u003E\\u003Cspan class=\\\"type-normal cursor-pointer\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Strategy_Option_PPS')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv\" + (pug.attr(\"class\", pug.classes([model.bidStrategy === 'payperstay' ? 'show' : 'hide'], [true]), false, true)) + \"\\u003E\\u003Cdiv data-ref=\\\"payperstay-bid-input\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\";\n}\nif (!(view.isAmountRequired)) {\npug_html = pug_html + \"\\u003Clabel class=\\\"radio empty\\\"\\u003E\\u003Cinput\" + (\" class=\\\"bid-strategy-radio\\\"\"+\" type=\\\"radio\\\" role=\\\"radio\\\"\"+pug.attr(\"name\", view.cid, true, true)+\" value=\\\"empty\\\"\"+pug.attr(\"checked\", model.bidStrategy === view.strategy.empty, true, true)) + \"\\u003E\\u003Cspan class=\\\"type-normal cursor-pointer\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Setup_Budget_Strategy_Option_Empty')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Flabel\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"dropdown-search-selector__dropdown\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"row btn btn-default dropdown-toggle\\\"\"+\" type=\\\"button\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\"+pug.attr(\"disabled\", model.isDisabled, true, true)) + \"\\u003E\\u003Cdiv class=\\\"text-left col-xs-10\\\"\\u003E\\u003Cdiv\" + (\" class=\\\"floatLeftContainer truncated\\\"\"+pug.attr(\"option-id\", model.selectOption.id, true, true)) + \"\\u003E\" + (pug.escape(null == (pug_interp = model.selectOption.value) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"icon-right glyphicon glyphicon-chevron-down\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cul\" + (\" class=\\\"dropdown-menu\\\"\"+\" role=\\\"status\\\" aria-labelledby=\\\"srch-term\\\"\"+pug.attr(\"id\", view.searchResultsId, true, true)) + \"\\u003E\";\n// iterate view.customOptions\n;(function(){\n var $$obj = view.customOptions;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var customOption = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", customOption.id + '-container', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var customOption = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", customOption.id + '-container', true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003Cdiv data-ref=\\\"search-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"selector-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv data-ref=\\\"pagination-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model) {pug_html = pug_html + \"\\u003Cli\" + (pug.attr(\"class\", pug.classes([\"dropdown-search-selector__option\",\"col-sm-12\",model.isSelected ? 'dropdown-search-selector__option--selected' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003Ca\" + (pug.attr(\"class\", pug.classes([\"clear\",\"noWrap\",\"dropdown-search-selector\",model.isDisabled ? 'inactive' : ''], [false,false,false,true]), false, true)+\" role=\\\"option\\\" href=\\\"javascript:void(0)\\\"\"+pug.attr(\"title\", model.value, true, true)+pug.attr(\"option-id\", model.id, true, true)) + \"\\u003E\" + (null == (pug_interp = model.value) ? \"\" : pug_interp) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (current, model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-inline pull-right dropdown-search-selector__pagination\\\"\\u003E\\u003Cul class=\\\"pagination\\\"\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([\"page-item\",\"previous-page-button\",model.currentPage <= 1 ? 'disabled' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cspan class=\\\"account-list-selector-prev-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('AccountsDropdownSelector_PreviousPage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli class=\\\"page-item\\\"\\u003E\\u003Cspan class=\\\"page-link\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.currentPage) ? \"\" : pug_interp)) + \"\\u003Cspan class=\\\"sr-only\\\"\\u003E\" + (pug.escape(null == (pug_interp = (current)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003Cli\" + (pug.attr(\"class\", pug.classes([\"page-item\",\"next-page-button\",model.currentPage * view.pageSize >= model.totalCount ? 'disabled' : ''], [false,false,true]), false, true)) + \"\\u003E\\u003Cspan class=\\\"account-list-selector-next-label\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('AccountsDropdownSelector_NextPage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"current\" in locals_for_with?locals_for_with.current:typeof current!==\"undefined\"?current:undefined,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"dropdown-search-selector__search\\\" role=\\\"search\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default dropdown-search-selector__search--submit glyphicon glyphicon-search filter_search_icon_small\\\" aria-label=\\\"Search\\\" type=\\\"button\\\" tabindex=\\\"0\\\"\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cinput\" + (pug.attr(\"placeholder\", view.placeholder, true, true)+\" name=\\\"srch-term\\\" id=\\\"srch-term\\\" type=\\\"text\\\" role=\\\"combobox\\\" aria-haspopup=\\\"listbox\\\" aria-expanded=\\\"true\\\"\"+pug.attr(\"aria-owns\", view.searchResultsId, true, true)+\" aria-autocomplete=\\\"list\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cul class=\\\"dropdown-search-selector__options\\\" role=\\\"listbox\\\"\\u003E\";\nif (model.options.length > 0) {\n// iterate model.options\n;(function(){\n var $$obj = model.options;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var option = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", 'option-' + option.id, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var option = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Cdiv\" + (pug.attr(\"data-ref\", 'option-' + option.id, true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\";\n }\n }\n}).call(this);\n\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"empty-result-message\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.nodataPlaceholder) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Ful\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"edit-panel\\\"\\u003E\";\nvar saveButtonAttr = model.isSaveButtonDisabled ? { disabled: 'disabled' } : {}\nvar cleanButtonAttr = model.isCleanButtonDisabled ? { disabled: 'disabled' } : {}\npug_html = pug_html + \"\\u003Cinput\" + (pug.attrs(pug.merge([{\"class\": \"btn btn-primary\",\"id\": \"Save\",\"type\": \"button\",\"value\": pug.escape(view.i18n.getString('HotelCenter_Shared_Save')),\"tabindex\": \"0\"},saveButtonAttr]), true)) + \"\\u003E\\u003Cinput\" + (pug.attrs(pug.merge([{\"class\": pug.classes([\"btn\",\"btn-default\",(model.hasCleanButton ? '' : 'hide')], [false,false,true]),\"id\": \"Clean\",\"type\": \"button\",\"value\": pug.escape(view.i18n.getString('HotelCenter_Shared_Clear')),\"tabindex\": \"0\"},cleanButtonAttr]), true)) + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default\\\"\"+\" id=\\\"Cancel\\\" type=\\\"button\\\"\"+pug.attr(\"value\", view.i18n.getString('HotelCenter_Shared_Cancel'), true, true)+\" tabindex=\\\"0\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (model, view) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel-component\\\"\\u003E\\u003Cdiv class=\\\"panel-body\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Cdiv class=\\\"glyphicon glyphicon-arrow-left cursor-pointer clickable\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-8\\\"\\u003E\\u003Cdiv class=\\\"col-sm-5\\\"\\u003E\\u003Ch3 class=\\\"type-normal margin-zero\\\"\\u003E\" + (pug.escape(null == (pug_interp = view.i18n.getString('HotelCenter_Filter_HotelGroup_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-7\\\"\\u003E\\u003Ch3 class=\\\"type-bold margin-zero truncated\\\"\\u003E\" + (pug.escape(null == (pug_interp = model.hotelGroup.Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh3\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-1\\\"\\u003E\\u003Cdiv class=\\\"glyphicon glyphicon-remove hotel-group-information-remove__glyphicon cursor-pointer clickable\\\" role=\\\"button\\\" tabindex=\\\"0\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"model\" in locals_for_with?locals_for_with.model:typeof model!==\"undefined\"?model:undefined,\"view\" in locals_for_with?locals_for_with.view:typeof view!==\"undefined\"?view:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"hotel-center-global-toolbar-containter\\\"\\u003E\\u003Cdiv class=\\\"global-toolbar-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"global-filter-bar\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"panel inlinereportdownload-panel inline-download-form\\\"\\u003E\\u003Cdiv class=\\\"panel-heading\\\"\\u003E\\u003Cdiv class=\\\"panel-title\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('GridDownloadPane_Title')) ? \"\" : pug_interp)) + \"\\u003Ca id=\\\"feedback-label\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003Cspan class=\\\"glyphicon glyphicon-bullhorn\\\" aria-hidden=\\\"true\\\"\\u003E\\u003C\\u002Fspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('GridDownload_GiveFeedback_Label')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-body form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\" id=\\\"gridDownloadFormatTitle\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('GridDownloadFormat_Title')) ? \"\" : pug_interp)) + \"\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-2\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default dropdown-toggle legacy-dropdown-toggle\\\" type=\\\"button\\\" data-toggle=\\\"dropdown\\\" href=\\\"javascript:void(0);\\\" aria-labelledby=\\\"gridDownloadFormatTitle\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\u003E\\u003Cspan class=\\\"type-strong\\\" data-bind=\\\"text: downloadType().text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"text-rigth spritedimage toolbar-icon icon-arrowdown-normal\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cul class=\\\"dropdown-menu dropdown-aligned\\\" data-bind=\\\"foreach: downloadTypes\\\" role=\\\"menu\\\"\\u003E\\u003Cli\\u003E\\u003Ca data-bind=\\\"click: $root.downloadType\\\" href=\\\"javascript:void(0);\\\" role=\\\"menuitem\\\"\\u003E\\u003Cspan data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group segmentOptionGroup\\\"\\u003E\\u003Clabel class=\\\"col-sm-2 control-label\\\" id=\\\"gridDownloadSegmentTitle\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('GridDownloadSegment_Title')) ? \"\" : pug_interp)) + \"\\u003Ca class=\\\"helpbutton\\\" topic=\\\"pop_BA_CampaignDownload_Segement\\\" type=\\\"helppopup\\\" onclick=\\\"PopupController.PopupJsClick(this)\\\" href=\\\"javascript:void(0);\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"col-sm-2\\\"\\u003E\\u003Cbutton class=\\\"btn btn-default dropdown-toggle legacy-dropdown-toggle\\\" type=\\\"button\\\" data-toggle=\\\"dropdown\\\" aria-labelledby=\\\"gridDownloadSegmentTitle\\\" aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\u003E\\u003Cspan class=\\\"type-strong\\\" data-bind=\\\"text: segmentType().text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"spritedimage toolbar-icon icon-arrowdown-normal\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cul class=\\\"dropdown-menu dropdown-aligned\\\" role=\\\"menu\\\" data-bind=\\\"foreach: segmentTypes\\\"\\u003E\\u003Cli class=\\\"dropdown-submenu\\\" data-bind=\\\"if: children\\\"\\u003E\\u003Ca href=\\\"javascript:void(0);\\\" aria-haspopup=\\\"true\\\" role=\\\"menuitem\\\" aria-expanded=\\\"false\\\"\\u003E\\u003Cspan data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"spritedimage toolbar-icon grid-expand-icon pull-right caret\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003Cul class=\\\"dropdown-menu\\\" data-bind=\\\"foreach: children\\\" role=\\\"menu\\\"\\u003E\\u003Cli role=\\\"presentation\\\"\\u003E\\u003Ca data-bind=\\\"click: $root.segmentType\\\" role=\\\"menuitem\\\"\\u003E\\u003Cspan tabindex=\\\"-1\\\" data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fli\\u003E\\u003Cli role=\\\"presentation\\\" data-bind=\\\"ifnot: children\\\"\\u003E\\u003Ca data-bind=\\\"click: $root.segmentType\\\" role=\\\"menuitem\\\"\\u003E\\u003Cspan tabindex=\\\"-1\\\" data-bind=\\\"text: text\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fli\\u003E\\u003C\\u002Ful\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" data-bind=\\\"visible: errorMessage\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv class=\\\"alert alert-warning\\\"\\u003E\\u003Cspan class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan data-bind=\\\"text: errorMessage\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"panel-footer\\\"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-primary btn-download\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('GridDownloadButton_Name'), true, true)+\" data-bind=\\\"enable: enableDownload\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"btn btn-default btn-cancel\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('GridDownloadCancelButton_Name'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"inline-location-recommendation-container form-group\\\" style=\\\"margin-left: -7.5px\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"form-group inline-location-recommendation-description\\\" style=\\\"margin-top: 20px; margin-bottom: 20px;\\\"\\u003E\\u003Cspan data-bind=\\\"text: description\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\" style=\\\"padding-top: 10px\\\"\\u003E\\u003Cinput\" + (\" class=\\\"apply btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Apply'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"cancel btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Cancel'), true, true)) + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"col-sm-6\\\" style=\\\"margin-bottom: 10px\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-map-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showMap) {pug_html = pug_html + \"\\u003Cdiv class=\\\"location-recommendation-container form-group\\\" data-bind=\\\"visible: hasRecommendation\\\"\\u003E\";\nif (showMap) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-map-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-recommendation\\\" style=\\\"line-height: 10px\\\"\\u003E\\u003Cdiv class=\\\"alert-info-inline collapsed\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#location-recommendation-body-container\\\" data-bind=\\\"click: clickCollapse\\\"\\u003E\\u003Ca class=\\\"spritedimagealign\\\" data-bind=\\\"css: isExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cspan class=\\\"recommendation-icon\\\"\\u003E \\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"clickable\\\" tabindex=\\\"0\\\" data-bind=\\\"html: banner\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"location-recommendation-body collapse\\\" id=\\\"location-recommendation-body-container\\\"\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cinput\" + (\" class=\\\"apply btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Apply'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"dismiss btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Dismiss'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-grid-container\\\" style=\\\"min-width: 1020px\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showMap\" in locals_for_with?locals_for_with.showMap:typeof showMap!==\"undefined\"?showMap:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showMap) {pug_html = pug_html + \"\\u003Cdiv class=\\\"location-recommendation-container form-group\\\" data-bind=\\\"visible: hasRecommendation\\\"\\u003E\";\nif (showMap) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-map-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-recommendation\\\" style=\\\"line-height: 10px\\\"\\u003E\\u003Cdiv class=\\\"alert-info-inline collapsed\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#location-recommendation-body-container\\\" data-bind=\\\"click: clickCollapse\\\"\\u003E\\u003Ca class=\\\"spritedimagealign\\\" data-bind=\\\"css: isExpanded() ? "expandedImage" : "expanderImage"\\\"\\u003E\\u003C\\u002Fa\\u003E\\u003Cspan class=\\\"recommendation-icon\\\"\\u003E \\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"clickable\\\" tabindex=\\\"0\\\" data-bind=\\\"html: banner\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"location-recommendation-body collapse\\\" id=\\\"location-recommendation-body-container\\\"\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cinput\" + (\" class=\\\"apply btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Apply'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showMap\" in locals_for_with?locals_for_with.showMap:typeof showMap!==\"undefined\"?showMap:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showMap) {pug_html = pug_html + \"\\u003Cdiv class=\\\"location-recommendation-container form-group\\\" data-bind=\\\"visible: showLocationsRecommendationsGrid\\\"\\u003E\";\nif (showMap) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-map-container\\\" style=\\\"margin-top: 25px; margin-bottom: 25px;\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv data-bind=\\\"visible: hasRecommendation\\\"\\u003E\\u003Cdiv class=\\\"alert alert-recommendation\\\" style=\\\"line-height: 10px; margin: 0; padding-top: 10px; padding-bottom: 10px; border: 1px solid;\\\"\\u003E\\u003Cdiv class=\\\"alert-info-inline collapsed\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#location-recommendation-body-container\\\" data-bind=\\\"click: clickCollapse\\\"\\u003E\\u003Cspan class=\\\"glyphicon\\\" data-bind=\\\"css: isExpanded() ? "glyphicon-chevron-up" : "glyphicon-chevron-down"\\\" style=\\\"padding-right: 10px;\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"recommendation-light-bulb\\\" style=\\\"padding-right: 5px;\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"clickable recommendation-detail-info\\\" tabindex=\\\"0\\\" data-bind=\\\"html: banner\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"location-recommendation-body panel collapse\\\" id=\\\"location-recommendation-body-container\\\" style=\\\"padding: 15px 0 0 15px;\\\"\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-6\\\"\\u003E\\u003Cdiv class=\\\"location-recommendation-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-12\\\" style=\\\"padding-top: 5px; padding-bottom: 5px;\\\"\\u003E\\u003Cinput\" + (\" class=\\\"apply btn btn-primary\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Apply'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003Cinput\" + (\" class=\\\"dismiss btn btn-default\\\"\"+\" type=\\\"button\\\"\"+pug.attr(\"value\", i18n.getString('Inline_Location_Recommendation_Dismiss'), true, true)+\" data-bind=\\\"css: {disabled: !isActionButtonEnabled()}\\\"\") + \"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showMap\" in locals_for_with?locals_for_with.showMap:typeof showMap!==\"undefined\"?showMap:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (deliveryStatus, i18n, showRequestPermissionBtn) {pug_html = pug_html + \"\\u003Cdiv class=\\\"request-permission-custom-template\\\"\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString(`Message_DeliveryStatus_${deliveryStatus}`)) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";\nif (showRequestPermissionBtn) {\npug_html = pug_html + \"\\u003Cbutton id=\\\"requestLinkedInPermission\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('RequestPermission')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fbutton\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"deliveryStatus\" in locals_for_with?locals_for_with.deliveryStatus:typeof deliveryStatus!==\"undefined\"?deliveryStatus:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showRequestPermissionBtn\" in locals_for_with?locals_for_with.showRequestPermissionBtn:typeof showRequestPermissionBtn!==\"undefined\"?showRequestPermissionBtn:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cspan\" + (\" class=\\\"glyphicon glyphicon-remove dismiss-recommendation itemAction-remove clickable\\\"\"+\" tabindex=\\\"0\\\" role=\\\"button\\\"\"+pug.attr(\"title\", i18n.getString('LocationGrid_Column_TD_Dimiss'), true, true)+pug.attr(\"aria-label\", i18n.getString('LocationGrid_Column_TD_Dimiss'), true, true)) + \"\\u003E\\u003C\\u002Fspan\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (Name, isForVNext) {if (isForVNext) {\npug_html = pug_html + \"\\u003Cspan class=\\\"custormerInsightsLocation\\\"\\u003E\\u003C\\u002Fspan\\u003E\";\n}\npug_html = pug_html + \"\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = Name) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\";}.call(this,\"Name\" in locals_for_with?locals_for_with.Name:typeof Name!==\"undefined\"?Name:undefined,\"isForVNext\" in locals_for_with?locals_for_with.isForVNext:typeof isForVNext!==\"undefined\"?isForVNext:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (hasPagination) {pug_html = pug_html + \"\\u003Cdiv class=\\\"location-recommendation-grid-container bingadsgrid\\\"\\u003E\\u003Cdiv class=\\\"location-grid-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"placeholder-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\nif (hasPagination) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"grid-pager pager\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"hasPagination\" in locals_for_with?locals_for_with.hasPagination:typeof hasPagination!==\"undefined\"?hasPagination:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (Description, SelectedLanguages, SuggestedLanguagesDescription, i18n, inSingleColumnVersion, languageOptions) {pug_html = pug_html + \"\\u003Cdiv class=\\\"multi-language-selector\\\"\\u003E\";\nif (Description) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"container-fluid\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"form-control-static description\\\"\\u003E\" + (pug.escape(null == (pug_interp = Description) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info\\\" data-bind=\\\"visible:suggestedLanguages().length > 0\\\"\\u003E\\u003Cdiv class=\\\"alert-image\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"display-inline-block\\\"\\u003E\" + (pug.escape(null == (pug_interp = SuggestedLanguagesDescription) ? \"\" : pug_interp)) + \"\\u003Cdiv class=\\\"form\\\" data-bind=\\\"foreach: {data: suggestedLanguagesName, as: 'suggestedLanguage'}\\\"\\u003E\\u003Cdiv class=\\\"suggested-language\\\" data-bind=\\\"text: suggestedLanguage\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"target-suggested-language\\\" data-bind=\\\"click: targetSuggestedLanguages\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('TargetSuggestedLanguage')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"language-display\\\" data-bind=\\\"visible:!inEditMode()\\\"\\u003E\\u003Cdiv class=\\\"language-name col-xs-2\\\"\\u003E\" + (pug.escape(null == (pug_interp = SelectedLanguages) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Ca class=\\\"update-to-edit-mode\\\" data-bind=\\\"click: inEditMode.bind($data,'true')\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.getString('Edit')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cform class=\\\"multi-language-selector\\\" data-bind=\\\"visible: inEditMode()\\\"\\u003E\";\n// iterate languageOptions\n;(function(){\n var $$obj = languageOptions;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var language = $$obj[pug_index0];\nvar singleLine = inSingleColumnVersion || language.Value === 'All';\npug_html = pug_html + \"\\u003Clabel\" + (pug.attr(\"class\", pug.classes([\"checkbox-inline\",singleLine ? 'col-xs-12' : 'col-xs-4'], [false,true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\"\"+pug.attr(\"value\", language.Value, true, true)+pug.attr(\"data-bind\", `css: { checked: selectedLanguages().indexOf('${language.Value}') >= 0 }, checked: selectedLanguages, enable: !allLanguageExclusive() || '${language.Value}' === 'All' || !allLanguageSelected()`, true, true)) + \"\\u003E\\u003Cdiv class=\\\"text\\\"\\u003E\" + (pug.escape(null == (pug_interp = language.Text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var language = $$obj[pug_index0];\nvar singleLine = inSingleColumnVersion || language.Value === 'All';\npug_html = pug_html + \"\\u003Clabel\" + (pug.attr(\"class\", pug.classes([\"checkbox-inline\",singleLine ? 'col-xs-12' : 'col-xs-4'], [false,true]), false, true)) + \"\\u003E\\u003Cinput\" + (\" type=\\\"checkbox\\\"\"+pug.attr(\"value\", language.Value, true, true)+pug.attr(\"data-bind\", `css: { checked: selectedLanguages().indexOf('${language.Value}') >= 0 }, checked: selectedLanguages, enable: !allLanguageExclusive() || '${language.Value}' === 'All' || !allLanguageSelected()`, true, true)) + \"\\u003E\\u003Cdiv class=\\\"text\\\"\\u003E\" + (pug.escape(null == (pug_interp = language.Text) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Flabel\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fform\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"Description\" in locals_for_with?locals_for_with.Description:typeof Description!==\"undefined\"?Description:undefined,\"SelectedLanguages\" in locals_for_with?locals_for_with.SelectedLanguages:typeof SelectedLanguages!==\"undefined\"?SelectedLanguages:undefined,\"SuggestedLanguagesDescription\" in locals_for_with?locals_for_with.SuggestedLanguagesDescription:typeof SuggestedLanguagesDescription!==\"undefined\"?SuggestedLanguagesDescription:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"inSingleColumnVersion\" in locals_for_with?locals_for_with.inSingleColumnVersion:typeof inSingleColumnVersion!==\"undefined\"?inSingleColumnVersion:undefined,\"languageOptions\" in locals_for_with?locals_for_with.languageOptions:typeof languageOptions!==\"undefined\"?languageOptions:undefined));;return pug_html;};\nmodule.exports = template;","import { merge } from '@bingads-webui-universal/primitive-utilities';\r\nimport { ComponentSettings } from '@bingads-webui-theme-2018/theme-fluent';\r\n\r\n\r\nconst {\r\n columnChooserStyle,\r\n getColumnChooserOverrideStyle,\r\n} = ComponentSettings;\r\n\r\nexport const getStyle = (components, { palette }) => ({\r\n columnChooser: merge(\r\n {},\r\n columnChooserStyle,\r\n getColumnChooserOverrideStyle(palette),\r\n {\r\n '& .column-chooser .panel': {\r\n boxShadow: 'none',\r\n padding: 0,\r\n marginTop: '24px',\r\n marginLeft: '32px',\r\n marginBottom: '0px',\r\n backgroundColor: 'white',\r\n '& .panel-heading': {\r\n backgroundColor: 'white',\r\n padding: 0,\r\n marginTop: '0',\r\n '& .panel-title': {\r\n fontSize: '20px',\r\n fontWeight: 600,\r\n lineHeight: '27px',\r\n },\r\n },\r\n '& .panel-body': {\r\n lineHeight: '19px',\r\n paddingLeft: 'unset',\r\n marginBottom: '18px',\r\n fontSize: '14px',\r\n '& hr': {\r\n margin: 0,\r\n borderTop: '0px',\r\n },\r\n },\r\n '& .panel-footer': {\r\n borderTop: '1px solid #edebe9',\r\n marginTop: 0,\r\n paddingTop: '16px',\r\n paddingLeft: '0px',\r\n paddingBottom: '16px',\r\n backgroundColor: 'white',\r\n '& .btn': {\r\n marginRight: '8px',\r\n },\r\n },\r\n },\r\n }\r\n ),\r\n});\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport ReportingProps from '@bingads-webui-campaign-react/props-reporting';\r\nimport { BackboneInstanceWrapper } from '@bingads-webui-react/backbone-instance-wrapper';\r\nimport { ColumnChooser as BackboneColumnChooser } from '@bingads-webui/column-chooser';\r\nimport { helpers } from '@bingads-webui/deterministic-view';\r\n\r\n// a fork of `column-chooser.js` in @bingads-webui-campaign/report-column-chooser\r\nexport class ColumnChooser extends Component {\r\n static propTypes = {\r\n categories: PropTypes.array.isRequired, // eslint-disable-line\r\n currentActive: PropTypes.string,\r\n legacyI18n: PropTypes.object.isRequired, // eslint-disable-line\r\n selected: PropTypes.arrayOf(PropTypes.string.isRequired).isRequired,\r\n onApply: PropTypes.func.isRequired,\r\n onCancel: PropTypes.func.isRequired,\r\n simplified: PropTypes.bool.isRequired,\r\n isSplittingSelectedArea: PropTypes.bool.isRequired,\r\n instrumentation: ReportingProps.instrumentation, // eslint-disable-line\r\n };\r\n\r\n static defaultProps = {\r\n currentActive: '',\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n const {\r\n categories,\r\n selected,\r\n legacyI18n,\r\n onApply,\r\n onCancel,\r\n isSplittingSelectedArea,\r\n simplified,\r\n instrumentation,\r\n } = props;\r\n\r\n const cfg = {\r\n categories,\r\n selected,\r\n };\r\n this.state = {\r\n searchStr: '',\r\n };\r\n this.view = new BackboneColumnChooser({\r\n i18n: legacyI18n,\r\n simplified,\r\n isSplittingSelectedArea,\r\n instrumentation,\r\n }).setState(cfg);\r\n\r\n this.view.on(\r\n 'hide',\r\n ({\r\n selectedKeys,\r\n savedName,\r\n currentActive,\r\n searchStr,\r\n } = {}) => {\r\n const isApply = !!selectedKeys;\r\n if (isApply) {\r\n onApply({\r\n selectedKeys,\r\n savedName,\r\n currentActive,\r\n searchStr,\r\n });\r\n } else {\r\n onCancel();\r\n }\r\n }\r\n );\r\n helpers.updateView(this.view, {\r\n isSaveNameEnabled: false,\r\n });\r\n }\r\n\r\n render() {\r\n const { categories, currentActive, selected } = this.props;\r\n const cfg = {\r\n categories,\r\n currentActive,\r\n selected,\r\n external: true,\r\n searchStr: this.state.searchStr,\r\n };\r\n this.view.setState(cfg);\r\n return (\r\n <div className=\"bingadsgrid\">\r\n <BackboneInstanceWrapper\r\n instance={this.view}\r\n />\r\n </div>\r\n );\r\n }\r\n}\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-filename-extension */\r\nimport React, { FC, useContext, useRef, useState } from 'react';\r\nimport { I18n, ColumnChooserCategory } from '@bingads-webui-grid/well-known';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { DefaultButton, Dialog, DialogFooter, DialogType, PrimaryButton } from '@fluentui/react';\r\nimport { Columns } from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport _ from 'underscore';\r\nimport { getStyle } from './style';\r\nimport { ColumnChooser } from './BackboneWrapper';\r\n\r\ninterface ReplaceDialogProps {\r\n hidden: boolean;\r\n i18n: I18n;\r\n columnSetName: string;\r\n onDismiss: () => void;\r\n onReplace: () => void;\r\n}\r\n\r\nconst ReplaceDialog: FC<ReplaceDialogProps> = (props) => {\r\n const {\r\n hidden,\r\n columnSetName,\r\n onReplace,\r\n onDismiss,\r\n i18n,\r\n } = props;\r\n\r\n const dialogContentProps = {\r\n type: DialogType.normal,\r\n closeButtonAriaLabel: i18n.getString(_TL_('Close')),\r\n };\r\n\r\n return (\r\n <Dialog\r\n hidden={hidden}\r\n onDismiss={onDismiss}\r\n dialogContentProps={dialogContentProps}\r\n >\r\n <p>\r\n {i18n.getString(_TL_('There is already a set of columns with this name: {{savedColumnSetName}}'), { savedColumnSetName: columnSetName })}\r\n </p>\r\n <p>\r\n {i18n.getString(_TL_('Do you want to replace it?'))}\r\n </p>\r\n <DialogFooter>\r\n <PrimaryButton onClick={onReplace} text=\"Replace\" />\r\n <DefaultButton onClick={onDismiss} text=\"Cancel\" />\r\n </DialogFooter>\r\n </Dialog>);\r\n};\r\n\r\ninterface OnApplyPayload {\r\n /**\r\n * selected column keys.\r\n */\r\n selectedKeys: string[],\r\n /**\r\n * Name of saved column set.\r\n */\r\n savedName: string,\r\n // only avaliable when simplified\r\n // for now this component is designed only for toolbar column chooser\r\n // These property should always be undefined\r\n // Keep them only for completion\r\n searchStr?: string,\r\n currentActive?: string\r\n}\r\n\r\nexport interface ToolbarColumnChooserProps {\r\n legacyI18n: I18n,\r\n classes?: any,\r\n categories: ColumnChooserCategory[],\r\n // errorMessages, // When and what?\r\n // the selected column that is initialized, the changing state is stored and changed in the backbone Component.\r\n selected: string[],\r\n onApply: (payload: OnApplyPayload) => void;\r\n onCancel: () => void;\r\n /**\r\n * Preference related.\r\n *\r\n * Important to make sure you are using the same unique grid name for one grid.\r\n */\r\n gridName: string;\r\n}\r\n\r\nconst ToolbarColumnChooser: FC<ToolbarColumnChooserProps> = (props) => {\r\n const {\r\n categories, legacyI18n, selected, onApply, onCancel, classes, gridName\r\n } = props;\r\n const instrumentation = useContext(InstrumentationContext);\r\n\r\n const [isDialogOpened, setIsDialogOpened] = useState(false);\r\n\r\n const applyValue = useRef<OnApplyPayload | undefined>(undefined);\r\n\r\n const handleApply: typeof onApply = (params) => {\r\n const query = {\r\n project: 'CampaignUI',\r\n grid: gridName,\r\n };\r\n\r\n const isDuplicatedColumnSetName = _.find(Columns.filter({ where: query }), _.matcher({ name: params.savedName }));\r\n\r\n if (isDuplicatedColumnSetName) {\r\n applyValue.current = params;\r\n setIsDialogOpened(true);\r\n return;\r\n }\r\n onApply(params);\r\n }\r\n\r\n const onReplace: ReplaceDialogProps[\"onReplace\"] = () => {\r\n setIsDialogOpened(false);\r\n onApply(applyValue.current);\r\n }\r\n\r\n const onDismiss: ReplaceDialogProps[\"onDismiss\"] = () => {\r\n setIsDialogOpened(false);\r\n }\r\n\r\n return (\r\n <div className={classes.columnChooser}>\r\n <ColumnChooser\r\n onApply={handleApply}\r\n onCancel={onCancel}\r\n instrumentation={instrumentation}\r\n categories={categories}\r\n legacyI18n={legacyI18n}\r\n selected={selected}\r\n isSplittingSelectedArea={false}\r\n simplified={false}\r\n />\r\n <ReplaceDialog\r\n hidden={!isDialogOpened}\r\n columnSetName={applyValue.current?.savedName}\r\n i18n={legacyI18n}\r\n onDismiss={onDismiss}\r\n onReplace={onReplace}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport const ToolbarColumnChooserWrapper: typeof ToolbarColumnChooser = withDefaultStyles(ToolbarColumnChooser, getStyle);\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-filename-extension */\r\n\r\nimport { I18n } from '@bingads-webui-grid/well-known';\r\nimport { DefaultButton, Dialog, DialogFooter, DialogType, IDialogContentProps, PrimaryButton } from '@fluentui/react';\r\nimport React, { FC } from 'react';\r\n\r\ninterface RemoveDialogProps {\r\n hidden: boolean;\r\n i18n: I18n;\r\n columnSetName: string;\r\n onDismiss: () => void;\r\n onApply: () => void;\r\n}\r\n\r\nexport const RemoveDialog: FC<RemoveDialogProps> = (props) => {\r\n const {\r\n hidden,\r\n columnSetName,\r\n onApply: onReplace,\r\n onDismiss,\r\n i18n,\r\n } = props;\r\n\r\n const dialogContentProps: IDialogContentProps = {\r\n type: DialogType.normal,\r\n closeButtonAriaLabel: i18n.getString(_TL_('Close')),\r\n };\r\n\r\n return (\r\n <Dialog\r\n hidden={hidden}\r\n onDismiss={onDismiss}\r\n dialogContentProps={dialogContentProps}\r\n styles={{\r\n main: {\r\n minHeight: 0,\r\n },\r\n }}\r\n >\r\n <p>\r\n {i18n.getString(_TL_('Are you sure you want to remove saved column set: {{savedColumnSetName}}'), { savedColumnSetName: columnSetName })}\r\n </p>\r\n <DialogFooter>\r\n <PrimaryButton onClick={onReplace} text={i18n.getString(_TL_('Remove'))} />\r\n <DefaultButton onClick={onDismiss} text={i18n.getString(_TL_('Cancel'))} />\r\n </DialogFooter>\r\n </Dialog>);\r\n};\r\n","/* eslint-disable react/prop-types */\r\n/* eslint-disable react/jsx-filename-extension */\r\n/* eslint-disable no-use-before-define */\r\nimport React, { useState, useContext, useCallback, useRef } from 'react';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { Columns, SelectedColumns } from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport { assertIsDefined, assert } from '@bingads-webui-campaign-react/debug-assert';\r\nimport { I18n } from '@bingads-webui-grid/well-known';\r\nimport { ToolbarColumnChooserProps, ToolbarColumnChooserWrapper } from './ColumnChooser';\r\nimport { RemoveDialog } from './RemoveDialog';\r\n\r\nconst dropdownId = 'dropdown-column-chooser';\r\nconst saveListId = 'dropdown-radio-group-saved-columns';\r\nconst defaultColumnSetName = 'Custom';\r\n\r\ntype HookColumnChooserProps = Omit<ToolbarColumnChooserProps, 'onApply' | 'gridName'> & {\r\n onApply: (newColumnKeys: string[]) => void;\r\n}\r\n\r\n/**\r\n * All opeions should never change\r\n */\r\ninterface UseColumnsWithToolbarColumnChooserOptions {\r\n defaultColumns: string[],\r\n gridName: string,\r\n toolbarOptions: {\r\n toolbarEditor: any,\r\n /**\r\n * Used to open column chooser when user click \"Modify columns\"\r\n */\r\n openColumnChooser: () => void,\r\n },\r\n callbacks?: {\r\n beforeSetSelectedColumns?: () => void;\r\n },\r\n customToolbarIcon?: string,\r\n}\r\n\r\n/**\r\n * This hook handle many things\r\n * - Preference\r\n * - initial toolbar for column chooser\r\n * - update toolbar when choose new columns\r\n * - Dialog when click \"remove\" button to remove column set\r\n */\r\nexport function useColumnsWithToolbarColumnChooser(options: UseColumnsWithToolbarColumnChooserOptions) {\r\n const {\r\n defaultColumns, gridName, toolbarOptions, callbacks, customToolbarIcon,\r\n } = options;\r\n const i18n = useContext(I18nContext) as I18n;\r\n\r\n const { toolbarEditor } = toolbarOptions;\r\n\r\n const [selectedColumns, setSelectedColumns] = useState<string[]>(defaultColumns);\r\n\r\n const isInitialized = useRef(false);\r\n const initialColumns = useCallback(async () => {\r\n assert(isInitialized.current === false, 'You should only initial column chooser for once!');\r\n isInitialized.current = true;\r\n\r\n await prepareData(gridName);\r\n\r\n const selectedColumnSetName = getPreferenceSelectedColumnSetName({ gridName });\r\n\r\n // Not support custom columns for now\r\n // Not handle lagacy for now\r\n handleSelectColumnSet({\r\n callbacks,\r\n columnSetName: selectedColumnSetName,\r\n defaultColumns,\r\n gridName,\r\n setSelectedColumns,\r\n });\r\n }, [callbacks, defaultColumns, gridName]);\r\n\r\n initialColumnChooserItemInToolbar({\r\n customToolbarIcon, gridName, i18n, toolbarEditor,\r\n });\r\n\r\n const [isRemoveDialogOpened, setIsRemoveDialogOpened] = useState(false);\r\n const [columnSetNameRemoveCandidate, setColumnSetNameRemoveCandidate] = useState<string>();\r\n\r\n function onRemoveDismiss() {\r\n setIsRemoveDialogOpened(false);\r\n }\r\n\r\n async function onRemoveApply() {\r\n setIsRemoveDialogOpened(false);\r\n\r\n const promises = [];\r\n promises.push(deletePreferenceSelectedColumns({ columnSetName: columnSetNameRemoveCandidate, gridName }));\r\n if (columnSetNameRemoveCandidate === toolbarEditor.get(saveListId).value) {\r\n promises.push(handleSelectColumnSet({\r\n columnSetName: defaultColumnSetName,\r\n callbacks,\r\n defaultColumns,\r\n gridName,\r\n setSelectedColumns,\r\n }));\r\n }\r\n await Promise.all(promises);\r\n handleRefreshMenu({ gridName, i18n, toolbarEditor });\r\n }\r\n\r\n function ColumnChooserTrivia() {\r\n return (<RemoveDialog\r\n hidden={!isRemoveDialogOpened}\r\n columnSetName={columnSetNameRemoveCandidate}\r\n i18n={i18n}\r\n onDismiss={onRemoveDismiss}\r\n onApply={onRemoveApply}\r\n />);\r\n }\r\n\r\n function ColumnChooser(props: HookColumnChooserProps) {\r\n const { onApply } = props;\r\n return (\r\n <ToolbarColumnChooserWrapper\r\n {...props}\r\n gridName={gridName}\r\n onApply={async (n) => {\r\n const { selectedKeys, savedName } = n;\r\n onApply(selectedKeys);\r\n\r\n const columnSetName = savedName || defaultColumnSetName;\r\n setSelectedColumns(selectedKeys);\r\n\r\n await Promise.all([\r\n setPreferenceSelectedColumnSet({ columnSetName, gridName }),\r\n setPreferenceSelectedColumns({ columns: selectedKeys, columnSetName, gridName }),\r\n ]);\r\n\r\n handleRefreshMenu({ gridName, i18n, toolbarEditor });\r\n }}\r\n />\r\n );\r\n }\r\n\r\n return {\r\n /**\r\n * This property must be called once.\r\n *\r\n * Initialization is not done in an useEffect, for user usually wants to send only one call after all initialization is done.\r\n *\r\n * Have to let user control data flow.\r\n */\r\n initialColumns,\r\n columns: selectedColumns,\r\n /**\r\n * Always render this\r\n */\r\n ColumnChooserTrivia,\r\n ColumnChooser,\r\n };\r\n\r\n function initialColumnChooserItemInToolbar({\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n toolbarEditor, customToolbarIcon, i18n, gridName,\r\n }) {\r\n toolbarEditor.update({\r\n iconLeftGlyphName: customToolbarIcon || 'ba-TripleColumnSolid',\r\n id: dropdownId,\r\n button: {\r\n text: i18n.getString(_TL_('Columns')),\r\n iconLeft: ['glyphicon', 'toolbar-icon', 'toolbar-icon-left', 'icon-columnchooser-normal'],\r\n iconRight: ['glyphicon', 'toolbar-icon', 'glyphicon-triangle-bottom'],\r\n },\r\n menu: {\r\n items: [{\r\n text: i18n.getString('Modify columns'),\r\n onClick: toolbarOptions.openColumnChooser,\r\n }, {\r\n type: 'dropdown-divider',\r\n }, {\r\n type: 'dropdown-radio-group',\r\n id: saveListId,\r\n title: i18n.getString(_TL_('Apply saved columns')),\r\n items: [],\r\n removeText: i18n.getString(_TL_('Remove')),\r\n // `onSelect` must be async, somewhere else call `then` on the result\r\n // no need to call `handleRefreshMenu` explicitly, which will be called after `onSelect` is called\r\n onSelect: async columnSetName => handleSelectColumnSet({\r\n columnSetName, callbacks, defaultColumns, gridName, setSelectedColumns,\r\n }),\r\n onRemove: (columnSetName) => {\r\n setIsRemoveDialogOpened(true);\r\n setColumnSetNameRemoveCandidate(columnSetName);\r\n },\r\n refreshMenu: () => { handleRefreshMenu({ toolbarEditor, gridName, i18n }); },\r\n }],\r\n },\r\n });\r\n handleRefreshMenu({ toolbarEditor, gridName, i18n });\r\n }\r\n}\r\n\r\nfunction handleRefreshMenu({ toolbarEditor, gridName, i18n }) {\r\n const items = Columns.filter({ where: buildBaseQuery(gridName) }).reduce((memo, { name }) => {\r\n if (name !== defaultColumnSetName) {\r\n memo.push({\r\n text: name,\r\n value: name,\r\n });\r\n }\r\n return memo;\r\n }, [{\r\n text: i18n.getString(_TL_('Custom')),\r\n value: defaultColumnSetName,\r\n locked: true,\r\n }]);\r\n\r\n const columnSetName = getPreferenceSelectedColumnSetName({ gridName });\r\n\r\n toolbarEditor.update({\r\n id: saveListId,\r\n items,\r\n value: columnSetName,\r\n });\r\n}\r\n\r\nasync function handleSelectColumnSet({\r\n defaultColumns, columnSetName, gridName, callbacks, setSelectedColumns,\r\n}) {\r\n const promises = [];\r\n const selectedColumnsPreference = await getPreferenceSelectedColumns({ columnSetName, gridName });\r\n if (selectedColumnsPreference) {\r\n let finalColumns = [...selectedColumnsPreference.columns];\r\n finalColumns = callbacks?.beforeSetSelectedColumns(finalColumns) || finalColumns;\r\n setSelectedColumns(finalColumns);\r\n } else {\r\n setSelectedColumns(defaultColumns);\r\n promises.push(setPreferenceSelectedColumns({ columns: defaultColumns, columnSetName, gridName }));\r\n }\r\n\r\n if (columnSetName !== getPreferenceSelectedColumnSetName({ gridName })) {\r\n promises.push(setPreferenceSelectedColumnSet({ columnSetName, gridName }));\r\n }\r\n\r\n return Promise.all(promises);\r\n}\r\n\r\n// Not know what this is really doing, just imitate existing behavior in\r\n// \"projection-grid-column-chooser\\src\\plugin.js\"\r\nasync function prepareData(gridName) {\r\n const query = buildBaseQuery(gridName);\r\n return Promise.all([Columns.findAll({ where: query }), SelectedColumns.findAll({ where: query })]);\r\n}\r\n\r\n// Should not use this, but it's fine. I have not find any other proecjtName.\r\nfunction buildBaseQuery(gridName, projectName = 'CampaignUI') {\r\n return {\r\n project: projectName,\r\n grid: gridName,\r\n };\r\n}\r\n\r\nfunction getPreferenceSelectedColumnSet({ gridName }) {\r\n const query = buildBaseQuery(gridName);\r\n return SelectedColumns.filter({ where: query })[0];\r\n}\r\n\r\nfunction getPreferenceSelectedColumnSetName({ gridName }) {\r\n const columnSetPreference = getPreferenceSelectedColumnSet({ gridName });\r\n return columnSetPreference?.name ?? defaultColumnSetName;\r\n}\r\n\r\nfunction setPreferenceSelectedColumnSet({ gridName, columnSetName }) {\r\n const columnSetPreference = getPreferenceSelectedColumnSet({ gridName });\r\n if (columnSetPreference) {\r\n return SelectedColumns.update(columnSetPreference.id, { name: columnSetName });\r\n }\r\n return SelectedColumns.create({ name: columnSetName, ...buildBaseQuery(gridName) });\r\n}\r\n\r\nfunction getPreferenceSelectedColumns({ gridName, columnSetName }) {\r\n return Columns.filter({\r\n where: { name: columnSetName, ...buildBaseQuery(gridName) },\r\n })[0];\r\n}\r\n\r\nasync function setPreferenceSelectedColumns({ gridName, columnSetName, columns }) {\r\n const columnsPreference = getPreferenceSelectedColumns({ gridName, columnSetName });\r\n if (columnsPreference) {\r\n return Columns.update(columnsPreference.id, { columns });\r\n }\r\n return Columns.create({ columns, name: columnSetName, ...buildBaseQuery(gridName) });\r\n}\r\n\r\nasync function deletePreferenceSelectedColumns({ gridName, columnSetName }) {\r\n const columnsPreference = getPreferenceSelectedColumns({ gridName, columnSetName });\r\n assertIsDefined(columnsPreference);\r\n return Columns.destroy(columnsPreference.id);\r\n}\r\n"],"names":["useDidUpdate","callback","deps","isMounted","useRef","useEffect","current","useConstructor","_useState","useState","_useState2","_slicedToArray","getStyles","CampaignName","React","props","campaignName","i18n","useContext","I18nContext","classes","useDefaultStyles","_jsxs","className","classnames","children","_jsx","Label","getString","_TL_","isAdgroupNameValid","name","validateName","maxLength","getAdGroupNameErrorMessage","adFormat","checkShouldShowErrors","value","checkShouldShowError","isAdFormatValid","globalErrorMsg","AdgroupName","adgroupName","setAdgroupName","adgroupNameText","error","getNameErrorMsg","code","shouldShowError","TextField","label","placeholder","onRenderLabel","withVerticalAlignCenterSpan","HelpPopup","topic","item","onChange","e","isDirty","styles","fieldGroup","width","marginTop","ErrorString","Errors","errors","map","x","message","defaultProps","undefined","bidFields","getBaseBidMinMax","_ref","bidStrategyType","serverContext","min","KeywordBidRange","FloorValue","max","CeilingValue","bidStrategyOptionKeys","Commission","appConfig","get","PercentCpc","ManualCpc","validateBaseBid","_ref2","baseBid","validateNumber","commissionRate","notRequired","digitLength","notIncludeMin","percentCpcBid","searchBid","isBaseBidValid","_ref3","_objectSpread","getBaseBidErrorMessage","_ref4","bidStrategy","option","getBaseBidTitleDetails","accountCurrencyCode","concat","marginBottom","fontSize","borderBottom","margin","BidOrPercent","title","field","setBaseBid","childPart","Fragment","Stack","horizontal","verticalAlign","tokens","childrenGap","ariaLabel","_defineProperty","CampaignBidInput","BidInput","ServerContext","getAccountCurrencyCode","BaseBid","minMax","getBidErrorMsg","isPercent","Disclaimer","AdgroupBasic","adgroup","patchAdgroup","scenario","permissions","usePatch","setAdFormat","allPanelItems","activeKeys","setActiveKeys","horizontalAlign","padding","Link","onClick","length","Collapse","Panel","TextTitle","titleKey","details","push","adFormatValue","_","entry","join","detailsString","dynamic","IsRenameHotelToLodgingEnabled","getAdGroupTitleDetail","AdFormat","fieldsToCheck","defaultAdgroupBasicData","adSchedule","useParentLevel","dayTimeRanges","AdDistribution","defaultAdFormat","exclusions","urlOptions","audienceAds","parentLevelSettings","audienceAdsOptionKeys","Increase","currentLevelSettings","location","defaultLocationData","device","_toConsumableArray","deviceDefaultSetting","ABW","advancedBookingDefaultSetting","checkinDay","checkinDayDefaultSetting","userSetDates","userSetDatesDefaultSetting","checkinDate","checkinDateDefaultSetting","lengthOfStay","lengthOfStayDefaultSetting","commonConvertTargetStateToTargetSchema","campaign","target","CriterionType","targetCriterion","newCurrentLevelSettings","targetSchema","i","Id","Status","splice","sort","a","parentParams","AdGroup","AdGroupName","Name","Criterion","BidAdjustment","bidAdjustmentDropdown","bidAdjustmentInput","Type","renderAdGroupTargets","cid","aid","campaignId","adGroupId","context","getCampaignDeviceCriterionsPromise","getCampaignTargetsCriterions","type","adgroupTargetsPromises","getAdGroupDeviceCriterionsPromise","getAdGroupTargetsCriterions","Promise","all","then","campaignTargets","adGroupTargets","deviceCriterion","converODataObjectToDeviceState","setState","prev","initTargets","reset","getAdGroupABWCriterionsPromise","ABWCriterion","converODataObjectToABWState","getAdGroupLengthOfStayCriterionsPromise","_ref6","lengthOfStayCriterion","converODataObjectToLengthOfStayState","getAdGroupCheckinDayCriterionsPromise","_ref8","checkinDayCriterion","converODataObjectToCheckinDayState","getAdGroupCheckinDateCriterionsPromise","_ref10","checkinDateCriterion","converODataObjectToCheckinDateState","getAdGroupUserSetDatesCriterionsPromise","_ref12","userSetDatesCriterion","converODataObjectToUserSetDatesState","_ref14","getUnSupportedBidAdjustmentFeatures","CampaignBidStrategyType","isUnSupported","feature","unSupportedFeatures","includes","convertLocationStateToLocationSchema","currentLocations","initLocations","noLocations","finalLocations","intent","intentId","LocationIntentCriterion","IntentOption","convertIntentOption","physicalIntentOptions","PeopleInOrSearchingForOrViewingPages","targets","criterion","setParent","compareAndProcessLocations","getHotelAdGroupType","HotelAdGroupType","HPA","PPA","convertAdgroupStateToAdgroupJSONSchemaData","initDevice","initABW","initCheckinDay","initLengthOfStay","initCheckinDate","initUserSetDates","adScheduleUseSearcherTimeZone","AdScheduleUseSearcherTimeZone","getAdScheduleUseSearcherTimeZone","deviceSettings","DeviceMap","Tablet","Computer","Smartphone","currentDeviceSchema","DeviceCriterion","DeviceName","currentDeviceSchemaResult","convertDeviceStateToDeviceSchema","ABWSettings","currentABWSchema","AdvanceBookingWindowCriterion","MinDays","minimumDays","MaxDays","maximumDays","currentABWSchemaResult","convertABWStateToABWSchema","checkinDaySettings","currentCheckinDaySchema","CheckInDayCriterion","CheckInDay","day","currentCheckinDaySchemaResult","convertCheckInDayStateToCheckInDaySchema","lengthOfStaySettings","currentLengthOfStaySchema","LengthofStayCriterion","MinNights","minimumNumber","MaxNights","maximumNumber","currentLengthofStaySchemaResult","convertLengthofStayStateToLengthofStaySchema","checkinDateSettings","currentCheckinDateSchema","CheckInDateCriterion","StartDate","moment","startDate","format","EndDate","endDate","currentCheckinDateSchemaResult","convertCheckInDateStateToCheckInDateSchema","userSetDatesSettings","UserSetDatesMap","currentUserSetDatesSchema","DateSelectionTypeCriterion","HotelDateSelectionType","dates","currentUserSetDatesSchemaResult","convertUserSetDatesStateToUserSetDatesSchema","locationTargets","adschedules","adScheduleData","getAdSchedule","getAudienceAds","BiddingScheme","jsonSchemaData","Campaign","SearchBid","decimal","fromLocalToFloat","AdGroupPercentCpcBid","AdGroupCommissionRate","getAdGroupBid","AdGroupType","dateSettings","netWorkOptions","TrackingUrlTemplate","FinalUrlSuffix","UrlCustomParameters","AdGroupCriterions","collectCriterions","generateDataToInvalidState","validationData","data","forEach","isInvalid","advancedSettingsSection","display","marginRight","advancedSettingsContainer","AdvancedSettings","errMsg","patchErrMsg","getAdScheduleView","setAdScheduleView","setAdDistributionView","getAdDistributionView","setUrlOptionsView","setSiteExclusionView","getUrlOptionsValues","getExclusionsValues","advancedSettinsApiErrors","isDataFetched","currentCampaign","useCurrentCampaign","currentAdgroup","useCurrentAdGroup","adgroupId","filter","hasApiErrorKeys","Object","keys","needToExpandKeys","key","setAdSchedule","setAudienceAds","onChangeToggle","fn","adScheduleTitle","topicKey","getAdScheduleDetails","isChecked","handleChangeToggle","_e","adScheduleView","koModel","useCampaignSettingsChecked","adScheduleOption","useMemo","model","timeZone","TimeZone","adGroupStatus","level","campaignDayTimeRanges","showDateSettings","hideAdScheduleBidAdjustments","campaignAdScheduleUseSearcherTimeZone","getAdScheduleOption","audienceAdsTitle","ToggleTitle","getAudienceAdsDetails","rawData","adDistributionOption","Medium","Languages","campaignType","getAdDistributionOption","checkItems","AdSchedule","options","getCreatedView","managed","isAudienceAdsValid","AudienceAds","view","getTranslatedOption","adDistribution","getUrlOptionsDetails","setActiveCallback","UrlOptions","getExclusionsDetails","baseExclusion","BaseExclusion","patchData","showSiteExclusion","AdgroupTargets","fontWeight","subtitle","mt33","targetsApiErrors","patchTargetsApiErrMsg","setLocation","setDevice","setABW","setCheckinDay","setUserSetDates","setCheckinDate","setLengthOfStay","deviceDefaultCurrentLevelSettings","ABWDefaultCurrentLevelSettings","checkinDayDefaultCurrentLevelSettings","lengthOfStayDefaultCurrentLevelSettings","checkinDateDefaultCurrentLevelSettings","userSetDatesDefaultCurrentLevelSettings","resetTarget","setFn","targetData","targetDefaultCurrentLevelSettings","targetName","tempCurrentLevelSettings","tempId","tempObj","locationTitle","getLocationTargetTitleDetails","isTargetEverywhere","campaignLocations","campaignLocation","peopleInLocation","peopleSearchingForLocation","bidMode","deviceTitle","getGridTargetTitleDetails","abwTitle","checkinDayTitle","lengthOfStayTitle","checkinDateTitle","formatDate","raw","CurrentUser","CultureDateTimeFormat","ShortDatePattern","userSetDatesTitle","description","getLocationTargetErrorMessage","LocationTargetSetting","setData","isAdGroupLevel","scope","DeviceTargetSetting","apiErrors","DefaultButton","text","disabled","AdvancedBookingWindowTargetSetting","CheckinDayTargetSetting","LengthOfStayTargetSetting","CheckinDateTargetSetting","UserSetDatesTargetSetting","AdGroupTitle","Title","scenarios","HotelAdGroupBase","_React$Component","_this","_classCallCheck","_callSuper","handleCreateOrUpdateSuccess","response","resolve","_this$props","siteMap","isCreation","getCreatedAdGroupId","send","activity","createDefaultHotelGroupAfterAdGroupCreation","durationActivity","stopSignal","save","getRoutePathById","finally","updateResponseData","entity","isExclusionsUpdated","saveExtensions","remove","defaultHotelGroupCreated","_this$props$scope$val","values","bid","state","createDefaultHotelGroup","catch","res","sendErrors","i18nErrors","prevState","adgroupApiErrors","scrollAndShowWarning","handleCreateOrUpdateError","allApiErrors","handleApiErrors","subViews","mergeAdGroupStateWithErrors","entityApiErrors","General","createOrUpdateAdgroup","createOrUpdateCall","adgroupResource","bulkCreate","bind","bulkUpdate","validate","campaignBidStrategyType","notifyTargetsShowError","isDeviceTargetValid","isABWTargetValid","isCheckinDayTargetValid","isLengthOfStayTargetValid","isCheckinDateTargetValid","isUserSetDatesTargetValid","isLocationValid","validateAdGroupState","assign","urlOptionsView","isValid","every","getAdScheduleValues","getValues","deletedDayTimeCriterions","urlOptionsData","toObject","ExcludedSites","siteExclusionView","getDateSettings","adDistributionView","initializeTheInstrumentation","instrumentation","hotelAdGroupCreation","create","duration","perfMarker","createChild","hotelAdGroupSettings","start","willInit","syncAdGroupLocationCriterionsPromise","payload","_this$props$scope$val2","syncAdGroupLocationCriterions","resourceName","backFillItems","handleErrors","resources","ServerDeviceCriterion","ServerABWCriterion","CheckinDayCriterion","ServerCheckinDayCriterion","LengthOfStayCriterion","ServerLengthOfStayCriterion","CheckinDateCriterion","ServerCheckinDateCriterion","UserSetDatesCriterion","ServerUserSetDatesCriterion","currentCriterionMap","updateDeviceByResponse","currentDeviceCriterion","updateABWByResponse","currentABWCriterion","updateCheckinDayByResponse","currentCheckinDayCriterion","updateLengthOfStayByResponse","currentLengthOfStayCriterion","updateCheckinDateByResponse","currentCheckinDateCriterion","updateUserSetDatesByResponse","currentUserSetDatesCriterion","updateAllTargets","removeWarningInterval","showWarning","isLoading","getCurrentCampaign","scrollToErrors","cancel","_this$props2","patchAdvancedSettinsApiErrors","hasErrors","subscribe","subscribeSiteExclusion","subscribeUrlOptions","adgroupEDM","edmCampaign","types","ResourceIdentifier","_inherits","_createClass","this","_this2","getCampaignDayTimeCriterionsPromise","rawCampaignDayTimeRanges","modelToViewModelDayTimeTargets","_this3","getCampaignLocationCriterionsPromise","rawCampaignLocations","parseLocationTargets","locations","_this4","getAdGroupDayTimeCriterionsPromise","_ref5","rawAdGroupDayTimeRanges","adGroupDayTimeRanges","_this5","invalidateCache","rawLocations","_this6","getAdGroupLocationCriterionsPromise","_ref7","rawAdGroupLocations","_parseLocationTargets4","adGroupLocations","intentOption","targetOption","locationTargetsOptionKeys","specific","everywhere","_this7","getCampaignDataPromise","getCampaignData","getAdGroupDataPromise","getAdGroupData","_ref9","CampaignData","AdGroupData","_AdGroupData$audience","_AdGroupData$audience2","_AdGroupData$audience3","currentAdGroupSettings","_CampaignData$audienc","currentCampaignSettings","_this8","_ref11","_CampaignData$audienc2","_this9","willFetchData","_this$props$scope$val3","fetchCampaignData","fetchCampaignLocationCriterions","fetchCampaignDayTimeCriterions","willRender","handlePopState","window","addEventListener","_this$props$scope$val4","fetchCampaignAdGroupData","fetchLocationCriterions","fetchDayTimeCriterions","isDone","startSignal","done","stop","undelegateEvents","off","removeEventListener","_this10","_this$props$scope$val5","AdGroupId","CampaignId","that","exclusionRepository","clearApiErrors","NegativeSitesResult","NegativeIPsResult","siteErrors","ipErrors","showErrors","clearSubViewApiErrors","baseExclusions","_this11","_this$props3","campaignBidStrategy","hotelAdGroupBase","onFocus","UiBlocker","blocking","loadingText","PrimaryButton","sharedStyles","core","minWidth","backgroundColor","palette","neutralLighterAlt","helpbuttonStyle","convertToLocalStyle","glyphIconStyle","creationCommonStyle","neutralLight","color","marginLeft","alignItems","themePrimary","outline","top","position","getBlockerStyle","paddingLeft","paddingTop","bottom","background","overflow","spinnerKeyframe","theme","mergeStyles","HotelAdGroupCreation","compose","withI18nConsumer","WrappedComponent","withDefaultStyles","HotelAdGroupSettings","fields","AdGroupBid","AdGroupPercentBid","bidStrategyTypeValueMap","bidStrategyOptions","isPayPerStayEnabled","percentageOrBidConst","getAdGroupBidMinMax","selectedKey","validateAdGroupBid","getBidStrategyMinMax","ProductGroupBidRange","validateBidStrategy","isBidStrategyValid","valid","getPercentageOrBidErrorMsg","_ref6$min","_ref6$max","numberErrorCode","RequiredField","getNumberErrorMsg","Bid","content","setBidStrategy","root","onBlur","Percentage","DefaultBidValue","AdditionalInfo","defaultBidStrategy","CampaignBidStrategy","PayPerStay","mySetBidStrategy","useCallback","partialUpdate","howToManageYourBidsText","errorCode","SpanWithComponent","SpanText","Component","Dropdown","defaultSelectedKey","dropdown","getDefaultBudget","USDefaultBudget","Permissions","IsDefaultBudgetExperimentationEnabled","budgetRange","BudgetRange","fromFloatToString","DailyRange","validateBudget","isValidNumber","InValidNumber","OutOfRange","number","isBudgetValid","individualBudgetOptionKeys","IndividualBudgetEditor","budget","setBudget","showBudgetMinRecommend","curBudgetAmount","isExpanded","setIsExpanded","currencyCode","getBudgetErrorMsg","amount","individualBudgetOptions","currencySymbol","getCurrencySymbol","PageContext","AccountCurrencyCode","trace","defaultBudget","ChoiceGroup","individualOption","toFixed","Button","budgetOptionKeys","budgetOptions","onRenderField","params","render","checked","CampaignBudget","mySetBudget","campaingBudgetText","labelId","id","ariaLabelledBy","defaultCampaignBasicData","defaultName","basicCampaignSection","CampaignBasic","patchCampaign","setName","BCCBudgetImprovementEnabled","classNames","detailString","getCampaignTitleDetail","isCampaignNameValid","getBudgetTitleDetails","percentageOrBid","detail","LocalizationKeys","getBidStrategyTitleDetails","setIPExclusionView","creation","setUrlOptionsActiveCallback","setExclusionsActiveCallback","showIPExclusion","CampaignTargets","bundleCountries","bundleLocationCriterions","CampaignTitle","UserSetDateMap","bidStrategyFields","convertCampaignStateToCampaignJSONSchemaData","getName","bidOrPercentValue","bidStrategyField","getBiddingScheme","Budget","Amount","getBudget","convertLocationStateToLocationSchemaCampaign","AdGroups","CampaignType","timeZoneMapper","getAccountTimeZone","CampaignCriterions","validateCampaignState","settings","HotelCampaignBase","getCreatedCampaignId","createDefaultHotelGroupAfterCampaignAdGroupCreation","getCreatedDefaultAdGroupId","adGroups","adGroup","handleCreatedDefaultAdGroup","defaultAdGroupId","getODataErrors","campaignApiErrors","mergeCampaignStateWithErrors","createOrUpdateCampaign","campaignResource","currentCampaignId","getCurrentCampaignId","each","Exclusions","ExcludedIPs","IPExclusionView","getAdGroup","PricingModel","defaultAdGroupCreated","hotelCampaignCreation","hotelCampaignSettings","syncLocationCriterionsPromise","syncLocationCriterions","subscribeIPExclusion","campaignEDM","lcid","LocaleID","market","Market","getBundleCountriesAndBundleLocationCriterions","defalutDeviceSettings","getBundleCountriesPromise","getLocationCriterionsPromise","_ref2$","_parseLocationTargets2","shouldSelectBundleOption","bundleOrDefaultMarket","patchForLocationTargetGrid","campaignData","getBundleCountries","renderCampaignTargets","siteExclusionsUpdated","IPExclusionsUpdated","AdvanceSettings","exclusionApiErrors","hotelCampaignBase","setBaseExclusionView","adScheduleModel","whiteSpace","minHeight","borderColor","datePickerStyle","HotelCampaignCreation","withCreationHeader","HotelCampaignSettings","getBulkEditParams","getQueryString","str1","str2","selectionCount","selectedIds","idAttribute","customStrFilter","queryArray","strFilter","isPreview","FilterEntity","query","entitySchema","odata","odataV4","$","$filter","dateRange","startdate","RangeStartDate","toISOString","enddate","end","RangeEndDate","getDateRange","compact","getDescription","idsCount","JSON","stringify","bulkEditParams","_ref3$idAttribute","batchActions","_ref3$campaignId","_ref3$adgroupId","BatchAction","Description","Entity","Selection","QueryString","getGridOptionUtils","edm","getEntitySetInSubAccount","subAccountId","currentAccount","SubAccounts","$withKey","getEntitySetByScope","hotelDrillDown","hotelGroupId","HotelGroups","gridOptionUtils","getUrlByName","url","getUrlWithSubAccountState","getEntitySetByName","arguments","Hotels","getHotelCenterService","jsdata","dataStore","AccountService","_Backbone$Model","currentSubAccountId","subAccountModel","fetchSubAccountById","unset","SubAccount","find","entitySet","cacheResponse","bypassCache","subAccount","set","Backbone","getAccountService","DataStore","pollStatus","taskId","successCb","failedCb","BulkEditSession","processResponse","completeCB","failedCB","progressCB","setTimeout","bulkEdit","_ref2$completeCB","_ref2$failedCB","_ref2$progressCB","preview","process","urlParameters","$expand","bulkEditService","getBulkEditService","isLightDismissibleInitialized","click","$lightDismissibles","clickedEl","index","closest","originalEvent","noDismiss","hasClass","addClass","removeClass","getBidMultiplierView","pageContext","multiplierSchema","BidMultiplierView","_DeterministicView","strategy","factorModel","initFactorInput","factor","template","getChild","getState","getFactor","toJSON","percentage","Factor","isUseParent","readonly","formatDecimal","minimumFractionDigits","maximumFractionDigits","trigger","editStrategy","num","Number","parseDecimal","toString","inputView","schema","properties","minimum","maximum","backboneSchema","validation","decimalLength","factorInput","InputControl","addonText","DecimalFormatter","percentSymbol","setChild","DeterministicView","getBidMultipliersView","componentState","getMultipliersState","getHotelCenterUtils","bidMultiplierUtils","_getCheckInDayMultipl","serializeBidMultipliers","weekDayMap","CheckInDayMultipliersView","toLowerCase","checkInDayMultipliersState","bidMultipliers","getCheckInDayMultipliersView","_getDeviceTypeMultipl","deviceTypeMap","Mobile","Desktop","DeviceTypeMultipliersView","listOfTypes","i18nKey","deviceMultipliersState","getDeviceTypeMultipliersView","_getLengthOfStayMulti","formatStaySegments","LengthOfStayMultipliersView","minNumberOfNights","maxNumberOfNights","staySegments","nightsModel","initNightsInput","addNewSegment","removeSegment","MinimumNumberOfNights","override","validators","result","NightsModel","nightsInput","updateUserInputs","addSegmentByMinNumberOfNights","removeSegmentByMinNumberOfNights","currentKey","currentIndex","it","newSegment","segment","isLengthOfStay","currentSegment","bidMultiplier","lengthOfStayMultipliersState","stayFactors","hasDuplicateMultipliers","getLengthOfStayMultipliersView","_getUserCountryMultip","UserCountryMultipliersView","countries","selectedCountries","chooseCountry","Key","restCountries","getRestCountries","removeCountry","country","removeNodes","node","Value","userCountryMultipliersState","getUserCountryMultipliersView","deviceTypes","checkInDays","BidMultipliersView","_ref2$showUseParent","showUseParent","_ref2$isPayPerStay","isPayPerStay","_ref2$isPayPerStayPha","isPayPerStayPhase2Pilot","deviceTypeMultipliersView","dateTypeMultipliersView","Selected","Default","isHotelPropertyPromotionAdEnabled","IsHotelPropertyPromotionAdEnabled","siteTypeMultipliersView","LocalUniversal","MapResults","PropertyPromotionAd","userCountryMultipliersView","lengthOfStayMultipliersView","advancedBookingMultipliersView","checkInDayMultipliersView","selectedMultiplierType","dataset","deviceType","dateType","siteType","getSelectedCountriesMulti","userCountry","checkInDay","advancedBooking","attributes","pluck","flatten","getBidMultipliers","memo","getProjectionGridDateFilter","i18nDefault","dateFilterPreferences","dateUtils","setDateFilter","account2local","local2account","includeRanges","formatAccountDate","date","formatUTCDateTime","strDate","ensureMinDate","minDate","Date","parseDate","dateString","formatDateRange","odataTimeZone","upToNowWhenToday","UTC","RANGES","CUSTOM_TIME","now","today","withoutTime","valueOf","returnDate","setHours","generateEndDateTime","startDateTime","endDateTime","Account","addDateRangeToQueryParams","queryParams","_ref2$odataTimeZone","_ref2$upToNowWhenToda","primaryRange","compared","comparisonStartDate","comparisonEndDate","setDateRange","dateFilter","comparedRange","Rangelcid","Locale","selectedDate","sharedInGrids","dateFilterPlugin","definePlugin","gridView","dataSource","plugins","normalizedConfig","config","gridName","__proto__","isComparisonEnabled","enabledRangesPredicate","range","dateFormat","timeFormat","maxDate","defaultTimeRange","storedDateRangeKey","storedDateRange","normalizeConfig","dateFilterView","DateFilter","projectName","originalQuery","getPromise","initDateRange","grain","getDefaultRange","container","selection","append","$el","renderDateFilterView","call","on","refresh","events","Option","_ref$id","_ref$value","_ref$isSelected","isSelected","_ref$isDisabled","isDisabled","updateView","helpers","ensureChildView","Selector","_ref$options","_ref$selectOption","selectOption","_ref$nodataPlaceholde","nodataPlaceholder","initialOption","optionSelected","Pagination","_ref$currentPage","currentPage","_ref$pageSize","pageSize","_ref$totalCount","totalCount","goToPreviousPage","goToNextPage","_this$model$attribute","_this$getState2","Search","_ref$placeholder","_ref$searchResultsId","searchResultsId","search","keypress","keyPress","keyCode","preventDefault","DropdownSearchSelector","_ref$customOptions","customOptions","_ref$forceEnableSearc","forceEnableSearch","_ref$invokeSearchOnCh","invokeSearchOnChange","dropDown","toggle","viewLoadAsync","fetchData","pageNumber","results","initialPaginationView","initialSearchView","slice","detachChild","val","searchString","initialCustomOptionView","setOptionView","selectedId","parent","toggleClass","onSearchInvoked","searchInvoked","searchChanged","pageChanged","customOption","onOptionSelected","setting","errorCodes","initSetup","getErrorMappers","odataErrorMapper","OdataErrorMapper","getProcessors","contextProcessor","ContextProcessor","debugProcessor","DebugProcessor","isDebugMode","BINGADS_DEBUG","getListeners","ariaConfig","getAriaConfig","currentEnv","env","document","domain","indexOf","basicFormatter","BasicFormatter","applicationSystem","applicationSubSystem","apiFormatter","ApiFormatter","consoleFormatter","ConsoleFormatter","logLevelFilter","LogLevelFilter","apiFilter","ApiFilter","consoleFilter","ConsoleFilter","ariaListener","AriaListener","tenantToken","flushInterval","batchSize","logTableNames","campaignLogTableConfig","defaultLogCategory","formatters","filters","init","registerForTeardown","consoleListener","ConsoleListener","listeners","isTestEnvironment","seleniumLogsSink","InMemorySink","maxSize","inMemoryListener","InMemoryListener","sink","initPerfTiming","performanceLogsFormatter","PerformanceLogsFormatter","performanceLogsFilter","PerformanceLogsFilter","resourcetiming","perfTimingProcessor","PerfTimingProcessor","landingPageUrl","instr","Instrumentation","processors","perfTimingLogger","PerformanceTimingLogger","getEdmBhc","schemas","CustomerIdType","namespace","EDM","jsdataExtension","store","registerAdapter","ODataAdapter","ajaxOptions","path","host","oDataToken","loginType","default","getJsDataExtension","resIdsPlugin","odataPlugin","jsdataPlugin","ComplexType","Customers","typeName","defineConstProperty","customerIdType","currentCustomer","collection","dependencies","defineComputedProperty","useAdvertiserCustomerId","jsdataBhc","getHotelCenterShared","preferencesService","segmentationPreferences","fixedBidSchema","percentageBidSchema","payPerStayBidSchema","hotelGroupSchema","hotelSchema","subAccountSchema","lightDismissible","toolbarTemplate","AccountInformationView","getAccountInformationView","BidCapView","selections","empty","cap","FixedBidModel","fixedBidModel","maxBidInputControl","listenTo","capSelection","focus","parse","maximumBid","inputState","noCap","getBidCapView","BidStrategyView","fixed","payperstay","currentTemplate","customTemplate","isAmountRequired","isReadonly","disabledAttr","isPPSReadOnly","disabledPPSAttr","initFixedBidInput","initPercentageBidInput","initPayPerStayBidInput","bidAmount","_superPropGet","showError","formatDecimalToFixed","percentageBidModel","payPerStayBidModel","bidInput","fixedBidInput","PercentageBidModel","percentageBidInput","PayPerStayBidModel","payPerStayBidInput","getBidStrategyView","EditPanelView","hasCleanButton","isSaveButtonDisabled","onCancel","onSave","onClean","getEditPanelView","getSegPreference","getSegType","fetchPreferenceConfig","gridConfig","sortInfoKey","p$stateManager","initialize","_ref2$Data$rowsPerPag","findByName","Data","rowsPerPage","_ref3$Data$sortInfo","sortInfo","orderbyInfo","orderby","sortableHeader","spread","pageable","pagination","segType","segmentationType","isTimeRangeValid","SegmentationTypes","getFetchPreferenceConfig","HotelGroupInformationView","onBack","onRemove","getHotelGroupInformationView","required","HotelGroupModel","_SchemaModel","json","attachNestedModels","method","HotelGroup","update","attrs","destroy","Error","fieldNames","has","changedAttributes","getHotelGroupModel","SchemaModel","HotelModel","Hotel","getHotelModel","_initSetup","instrumentConfig","addScenario","stubOptions","objectsToStub","errorMappers","eventHandler","AjaxEventHandler","shouldAddHeaders","ajaxContext","isInternalUrl","ajaxStub","AjaxStub","errorStub","ErrorStub","stub","getInstrumentation","countryCodes","userCountryService","getCountriesAndSetState","b","getUserCountryService","SubAccountModel","accountService","fetchSubAccountAsync","DailyBudget","MaximumBid","BidMultipliers","HotelAssociationCount","updatedId","getSubAccountModel","getBidMultiplierUtils","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","getSegmentText","minNight","maxNight","replace","addOnText","sortedStaySegments","formatDaysAndNightsMultipliers","multiplier","Math","abs","deserializeBidMultipliers","multiplierFactor","parseFloat","DeviceTypes","DateType","Sites","Countries","DaysOfWeek","dayOfWeek","MinimumNumberOfDays","bidMultiplierTextFormat","getDeviceTypeMultipliersText","deviceTypeMultipliers","deviceMultipliersText","deviceTypeMultiplier","getSiteTypeMultipliersText","siteTypeMultipliers","siteTypeMap","siteMultipliersText","siteTypeMultiplier","getDateTypeMultipliersText","dateTypeMultipliers","dateTypeMap","dateTypeMultipliersText","dateTypeMultiplier","getUserCountriesMultipliersText","userCountryMultipliers","userCountryMultipliersText","userCountryMultiplier","findWhere","getCheckInDayMultipliersText","checkInDayMultipliers","checkInDayMultipliersText","checkInDayMultiplier","getLengthOfStayMultipliersText","lengthOfStayMultipliers","lengthOfStayMultipliersText","lengthOfStayMultiplier","input","resetFactor","multipliers","multipliersState","addDeviceTypeBidMultipliers","addDateTypeBidMultipliers","addSiteTypeBidMultipliers","addUserCountryBidMultipliers","addCheckInDayBidMultipliers","addLengthOfStayBidMultipliers","addAdvancedBookingBidMultipliers","getMultipliersDetailText","defaultText","convert2text","getMultipliersText","hasPreLabel","bidUtils","getText","jsonValue","getBidUtils","accountTimeZoneOffsetMinutes","UtcOffsetHours","totalOffset","getTimezoneOffset","getTime","getDateUtils","inlineDownloadUtils","processReportRuleForHotelCenterBIDimensionRow","ReportRule","SaveReport","processReportRuleForHotelCenterBookingRow","Text","variant","block","lineHeight","advancedBookConst","validateAdvancedBookingDays","_ref$min","_ref$max","_ref$isInteger","isInteger","extra","lengthOfStayConst","validateLengthOfStayDays","validateCheckinDate","getDaysBetween","dateString1","dateString2","shouldNotHideInclude","bidAdjustmentConst","onlyExtra","transExtra","last","pre","validateBidAdjustment","_ref3$min","_ref3$max","getValidateBidAdjustmentErrorMsg","_ref4$min","_ref4$max","defaultSupportedLocationsForGEODeal","locationErrors","locationTypeNameMap","Country","SubGeography","MetroArea","City","PostalCode","County","Neighborhood","getLocationErrorMsg","_ref6$dealInfo","dealInfo","_ref5$dealInfo","dealSupportedLocationType","supportedLocationType","constructErrorMessageForDeal","validateLocations","_location$currentLeve","areaLocations","includedLocations","excludedLocations","LocationCriterion","SelectionStatus","includedLoc","EnclosingLocationIds","parentLocationId","excludedLoc","LocationId","checkConflict","targetConstants","minimumBid","Location","isForDeal","dealCountryCode","invalidCountryLocations","invalidTypeLocations","locationType","targetCountryCode","getDatePickerStrings","months","shortMonths","days","shortDays","goToToday","prevMonthAriaLabel","nextMonthAriaLabel","prevYearAriaLabel","nextYearAriaLabel","closeButtonAriaLabel","isRequiredErrorMessage","invalidInputErrorMessage","areEqual","prevProps","nextProps","patchTarget","isValueOverlapMap","dt1","dt2","start1","end1","start2","end2","flag1","flag2","flag3","isStart1EarlyThanEnd1","isStart2EarlyThanEnd2","isEnd1EarlyThanStart2","isRange1NotGreaterThan999","isRange2NotGreaterThan999","isValueOverlapMapSortByParams","isValueOverlap","sortData","len","curDt","isValueOverlapMapFn","j","otherDt","overlapErrorMsg","minimum_greater_than_maximum","minimum_greater_than_maximum_nights","adjust_settings","startdate_greater_than_enddate","out_of_checkin_date_range","adjustmentDropdown","adjustmentInput","handleChangeInput","handleBatchChangeInput","keySuffix","column","setIsDirty","disableDecrease","dropdownOption","bidAdjustmentError","setBidAdjustmentError","_useState3","_useState4","adjustmentDropdownValue","setAdjustmentDropdownValue","_useState5","_useState6","currentKeySuffix","setCurrentKeySuffix","validateValue","fieldName","dropdownOptionText","dropdownItem","height","dropdownItemSelected","defaultValue","err","tempValue","isNaN","tempAdjustmentDropdownValue","handleBlur","CommonTextField","fieldContent","getFieldErrorMsg","fieldErrorMsg","setFieldErrorMsg","generateColumn","parmas","handleRemove","_parmas$props","isDirtyCopy","entries","clearValidation","DatePicker","strings","isMonthPickerVisible","showGoToToday","formatDateValue","onSelectDate","spanClassName","style","getAllColumns","handleRemoveAll","minBid","maxBid","extraBid","bidAdjustmentColumn","RemoveBtnColumn","allColums","columns","showAddBtn","headerClassName","noBidAdjustment","TargetDetailList","enablePagination","setPageSize","setPageNumber","hideWhenEmpty","validateParams","itemsSetting","items","cropWithPage","DetailsList","selectionMode","SelectionMode","none","onRenderItemColumn","onRenderRow","row","customStyles","DetailsRow","onPageChange","total","onPageSizeChange","size","criterionSettingContainer","paddingBottom","borderTop","animationFillMode","white","neutralTertiary","borderRight","border","borderRadius","green","semanticColors","errorIcon","GridTargetsBaseApp","basicConfig","handleAddLine","_useState7","_useState8","setErrMsg","_useState9","_useState10","setKeySuffix","_usePageControl","usePageControl","shift","debounceFn","_len","rest","Array","_key","_rest$","realIndex","_len2","_key2","_rest$2","setIsDirtyByNotify","dirty","_item","setIsDirtyByNotifyFn","targetId","getElementById","parentNode","querySelectorAll","validateFn","localizeErrorMsg","extraClass","maxLimit","FontIcon","iconName","GridTargetsBase","maxWidth","showSettingToggle","getAbwBasicConfig","_ref2$min","_ref2$max","getValidateAdvancedBookingDaysErrorMsg","getCheckinDayBasicConfig","getUserSetDatesBasicConfig","getCheckinDateBasicConfig","getValidateCheckinDateErrorMsg","targetsApiErrMsg","getLengthOfStayBasicConfig","getValidateLengthOfStayDaysErrorMsg","targeted","isCommission","showTargetedColumn","getDeviceBasicConfig","IncludedLocationGrid","getIncludedLocationBasicConfig","ExcludedLocationGrid","getExcludedLocationBasicConfig","PeopleIn","PeopleSearchingForOrViewingPages","getLocationIntent","RadiusCriterion","NameTypeCombo","RadisUnitMap","mi","km","Miles","Kilometers","getLocationHashWithStatus","CountryCode","Latitude","Longitude","Radius","RadiusUnit","getLocationHash","createIdAttributes","Ids","fromLocationCriterionToBingMapTarget","isExcluded","ParentLocations","LocationTargetEnclosingLocationIds","locationTarget","LocationTarget","CreateExcludedLocationTarget","ExpandedName","GeoPoint","LocationTargetType","LocationType","CreateIncludedLocationTarget","LocationTargetsIntent","isLocationTargetingImprovementEnabled","peopleInLocationString","peopleSearchingForLocationString","peopleInOrInterestedInLocationString","intentOptionsKeysMap","_Fragment","intentOptionsKeys","checkedRadio","onIntentOptionChanged","role","RadioGroup","renderItem","getItemId","Checkbox","ev","getIncludedLocations","getExcludedLocations","fillAdditionalInfoToCriterion","isPositive","fillAdditionalInfoToBundleLocationCriterions","hash","currentLocation","OriginalBidAdjustment","fillAdditionalInfoToGrid","newLocations","isIncluded","targetingType","isRadius","isRadiusLocationTarget","locationTargetConverter","buildLocationCriterionFromSearchResult","mode","radius","radiusSize","unit","radiusUnit","status","fromBingMapTargetToLocationCriterion","LocationTargetsEditor","toggleBidModeAndSetData","languageBundleString","allowBidAdjustment","allowNegativeLocationTargeting","showSearchTypeOptions","showBulkLocations","isBrandAwarenessCampaignScenario","defaultSelectedSearchType","showIntent","isDomesticSimplifiedChineseEnabled","backUpData","myData","mySetData","newData","_newData$excludedLoca","_newData$includedLoca","_data$currentLocation","targetOptionsKeysMap","keysMap","targetOptionsKeys","showSpecificLocationTargetEditor","SpecificLocationTargetsEditor","allowPositiveLocationTargeting","isBundle","SEARCH_TYPE","Boundary","LocationTargetsGridContainer","_data$currentLevelSet","_data$parentLevelSett","newIncluded","newExcluded","__","textDecoration","globalI18n","globalLegacyI18n","getLanguageBundleString","bundleCountryNames","countryName","_ret","_loop","v","language","languageBundle","publisherCountry","locationIds","reqs","Accounts","Locations","headers","batch","needContentType","getBundleCountriesLocations","console","log","_settings$currentLoca","changes","Added","Deleted","initDict","lt","currentDict","currentTarget","hashCode","currentHash","initTarget","compareLocationTargetArrays","finalLocation","locationToSend","IsOriginalNameEmpty","buildLocationCriterionFromBiddableCampaignCriterion","InnerLocationTargetSettingWithoutError","hideIntent","_props$permissions","_data$currentLevelSet2","_data$parentLevelSett2","mySetLocationTargets","toggleBidModeAndSetLocationTargets","toggleBidMode","turnOffBidAndToggleParentLevel","includedLocationsHash","excludedLocationsHash","LocationTargetSettingWithoutError","withPermissions","showUserParentLevelToggle","keepInitValueWhenToggle","onToggle","noCheckedValue","updatedData","Toggle","defaultChecked","inlineLabel","_location$currentLeve2","includedInitLocations","excludedInitLocations","finalHashDict","finalExcludedLocationIds","setParentForAdGroup","setParentForCampaign","useBackboneView","viewFactory","onViewCreated","_ref$managed","onViewRemoved","backboneView","setBackboneView","BackboneInstanceWrapper","instance","patchFunc","getLocationsString","symbol","k","trim","exclusionsValue","adScheduleContainer","advancedSettingsSectionStyle","paddingRight","float","toggleButtonStyle","adScheduleReactWrapper","AdScheduleView","HotelErrorToErrorMessageMapping","CampaignServiceInvalidDeviceTargetBidAdjustment","CampaignServiceIncompleteDeviceCriterionSet","InvalidCheckInDateTarget","criterions","CurrentAccount","CurrencyCode","OutOfRangeNotIncludeMin","NotPositive","MaxLength","WholeNumber","fromFloatToStringNoTrailingZero","shouldBePositive","parseInt","split","countNumberOfDigits","bidConst","commonConverODataObjectToTargetsState","ODataObject","criterionType","keyCb","defaultSetting","commonTargetCriterion","chain","CriterionBid","Multiplier","commonConverODataObjectToRangeTargetsState","key1","key2","MTKey1","MTKey2","Tablets","Computers","Smartphones","UserSelection","DefaultSelection","others","signal","stringifySync","messageType","Code","uniq","defaultHotelGroup","ParentId","RateBidAmount","IsLeaf","IsExcluded","IsBidLandscapeEnable","Condition","Operand","Attribute","defaultHotelGroupPayload","HotelListingGroupsToAdd","BidAmount","RateAmount","HotelListingGroupsToDelete","Campaigns","HotelListingGroups","$makeCall","functionParams","toPromise","select","NativeBidAdjustment","Decrease","MaxPercentCpc","CommissionRate","$cast","where","getBaseBid","PercentCpcBid","CpcBid","Settings","HotelSeting","analyzeHotelSettings","getTargetCriterionType","patchCampaignOrAdgroup","currentCriterion","tempDevice","tempABW","tempCheckinDay","tempLengthOfStay","tempCheckinDate","tempUserSetDates","errorElements","scrollUtils","removeLastWarning","notificationApi","interval","dismiss","clearInterval","setInterval","handleCommonTargetsError","allTargetsApiErrors","currentError","currentEntity","apiErrMsg","parseEntityApiErrors","adGroupErrors","property","ignoredErrors","classified","criterionsType","Property","expandSettingsWithApiErrors","expandSettingsWithErrors","defaultErrorObject","processItems","prototype","hasOwnProperty","entityName","ids","invalidateTypeCache","trackingTemplate","ko_model","getTrackingTemplate","urlOptionsApiErrors","newUrlOptionsApiErrors","trackingTemplateErrors","finalUrlSuffix","viewModel","errorMessages","isFinalURLSuffixEnabled","externalErrors","customParams","parameterArray","parametersError","getExclusions","baseExclusionApiErrors","newExclusionApiErrors","getAudienceData","audienceAdsOptions","validateAudienceAds","_getMinMax","getMinMax","audienceAdsContainer","currentValue","getValue","readOnly","mySetAudienceAds","audienceAdsBidAdjustmentText","maxIn","maxDe","getAudiencesAdsErrorMsg","getSelectedKey","merge","sharedStylesFromSelDesign","baseExclusionContainer","SiteExclusionView","baseExclusionReactWrapper","BaseExclusionView","exclusionType","campaignExclusions","propTypes","PropTypes","isRequired","_props$options","baseExclusionText","currentSiteExclusionView","currentIPExclusionView","siteExclusion","setSiteExclusion","IPExclusion","setIPExclusion","load","adgroupExclusions","urlOptionsContainer","settingsCommonStyles","uurlTestToolStyle","fontFamily","cursor","UpgradedUrlOptions","editMode","entityType","isNewUI","customParameters","urlOptionsTemplate","showUurlTestTool","urlOptionsReactWrapper","CheckBox","infoText","helpId","event","HotelAdFormat","HPAText","PPAText","ImageModelPropTypes","FinalSrc","Src","Width","Height","CropSettings","SourceX","SourceY","SourceWidth","SourceHeight","IsIncluded","getCenterCroppedSettings","originalBoxToCrop","aspectRatio","shouldIgnoreCropSetting","setCroppingType","originalRatio","cropSettings","scaledSourceWidth","round","centerX","scaledSourceHeight","middleY","CroppingType","getAutoCroppedImagesForRatios","originalImageToCrop","aspectRatios","maxCropBox","_ref$imageOption","imageOption","C","defaultImageOption","_ref$aspectRatioOptio","aspectRatioOption","defaultAspectRatioOption","_ref$isRecommendedIma","isRecommendedImage","defaultRatioToInclude","_ref$disableEdit","disableEdit","_ref$useOriginalImage","useOriginalImageSize","_ref$setCroppingType","OriginalWidth","OriginalHeight","src","OriginalUrl","boxToCrop","defaultRatio","imageOptionKeys","Logo","getDefaultRatio","cropInfo","croppedImageData","idString","IdString","source","originalSourceType","associationType","isLogo","isPortrait","ImageExperienceImage","processCroppedImages","croppedImages","isMultimediaAdinMSANEnabled","image","setIncluded","setAutoCropping","minSize","getAutoCroppedImages","_ref3$isMultimediaAd","isMultimediaAd","_ref3$imageOption","_ref3$aspectRatioOpti","_ref3$isRecommendedIm","isCombinedMsanAndMmaAspectRatios","_ref3$disableEdit","_ref3$isMMAV2Enabled","isMMAV2Enabled","_ref3$isDisplayAds","isDisplayAds","_ref3$isPortraitImage","isPortraitImage","_ref3$isBoost200x100I","isBoost200x100ImageEnabled","_ref3$isBoostNewAspec","isBoostNewAspectRatioSupportEnabled","_ref3$isStoreAppProng","isStoreAppProng","_ref3$isStoreAppSpotL","isStoreAppSpotLight","_ref3$isStoreAppTrans","isStoreAppTransparentLogo","_ref3$isLinkedInAd","isLinkedInAd","_ref3$isUnifiedAppCam","isUnifiedAppCampaignWindowsStore","_ref3$setCroppingType","_ref3$isPMaxAspectRat","isPMaxAspectRatiosV2Enabled","getAspectRatios","autoCroppingImages","validateCropSettings","tag","originalImage","logger","_ref$isExpandedImage","isExpandedImage","validateSmartCropSettings","smartCropActivity","getSmartCroppedImagesAsync","mediaRepository","isImageAdExtensionMode","isMSANBoostEnabled","isAudienceAdSmartCropEnabled","isPmaxSmartCropEnabled","isAudienceAd","_ref$isStoreAppProng","_ref$isStoreAppSpotLi","_ref$isStoreAppTransp","_ref$isLinkedInAd","_ref$isUnifiedAppCamp","_ref$isPMaxAspectRati","placementSettings","stringKey","previewTypeStringKey","imagePreviewHeight","previewSettings","imagesToReturn","aspectRatiosWithSmartCrop","generateSmartCrop","imageUrl","assets","asset","X","Y","ratioDecimalStr","convertAspectRatioToDecimal","AspectRatio","placementSetting","ratio","missingAspectRatios","autoCropSettings","getGenericImageObjectAsync","genericImageSource","nativeImageObject","Image","resolver","getImagePromise","onload","naturalWidth","naturalHeight","aspectRatioStrings","Image191x100","Image4x1","Image1x1","Image1x2","Image178x100","Image172x100","Image169x100","Image150x100","Image155x100","Image133x100","Image93x100","Image201x100","Image200x100","Image153x100","Image124x100","Image120x100","aspectRationStringsForPmax","aspectRationStringsForPmaxV2","getMediaPlacementType","adType","updatePlacementWithBaseCropSettings","placement","mtImgObject","_ref$IsCroppingbasedO","IsCroppingbasedOriginal","CropSettingOnOriginal","_mtImgObject$CropSett","BaseImage","setCropSettings","updatePlacementWithPlacementSettings","updatePlacementSettings","_ref2$setCroppingType","PlacementSettings","currentType","CropSetting","MediaPlacementType","ImageSizeValidationError","_Error","imageWidth","imageHeight","imageWidthInternal","imageHeightInternal","minWidthInternal","minHeightInternal","_wrapNativeSuper","ImageLoadError","_Error2","getImageDetailAsync","img","imageLoadedResolve","imageLoadedReject","imageLoadedPromise","reject","onerror","validateImageWithDimension","imageType","isBrandKit","minimumSizeForImage","getMinimumSizeForImage","validateImageSyncAsyncWithDimensionParams","imageSource","minimumHeight","minimumWidth","validateImageSizeAsync","minimumSize","getImageValidationErrorMessage","isMultiple","skipDimension","stringTemplateKey","isDueToResizing","getMultiAddedImageErrorMessage","uniqErrors","hasValidateError","hasApiError","ORIGINAL_IMAGE","getExpandedImages","originalImageToExpand","expandedImageHeight","expandedImageWidth","expandedImageCropSettings","originalImageCropSettings","imageExpansionType","paddingColor","expandedImageUrl","cropMetaData","crop","croppingType","ImageExpansionType","Outpainting","CenterCrop","SmartCrop","originCrop","expandedCrop","imageList","expandedImageData","curAspectRatio","None","validateExpandedCropSettings","getAssetEnhancementSettings","oDataConfig","accountSettingRepository","getAccountSettings","oDataPath","getAccountSettingRepository","serializeCSV","imageInfos","csvRows","imageInfo","metadata","baseId","sourceType","encodedUrl","encodeURIComponent","serializecsvRow","ImageOData","timeout","bulkSaveImagesByUrl","baseURL","post","CsvRows","maxTimeout","csvData","errorColIndex","imageIdColIndex","col","extractIds","addAsset","requestUrl","requestBody","FolderId","Asset","Url","SourceType","imageFit","placements","_ref2$skipOutpainting","skipOutpainting","ImageUrl","Placements","OriginalImageCropSetting","cropSetting","sourceHeight","sourceWidth","sourceX","sourceY","ImageCropSetting","ImageDimension","w","h","PaddingColor","parseImageFitResponse","odataPath","orderByDefault","orderDefault","odataToken","oDataTokenType","applicationName","beforeSend","sortQuery","searchTerm","_ref3$filterTerm","filterTerm","skip","filterArray","filterQuery","$top","$skip","count","sortBy","sortDirection","dateAddedStart","dateAddedEnd","searchQuery","imageId","isImageFittingEnabled","imageData","activityLogger","inProgress","dataToLog","substr","processedImageData","base64","base64Index","progress","processUploadSingleImageRejection","patch","delete","body","EntityName","EdmEntityName","PersistentEntity","InlineChartRequest","getParentLevels","CurrentCampaign","currentAdGroup","CurrentAdGroup","parentLevels","Constants","getDefaultEntityBaseOnParentLevels","isPerfMaxCampaign","CampaignSettings","isAppCampaign","constructor","isFilterActive","ignoreCase","getCurrentEntity","formatDateString","dateStr","leftPadding","s","dt","year","getFullYear","month","getMonth","getDate","getEntityCollectionName","nameMapping","Keyword","NegativeKeyword","NegativeKeywordList","AssetGroup","Ad","CampaignCriterion","AdGroupCriterion","AudienceCriterionWithBI","DsaTarget","PortfolioBidStrategy","generateRequest","metric","request","accountModes","CurrentTabId","CurrentGridName","currentCustomerId","CurrentCustomer","edmEntity","period","compareStartDate","compareEndDate","granularity","metrics","movingAverage","isMovingAverageOn","getQuery","InlineChartService","findAll","filterObj","filterString","PerformanceTimeSeries","getScope","navigation","getNavigation","nav","navLocal","entitySetArgs","isHierarchical","$call","InlineChartWrapper","_React$PureComponent","getDataSource","chartOptions","getChartOptions","adapter","addDateChangeListener","imagePath","isFluctuationsEnabled","IsFluctuationExperimentEnabled","pathConfig","preferenceService","resizeChartListener","resizeEventHandler","token","seriesColors","gridCriterionType","hideChartPanel","defaultPrimaryMetric","preferences","InlineChartPreferences","isFluctuationsExperiementEnabled","fluctuationService","FluctuationService","preference","pageState","isShowChart","gridDataSource","InlineChart","noop","InlineChartView","_Backbone$View","filterUpdated","handler","resizeListener","resizeChart","ReactDOM","el","getInlineDownloadBaseDownloadV1Loader","actionMap","userVoice","s$ReportRule","s$i18n","supportedDownloadFormats","Format","enum","InlineDownloadBaseDownloadV1","gridId","totalRecordCount","repository","_ref2$downloadFormats","downloadFormats","_ref2$segmentationTyp","segmentationTypes","segmentationTypeEnum","_ref2$validateSegment","validateSegmentType","_ref2$isFeedbackEnabl","isFeedbackEnabled","IsFeedbackEnabled","turnOffSegmentation","segmentType","GridDownloadViewModel","menuItem","localizeSegmentationType","ViewModel","supportedSegmentationTree","getSupportedSegmentationTree","segmentOptions","childItem","downloadTypes","enumItem","downloadType","ko","segmentTypes","errorMessage","errorId","errorMapping","RowLimitExceeded","enableDownload","getViewModel","html","griddownloadtemplate","firstChild","show","hide","setDefaultSegmentType","addTrigger","selectedSegmentationType","selectedDownloadType","registerActionMapExtension","gridIds","download","clear","alert","gridSegmentType","matchingSegmentType","childSegment","attr","parents","siblings","UtilFunctions","getURLWithScope","urlWithoutScope","convertServerSideErrors","serverErrors","aggregateError","apply","formatList","DownloadReportFunctions","createRule","Rule","cm","getCacheHint","resource","CurrentCustomerId","utils","isReportLabelsAccountRequest","createReportRule","Cron","createReportRuleFromReportEmailRule","Headers","IsCustomerHierachyRequest","AccountModes","FeedId","reportRule","IncludeEditableColumns","IncludeNonPerformingHotels","EntityContextType","SharedEntityType","NegativeKeywordListId","createReportEmailRule","ReportEmailRule","CustomerId","AccountIds","downloadTaskItemExecution","TaskItemExecution","alertId","App","views","alertCenter","showConfirmation","executionId","scheduler","successiveFailureCount","pollCount","recurringTask","createTask","task","schedule","stopTask","ResultId","_ref3$error","eventError","poll","delay","scheduleAndDownload","_ref3$TaskItemExecuti","TaskItemExecutions","downloadReportEmailRule","downloadReportEmailRuleExecution","StartedAt","TaskItemId","TaskItem","machineStartedAt","taskItemEntitySet","TaskItems","lockDownSelectionDateRange","getInlineDownloadCampaignODataRepository","InlineDownloadCampaignODataRepository","odataColumnNames","localizedHeaders","filterUrlParam","serializedFilter","_ref2$processReportRu","processReportRule","isForVNext","p$daterange","customColumnIds","startsWith","ODATA_PREFIX","IsRSAAdCustomizerEnabled","queryString","header","columnName","EndTime","NotificationDeliveryOption","StartTime","daterangePromise","$daterange","_convertStateDateRang","convertStateDateRangeToSelection","DateRange","ComparisonDateRange","rule","Boolean","Filter","UpdateRulesFunctions","updateRule","updateReportEmailRule","s$ReportEmailRule","PeriodComparisonDateRange","updateReportEmailRuleState","State","deleteReportEmailRules","rules","updateAll","action","processParam","param","getCronModel","cron","cronFormatter","frequency","Frequency","selected","InlineDownloadSelect","onSelect","formatCronFrequency","Hour","translations","getHoursOfDay","hour","DailyExtra","ReactTemplate","selectedHour","toCronString","DayOfWeek","getDaysOfWeek","WeeklyExtra","selectedDayOfWeek","DayOfMonth","getDaysOfMonth","MonthlyExtra","dayOfMonth","selectedDayOfMonth","Extra","_getCronModel","InlineDownloadCronEditor","onChangeFrequency","onChangeCron","getFrequencyDefaultCron","CronFormatter","dateMethodOptions","InlineDownloadEmailFrequencyEditor","onNotificationDeliveryOptionChange","onCronChange","onStartTimeChange","onEndTimeChange","setDisabledForA11y","element","setAttribute","bindTheA11yEvent","querySelector","onclick","startTimeRef","endTimeRef","currentUserId","FormGroup","allUsersType","loadUsers","_this$props$data","usedStartTime","usedEndTime","frequencyText","EmailNotificationDeliveryOptionEditor","ref","KendoStringDatePicker","ariaLabelledby","htmlFor","EmailAndScheduleReport","onCheck","onEmailFrequencyChange","emailAndSchedulingLabel","SaveAsCustomReport","_this$state","onInput","_this$state2","saveReportLabel","_prevState$checked","_prevState$name","getInlineReactForm","InlineDownloadForm","onDownload","V1Part","getFormatandSementationTypes","validSegmentationTypes","idx","updatedSegment","deleteIndex","segmentButtons","updateSegment","_this$getFormatandSem3","showAddSegment","IsMultiSegmentInlineDownloadEnabled","showSecondSegment","showDeleteSegment","showAddSegmentContent","addSegment","showSecondSegmentContent","InlineDownloadMultiLevelSelect","deleteSegment","deleteSegmentAriaLabel","formatText","segmentText","downloadBoxRole","childRole","downloadFormatsRole","getV1Part","V2Part","getV2Part","timeArray","segmentationTree","validateTimeSegmentationTypes","GiveFeedback","featureName","areaName","getInlineDownloadForm","_ref2$totalRecordCoun","_ref2$isForVNext","Form","getInlineDownloadFormReact","currentProps","toggleToolbarVisibility","_currentProps$totalRe","_currentProps$downloa","_currentProps$segment","_currentProps$validat","_currentProps$isFeedb","_currentProps$isForVN","_currentProps$clearAf","clearAfterDownloadCall","_currentProps$downloa2","_currentProps$downloa3","button","isMultiLevelDropdown","DropdownLi","onClickWrapper","submitEvent","focusWrapper","tabIndex","onKeyPress","DropdownSubMenu","String","onDeleteSegmentKeyDown","renderLi","onKeyDown","child","BaseLocationRecommendationModel","locationRecommendations","locationImpressionGain","ret","EstimatedIncreaseInImpressions","locationTrafficGain","idList","_$reduce","recommend","passedFiltering","QueriesPassedLocationFiltering","QueriesFiltered","totalTraffic","formatPercentToFixed","Model","_BaseLocationRecommen","campaignLength","trafficGain","impressionGain","selectedItems","isActionButtonEnabled","banner","recommendationCount","campaignNumber","hasRecommendation","clickCollapse","recommendationsOnMap","isMapShow","showLocationsRecommendationsGrid","recommendationType","channel","templates","inlineTemplate","locationGridAccountTemplate","locationGridCampaignTemplate","logViewEvent","opportunitys","constants","OpportunityId","_ref$Campaign","logMessage","LOGCATEGORY","TRACE","LOGLEVEL","INFO","typeId","isClick","InlineLocationRecommendation","isAllSelected","alertHelper","AlertHelper","isAccountLevel","locationRecommendationGrid","LocationRecommendationGrid","hasPagination","selectAllByDefault","recommendation","dismissRecommendations","mouseOverRecommendation","mouseOutRecommendation","displayedRecommendations","recommendations","isMapLoaded","Microsoft","Maps","loadModule","showMap","isCampaignLevelLocation","MapView","LocationMap","mapView","disableInfoBoxGroupList","mapHeight","targetRecommendations","showRecommendationsOnMap","updateRecommendedLocations","locationGridTemplate","refreshLocation","refreshMap","rebindEventBus","fetchRecommendations","withUiBlock","loadLocationCriterion","_this$options","_this$options$scope","excludedOnly","s$AdGroupCriterion","s$CampaignCriterion","criterionLevel","parentId","criterionLoader","entities","waitUntilMapLoaded","jsDataCampaign","Intermediate","destroyAll","recommendationRepository","getRecommendations","oppType","recommends","groupBy","appliedRecommendations","req","overrideResponse","failedCriterions","ErrorNumber","applyRecommendations","isAll","showSuccess","success","failed","Results","ErrorCode","CampaignCacheManager","invalidate","sessionStorage","$collpase","expandCollapse","InlineLocationRecommendationDialog","isRecommendationOperated","locationAdded","View","decorate","viewOptions","InlineLocationRecommendationPanel","panelDecorator","panelReadyAriaLabel","eventsToActions","onClose","getInlineOpportunityStyle","extensionEditorStyles","fontStyle","opacity","flexDirection","boxSizing","borderLeft","overflowWrap","textAlign","zIndex","active","maxHeight","right","borderSpacing","borderCollapse","wordBreak","borderRightWidth","overflowY","visibility","flex","listStyleType","textOverflow","borderLeftWidth","borderTopWidth","borderBottomWidth","borderStyle","flexGrow","boxShadow","InvestImageDataService","optionsWithDefault","customQueries","XandrAssets","XandrAssetId","Folders","stopBinding","controlsDescendantBindings","allowedBindings","getRequestPermission","deliveryStatus","requestPermissionTemplate","showRequestPermissionBtn","generateLocationName","lat","long","_ProjectionGridBaseCo","columnOverrider","localizedTitle","bodyClasses","sortable","helpAriaLabel","locationColumnTemplate","ProjectionGridBaseColumn","Impression","Dismiss","gridRemoveAll","headClasses","colClasses","dimissColumnTemplate","_BaseCampaignColumn","routeTemplate","cmpid","BaseCampaignColumn","onDismissClick","_ref$columns","_ref$columnOverrider","_ref$hasPagination","_ref$hasSelection","hasSelection","_ref$dataSource","primaryKey","_ref$scope","_ref$selectAllByDefau","_ref$tableClasses","tableClasses","PredefinedColumns","mapColumnsConfig","grid","itemOfElement","gridFactory","projectionGrid","vnext","use","placeholderPlugin","uiBlockerPlugin","a11yPlugin","assistedSelectionPlugin","headRows","paginationPlugin","crossPageSelectAllPlugin","unshift","crossPageSelectHeadRow","projectionGridScopeNavigator","rows","mouseOverItem","mouseOutItem","onRemoveAllRecommendationClick","a11y","crossPageSelectAll","availablePageSizes","enableRandomPage","direction","directionIndex","enabled","once","selectAll","itemArray","deselectAll","aspectRatioConfig","aspectRatioAsRatio","editorTitle","Image300x250","Image728x90","Image160x600","Image300x600","Image120x600","Image468x60","Image336x280","Image250x250","Image180x150","Image970x250","Image234x60","Image970x90","Image320x50","Image300x50","Image320x480","Image480x320","Image320x100","Image216x36","Image168x28","Image120x20","Image57x100","Image122x100","Image159x100","Image180x100","Image233x100","getRatio","getAllowedAspectRatio","baseImage","getAspectRatio","allowedAspectRatio","getOriginalImageAspectRatio","getResizeImageHeight","convertAspectRatioDecimalToRatio","aspectRatioAsDecimal","aspectRatioRatio","EffectChoiceKey","DesignerEffects","BackgroundBlur","BackgroundSolidColor","EffectChoiceOrder","MTSmartEffect","Blur","BackgroundColorSwap","EffectChoiceMtSmartEffectMapping","getEditorTitle","subTitle","BaseValidator","propertySchema","ignoreInvalidProperty","requiredField","enableCheck","internalValidate","TypeValidateConfig","object","string","validateBeam","str","RegistedHandlers","propertyValue","beams","ConfiguredValidators","_BaseValidator","TypeValidator","validateFunc","EnumValidator","CustomValidator","custom","EffectKeyValidator","effectKey","EffectSettingsAlias","imageAssetSerializeSchema","effectSettings","alias","nullable","effectOptions","designerEffect","backgroundBlur","invertSchemaAlias","schemaProperties","newKey","newVal","imageAssetDeserializeSchema","shouldFilterOut","processObjectWithSchema","obj","validatePropertyFunc","_validatePropertyFunc","childkeySchema","newValue","validateDeserializeProperty","extractInfoForSerialization","ValidatorClass","childResult","validateProperty","extractInfoForDeserialization","buildImageAssetMetadataToSave","assetModel","metaObject","placementMeta","_ref2$effectOptions","convertStateToMetadata","serializeImageAssetMetadata","isBulkUpsert","serialized","deserializeImageAssetMetadata","metaString","decoded","RegExp","metaObj","parseSync","metaObjCopy","cache","AdGenerationDataService","_ref$cmpId","cmpId","_ref2$pageNumber","_ref2$pageSize","_ref2$forceInternalSc","forceInternalScrapingService","_ref2$minimumResoluti","minimumResolution","headlines","descriptions","criteria","endpoint","WithThumbnail","MinWidth","MinHeight","paging","Page","PageSize","rankingCriteria","Criteria","ImageWip","Wip","Images","ImagePaging","Paging","PageNumber","TotalCount","_ref3$pageNumber","_ref3$pageSize","_ref3$forceInternalSc","_ref3$minimumResoluti","_this$createRecommend","createRecommendRequestData","generateUrlWithScope","formatRawReponse","serializedOptions","wip","Assets","methodName","GenerateImageDataModel","_GenerateDataModel","assetType","fileFormat","GenerateDataModel","jobId","JobId","BaseImageUrl","Filters","Crop","Output","MediaType","GenerateManualCropDataModel","_GenerateImageDataMod","y","scale_x","scale_y","GenerateSmartCropDataModel","_GenerateImageDataMod2","Param","ExpectedCrops","GenerateSmartEffectDataModel","_GenerateImageDataMod3","smartEffects","smartEffectName","smartEffectOptions","MediaRepository","dataService","createGenerateRequestWithPolling","timerIds","resetTimers","intervalId","timeoutId","clearTimeout","generate","newResponse","RECOMMEND_POLL_INTERVAL","RecommendationTimeoutError","SuggestionPoller","hasOfflineProcessingFinished","offlineProccesingTimeoutId","jobCompleteCallback","recommendPromiseBeforePolling","_ref$forceInternalScr","_ref2$enableOfflinePo","enableOfflinePollingDelay","_ref2$additionalCallb","additionalCallback","createAsyncToken","onSuccess","doesResponseHaveImages","startPollingJob","onError","handleError","pollingCount","stopUpdateInterval","cb","isResponseNotEmpty","hasMoreImagesToFetch","_response$ImagePaging","SuggestionStatus","EmptyURL","InvalidURL","ServerError","FetchInProgress","FetchSucceed","SelectSuggestionError","SelectSuggestionComplete","mapSuggestionResponseToState","carousel","isSubdomainScraping","suggestion","emptyURL","invalidURL","isTimeout","unKnownError","images","fullUrl","thumbnailUrl","ThumbnailUrl","suggestionId","SuggestionId","hasMore","isError","first","mapSuggestionResponseToCarouselState","returnObject","translateLanguageName","selectedLanguages","suggestedLanguages","allLanguageExclusive","inEditMode","languages","ALL_LANGUAGES","languagesSet","languageOptions","selectedLanguagesName","suggestedLanguagesName","allLanguageSelected","targetSuggestedLanguages","updateSuggestedLanguages","newSuggestedLanguages","MultiLanguageSelector","i18nStrings","_ref$suggestedLanguag","_ref$selectedLanguage","_ref$inEditMode","_ref$allLanguageExclu","_ref$inSingleColumnVe","inSingleColumnVersion","_ref$i18n","SuggestedLanguagesDescription","selectedLangauges","getSelectedLanguages","logInteraction","SelectedLanguages","pug","module","exports","locals","pug_interp","pug_html","locals_for_with","escape","account","$$obj","pug_index0","$$l","pug_mixins","pug_index1","saveButtonAttr","cleanButtonAttr","isCleanButtonDisabled","hotelGroup","singleLine","columnChooserStyle","ComponentSettings","getColumnChooserOverrideStyle","ColumnChooser","_Component","categories","legacyI18n","onApply","isSplittingSelectedArea","simplified","cfg","searchStr","BackboneColumnChooser","selectedKeys","savedName","currentActive","isSaveNameEnabled","external","ReplaceDialog","hidden","columnSetName","onReplace","onDismiss","dialogContentProps","normal","Dialog","savedColumnSetName","DialogFooter","ToolbarColumnChooserWrapper","InstrumentationContext","isDialogOpened","setIsDialogOpened","applyValue","columnChooser","project","Columns","components","RemoveDialog","main","dropdownId","saveListId","defaultColumnSetName","useColumnsWithToolbarColumnChooser","defaultColumns","toolbarOptions","callbacks","customToolbarIcon","toolbarEditor","selectedColumns","setSelectedColumns","isInitialized","initialColumns","async","assert","buildBaseQuery","SelectedColumns","prepareData","selectedColumnSetName","getPreferenceSelectedColumnSetName","handleSelectColumnSet","iconLeftGlyphName","iconLeft","iconRight","menu","openColumnChooser","removeText","setIsRemoveDialogOpened","setColumnSetNameRemoveCandidate","refreshMenu","handleRefreshMenu","initialColumnChooserItemInToolbar","isRemoveDialogOpened","columnSetNameRemoveCandidate","onRemoveDismiss","onRemoveApply","promises","columnsPreference","getPreferenceSelectedColumns","deletePreferenceSelectedColumns","ColumnChooserTrivia","n","setPreferenceSelectedColumnSet","setPreferenceSelectedColumns","reduce","locked","selectedColumnsPreference","finalColumns","beforeSetSelectedColumns","getPreferenceSelectedColumnSet","columnSetPreference"],"sourceRoot":""}