{"version":3,"file":"static/js/application.async.non-landing~a97549ed.760a0e9e.chunk.js","mappings":"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","sources":["../../../../account-reparenting/packages/account-reparenting-actions/src/arw-js-data-context-provider.js","../../../../account-reparenting/packages/account-reparenting-actions/src/use-data-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/account-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/customer-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/payment-instrument-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/billing-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/reparenting-job-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/reparenting-validate-actions.js","../../../../account-reparenting/packages/account-reparenting-actions/src/uet-tag-actions.js","../../../../account-reparenting/packages/account-reparenting-context-provider/src/arw-server-context.js","../../../../account-reparenting/packages/account-reparenting-context-provider/src/arw-context-provider.js","../../../../account-reparenting/packages/account-reparenting-context-provider/src/hooks.js","../../../../account-reparenting/packages/account-reparenting-instrumentation/src/schemas.js","../../../../account-reparenting/packages/account-reparenting-instrumentation/src/instrumentation.js","../../../../account-reparenting/packages/account-reparenting-instrumentation/src/instrumentation-context.js","../../../../account-reparenting/packages/account-reparenting-popover/src/index.js","../../../../account-reparenting/packages/account-reparenting-step-base-layout/src/arw-step-footer.js","../../../../account-reparenting/packages/account-reparenting-step-base-layout/src/arw-step-base-layout.js","../../../../account-reparenting/packages/transfer-request-summary/src/accounts-popover.js","../../../../account-reparenting/packages/transfer-request-summary/src/account-manager-popover.js","../../../../account-reparenting/packages/transfer-request-summary/src/button-or-static.js","../../../../account-reparenting/packages/transfer-request-summary/src/icons.js","../../../../account-reparenting/packages/transfer-request-summary/src/accountlinks-summary.js","../../../../account-reparenting/packages/transfer-request-summary/src/accountbilling-summary.js","../../../../account-reparenting/packages/transfer-request-summary/src/account-payment-summary.js","../../../../account-reparenting/packages/transfer-request-summary/src/insertion-orders-summary.js","../../../../account-reparenting/packages/transfer-request-summary/src/uet-tags-summary.js","../../../../account-reparenting/packages/transfer-request-summary/src/index.js","../../../../account-reparenting/packages/account-reparenting-step-summary/src/index.js","../../../../account-summary-tabs/packages/accounts-page-description/src/page-description.js","../../../../account-summary-tabs/packages/accounts-page-description/src/styles/page-description-styles.js","../../../../ad-extensions/packages/ad-extensions-associations-factory/src/styles/ad-extension-editors-common-styles.js","../../../../ad-extensions/packages/ad-extensions-associations-factory/src/styles/ad-extensions-associations-styles.js","../../../../ad-extensions/packages/ad-extensions-associations-factory/src/ad-extensions-associations-wrapper.js","../../../../ad-extensions/packages/ad-extensions-associations-factory/src/styles/ad-extension-editor-global-styles.js","../../../../ad-extensions/packages/ad-extensions-associations-factory/src/ad-extension-associations.js","../../ad-extensions-data/src/adextension-schema-processor.js","../../ad-extensions-data/src/filter-config.js","../../ad-extensions-data/src/data-fetch-config.js","../../ad-extensions-data/src/column-config.js","../../ad-extensions-data/src/data-fetch-source.js"],"sourcesContent":["import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CcJsDataContextProvider } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { DomChildrenPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { appendJsDataErrorSummary, handleAjaxAuthFailure } from '@bingads-webui-campaign-react/account-reparenting-errors';\r\n\r\nexport const ARWJsDataContextProvider = ({\r\n children,\r\n serverContext: {\r\n CurrentUser,\r\n CurrentCustomer,\r\n ServicesEndpoints,\r\n },\r\n}) => (\r\n <CcJsDataContextProvider\r\n userId={CurrentUser.Id}\r\n customerId={CurrentCustomer.Id}\r\n appendErrorSummary={appendJsDataErrorSummary}\r\n handleAjaxAuthFailure={handleAjaxAuthFailure}\r\n clientCenterBaseUrl={ServicesEndpoints.ClientCenterUIAPI}\r\n >\r\n {children}\r\n </CcJsDataContextProvider>\r\n);\r\n\r\nARWJsDataContextProvider.propTypes = {\r\n children: DomChildrenPropTypes.isRequired,\r\n serverContext: PropTypes.shape({\r\n CurrentCustomer: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n }).isRequired,\r\n CurrentUser: PropTypes.shape({\r\n Id: PropTypes.number.isRequired,\r\n }).isRequired,\r\n ServicesEndpoints: PropTypes.shape({\r\n ClientCenterUIAPI: PropTypes.string.isRequired,\r\n }).isRequired,\r\n }).isRequired,\r\n};\r\n","import { useMemo } from 'react';\r\nimport { useARWContextValue } from '@bingads-webui-campaign-react/account-reparenting-context-provider';\r\nimport { useJsDataContext } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nexport const useAction = (Action) => {\r\n const serverContext = useARWContextValue();\r\n const jsData = useJsDataContext();\r\n\r\n const action = useMemo(() => new Action({\r\n reparentingId: serverContext.ReparentingId,\r\n sourceCustomerId: serverContext.SourceCustomer.Id,\r\n targetCustomerId: serverContext.TargetCustomer.Id,\r\n jsData,\r\n }), [Action, serverContext, jsData]);\r\n\r\n return action;\r\n};\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass AccountActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = id => this.jsData.Account.find(id);\r\n\r\n fetchAll = ids => this.jsData.Account.findAll({ accountIds: ids });\r\n}\r\n\r\nexport const useAccountActions = () => useAction(AccountActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass CustomerActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = id => this.jsData.Customer.find(id);\r\n updateServiceLevel = ({ id, serviceLevel }) =>\r\n this.jsData.ServiceLevel.update(id, { serviceLevel }, { cacheResponse: false });\r\n updatePilotFeatures = ({ id, pilotFeatures }) =>\r\n this.jsData.PilotFeatures.update(id, { pilotFeatures }, { cacheResponse: false });\r\n}\r\n\r\nexport const useCustomerActions = () => useAction(CustomerActions);\r\n","import { usePromise } from '@bingads-webui-react/async-utils';\r\n\r\nimport { useAction } from './use-data-actions';\r\n\r\nclass PaymentInstrumentActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetch = billToCustomerId =>\r\n this.jsData.PaymentInstrument.findAll({ customerId: billToCustomerId });\r\n\r\n fetchWithId = piId =>\r\n this.jsData.PaymentInstrument.find(piId);\r\n}\r\n\r\nexport const usePaymentInstrumentActions = () => useAction(PaymentInstrumentActions);\r\n\r\nexport const usePaymentInstruments = (billToCustomerId) => {\r\n const paymentInstrumentActions = usePaymentInstrumentActions();\r\n\r\n const { data: paymentInstruments = [] } = usePromise(\r\n () => paymentInstrumentActions.fetch(billToCustomerId),\r\n [paymentInstrumentActions, billToCustomerId]\r\n );\r\n\r\n return paymentInstruments;\r\n};\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass BillingActions {\r\n constructor({ jsData }) {\r\n this.jsData = jsData;\r\n }\r\n\r\n fetchBulkTaxEstimates = accountIds =>\r\n this.jsData.BulkEstimateTaxes.findAll({ accountIds });\r\n}\r\n\r\nexport const useBillingActions = () => useAction(BillingActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass ReparentingJobActions {\r\n constructor({\r\n reparentingId,\r\n sourceCustomerId,\r\n targetCustomerId,\r\n jsData,\r\n }) {\r\n this.reparentingId = reparentingId;\r\n this.sourceCustomerId = sourceCustomerId;\r\n this.targetCustomerId = targetCustomerId;\r\n this.jsData = jsData;\r\n }\r\n\r\n add = ({ accountIds }) =>\r\n this.jsData.AccountReparentingJobAdd.create({ accountIds });\r\n\r\n update = ({\r\n updateType,\r\n lifeCycleStatus,\r\n targetCustomerId,\r\n accountIds,\r\n accountLinkingSettings,\r\n accountBillingSettings,\r\n defaultBillingSetting,\r\n }) =>\r\n this.jsData.AccountReparentingJobUpdate.update(this.reparentingId, {\r\n updateType,\r\n lifeCycleStatus,\r\n accountIds,\r\n sourceCid: this.sourceCustomerId,\r\n targetCid: targetCustomerId || this.targetCustomerId,\r\n accountLinkingSettings,\r\n accountBillingSettings,\r\n defaultBillingSetting,\r\n });\r\n\r\n load = () =>\r\n this.jsData.AccountReparentingJobLoad.find(this.reparentingId, {\r\n params: {\r\n sourceCid: this.sourceCustomerId,\r\n targetCid: this.targetCustomerId,\r\n },\r\n });\r\n\r\n loadAccounts = ids => this.jsData.AccountReparentingLoadAccounts.findAll({ accountIds: ids });\r\n\r\n submit = () =>\r\n this.jsData.AccountReparentingJobSubmit.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n });\r\n}\r\n\r\nexport const useReparentingJobActions = () => useAction(ReparentingJobActions);\r\n","import { useAction } from './use-data-actions';\r\n\r\nclass ReparentingValidateActions {\r\n constructor({ reparentingId, sourceCustomerId, jsData }) {\r\n this.reparentingId = reparentingId;\r\n this.sourceCustomerId = sourceCustomerId;\r\n this.jsData = jsData;\r\n }\r\n\r\n accountIds = ({ accountIds }) =>\r\n this.jsData.AccountReparentingValidateAccounts.create({ accountIds });\r\n\r\n targetCustomer = ({ targetCustomerNumber }) =>\r\n this.jsData.AccountReparentingValidateTargetCustomer.create({\r\n targetCustomerNumber,\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n }, { cacheResponse: false });\r\n\r\n linkSettings = ({ accountLinkingSettings }) =>\r\n this.jsData.AccountReparentingValidateLinkInfo.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n accountLinkingSettings,\r\n }, { cacheResponse: false });\r\n\r\n billingSettings = ({ accountBillingSettings }) =>\r\n this.jsData.AccountReparentingValidateBillingInfo.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n accountBillingSettings,\r\n }, { cacheResponse: false });\r\n\r\n fullValidate = () =>\r\n this.jsData.AccountReparentingFullValidate.create({\r\n id: this.reparentingId,\r\n sourceCid: this.sourceCustomerId,\r\n });\r\n}\r\n\r\nexport const useReparentingValidateActions = () => useAction(ReparentingValidateActions);\r\n","import { edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { odata } from '@bingads-webui/http-util';\r\nimport { useAction } from './use-data-actions';\r\n\r\nclass UETTagActions {\r\n constructor({\r\n reparentingId,\r\n sourceCustomerId,\r\n }) {\r\n this.reparentingId = reparentingId;\r\n const edmCustomer = edmCampaign.Customers.$withKey(sourceCustomerId);\r\n this.userSettings = edmCustomer.ReparentingUserSettings.$withKey(this.reparentingId);\r\n }\r\n\r\n load = () => this.userSettings.get().toPromise();\r\n\r\n submit = UETTags => this.userSettings['Default.PostReparentingUserSetting'].$makeCall({\r\n payload: { TagSettings: UETTags },\r\n }).toPromise();\r\n\r\n download = () =>\r\n odata.get(this.userSettings['Default.DownloadSummary'].odataURL, {\r\n xhrFields: {\r\n responseType: 'blob',\r\n },\r\n dataType: 'binary',\r\n oDataToken: window.campaignODataConfigs ? window.campaignODataConfigs.Token : '',\r\n });\r\n}\r\n\r\nexport const useUETTagActions = () => useAction(UETTagActions);\r\n","import React, { useContext } from 'react';\r\n\r\nexport const ARWServerContext = React.createContext({\r\n Value: {},\r\n Actions: {},\r\n Permissions: {},\r\n});\r\n\r\nexport const useARWContextValue = () => useContext(ARWServerContext).Value;\r\nexport const useARWContextActions = () => useContext(ARWServerContext).Actions;\r\nexport const useARWContextPermissions = () => useContext(ARWServerContext).Permissions;\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { ServerContextProviderPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { areUiInsertionOrdersEqual, convertAccountModelToServerContext, toClientSideBillingSetting } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { ARWServerContext } from './arw-server-context';\r\n\r\nexport class ARWContextProvider extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const {\r\n serverContext: {\r\n Accounts,\r\n AccountIds,\r\n CurrentCustomer,\r\n SourceCustomerId,\r\n },\r\n } = props;\r\n const sourceCustomerId = SourceCustomerId && _.isNumber(SourceCustomerId) ?\r\n SourceCustomerId :\r\n CurrentCustomer.Id;\r\n\r\n // TargetCustomer and SourceCustomer are loaded during JobLoad Call\r\n this.state = {\r\n TargetCustomer: {},\r\n SourceCustomer: { Id: sourceCustomerId },\r\n NewBillTo: {\r\n Customer: null,\r\n PaymentOptionId: null,\r\n PaymentInstrumentId: null,\r\n InsertionOrder: null,\r\n PrepayConfig: null,\r\n },\r\n Timestamp: null,\r\n AccountIds,\r\n Accounts,\r\n MandatoryNewBillToAccountIds: [],\r\n AccountBillToCustomersMap: {},\r\n IOPreApprovalRequired: false,\r\n UETTags: null,\r\n ShowSummaryPaneLinkSettings: false,\r\n ShowSummaryPaneBillingSetting: false,\r\n };\r\n this.contextActions = {\r\n UpdateJobTimestamp: this.updateJobTimestamp,\r\n DeleteAccount: this.deleteAccount,\r\n UpdateTargetCustomer: this.updateTargetCustomer,\r\n UpdateSourceCustomer: this.updateSourceCustomer,\r\n UpdateSelectedAccountIds: this.updateSelectedAccountIds,\r\n UpdateSelectedAccounts: this.updateSelectedAccounts,\r\n UpdateJobLoadAccounts: this.updateJobLoadAccounts,\r\n UpdateAccountLinks: this.updateAccountLinks,\r\n UpdateAccountBilling: this.updateAccountBilling,\r\n UpdateAccountsBillingSettings: this.updateAccountsBillingSettings,\r\n SetIOPreApprovalRequired: this.setIOPreApprovalRequired,\r\n UpdateNewBillToSettings: this.updateNewBillToSettings,\r\n UpdateAccountBillToCustomersMap: this.updateAccountBillToCustomersMap,\r\n UpdateUETTags: this.updateUETTags,\r\n SetShowSummaryPaneLinkSettings: this.setShowSummaryPaneLinkSettings,\r\n SetShowSummaryPaneBillingSetting: this.setShowSummaryPaneBillingSetting,\r\n };\r\n }\r\n\r\n setShowSummaryPaneLinkSettings = (showSummaryPaneLinkSettings) => {\r\n this.setState({ ShowSummaryPaneLinkSettings: showSummaryPaneLinkSettings });\r\n }\r\n\r\n setShowSummaryPaneBillingSetting = (showSummaryPaneBillingSetting) => {\r\n this.setState({ ShowSummaryPaneBillingSetting: showSummaryPaneBillingSetting });\r\n }\r\n\r\n setIOPreApprovalRequired = ({ ioPreApprovalRequired }) => {\r\n this.setState({ IOPreApprovalRequired: ioPreApprovalRequired });\r\n }\r\n\r\n updateAccountBillToCustomersMap = (accountBillToCustomersMap) => {\r\n this.setState({ AccountBillToCustomersMap: accountBillToCustomersMap });\r\n };\r\n\r\n updateAccountLinks = (accountLinks, mandatoryNewBillToAccountIds) => {\r\n const updatedAccounts = this.state.Accounts;\r\n\r\n // set unlink flags for broken agency links\r\n _.each(accountLinks, (accLink) => {\r\n const accountIndex = _.findIndex(updatedAccounts, acc => acc.Id === accLink.Id);\r\n const updatedAccount = updatedAccounts[accountIndex];\r\n const linkIndex = _.findIndex(\r\n updatedAccount.LinkedManagers,\r\n manager => manager.Id === accLink.LinkedManager.Id\r\n );\r\n updatedAccount.LinkedManagers[linkIndex].Unlink = accLink.LinkedManager.Unlink;\r\n });\r\n\r\n // break bill-to links based on CCMT response\r\n _.each(updatedAccounts, (acc) => {\r\n if (_.contains(mandatoryNewBillToAccountIds, acc.Id)) {\r\n acc.BillToManager.BillTo = null;\r\n }\r\n });\r\n\r\n this.setState({\r\n Accounts: updatedAccounts.slice(),\r\n MandatoryNewBillToAccountIds: mandatoryNewBillToAccountIds || [],\r\n });\r\n }\r\n\r\n updateAccountBilling = (accountsBilling) => {\r\n const updatedAccounts = this.state.Accounts;\r\n _.each(accountsBilling, (accBilling) => {\r\n const accountIndex = _.findIndex(updatedAccounts, acc => acc.Id === accBilling.Id);\r\n const updatedAccount = updatedAccounts[accountIndex];\r\n updatedAccount.BillToManager.BillTo = accBilling.BillToManager.BillTo;\r\n });\r\n\r\n this.setState({ Accounts: updatedAccounts.slice() });\r\n }\r\n\r\n updateNewBillToSettings = ({\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n }) => {\r\n this.setState({\r\n NewBillTo: {\r\n Customer: billToCustomer,\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n },\r\n });\r\n }\r\n\r\n updateAccountsBillingSettings = ({\r\n updatedAccountsBillingSettings,\r\n }) => {\r\n const toUpdateIds = _.pluck(updatedAccountsBillingSettings, 'accountId');\r\n\r\n const updatedAccounts = _.map(\r\n this.state.Accounts,\r\n (account) => {\r\n const updatedSettingsIndex = _.findIndex(toUpdateIds, aid => aid === account.Id);\r\n\r\n if (updatedSettingsIndex < 0) {\r\n return account;\r\n }\r\n\r\n const {\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n } = updatedAccountsBillingSettings[updatedSettingsIndex];\r\n\r\n const isInvoicePaymentOption = paymentOptionId === Constants.PaymentOptionId.Invoice;\r\n\r\n if (isInvoicePaymentOption) {\r\n if (account.BillToChange && account.BillToChange.InsertionOrder && insertionOrder) {\r\n const contextInsertionOrder = account.BillToChange.InsertionOrder;\r\n\r\n const shouldResetStatus =\r\n account.BillToChange.PaymentInstrumentId !== paymentInstrumentId ||\r\n !areUiInsertionOrdersEqual(contextInsertionOrder, insertionOrder);\r\n\r\n if (shouldResetStatus) {\r\n // We had one created and was submitted again for review.\r\n if (contextInsertionOrder.ioStatus !== null) {\r\n insertionOrder.ioStatus =\r\n Constants.InsertionOrderStatus.PendingBillToPartyChangeAndUserReview;\r\n } else {\r\n insertionOrder.ioStatus = null;\r\n }\r\n } else {\r\n insertionOrder.ioStatus = contextInsertionOrder.ioStatus;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n ...account,\r\n BillToCustomer: billToCustomer,\r\n BillToChange: {\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n },\r\n };\r\n }\r\n );\r\n\r\n this.setState({\r\n Accounts: updatedAccounts,\r\n });\r\n };\r\n\r\n // Update Accounts information from JobLoad Response\r\n updateJobLoadAccounts = (accounts) => {\r\n let showSummaryPaneLinkSettings = false;\r\n let showSummaryPaneBillingSetting = false;\r\n const updatedAccounts = _.map(this.state.Accounts, (acc) => {\r\n const updatedAccount = acc;\r\n const jobAccount = _.find(accounts, jobAcc => jobAcc.AccountId === updatedAccount.Id);\r\n\r\n _.each(jobAccount.LinkSettings, (linkSetting) => {\r\n const linkIndex = _.findIndex(\r\n updatedAccount.LinkedManagers,\r\n linkedManager => linkedManager.Id === linkSetting.AgencyCustomerId\r\n );\r\n // ignore the links which might have been deleted since previous visit\r\n if (linkIndex !== -1) {\r\n updatedAccount.LinkedManagers[linkIndex].Unlink = !linkSetting.KeepLink;\r\n }\r\n showSummaryPaneLinkSettings = true; // set to true even if there is one setting available\r\n });\r\n\r\n if (!jobAccount.BillingSetting) {\r\n updatedAccount.BillToManager.BillTo = null;\r\n } else if (jobAccount.BillingSetting && !jobAccount.BillingSetting.BillToChangeSetting) {\r\n updatedAccount.BillToManager.BillTo = true;\r\n } else if (jobAccount.BillingSetting && jobAccount.BillingSetting.BillToChangeSetting) {\r\n updatedAccount.BillToManager.BillTo = false;\r\n const {\r\n billToCustomer,\r\n paymentOptionId,\r\n paymentInstrumentId,\r\n insertionOrder,\r\n prepayConfig,\r\n } = toClientSideBillingSetting(jobAccount.BillingSetting);\r\n\r\n updatedAccount.BillToCustomer = billToCustomer;\r\n updatedAccount.BillToChange = {\r\n PaymentOptionId: paymentOptionId,\r\n PaymentInstrumentId: paymentInstrumentId,\r\n InsertionOrder: insertionOrder,\r\n PrepayConfig: prepayConfig,\r\n };\r\n }\r\n\r\n if (jobAccount.BillingSetting) {\r\n showSummaryPaneBillingSetting = true; // set to true even if there is one setting available\r\n }\r\n\r\n return updatedAccount;\r\n });\r\n\r\n this.setState({\r\n Accounts: updatedAccounts,\r\n ShowSummaryPaneBillingSetting: showSummaryPaneBillingSetting,\r\n ShowSummaryPaneLinkSettings: showSummaryPaneLinkSettings,\r\n });\r\n }\r\n\r\n updateTargetCustomer = (customer) => {\r\n this.setState({ TargetCustomer: customer });\r\n }\r\n\r\n updateJobTimestamp = (timestamp) => {\r\n this.setState({ Timestamp: timestamp });\r\n }\r\n\r\n updateSourceCustomer = (customer) => {\r\n this.setState({ SourceCustomer: customer });\r\n }\r\n\r\n updateSelectedAccountIds = (accountIds) => {\r\n this.setState({ AccountIds: accountIds });\r\n }\r\n\r\n updateSelectedAccounts = (accounts) => {\r\n const updatedAccounts = _.map(accounts, acc => convertAccountModelToServerContext(acc));\r\n this.setState({ Accounts: updatedAccounts });\r\n }\r\n\r\n updateUETTags = (uetTags) => {\r\n this.setState({ UETTags: uetTags || [] });\r\n }\r\n\r\n deleteAccount = (accountId, newUETTags) => {\r\n this.setState(prevState => ({\r\n Accounts: _.reject(prevState.Accounts, acc => acc.Id === accountId),\r\n }));\r\n\r\n // update uet tags\r\n if (this.props.serverContext.Permissions.IsAccountReparentingUETEnabled &&\r\n this.state.UETTags) {\r\n this.setState({\r\n UETTags: newUETTags,\r\n });\r\n }\r\n }\r\n\r\n render = () => {\r\n const {\r\n Accounts,\r\n AccountIds,\r\n AccountBillToCustomersMap,\r\n MandatoryNewBillToAccountIds,\r\n TargetCustomer,\r\n SourceCustomer,\r\n IOPreApprovalRequired,\r\n ShowSummaryPaneBillingSetting,\r\n ShowSummaryPaneLinkSettings,\r\n NewBillTo,\r\n Timestamp,\r\n UETTags,\r\n } = this.state;\r\n const {\r\n CurrentUser,\r\n CurrentCustomer,\r\n ReparentingId,\r\n ServicesEndpoints,\r\n Permissions,\r\n } = this.props.serverContext;\r\n return (\r\n <ARWServerContext.Provider\r\n value={{\r\n Value: {\r\n Accounts,\r\n AccountIds,\r\n AccountBillToCustomersMap,\r\n CurrentUser,\r\n CurrentCustomer,\r\n MandatoryNewBillToAccountIds,\r\n ServicesEndpoints,\r\n SourceCustomer,\r\n TargetCustomer,\r\n IOPreApprovalRequired,\r\n ReparentingId,\r\n NewBillTo,\r\n Timestamp,\r\n UETTags,\r\n ShowSummaryPaneBillingSetting,\r\n ShowSummaryPaneLinkSettings,\r\n },\r\n Actions: this.contextActions,\r\n Permissions,\r\n }}\r\n >\r\n {this.props.children}\r\n </ARWServerContext.Provider>\r\n );\r\n }\r\n}\r\n\r\nARWContextProvider.propTypes = ServerContextProviderPropTypes;\r\n","import _ from 'underscore';\r\nimport { useARWContextValue } from './arw-server-context';\r\n\r\n/*\r\n * return true if existing BillToCustomer is either Unlinked or chooses\r\n * to have new BillTo PI after takeover billing step\r\n */\r\nexport const useAccountsWithNewBillTo = () => {\r\n const accounts = useARWContextValue().Accounts;\r\n return _.filter(accounts, acc => !acc.BillToManager.BillTo);\r\n};\r\n\r\n/*\r\n * return true if existing link between existing BillToCustomer\r\n * and Account is retained after review linking step,\r\n * can be true/ false based on decisions previously made on this step\r\n */\r\nexport const useAccountsForBillingSetup = () => {\r\n const { Accounts, MandatoryNewBillToAccountIds } = useARWContextValue();\r\n return _.filter(Accounts, acc => !_.contains(MandatoryNewBillToAccountIds, acc.Id));\r\n};\r\n\r\nconst findIntersection = (list1, list2) => {\r\n if (list1.length === 0) return list2;\r\n return _.filter(list1, item1 =>\r\n _.any(list2, item2 => _.isEqual(item1, item2)));\r\n};\r\n\r\n/*\r\n * return intersection of all eligible Bill To Customers, pass null for all accounts\r\n */\r\nexport const useEligibleBillToCustomers = (accountId = null) => {\r\n const billToCustomersMap = useARWContextValue().AccountBillToCustomersMap;\r\n const allAccountIds = accountId ? [accountId] : _.keys(billToCustomersMap);\r\n return _.reduce(\r\n allAccountIds,\r\n (billToCustomersList, accId) =>\r\n findIntersection(billToCustomersList, billToCustomersMap[accId])\r\n , []\r\n );\r\n};\r\n\r\n/*\r\n * Returns the payment option configured for the accounts with new bill to.\r\n */\r\nexport const usePaymentOptionId = () => {\r\n const contextAccounts = useAccountsWithNewBillTo();\r\n const { PaymentOptionId } = useARWContextValue().NewBillTo;\r\n\r\n const firstAccountWithBillToChange = _.find(\r\n contextAccounts,\r\n account => account.BillToChange && account.BillToChange.PaymentOptionId\r\n );\r\n\r\n return firstAccountWithBillToChange ?\r\n firstAccountWithBillToChange.BillToChange.PaymentOptionId :\r\n PaymentOptionId;\r\n};\r\n","export const defaultSchema = {\r\n scenario: [{\r\n name: 'default',\r\n value: 'Account Reparenting Scenario',\r\n activity: [{\r\n name: 'logger',\r\n value: 'Account Reparenting Logger for default scenario',\r\n }],\r\n }],\r\n};\r\n","import _ from 'underscore';\r\nimport { INSTRUMENTATION_SYSTEM_NAME, INSTRUMENTATION_SUB_SYSTEM } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { getInstrumentation as getInstrumentationInstance } from '@bingads-webui-campaign/instrumentation-setup';\r\n\r\nimport { defaultSchema } from './schemas';\r\n\r\nexport const getInstrumentation = ({ serverContext }) => {\r\n const applicationName = {\r\n systemName: INSTRUMENTATION_SYSTEM_NAME,\r\n subSystemName: INSTRUMENTATION_SUB_SYSTEM,\r\n };\r\n\r\n const userContext = _.pick(serverContext, 'CurrentUser', 'CurrentCustomer');\r\n\r\n return getInstrumentationInstance({\r\n pageTrackingId: serverContext.PageTrackingId,\r\n errorMappers: {},\r\n userContext,\r\n serverContext,\r\n applicationName,\r\n isInDevelopmentMode: true,\r\n });\r\n};\r\n\r\nexport const getInstrumentationService = ({ instrumentation }) => {\r\n instrumentation.addScenario(defaultSchema);\r\n const defaultScenario = instrumentation.default.create();\r\n const logger = defaultScenario.logger.create();\r\n\r\n return {\r\n instrumentation,\r\n logger,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport { DomChildrenPropTypes, InstumentationServiceContextPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\n\r\nexport const InstrumentationContext = React.createContext({\r\n logger: _.noop,\r\n instrumentation: _.noop,\r\n});\r\n\r\nexport const InstrumentationContextProvider = props => (\r\n <InstrumentationContext.Provider value={props.context}>\r\n {props.children}\r\n </InstrumentationContext.Provider>\r\n);\r\n\r\nInstrumentationContextProvider.propTypes = {\r\n context: InstumentationServiceContextPropTypes.isRequired,\r\n children: DomChildrenPropTypes.isRequired,\r\n};\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\n\r\nimport { Button, NavItem } from '@bingads-webui-react/primitive';\r\nimport { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FocusLock } from '@bingads-webui-react/focus-lock';\r\n\r\nimport { CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { entityPopoverClassesProps, getEntityPopoverStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { I18nPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\n\r\nconst ListItem = ({\r\n Name,\r\n Url,\r\n}) => (\r\n Url ?\r\n <NavItem\r\n className=\"entity-item link-item\"\r\n target=\"_blank\"\r\n href={Url}\r\n >\r\n {Name}\r\n </NavItem> :\r\n <span className=\"static-item entity-item\">{Name}</span>\r\n);\r\n\r\nListItem.propTypes = {\r\n Name: PropTypes.string.isRequired,\r\n Url: PropTypes.string,\r\n};\r\n\r\nListItem.defaultProps = {\r\n Url: '',\r\n};\r\n\r\nconst EntityPopover = ({\r\n i18n,\r\n classes,\r\n popoverId,\r\n entities,\r\n matchSearch,\r\n isShowing,\r\n onCancelClick,\r\n title,\r\n searchboxPlaceholder,\r\n}) => {\r\n const [searchText, setSearchText] = useState('');\r\n const entityList = _.filter(\r\n entities,\r\n entity => matchSearch(entity, searchText.toLowerCase().trim())\r\n );\r\n\r\n const className = classNames(\r\n classes.entityPopover,\r\n isShowing ? 'open' : ''\r\n );\r\n\r\n return (\r\n <div className={className} id={popoverId} >\r\n <div className=\"dropdown-menu react-dropdown-menu modal-dialog\">\r\n <FocusLock\r\n onExit={onCancelClick}\r\n focusFirstItemOnMount\r\n isControlledFocusLock\r\n isFocusLock={isShowing}\r\n >\r\n <React.Fragment>\r\n {title && <h3>{i18n.getString(title)}</h3>}\r\n <SearchBox\r\n onQueryChange={setSearchText}\r\n onSearch={setSearchText}\r\n placeholder={searchboxPlaceholder && i18n.getString(searchboxPlaceholder)}\r\n value={searchText}\r\n />\r\n {\r\n _.map(entityList, entity => (\r\n <div key={entity.Id} className=\"entity-info-tile level-1\">\r\n <ListItem {...entity} />\r\n {\r\n _.map(entity.Children, child => (\r\n <div key={child.Id} className=\"details-info-tile level-2\">\r\n <ListItem {...child} />\r\n </div>\r\n ))\r\n }\r\n </div>\r\n ))\r\n }\r\n <Button className=\"cancel-button\" onClick={onCancelClick}>\r\n {i18n.getString(CommonLocStrings.CloseLabel)}\r\n </Button>\r\n </React.Fragment>\r\n </FocusLock>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nEntityPopover.propTypes = {\r\n classes: entityPopoverClassesProps.isRequired,\r\n i18n: I18nPropTypes.isRequired,\r\n popoverId: PropTypes.string.isRequired,\r\n isShowing: PropTypes.bool.isRequired,\r\n onCancelClick: PropTypes.func.isRequired,\r\n matchSearch: PropTypes.func.isRequired,\r\n entities: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string.isRequired,\r\n Id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n Url: PropTypes.string,\r\n Children: PropTypes.arrayOf(PropTypes.shape({\r\n Name: PropTypes.string.isRequired,\r\n Id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n Url: PropTypes.string,\r\n })),\r\n })).isRequired,\r\n searchboxPlaceholder: PropTypes.string,\r\n title: PropTypes.string,\r\n};\r\n\r\nEntityPopover.defaultProps = {\r\n searchboxPlaceholder: '',\r\n title: '',\r\n};\r\n\r\nexport const ARWEntityPopover = withI18nConsumer(withDefaultStyles(\r\n EntityPopover,\r\n getEntityPopoverStyles\r\n));\r\n","import React, { useContext, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@bingads-webui-react/primitive';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\n\r\nexport function ARWStepFooter(props) {\r\n const {\r\n saveAndProceed,\r\n onPreviousClick,\r\n onNextClick,\r\n onSubmitClick,\r\n onCancelClick,\r\n nextButtonDisabled,\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n\r\n const onNextButtonClick = useCallback(() => {\r\n if (saveAndProceed) {\r\n saveAndProceed(onNextClick);\r\n } else {\r\n onNextClick();\r\n }\r\n }, [onNextClick, saveAndProceed]);\r\n\r\n const onSaveAndExit = useCallback(() => {\r\n saveAndProceed(onCancelClick);\r\n }, [onCancelClick, saveAndProceed]);\r\n\r\n return (\r\n <div className=\"arw-step-footer\">\r\n { onPreviousClick &&\r\n <Button className=\"arw-step-previous\" onClick={onPreviousClick}>\r\n {i18n.getString(CommonLocStrings.BackLabel)}\r\n </Button>\r\n }\r\n { onNextClick && (\r\n <Button className=\"arw-step-next\" disabled={nextButtonDisabled} onClick={onNextButtonClick}>\r\n {i18n.getString(CommonLocStrings.NextLabel)}\r\n </Button>\r\n )}\r\n { onSubmitClick && (\r\n <Button className=\"arw-step-submit\" disabled={nextButtonDisabled} onClick={onSubmitClick}>\r\n {i18n.getString(CommonLocStrings.SubmitLabel)}\r\n </Button>\r\n )}\r\n <Button className=\"arw-step-cancel\" onClick={onCancelClick}>\r\n {i18n.getString(CommonLocStrings.CancelLabel)}\r\n </Button>\r\n { saveAndProceed && (\r\n <Button className=\"arw-step-saveandexit\" disabled={nextButtonDisabled} onClick={onSaveAndExit}>\r\n {i18n.getString(CommonLocStrings.SaveAndExitLabel)}\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nARWStepFooter.propTypes = {\r\n saveAndProceed: PropTypes.func,\r\n onPreviousClick: PropTypes.func,\r\n onNextClick: PropTypes.func,\r\n onSubmitClick: PropTypes.func,\r\n onCancelClick: PropTypes.func,\r\n nextButtonDisabled: PropTypes.bool,\r\n};\r\n\r\nARWStepFooter.defaultProps = {\r\n saveAndProceed: null,\r\n onPreviousClick: null,\r\n onNextClick: null,\r\n onSubmitClick: null,\r\n onCancelClick: null,\r\n nextButtonDisabled: true,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { ARWStepFooter } from './arw-step-footer';\r\n\r\n/**\r\n * Base layout for ARW wizard steps. Includes UIBlocker, header and footer.\r\n * @param {*} props - See propTypes definition.\r\n * @returns {ReactNode} - Base layout component.\r\n */\r\nexport function ARWStepBaseLayout(props) {\r\n const {\r\n className,\r\n children,\r\n saveAndProceed,\r\n onCancelClick,\r\n onNextClick,\r\n onSubmitClick,\r\n onPreviousClick,\r\n nextButtonDisabled,\r\n } = props;\r\n\r\n return (\r\n <React.Fragment>\r\n <div className={classNames('arw-step-container', className)}>\r\n {children}\r\n </div>\r\n\r\n <ARWStepFooter\r\n saveAndProceed={saveAndProceed}\r\n onCancelClick={onCancelClick}\r\n onPreviousClick={onPreviousClick}\r\n onSubmitClick={onSubmitClick}\r\n onNextClick={onNextClick}\r\n nextButtonDisabled={nextButtonDisabled}\r\n />\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nARWStepBaseLayout.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n className: PropTypes.string,\r\n saveAndProceed: PropTypes.func,\r\n onPreviousClick: PropTypes.func,\r\n onSubmitClick: PropTypes.func,\r\n onNextClick: PropTypes.func,\r\n onCancelClick: PropTypes.func,\r\n nextButtonDisabled: PropTypes.bool,\r\n};\r\n\r\nARWStepBaseLayout.defaultProps = {\r\n children: null,\r\n className: null,\r\n saveAndProceed: null,\r\n onPreviousClick: null,\r\n onSubmitClick: null,\r\n onCancelClick: null,\r\n onNextClick: null,\r\n nextButtonDisabled: true,\r\n};\r\n","import React, { useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\nimport classNames from 'classnames';\r\n\r\nimport { Button, NavItem } from '@bingads-webui-react/primitive';\r\nimport { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { FocusLock } from '@bingads-webui-react/focus-lock';\r\n\r\nimport { TransferSummaryLocStrings as LocStrings, CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { accountsPopoverClassesProps, getAccountsPopoverStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { BasicAccountPropType, I18nPropTypes, CustomerPropType, UserPropType } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { stringContains } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\n\r\nconst matchSearchAccount = (account, srcText) =>\r\n _.isEmpty(srcText) ||\r\n stringContains(account.Name.toLowerCase(), srcText) ||\r\n stringContains(account.Number.toLowerCase(), srcText) ||\r\n stringContains(account.Id.toString().toLowerCase(), srcText);\r\n\r\nconst AccountsPopover = ({\r\n i18n,\r\n classes,\r\n sourceCustomer,\r\n currentUser,\r\n accounts,\r\n onAccountDelete,\r\n isShowing,\r\n onCancelClick,\r\n}) => {\r\n const [searchText, setSearchText] = useState('');\r\n const accountsList = _.filter(\r\n accounts,\r\n acc => matchSearchAccount(acc, searchText.toLowerCase().trim())\r\n );\r\n const onAccountDeleteCb = useCallback((accountId) => {\r\n onAccountDelete(accountId);\r\n }, [onAccountDelete]);\r\n\r\n const buildCampaignsUrl = useCallback(aid =>\r\n new URI(`${window.location.origin}/campaign/vnext/campaigns`)\r\n .search({ uid: currentUser.Id, cid: sourceCustomer.Id, aid })\r\n .href(), [currentUser, sourceCustomer]);\r\n\r\n const className = classNames(\r\n classes.accountsPopover,\r\n isShowing ? 'open' : '',\r\n 'accounts-list-popover-dialog'\r\n );\r\n\r\n return (\r\n <div className={className} >\r\n <div className=\"dropdown-menu react-dropdown-menu modal-dialog\">\r\n <FocusLock\r\n onExit={onCancelClick}\r\n focusFirstItemOnMount\r\n isControlledFocusLock\r\n isFocusLock={isShowing}\r\n >\r\n <React.Fragment>\r\n <h3>{i18n.getString(LocStrings.SelectedAccountsLabel)}</h3>\r\n <SearchBox\r\n onQueryChange={setSearchText}\r\n onSearch={setSearchText}\r\n placeholder={i18n.getString(LocStrings.SearchAccounts)}\r\n value={searchText}\r\n />\r\n {\r\n _.map(accountsList, acc => (\r\n <div key={acc.Id} className=\"account-info-tile\">\r\n <NavItem\r\n className=\"account-name\"\r\n target=\"_blank\"\r\n href={buildCampaignsUrl(acc.Id)}\r\n >\r\n {acc.Name}\r\n </NavItem>\r\n <Button\r\n className=\"btn-link remove-account\"\r\n onClick={() => onAccountDeleteCb(acc.Id)}\r\n >\r\n {i18n.getString(LocStrings.RemoveAccount)}\r\n </Button>\r\n </div>\r\n ))\r\n }\r\n <Button className=\"cancel-button\" onClick={onCancelClick}>\r\n {i18n.getString(CommonLocStrings.CloseLabel)}\r\n </Button>\r\n </React.Fragment>\r\n </FocusLock>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nAccountsPopover.propTypes = {\r\n classes: accountsPopoverClassesProps.isRequired,\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n currentUser: UserPropType.isRequired,\r\n accounts: PropTypes.arrayOf(BasicAccountPropType).isRequired,\r\n onAccountDelete: PropTypes.func.isRequired,\r\n isShowing: PropTypes.bool.isRequired,\r\n onCancelClick: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ARWAccountsPopover = withI18nConsumer(withDefaultStyles(\r\n AccountsPopover,\r\n getAccountsPopoverStyles\r\n));\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\n\r\nimport { Button, NavItem } from '@bingads-webui-react/primitive';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { FocusLock } from '@bingads-webui-react/focus-lock';\r\n\r\nimport { TransferSummaryLocStrings as LocStrings, CommonLocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { accountsPopoverClassesProps, getAccountsPopoverStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { I18nPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { stringContains } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\n\r\nconst matchSearchAccount = (account, srcText) =>\r\n _.isEmpty(srcText) ||\r\n stringContains(account.Account.Name.toLowerCase(), srcText) ||\r\n stringContains(account.Account.Number.toLowerCase(), srcText) ||\r\n stringContains(account.Account.Id.toString().toLowerCase(), srcText) ||\r\n stringContains(account.Manager.Name.toLowerCase(), srcText) ||\r\n stringContains(account.Manager.Number.toLowerCase(), srcText) ||\r\n stringContains(account.Manager.Id.toString().toLowerCase(), srcText);\r\n\r\nconst AccountManagerPopover = ({\r\n i18n,\r\n classes,\r\n accounts,\r\n isShowing,\r\n popoverTitle,\r\n onCancelClick,\r\n onAccountClickUrl,\r\n onManagerClickUrl,\r\n}) => {\r\n const [searchText, setSearchText] = useState('');\r\n const accountsList = _.filter(\r\n accounts,\r\n acc => matchSearchAccount(acc, searchText.toLowerCase().trim())\r\n );\r\n const className = classNames(\r\n classes.accountsPopover,\r\n isShowing ? 'open' : '',\r\n 'accounts-managers-popover-dialog'\r\n );\r\n\r\n return (\r\n <div className={className} >\r\n <div className=\"dropdown-menu react-dropdown-menu modal-dialog\">\r\n <FocusLock\r\n onExit={onCancelClick}\r\n focusFirstItemOnMount\r\n isControlledFocusLock\r\n isFocusLock={isShowing}\r\n >\r\n <React.Fragment>\r\n <h3>{popoverTitle}</h3>\r\n <SearchBox\r\n onQueryChange={setSearchText}\r\n onSearch={setSearchText}\r\n placeholder={i18n.getString(LocStrings.SearchAccounts)}\r\n value={searchText}\r\n />\r\n {\r\n accountsList && _.map(accountsList, acc => (\r\n <div key={acc.Id} className=\"account-info-tile\">\r\n <NavItem key=\"1\" className=\"account-name\" target=\"_blank\" href={onAccountClickUrl(acc.Account.Id)}>\r\n {acc.Account.Name}\r\n </NavItem>\r\n <NavItem key=\"2\" className=\"manager-name\" target=\"_blank\" href={onManagerClickUrl(acc.Manager.Id)}>\r\n {acc.Manager.Name}\r\n </NavItem>\r\n </div>\r\n ))\r\n }\r\n <Button className=\"cancel-button\" onClick={onCancelClick}>\r\n {i18n.getString(CommonLocStrings.CloseLabel)}\r\n </Button>\r\n </React.Fragment>\r\n </FocusLock>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nAccountManagerPopover.propTypes = {\r\n classes: accountsPopoverClassesProps.isRequired,\r\n i18n: I18nPropTypes.isRequired,\r\n popoverTitle: PropTypes.string.isRequired,\r\n accounts: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n isShowing: PropTypes.bool.isRequired,\r\n onCancelClick: PropTypes.func.isRequired,\r\n onAccountClickUrl: PropTypes.func.isRequired,\r\n onManagerClickUrl: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ARWAccountManagerPopover =\r\n withI18nConsumer(withDefaultStyles(AccountManagerPopover, getAccountsPopoverStyles));\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { Button } from '@bingads-webui-react/primitive';\r\n\r\nconst StaticText = (props) => {\r\n const classes = props.className.replace('btn-link', '');\r\n const withouEvents = _.omit(props, 'onClick');\r\n return (<span {...withouEvents} className={classes}>{props.children}</span>);\r\n};\r\n\r\nStaticText.propTypes = {\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n className: PropTypes.string,\r\n};\r\n\r\nStaticText.defaultProps = {\r\n children: null,\r\n className: {},\r\n};\r\n\r\nexport const ButtonOrStatic = (props) => {\r\n const Component = props.isButton ? Button : StaticText;\r\n const newProps = _.omit(props, 'isButton');\r\n return (\r\n <Component {...newProps} >{props.children}</Component>\r\n );\r\n};\r\n\r\nButtonOrStatic.propTypes = {\r\n isButton: PropTypes.bool,\r\n children: PropTypes.oneOfType([\r\n PropTypes.node,\r\n PropTypes.arrayOf(PropTypes.node),\r\n ]),\r\n};\r\n\r\nButtonOrStatic.defaultProps = {\r\n isButton: true,\r\n children: null,\r\n};\r\n","import React from 'react';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\n\r\nconst iconStyle = {\r\n fontWeight: '600',\r\n margin: '0 4px',\r\n fontSize: '16px',\r\n};\r\n\r\nexport const OkIcon = () => <Glyphicon glyph=\"ok-sign\" style={{ color: '#006400', ...iconStyle }} />;\r\nexport const WarningIcon = () => <Glyphicon glyph=\"alert\" style={{ color: '#ffa500', ...iconStyle }} />;\r\n","import React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\n\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { I18nPropTypes, CustomerPropType, UserPropType } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\n\r\nimport { ARWAccountManagerPopover } from './account-manager-popover';\r\nimport { ButtonOrStatic } from './button-or-static';\r\nimport { WarningIcon, OkIcon } from './icons';\r\n\r\nconst AccountLinksSummary = ({\r\n i18n,\r\n accounts,\r\n currentUser,\r\n sourceCustomer,\r\n}) => {\r\n const [isUnlinkedAccountsModalDisplayed, setIsUnlinkedAccountsModalDisplayed] = useState(false);\r\n const [isRetainedAccountsModalDisplayed, setIsRetainedAccountsModalDisplayed] = useState(false);\r\n\r\n const showUnlinkedAccountsModal = useCallback(() => {\r\n setIsUnlinkedAccountsModalDisplayed(true);\r\n }, [setIsUnlinkedAccountsModalDisplayed]);\r\n const hideUnlinkedAccountsModal = useCallback(() => {\r\n setIsUnlinkedAccountsModalDisplayed(false);\r\n }, [setIsUnlinkedAccountsModalDisplayed]);\r\n\r\n const showRetainedAccountsModal = useCallback(() => {\r\n setIsRetainedAccountsModalDisplayed(true);\r\n }, [setIsRetainedAccountsModalDisplayed]);\r\n const hideRetainedAccountsModal = useCallback(() => {\r\n setIsRetainedAccountsModalDisplayed(false);\r\n }, [setIsRetainedAccountsModalDisplayed]);\r\n\r\n const buildCampaignsUrl = useCallback(aid =>\r\n new URI(`${window.location.origin}/campaign/vnext/campaigns`)\r\n .search({ uid: currentUser.Id, cid: sourceCustomer.Id, aid })\r\n .href(), [currentUser, sourceCustomer]);\r\n const buildAccountsUrl = useCallback(cid =>\r\n new URI(`${window.location.origin}/campaign/vnext/accounts/management`)\r\n .search({ uid: currentUser.Id, cid: cid || sourceCustomer.Id })\r\n .href(), [currentUser, sourceCustomer]);\r\n\r\n const { unlinkedAccounts, retainedAccounts } = useMemo(() => {\r\n const retained = [];\r\n const unlinked = [];\r\n _.each(accounts, (acc) => {\r\n _.each(acc.LinkedManagers, (manager) => {\r\n const accountManager = {\r\n Id: `${acc.Id}-${manager.Id}`,\r\n Account: acc,\r\n Manager: manager,\r\n };\r\n if (manager.Unlink) {\r\n unlinked.push(accountManager);\r\n } else {\r\n retained.push(accountManager);\r\n }\r\n });\r\n });\r\n return { unlinkedAccounts: unlinked, retainedAccounts: retained };\r\n }, [accounts]);\r\n\r\n return (\r\n <div className=\"accountlinks-summary\">\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value accounts-popover-btn popover-btn\"\r\n onClick={showRetainedAccountsModal}\r\n isButton={!!retainedAccounts.length}\r\n >\r\n {i18n.getString(LocStrings.RetainedAccountsLabel, { count: retainedAccounts.length })}\r\n <OkIcon />\r\n </ButtonOrStatic>\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value accounts-popover-btn popover-btn\"\r\n onClick={showUnlinkedAccountsModal}\r\n isButton={!!unlinkedAccounts.length}\r\n >\r\n {i18n.getString(LocStrings.UnlinkedAccountsLabel, { count: unlinkedAccounts.length })}\r\n <WarningIcon />\r\n </ButtonOrStatic>\r\n <ARWAccountManagerPopover\r\n key=\"1\"\r\n popoverTitle={LocStrings.UnlinkedAccountLinksLabel}\r\n accounts={unlinkedAccounts}\r\n isShowing={isUnlinkedAccountsModalDisplayed}\r\n onCancelClick={hideUnlinkedAccountsModal}\r\n onAccountClickUrl={aid => buildCampaignsUrl(aid)}\r\n onManagerClickUrl={cid => buildAccountsUrl(cid)}\r\n />\r\n <ARWAccountManagerPopover\r\n key=\"2\"\r\n popoverTitle={LocStrings.RatinedAccountLinksLabel}\r\n accounts={retainedAccounts}\r\n isShowing={isRetainedAccountsModalDisplayed}\r\n onCancelClick={hideRetainedAccountsModal}\r\n onAccountClickUrl={aid => buildCampaignsUrl(aid)}\r\n onManagerClickUrl={cid => buildAccountsUrl(cid)}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nAccountLinksSummary.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n currentUser: UserPropType.isRequired,\r\n accounts: PropTypes.arrayOf(PropTypes.shape({\r\n LinkedManagers: PropTypes.arrayOf(PropTypes.shape({\r\n Unlink: PropTypes.bool,\r\n })),\r\n })).isRequired,\r\n};\r\n\r\nexport const ARWAccountLinksSummary = withI18nConsumer(AccountLinksSummary);\r\n","import React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\n\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { I18nPropTypes, CustomerPropType, UserPropType } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\n\r\nimport { ARWAccountManagerPopover } from './account-manager-popover';\r\nimport { ButtonOrStatic } from './button-or-static';\r\nimport { OkIcon } from './icons';\r\n\r\nconst AccountBillingSummary = ({\r\n i18n,\r\n accounts,\r\n sourceCustomer,\r\n currentUser,\r\n clientCenterUIAPI,\r\n}) => {\r\n const [isNewBillToAccountsModalDisplayed, setIsNewBillToAccountsModalDisplayed] = useState(false);\r\n const [isRetainedAccountsModalDisplayed, setIsRetainedAccountsModalDisplayed] = useState(false);\r\n\r\n const showNewBillToAccountsModal = useCallback(() => {\r\n setIsNewBillToAccountsModalDisplayed(true);\r\n }, [setIsNewBillToAccountsModalDisplayed]);\r\n const hideNewBillToAccountsModal = useCallback(() => {\r\n setIsNewBillToAccountsModalDisplayed(false);\r\n }, [setIsNewBillToAccountsModalDisplayed]);\r\n\r\n const showRetainedAccountsModal = useCallback(() => {\r\n setIsRetainedAccountsModalDisplayed(true);\r\n }, [setIsRetainedAccountsModalDisplayed]);\r\n const hideRetainedAccountsModal = useCallback(() => {\r\n setIsRetainedAccountsModalDisplayed(false);\r\n }, [setIsRetainedAccountsModalDisplayed]);\r\n\r\n const { retainedAccounts, newBillToAccounts } = useMemo(() => {\r\n const retained = _.filter(\r\n accounts,\r\n acc => acc.BillToManager && acc.BillToManager.BillTo\r\n );\r\n const newBillTo = _.filter(\r\n accounts,\r\n acc => !acc.BillToManager || !acc.BillToManager.BillTo\r\n );\r\n return { newBillToAccounts: newBillTo, retainedAccounts: retained };\r\n }, [accounts]);\r\n\r\n const toAccountManagerMap = useCallback(account => ({\r\n Id: `${account.Id}-${account.BillToManager.Id}`,\r\n Account: account,\r\n Manager: account.BillToManager,\r\n }), []);\r\n\r\n const buildBillingUrl = useCallback((cid, aid) =>\r\n new URI(`${clientCenterUIAPI}billing`)\r\n .search({ uid: currentUser.Id, cid: cid || sourceCustomer.Id, aid })\r\n .href(), [currentUser, sourceCustomer, clientCenterUIAPI]);\r\n\r\n return (\r\n <div className=\"accountbilling-summary\">\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value accounts-popover-btn popover-btn\"\r\n onClick={showNewBillToAccountsModal}\r\n isButton={!!newBillToAccounts.length}\r\n >\r\n {i18n.getString(LocStrings.NewBillToLabel, { count: newBillToAccounts.length })}\r\n <OkIcon />\r\n </ButtonOrStatic>\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value accounts-popover-btn popover-btn\"\r\n onClick={showRetainedAccountsModal}\r\n isButton={!!retainedAccounts.length}\r\n >\r\n {i18n.getString(LocStrings.RetainedBillToLabel, { count: retainedAccounts.length })}\r\n <OkIcon />\r\n </ButtonOrStatic>\r\n <ARWAccountManagerPopover\r\n key=\"1\"\r\n popoverTitle={LocStrings.NewBillToAccountsLabel}\r\n accounts={_.map(newBillToAccounts || [], acc => toAccountManagerMap(acc))}\r\n isShowing={isNewBillToAccountsModalDisplayed}\r\n onCancelClick={hideNewBillToAccountsModal}\r\n onAccountClickUrl={aid => buildBillingUrl(null, aid)}\r\n onManagerClickUrl={cid => buildBillingUrl(cid)}\r\n />\r\n <ARWAccountManagerPopover\r\n key=\"2\"\r\n popoverTitle={LocStrings.RetainedBillToAccountsLabel}\r\n accounts={_.map(retainedAccounts || [], acc => toAccountManagerMap(acc))}\r\n isShowing={isRetainedAccountsModalDisplayed}\r\n onCancelClick={hideRetainedAccountsModal}\r\n onAccountClickUrl={aid => buildBillingUrl(null, aid)}\r\n onManagerClickUrl={cid => buildBillingUrl(cid)}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nAccountBillingSummary.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n currentUser: UserPropType.isRequired,\r\n clientCenterUIAPI: PropTypes.string.isRequired,\r\n accounts: PropTypes.arrayOf(PropTypes.shape({\r\n BillToManager: PropTypes.shape({\r\n BillTo: PropTypes.bool,\r\n }),\r\n })).isRequired,\r\n};\r\n\r\nexport const ARWAccountBillingSummary = withI18nConsumer(AccountBillingSummary);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Label, FormGroup } from '@bingads-webui-react/primitive';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { I18nPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { paymentOptionIdToKeyMap, TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\n\r\nexport const AccountPaymentSummary = ({ i18n, paymentOptionId }) => {\r\n const paymentOptionKey = paymentOptionIdToKeyMap[paymentOptionId];\r\n\r\n return (\r\n <FormGroup className=\"accounts-payments-info\">\r\n <Label className=\"arw-label-title\">\r\n {i18n.getString(LocStrings.PaymentOption)}\r\n </Label>\r\n <Label className=\"arw-label-value\">\r\n {i18n.getString(paymentOptionKey)}\r\n </Label>\r\n </FormGroup>\r\n );\r\n};\r\n\r\nAccountPaymentSummary.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n paymentOptionId: PropTypes.number,\r\n};\r\n\r\nAccountPaymentSummary.defaultProps = {\r\n paymentOptionId: null,\r\n};\r\n\r\nexport const ARWAccountPaymentSummary = withI18nConsumer(AccountPaymentSummary);\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport { Label, FormGroup } from '@bingads-webui-react/primitive';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { CustomerPropType, I18nPropTypes, UserPropType } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { WarningIcon, OkIcon } from './icons';\r\nimport { ButtonOrStatic } from './button-or-static';\r\n\r\nconst InsertionOrdersSummary = ({\r\n accounts,\r\n clientCenterUIAPI,\r\n currentUser,\r\n i18n,\r\n reparentingId,\r\n sourceCustomer,\r\n}) => {\r\n // TODO: Move construction to client center repo (its repeated in a few places)\r\n const preApprovalIOPageUrl = useMemo(\r\n () => new URI(`${clientCenterUIAPI}InsertionOrder/PreApprove`)\r\n .search({\r\n rpid: reparentingId,\r\n iosrc: Constants.IOCreationSource.Reparenting,\r\n uid: currentUser.Id,\r\n cid: sourceCustomer.Id,\r\n }).href(),\r\n [reparentingId, currentUser.Id, sourceCustomer.Id, clientCenterUIAPI]\r\n );\r\n\r\n const ioStatusCounts = useMemo(\r\n () => {\r\n const accountsBillToChange = _.filter(\r\n _.pluck(\r\n accounts,\r\n 'BillToChange'\r\n ),\r\n billToChange => !!billToChange\r\n );\r\n\r\n return _.reduce(\r\n accountsBillToChange,\r\n (counts, { InsertionOrder }) => {\r\n if (!InsertionOrder) {\r\n return counts;\r\n }\r\n\r\n switch (InsertionOrder.ioStatus) {\r\n case Constants.InsertionOrderStatus.PendingBillToPartyChangeAndUserReview:\r\n return { ...counts, pending: counts.pending + 1 };\r\n\r\n case Constants.InsertionOrderStatus.PendingBillToPartyChange:\r\n return { ...counts, approved: counts.approved + 1 };\r\n\r\n case Constants.InsertionOrderStatus.Declined:\r\n return { ...counts, declined: counts.declined + 1 };\r\n\r\n default:\r\n return counts;\r\n }\r\n },\r\n { approved: 0, declined: 0, pending: 0 }\r\n );\r\n },\r\n [accounts]\r\n );\r\n\r\n const navigateToIOApprovalPage = useCallback(\r\n /* istanbul ignore next */\r\n () => {\r\n window.location.href = preApprovalIOPageUrl;\r\n },\r\n [preApprovalIOPageUrl]\r\n );\r\n\r\n const renderCountsRow = (locKey, count, icon) => (\r\n <ButtonOrStatic className=\"btn-link arw-label-value popover-btn\" onClick={navigateToIOApprovalPage} isButton={!!count}>\r\n {\r\n i18n.getString(locKey, { count })\r\n }\r\n\r\n {icon}\r\n </ButtonOrStatic>\r\n );\r\n\r\n const approvedLabel = ioStatusCounts.approved > 0 ? (\r\n renderCountsRow(LocStrings.InsertionOrdersApproved, ioStatusCounts.approved, <OkIcon />)\r\n ) : null;\r\n\r\n const declinedLabel = ioStatusCounts.declined > 0 ? (\r\n renderCountsRow(LocStrings.InsertionOrdersDeclined, ioStatusCounts.declined, <WarningIcon />)\r\n ) : null;\r\n\r\n const pendingLabel = ioStatusCounts.pending > 0 ? (\r\n renderCountsRow(LocStrings.InsertionOrdersPending, ioStatusCounts.pending, <WarningIcon />)\r\n ) : null;\r\n\r\n if (!approvedLabel && !pendingLabel && !declinedLabel) {\r\n return null;\r\n }\r\n\r\n return (\r\n <FormGroup className=\"insertion-orders-info\">\r\n <Label className=\"arw-label-title\">\r\n {i18n.getString(LocStrings.InsertionOrders)}\r\n </Label>\r\n\r\n <div className=\"arw-label-value\">\r\n {approvedLabel}\r\n {declinedLabel}\r\n {pendingLabel}\r\n </div>\r\n </FormGroup>\r\n );\r\n};\r\n\r\n\r\nInsertionOrdersSummary.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n currentUser: UserPropType.isRequired,\r\n clientCenterUIAPI: PropTypes.string.isRequired,\r\n reparentingId: PropTypes.number.isRequired,\r\n accounts: PropTypes.arrayOf(PropTypes.shape({\r\n BillToChange: PropTypes.object,\r\n })).isRequired,\r\n};\r\n\r\nexport const ARWInsertionOrdersSummary = withI18nConsumer(InsertionOrdersSummary);\r\n","import React, { useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\n\r\nimport { getRoutePathById, allSiteMap } from '@bingads-webui-react/with-site-map';\r\nimport { FormGroup, Label } from '@bingads-webui-react/primitive';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { I18nPropTypes, CustomerPropType, UserPropType, UETTagsPropTypes } from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { stringContains } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { ARWEntityPopover } from '@bingads-webui-campaign-react/account-reparenting-popover';\r\n\r\nimport { ButtonOrStatic } from './button-or-static';\r\nimport { WarningIcon, OkIcon } from './icons';\r\n\r\nconst matchSearchAccount = (account, srcText) =>\r\n _.isEmpty(srcText) ||\r\n stringContains(account.Name.toLowerCase(), srcText) ||\r\n stringContains(account.Number.toLowerCase(), srcText) ||\r\n stringContains(account.Id.toString().toLowerCase(), srcText);\r\n\r\nconst matchSearchTag = (tag, srcText) =>\r\n _.isEmpty(srcText) ||\r\n stringContains(tag.Name.toLowerCase(), srcText) ||\r\n stringContains(tag.Id.toString().toLowerCase(), srcText);\r\n\r\nconst UETTagsSummary = ({\r\n i18n,\r\n currentUser,\r\n sourceCustomer,\r\n uetTags,\r\n}) => {\r\n const [isUETPanelDisplayed, setIsUETPanelDisplayed] = useState(false);\r\n const [isAccountPanelDisplayed, setIsAccountPanelDisplayed] = useState(false);\r\n const showUETPanel = useCallback(() => {\r\n setIsUETPanelDisplayed(true);\r\n }, [setIsUETPanelDisplayed]);\r\n const hideUETPanel = useCallback(() => {\r\n setIsUETPanelDisplayed(false);\r\n }, [setIsUETPanelDisplayed]);\r\n\r\n const showAccountsPanel = useCallback(() => {\r\n setIsAccountPanelDisplayed(true);\r\n }, [setIsAccountPanelDisplayed]);\r\n const hideAccountsPanel = useCallback(() => {\r\n setIsAccountPanelDisplayed(false);\r\n }, [setIsAccountPanelDisplayed]);\r\n\r\n const transferTags = _.filter(uetTags, tag => tag.Move);\r\n const loseAccessAccounts = _.map(_.uniq(_.reduce(\r\n uetTags, (memo, tag) => [\r\n ...memo,\r\n ...(tag.Move ? tag.TagUsedByInfosImpactedByTransfer : tag.TagUsedByInfosImpactedByKeep),\r\n ],\r\n []\r\n ), false, accounts => accounts.Account.Id), obj => obj.Account);\r\n\r\n\r\n const buildCampaignsUrl = useCallback(({ Id }) =>\r\n new URI(`${window.location.origin}${getRoutePathById(allSiteMap, 'campaigns')}`)\r\n .search({ uid: currentUser.Id, cid: sourceCustomer.Id, aid: Id })\r\n // TODO not sourceCustomer for cid-cid link\r\n .href(), [currentUser, sourceCustomer]);\r\n\r\n const buildUETUrl = useCallback(({ Id }) =>\r\n new URI(`${window.location.origin}${getRoutePathById(allSiteMap, 'uet-tag')}`)\r\n .search({\r\n uid: currentUser.Id,\r\n cid: sourceCustomer.Id,\r\n filterExpressions: JSON.stringify([{\r\n SelectedColumn: 'Id',\r\n SelectedOperator: 'Equal',\r\n Values: [Id],\r\n }]),\r\n })\r\n .href(), [currentUser, sourceCustomer]);\r\n const uets = _.map(transferTags, item => _.extend({}, item, {\r\n Url: buildUETUrl(item),\r\n }));\r\n const accounts = _.map(loseAccessAccounts, item => _.extend({}, item, {\r\n Url: buildCampaignsUrl(item),\r\n }));\r\n\r\n return (\r\n <FormGroup className=\"uet-tags-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.UETTagLabel)}</Label>\r\n <div className=\"arw-label-value\">\r\n <div className=\"uet-tags-summary\">\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value uet-tags-popover-btn popover-btn\"\r\n onClick={showUETPanel}\r\n isButton={!!transferTags.length}\r\n >\r\n {\r\n transferTags.length !== 1 ?\r\n i18n.getString(LocStrings.UETTagsTransfered, { count: transferTags.length }) :\r\n i18n.getString(LocStrings.UETTagTransfered)\r\n }\r\n <OkIcon />\r\n </ButtonOrStatic>\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value uet-tags-accounts-popover-btn popover-btn\"\r\n onClick={showAccountsPanel}\r\n isButton={!!loseAccessAccounts.length}\r\n >\r\n {\r\n loseAccessAccounts.length !== 1 ?\r\n i18n.getString(LocStrings.AccountsLoseAccess, {\r\n count: loseAccessAccounts.length,\r\n }) :\r\n i18n.getString(LocStrings.AccountLoseAccess)\r\n }\r\n <WarningIcon />\r\n </ButtonOrStatic>\r\n <ARWEntityPopover\r\n key=\"1\"\r\n popoverId=\"uet-tags-popover\"\r\n isShowing={isUETPanelDisplayed}\r\n onCancelClick={hideUETPanel}\r\n matchSearch={matchSearchTag}\r\n entities={uets}\r\n searchboxPlaceholder={LocStrings.SearchUETTags}\r\n title={LocStrings.UETPopoverTitle}\r\n />\r\n <ARWEntityPopover\r\n key=\"2\"\r\n popoverId=\"lose-access-accounts-popover\"\r\n isShowing={isAccountPanelDisplayed}\r\n onCancelClick={hideAccountsPanel}\r\n matchSearch={matchSearchAccount}\r\n entities={accounts}\r\n searchboxPlaceholder={LocStrings.SearchAccounts}\r\n title={LocStrings.LoseAccessAccountPopoverTitle}\r\n />\r\n </div>\r\n </div>\r\n </FormGroup>\r\n );\r\n};\r\n\r\nUETTagsSummary.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n currentUser: UserPropType.isRequired,\r\n uetTags: PropTypes.arrayOf(UETTagsPropTypes).isRequired,\r\n};\r\n\r\nexport const ARWUETTagsSummary = withI18nConsumer(UETTagsSummary);\r\n","import React, { useState, useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport URI from 'urijs';\r\n\r\nimport { downloadifyBlob } from '@bingads-webui/download-service';\r\nimport { FormGroup, Label, NavItem, Glyphicon, Button } from '@bingads-webui-react/primitive';\r\nimport { withI18nConsumer } from '@bingads-webui-react/i18n-context';\r\nimport { Constants } from '@bingads-webui-clientcenter/entity-utils';\r\nimport {\r\n I18nPropTypes,\r\n BasicAccountPropType,\r\n CustomerPropType,\r\n UserPropType,\r\n NewBillToPropType,\r\n UETTagsPropTypes,\r\n} from '@bingads-webui-campaign-react/account-reparenting-props';\r\nimport { TransferSummaryLocStrings as LocStrings } from '@bingads-webui-campaign-react/account-reparenting-localization';\r\nimport { useUETTagActions } from '@bingads-webui-campaign-react/account-reparenting-actions';\r\nimport { useARWContextPermissions } from '@bingads-webui-campaign-react/account-reparenting-context-provider';\r\n\r\nimport { ARWAccountsPopover } from './accounts-popover';\r\nimport { ARWAccountLinksSummary } from './accountlinks-summary';\r\nimport { ARWAccountBillingSummary } from './accountbilling-summary';\r\nimport { ARWAccountPaymentSummary } from './account-payment-summary';\r\nimport { ARWInsertionOrdersSummary } from './insertion-orders-summary';\r\nimport { ARWUETTagsSummary } from './uet-tags-summary';\r\nimport { ButtonOrStatic } from './button-or-static';\r\n\r\nconst RequestSummaryPane = ({\r\n i18n,\r\n currentUser,\r\n sourceCustomer,\r\n targetCustomer,\r\n accounts,\r\n newBillTo,\r\n onAccountDelete,\r\n reparentingId,\r\n clientCenterUIAPI,\r\n paymentOptionId,\r\n uetTags,\r\n showSummaryPaneLinkSettings,\r\n showSummaryPaneBillingSetting,\r\n}) => {\r\n const [isAccountsListPopoverDisplayed, setIsAccountsListPopoverDisplayed] = useState(false);\r\n const showAccountsListPopover = useCallback(() => {\r\n setIsAccountsListPopoverDisplayed(true);\r\n }, [setIsAccountsListPopoverDisplayed]);\r\n const hideAccountsListPopover = useCallback(() => {\r\n setIsAccountsListPopoverDisplayed(false);\r\n }, [setIsAccountsListPopoverDisplayed]);\r\n const uetActions = useUETTagActions();\r\n const isUETEnabled = useARWContextPermissions().IsAccountReparentingUETEnabled;\r\n const downloadSummary = useCallback(() => {\r\n uetActions.download().then((response) => {\r\n downloadifyBlob(response, 'AccountTransferSummary.xlsx');\r\n }).catch((e) => {\r\n throw e;\r\n });\r\n }, [uetActions]);\r\n\r\n const buildTransferSummaryDownloadUrl = useCallback(() =>\r\n new URI(`${clientCenterUIAPI}api/reparenting/RenderAccountTransferSummaryExcel`)\r\n .search({\r\n id: reparentingId,\r\n uid: currentUser.Id,\r\n cid: sourceCustomer.Id,\r\n sourceCid: sourceCustomer.Id,\r\n })\r\n .href(), [currentUser, clientCenterUIAPI, sourceCustomer, reparentingId]);\r\n\r\n return (\r\n <div className={classNames('transfer-request-summary')}>\r\n <div className=\"arw-page-header\">\r\n {i18n.getString(LocStrings.SummaryPaneHeader)}\r\n </div>\r\n { sourceCustomer && sourceCustomer.Name && (\r\n <FormGroup className=\"current-owner-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.CurrentManagerAccountLabel)}</Label>\r\n <Label className=\"arw-label-value\">{sourceCustomer.Name}</Label>\r\n </FormGroup>\r\n )}\r\n { accounts && accounts.length && (\r\n <FormGroup className=\"selected-accounts-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.AccountsSelectedLabel)}</Label>\r\n <ButtonOrStatic\r\n className=\"btn-link arw-label-value accounts-popover-btn popover-btn\"\r\n onClick={showAccountsListPopover}\r\n isButton={!!accounts.length}\r\n >\r\n {i18n.getString(LocStrings.NumberOfAccounts, { count: accounts.length })}\r\n </ButtonOrStatic>\r\n <ARWAccountsPopover\r\n accounts={accounts}\r\n currentUser={currentUser}\r\n sourceCustomer={sourceCustomer}\r\n onAccountDelete={onAccountDelete}\r\n isShowing={isAccountsListPopoverDisplayed}\r\n onCancelClick={hideAccountsListPopover}\r\n clientCenterUIAPI={clientCenterUIAPI}\r\n />\r\n </FormGroup>\r\n )}\r\n { targetCustomer && targetCustomer.Name && (\r\n <FormGroup className=\"target-owner-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.NewManagerAccountLabel)}</Label>\r\n <Label className=\"arw-label-value\">{targetCustomer.Name}</Label>\r\n </FormGroup>\r\n )}\r\n { accounts && showSummaryPaneLinkSettings && (\r\n <FormGroup className=\"accounts-linking-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.AccountLinksLabel)}</Label>\r\n <div className=\"arw-label-value\">\r\n <ARWAccountLinksSummary\r\n accounts={accounts}\r\n currentUser={currentUser}\r\n sourceCustomer={sourceCustomer}\r\n clientCenterUIAPI={clientCenterUIAPI}\r\n />\r\n </div>\r\n </FormGroup>\r\n )}\r\n { accounts && showSummaryPaneBillingSetting && (\r\n <FormGroup className=\"accounts-billing-info\">\r\n <Label className=\"arw-label-title\">{i18n.getString(LocStrings.BillingSetupLabel)}</Label>\r\n <div className=\"arw-label-value\">\r\n <ARWAccountBillingSummary\r\n accounts={accounts}\r\n currentUser={currentUser}\r\n sourceCustomer={sourceCustomer}\r\n clientCenterUIAPI={clientCenterUIAPI}\r\n />\r\n </div>\r\n </FormGroup>\r\n )}\r\n { newBillTo && newBillTo.Customer && _.isNumber(paymentOptionId) &&\r\n <ARWAccountPaymentSummary paymentOptionId={paymentOptionId} />\r\n }\r\n {\r\n sourceCustomer &&\r\n newBillTo &&\r\n newBillTo.Customer &&\r\n paymentOptionId === Constants.PaymentOptionId.Invoice &&\r\n <ARWInsertionOrdersSummary\r\n clientCenterUIAPI={clientCenterUIAPI}\r\n accounts={accounts}\r\n currentUser={currentUser}\r\n sourceCustomer={sourceCustomer}\r\n reparentingId={reparentingId}\r\n />\r\n }\r\n {\r\n uetTags && uetTags.saved &&\r\n <ARWUETTagsSummary\r\n currentUser={currentUser}\r\n sourceCustomer={sourceCustomer}\r\n uetTags={uetTags}\r\n />\r\n }\r\n {\r\n isUETEnabled ?\r\n <Button\r\n onClick={downloadSummary}\r\n className=\"download-summary-link btn-link\"\r\n >\r\n <Glyphicon glyph=\"download\" />\r\n {i18n.getString(LocStrings.DownloadSummaryLinkLabel)}\r\n </Button> :\r\n <NavItem href={buildTransferSummaryDownloadUrl()} className=\"download-summary-link\">\r\n <Glyphicon glyph=\"download\" />\r\n {i18n.getString(LocStrings.DownloadSummaryLinkLabel)}\r\n </NavItem>\r\n }\r\n </div>\r\n );\r\n};\r\n\r\nRequestSummaryPane.propTypes = {\r\n i18n: I18nPropTypes.isRequired,\r\n sourceCustomer: CustomerPropType.isRequired,\r\n targetCustomer: CustomerPropType,\r\n currentUser: UserPropType.isRequired,\r\n accounts: PropTypes.arrayOf(BasicAccountPropType),\r\n newBillTo: NewBillToPropType,\r\n onAccountDelete: PropTypes.func,\r\n reparentingId: PropTypes.number.isRequired,\r\n clientCenterUIAPI: PropTypes.string.isRequired,\r\n paymentOptionId: PropTypes.number,\r\n uetTags: PropTypes.arrayOf(UETTagsPropTypes),\r\n showSummaryPaneBillingSetting: PropTypes.bool,\r\n showSummaryPaneLinkSettings: PropTypes.bool,\r\n};\r\n\r\nRequestSummaryPane.defaultProps = {\r\n onAccountDelete: _.noop,\r\n targetCustomer: null,\r\n accounts: null,\r\n newBillTo: null,\r\n paymentOptionId: null,\r\n uetTags: [],\r\n showSummaryPaneBillingSetting: false,\r\n showSummaryPaneLinkSettings: false,\r\n};\r\n\r\nexport const TransferRequestSummary = withI18nConsumer(RequestSummaryPane);\r\n","import React, { useCallback } from 'react';\r\nimport classNames from 'classnames';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport { useARWContextValue, useARWContextActions, usePaymentOptionId, useARWContextPermissions } from '@bingads-webui-campaign-react/account-reparenting-context-provider';\r\nimport { summaryPaneClassesProps, getSummaryPaneStyles } from '@bingads-webui-campaign-react/account-reparenting-styles';\r\nimport { useReparentingJobActions, useUETTagActions } from '@bingads-webui-campaign-react/account-reparenting-actions';\r\nimport { JobUpdateTypes } from '@bingads-webui-campaign-react/account-reparenting-utils';\r\nimport { TransferRequestSummary } from '@bingads-webui-campaign-react/transfer-request-summary';\r\n\r\nconst SummaryPane = ({ classes }) => {\r\n const serverContext = useARWContextValue();\r\n const contextActions = useARWContextActions();\r\n const jobActions = useReparentingJobActions();\r\n const paymentOptionId = usePaymentOptionId();\r\n const uetActions = useUETTagActions();\r\n const {\r\n Accounts,\r\n SourceCustomer,\r\n TargetCustomer,\r\n CurrentUser,\r\n NewBillTo,\r\n ReparentingId,\r\n ServicesEndpoints,\r\n UETTags,\r\n ShowSummaryPaneLinkSettings,\r\n ShowSummaryPaneBillingSetting,\r\n } = serverContext;\r\n const isUETEnabled = useARWContextPermissions().IsAccountReparentingUETEnabled;\r\n const { UpdateUETTags } = contextActions;\r\n\r\n const onAccountDelete = useCallback((accountId) => {\r\n const updatedAccounts = _.reject(Accounts, acc => acc.Id === accountId);\r\n jobActions.update({\r\n updateType: JobUpdateTypes.ReparentingAccountDelete,\r\n accountIds: _.pluck(updatedAccounts, 'Id'),\r\n })\r\n .then(() => {\r\n contextActions.DeleteAccount(accountId);\r\n if (isUETEnabled) {\r\n uetActions.load()\r\n .then(({ UetSetting }) => {\r\n const tagInfos = _.extend([], UetSetting.TagInfos, {\r\n saved: UetSetting.IsSaved,\r\n });\r\n UpdateUETTags(tagInfos);\r\n })\r\n .catch(() => {\r\n // TODO, error handling\r\n })\r\n .finally(withUiBlock($('.accounts-list-popover-dialog')));\r\n }\r\n })\r\n .finally(withUiBlock($('.accounts-list-popover-dialog')));\r\n }, [Accounts, jobActions, contextActions, isUETEnabled, uetActions, UpdateUETTags]);\r\n\r\n return (\r\n <div className={classNames('summary-pane', classes.summaryPaneContainer)}>\r\n <TransferRequestSummary\r\n sourceCustomer={SourceCustomer}\r\n targetCustomer={TargetCustomer}\r\n reparentingId={ReparentingId}\r\n currentUser={CurrentUser}\r\n accounts={Accounts}\r\n newBillTo={NewBillTo}\r\n onAccountDelete={onAccountDelete}\r\n clientCenterUIAPI={ServicesEndpoints.ClientCenterUIAPI}\r\n paymentOptionId={paymentOptionId}\r\n uetTags={UETTags}\r\n showSummaryPaneLinkSettings={ShowSummaryPaneLinkSettings}\r\n showSummaryPaneBillingSetting={ShowSummaryPaneBillingSetting}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nSummaryPane.propTypes = {\r\n classes: summaryPaneClassesProps.isRequired,\r\n};\r\n\r\nexport const ARWSummaryPane = withDefaultStyles(SummaryPane, getSummaryPaneStyles);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getPageDescriptionStyles } from './styles/page-description-styles';\r\n\r\nconst UnstyledPageDescription = ({\r\n children,\r\n classes: { accountsSummaryPageDescription },\r\n}) => (\r\n <div className={accountsSummaryPageDescription}>\r\n <p>\r\n {children}\r\n </p>\r\n </div>\r\n);\r\n\r\nUnstyledPageDescription.propTypes = {\r\n children: PropTypes.string.isRequired,\r\n classes: PropTypes.shape({\r\n accountsSummaryPageDescription: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nexport const AccountsPageDescription = withDefaultStyles(UnstyledPageDescription, getPageDescriptionStyles);\r\n","export const getPageDescriptionStyles = (_, { palette = {} }) => ({\r\n accountsSummaryPageDescription: {\r\n padding: {\r\n top: 20,\r\n bottom: 10,\r\n left: 32,\r\n },\r\n fontFamily: 'Segoe UI',\r\n fontSize: 14,\r\n lineHeight: '16px',\r\n color: palette.neutralPrimary,\r\n\r\n '& p': {\r\n margin: 0,\r\n },\r\n },\r\n});\r\n","import {\r\n extensionEditorStyles,\r\n helpbuttonStyle,\r\n messageBarStyle,\r\n selectElementStyle,\r\n scrollbarStyle,\r\n glyphIconStyle,\r\n validationErrorsStyle,\r\n convertToLocalStyle,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getAdExtensionEditorStyles = (components, theme) => mergeStyles(\r\n { theme },\r\n convertToLocalStyle(mergeStyles(\r\n { theme },\r\n helpbuttonStyle,\r\n extensionEditorStyles,\r\n messageBarStyle,\r\n scrollbarStyle,\r\n glyphIconStyle\r\n )),\r\n components.searchboxStyle,\r\n selectElementStyle({ ...theme, includeSelector: true }),\r\n validationErrorsStyle(components, theme)\r\n);\r\n","import {\r\n helpbuttonStyle,\r\n scrollbarStyle,\r\n glyphIconStyle,\r\n convertToLocalStyle,\r\n adExtensionsAssociationsContainerLayoutType,\r\n adExtensionsAssociationsContainer,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const getAdExtensionsAssociationsStyles = (components, theme) => mergeStyles(\r\n { theme },\r\n convertToLocalStyle(mergeStyles(\r\n { theme },\r\n helpbuttonStyle,\r\n scrollbarStyle,\r\n glyphIconStyle\r\n )),\r\n components.searchboxStyle,\r\n components.buttonInputStyle,\r\n adExtensionsAssociationsContainer(adExtensionsAssociationsContainerLayoutType.ExpandHorizontallyToContainer)(components, theme)\r\n);\r\n","import { clone, isFunction } from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Backbone from 'backbone';\r\nimport classNames from 'classnames';\r\nimport { DefaultButton } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport {\r\n adExtensionItemTemplateStyles,\r\n mergeStyles,\r\n} from '@bingads-webui-campaign-react/common-styles';\r\nimport { adExtensionEditorsGlobalStyles } from './styles/ad-extension-editor-global-styles';\r\nimport { getAdExtensionEditorStyles } from './styles/ad-extension-editors-common-styles';\r\nimport { getAdExtensionsAssociationsStyles } from './styles/ad-extensions-associations-styles';\r\n\r\nconst Extension = ({ classes, template, extension }) => (\r\n <div\r\n className={classNames('extension-container', classes.extensionContainer)}\r\n // eslint-disable-next-line react/no-danger\r\n dangerouslySetInnerHTML={{ __html: template({ data: extension }) }}\r\n />\r\n);\r\n\r\nExtension.propTypes = {\r\n classes: PropTypes.shape({\r\n extensionContainer: PropTypes.string.isRequired,\r\n }).isRequired,\r\n extension: PropTypes.shape({}).isRequired,\r\n template: PropTypes.func.isRequired,\r\n};\r\n\r\n\r\nconst getExtensionsStyles = ({ type = 'flex', itemsPerRow = 4 } = {}) => (components, theme = {}) => ({\r\n extensionsContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n ...type === 'flex' ? {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n gap: '8px',\r\n } : {\r\n display: 'grid',\r\n gridGap: '8px',\r\n gridTemplateColumns: `repeat(${itemsPerRow}, minmax(0px, 1fr))`,\r\n },\r\n\r\n '& .itemTemplate-text ul': {\r\n marginBottom: 'unset',\r\n },\r\n }\r\n ),\r\n },\r\n extensionContainer: {\r\n ...mergeStyles(\r\n { theme },\r\n {\r\n border: '1px solid #E1DFDD',\r\n borderRadius: 4,\r\n padding: [12, 14],\r\n\r\n display: 'flex',\r\n alignContent: 'center',\r\n flexWrap: 'wrap',\r\n },\r\n adExtensionItemTemplateStyles({ withEllipsisItemText: true })(theme)\r\n ),\r\n },\r\n});\r\n\r\nconst Extensions = ({\r\n layoutOptions,\r\n associations,\r\n template,\r\n}) => {\r\n const classes = useDefaultStyles(getExtensionsStyles(layoutOptions));\r\n\r\n return (\r\n <div className={classNames('extensions-container', classes.extensionsContainer)}>\r\n {associations.map((association, index) => (\r\n <Extension\r\n key={association.Id || index}\r\n classes={classes}\r\n template={template}\r\n extension={association}\r\n />\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nExtensions.propTypes = {\r\n layoutOptions: PropTypes.shape({}),\r\n template: PropTypes.func.isRequired,\r\n associations: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n};\r\n\r\nExtensions.defaultProps = {\r\n layoutOptions: undefined,\r\n};\r\n\r\nconst getEditorStyles = (components, theme = {}) => ({\r\n ...adExtensionEditorsGlobalStyles(components, theme),\r\n\r\n extensionsAssociations: {\r\n ...getAdExtensionsAssociationsStyles(components, theme),\r\n ...adExtensionItemTemplateStyles({ withEllipsisItemText: true })(theme),\r\n },\r\n editorPanel: {\r\n ...getAdExtensionEditorStyles(components, theme),\r\n },\r\n});\r\n\r\nconst Editor = ({\r\n campaignId,\r\n campaignName,\r\n associationEditor: AssociationEditor,\r\n dynamicFeatures,\r\n onSave: onEditorSave,\r\n onCancel: onEditorCancel,\r\n onChange: onEditorChange,\r\n}) => {\r\n const classes = useDefaultStyles(getEditorStyles);\r\n const view = useRef();\r\n const viewListener = useMemo(() => clone(Backbone.Events), []);\r\n let container;\r\n\r\n useEffect(() => {\r\n view.current = new AssociationEditor({\r\n useNewDlbLayout: true,\r\n showSaveButtonAsDefaultButton: true,\r\n allowSelectAll: false,\r\n allowDeselectAll: true,\r\n campaignId,\r\n campaignName,\r\n entityType: 'campaign',\r\n hasSubTitle: true,\r\n showErrorsInline: true,\r\n popupFront: '.navbar-fixed-top',\r\n usePanel: true,\r\n panelClassName: classes.editorPanel,\r\n isForVNext: true,\r\n vnextContext: { dynamicFeatures },\r\n // perfMarker: showAdAndExtensionMarker,\r\n // activityLogger: this.activityLogger,\r\n });\r\n\r\n view.current.render();\r\n view.current.$el.appendTo(container);\r\n\r\n return () => {\r\n view.current.remove();\r\n };\r\n // We want the view to be created only once,\r\n // hence ignoring all dependencies of this \"effect\".\r\n // This means that the view will ignore changes to all props.\r\n // If need be to make view pick props updates, the view\r\n // need to provide a way to communicate such updates to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onSave = useCallback((associations) => {\r\n console.log('[DWD] Extension association editor onSave, associations=_', associations);\r\n if (isFunction(onEditorSave)) {\r\n onEditorSave(associations);\r\n }\r\n }, [onEditorSave]);\r\n\r\n const onCancel = useCallback(() => {\r\n console.log('[DWD] Extension association editor onCancel');\r\n if (isFunction(onEditorCancel)) {\r\n onEditorCancel();\r\n }\r\n }, [onEditorCancel]);\r\n\r\n const onChange = useCallback(() => {\r\n console.log('[DWD] Extension association editor onChange');\r\n if (isFunction(onEditorChange)) {\r\n onEditorChange();\r\n }\r\n }, [onEditorChange]);\r\n\r\n useEffect(() => {\r\n viewListener.listenTo(view.current, 'save', onSave);\r\n viewListener.listenTo(view.current, 'cancel', onCancel);\r\n viewListener.listenTo(view.current, 'extensions:changed', onChange);\r\n\r\n return () => viewListener.stopListening(view.current);\r\n }, [viewListener, onSave, onCancel, onChange]);\r\n\r\n return (\r\n <div className={classes.extensionsAssociations}>\r\n <div ref={((ref) => { container = ref; })} />\r\n </div>\r\n );\r\n};\r\n\r\nEditor.propTypes = {\r\n campaignId: PropTypes.number.isRequired,\r\n campaignName: PropTypes.string.isRequired,\r\n associationEditor: PropTypes.func.isRequired,\r\n dynamicFeatures: PropTypes.shape({}),\r\n onChange: PropTypes.func,\r\n onSave: PropTypes.func,\r\n onCancel: PropTypes.func,\r\n};\r\n\r\nEditor.defaultProps = {\r\n dynamicFeatures: undefined,\r\n onChange: undefined,\r\n onSave: undefined,\r\n onCancel: undefined,\r\n};\r\n\r\nconst getAdExtensionsAssociationsWrapperStyles = (components, theme) => ({\r\n controlsBar: {\r\n paddingTop: 16,\r\n },\r\n iconButtonColor: {\r\n color: theme.palette.themePrimary,\r\n },\r\n extensionDescription: {\r\n '& > ul > li': {\r\n lineHeight: '32px',\r\n },\r\n },\r\n});\r\n\r\nexport const AdExtensionsAssociationsWrapper = ({\r\n extensionType,\r\n campaignId,\r\n campaignName,\r\n renderDescription,\r\n associationEditor,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n\r\n // ...renderTimeProps\r\n i18n,\r\n extensionsAssociations,\r\n onUpdateExtensionsAssociations,\r\n}) => {\r\n const classes = useDefaultStyles(getAdExtensionsAssociationsWrapperStyles);\r\n const [isEditorOpen, setIsEditorOpen] = useState(false);\r\n\r\n const onOpenEditor = useCallback(() => {\r\n setIsEditorOpen(true);\r\n }, []);\r\n\r\n const onEditorSave = useCallback((associations) => {\r\n onUpdateExtensionsAssociations(extensionType, associations);\r\n setIsEditorOpen(false);\r\n }, [extensionType, onUpdateExtensionsAssociations]);\r\n\r\n const onEditorCancel = useCallback(() => {\r\n setIsEditorOpen(false);\r\n }, []);\r\n\r\n const associations = extensionsAssociations[extensionType] || [];\r\n\r\n if (isEditorOpen) {\r\n return (\r\n <Editor\r\n campaignId={campaignId}\r\n campaignName={campaignName}\r\n associationEditor={associationEditor}\r\n dynamicFeatures={dynamicFeatures}\r\n onSave={onEditorSave}\r\n onCancel={onEditorCancel}\r\n />\r\n );\r\n }\r\n\r\n if (associations.length === 0) {\r\n return (\r\n <>\r\n {renderDescription({ i18n, classes })}\r\n <div className={classes.controlsBar}>\r\n <DefaultButton\r\n className={classNames('add-button')}\r\n iconProps={{ iconName: 'Add', className: classes.iconButtonColor }}\r\n title={i18n.getString(_TL_('Add'))}\r\n text={i18n.getString(_TL_('Add'))}\r\n onClick={onOpenEditor}\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n const dynamicTemplate = dynamicFeatures && dynamicFeatures.universalItemTemplate;\r\n const staticTemplate = staticFeatures && staticFeatures.universalItemTemplate;\r\n return (\r\n <>\r\n <Extensions\r\n layoutOptions={selectedExtensionsLayoutOptions}\r\n template={dynamicTemplate || staticTemplate}\r\n associations={associations}\r\n />\r\n <div className={classes.controlsBar}>\r\n <DefaultButton\r\n className={classNames('edit-button')}\r\n iconProps={{ iconName: 'Edit', className: classes.iconButtonColor }}\r\n title={i18n.getString(_TL_('Edit'))}\r\n text={i18n.getString(_TL_('Edit'))}\r\n onClick={onOpenEditor}\r\n />\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nAdExtensionsAssociationsWrapper.propTypes = {\r\n extensionType: PropTypes.string.isRequired,\r\n campaignId: PropTypes.number.isRequired,\r\n campaignName: PropTypes.string.isRequired,\r\n renderDescription: PropTypes.func.isRequired,\r\n associationEditor: PropTypes.func.isRequired,\r\n extensionsAssociations: PropTypes.shape({}).isRequired,\r\n staticFeatures: PropTypes.shape({\r\n universalItemTemplate: PropTypes.func,\r\n }),\r\n dynamicFeatures: PropTypes.shape({\r\n universalItemTemplate: PropTypes.func,\r\n }),\r\n selectedExtensionsLayoutOptions: PropTypes.shape({}),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n onUpdateExtensionsAssociations: PropTypes.func.isRequired,\r\n};\r\n\r\nAdExtensionsAssociationsWrapper.defaultProps = {\r\n staticFeatures: undefined,\r\n dynamicFeatures: undefined,\r\n selectedExtensionsLayoutOptions: undefined,\r\n};\r\n","import { datePickerStyle } from '@bingads-webui-campaign-react/common-styles';\r\n\r\nexport const adExtensionEditorsGlobalStyles = (components, theme) => ({\r\n '@global': {\r\n ...datePickerStyle(theme),\r\n },\r\n});\r\n","import { chain, difference, intersection, result } from 'underscore';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport { campaignTypeExtensionTypeFilter } from '@bingads-webui-campaign/ad-extensions-shared';\r\nimport appAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-app/view/associationsEditor';\r\nimport { universalItemTemplate as appUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-app/template';\r\nimport callAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-call/view/associationsEditor';\r\nimport { universalItemTemplate as callUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-call/template';\r\nimport calloutAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-callout/view/associationsEditor';\r\nimport { universalItemTemplate as calloutUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-callout/template';\r\nimport locationAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-location/view/associationsEditor';\r\nimport { universalItemTemplate as locationUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-location/template';\r\nimport priceAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-price/view/associationsEditor';\r\nimport { universalItemTemplate as priceUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-price/template';\r\nimport reviewAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-review/view/associationsEditor';\r\nimport { universalItemTemplate as reviewUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-review/template';\r\nimport sitelinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-sitelink/view/associationsEditor';\r\nimport { universalItemTemplate as sitelinkUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-sitelink/template';\r\nimport structuredsnippetAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-structuredsnippet/view/associationsEditor';\r\nimport { universalItemTemplate as structuredsnippetUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-structuredsnippet/template';\r\nimport promotionAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-promotion/view/associationsEditor';\r\nimport filterLinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-filter-link/view/associationsEditor';\r\nimport flyerAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-flyer/view/associationsEditor';\r\nimport actionlinkAssociationsEditor from '@bingads-webui-campaign-legacy/adextension-actionlink/view/associationsEditor';\r\nimport { universalItemTemplate as actionUniversalItemTemplate } from '@bingads-webui-campaign-legacy/adextension-actionlink/template';\r\nimport { AdExtensionsAssociationsWrapper } from './ad-extensions-associations-wrapper';\r\n\r\nconst detailsFuncFactory = ([hasAssociationsKeySingular, hasAssociationsKeyPlural], noAssociationsKey) =>\r\n (i18n, associations = []) => (associations.length > 0 ?\r\n i18n.getString(associations.length > 1 ? hasAssociationsKeyPlural : hasAssociationsKeySingular, { number: associations.length }) :\r\n i18n.getString(noAssociationsKey));\r\n\r\nconst editorViewMapper = {\r\n App: {\r\n editor: appAssociationsEditor,\r\n title: _TL_('App extensions'),\r\n details: detailsFuncFactory([_TL_('1 app extension set'), _TL_('{{number}} app extensions set')], _TL_('No app extensions set')),\r\n renderDescription: ({ i18n }) => (\r\n <span>{i18n.getString(_TL_('App extensions'))}</span>\r\n ),\r\n },\r\n Call: {\r\n editor: callAssociationsEditor,\r\n title: _TL_('Call extensions'),\r\n details: detailsFuncFactory([_TL_('1 call extension set'), _TL_('{{number}} call exensions set')], _TL_('No call extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'call-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Call extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show your business’s phone number in your ads to let customers know they can click to call.'))}</p>\r\n </article>\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_CallExtensions',\r\n },\r\n Callout: {\r\n editor: calloutAssociationsEditor,\r\n title: _TL_('Callout extensions'),\r\n details: detailsFuncFactory([_TL_('1 callout extension set'), _TL_('{{number}} callout extensions set')], _TL_('No callout extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'callout-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Callout extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show extra details about your website’s products or offers in your ads.'))}</p>\r\n </article>\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_CalloutExtensions',\r\n },\r\n Location: {\r\n editor: locationAssociationsEditor,\r\n title: _TL_('Location extensions'),\r\n details: detailsFuncFactory([_TL_('1 location extension set'), _TL_('{{number}} location extensions set')], _TL_('No location extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'location-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Location extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show the address and phone number of your closest business location in your ads.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 3,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_LocationExtensions',\r\n },\r\n Review: {\r\n editor: reviewAssociationsEditor,\r\n title: _TL_('Review extensions'),\r\n details: detailsFuncFactory([_TL_('1 review extension set'), _TL_('{{number}} review extensions set')], _TL_('No review extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'review-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Review extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show a positive review from a third-party source in your ads.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_ReviewExtensions',\r\n },\r\n SiteLink: {\r\n editor: sitelinkAssociationsEditor,\r\n title: _TL_('Sitelink extensions'),\r\n details: detailsFuncFactory([_TL_('1 sitelink extension set'), _TL_('{{number}} sitelink extensions set')], _TL_('No sitelink extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'sitelink-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Sitelink extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show additional sitelinks in your ads that take customers to specific pages of your website'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_SitelinkExtensions',\r\n },\r\n StructuredSnippet: {\r\n editor: structuredsnippetAssociationsEditor,\r\n title: _TL_('Structured snippet extensions'),\r\n details: detailsFuncFactory([_TL_('1 structured snippet extension set'), _TL_('{{number}} structured snippet extensions set')], _TL_('No structured snippet extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'structured-snippet-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Structured snippet extensions description'))}>\r\n <p>{i18n.getString(_TL_('Highlight specific aspects of your products and services using structured snippets.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_StructuredSnippetExtensions',\r\n },\r\n Price: {\r\n editor: priceAssociationsEditor,\r\n title: _TL_('Price extensions'),\r\n details: detailsFuncFactory([_TL_('1 price extension set'), _TL_('{{number}} price extensions set')], _TL_('No price extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'prices-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Price extensions description'))}>\r\n <p>{i18n.getString(_TL_('Provide valuable price information to your prospective customers before they click on your ad.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 3,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_PriceExtensions',\r\n },\r\n Promotion: {\r\n editor: promotionAssociationsEditor,\r\n title: _TL_('Promotion extensions'),\r\n details: detailsFuncFactory([_TL_('1 promotion extension set'), _TL_('{{number}} promotion extensions set')], _TL_('No promotion extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'promotion-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Promotion extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show deals for holidays and other special occasions in your ads.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_PromotionExtensions',\r\n },\r\n FilterLink: {\r\n editor: filterLinkAssociationsEditor,\r\n title: _TL_('Filter link extensions'),\r\n details: detailsFuncFactory([_TL_('1 filter link extension set'), _TL_('{{number}} filter link extensions set')], _TL_('No filter link extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'filter-link-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Filter link extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show links to specific products and services using filter links.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 4,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_FilteredLinkExtensions',\r\n },\r\n Flyer: {\r\n editor: flyerAssociationsEditor,\r\n title: _TL_('Flyer extensions'),\r\n details: detailsFuncFactory([_TL_('1 flyer extension set'), _TL_('{{number}} flyer extensions set')], _TL_('No flyer extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'flyer-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Flyer extensions description'))}>\r\n <p>{i18n.getString(_TL_('Showcase flyers of your chosen products and promotions, providing potential customers with more information before they buy.'))}</p>\r\n </article>\r\n ),\r\n selectedExtensionsLayoutOptions: {\r\n type: 'grid',\r\n itemsPerRow: 2,\r\n },\r\n topic: 'pop_BA_CampaignCreate_Ads_FlyerExtensions',\r\n },\r\n Action: {\r\n editor: actionlinkAssociationsEditor,\r\n title: _TL_('Action extensions'),\r\n details: detailsFuncFactory([_TL_('1 action extension set'), _TL_('{{number}} action extensions set')], _TL_('No action extensions set')),\r\n renderDescription: ({ i18n, classes }) => (\r\n <article className={classNames('extension-description', 'action-description', classes.extensionDescription)} aria-label={i18n.getString(_TL_('Action extensions description'))}>\r\n <p>{i18n.getString(_TL_('Show an action button in your ads.'))}</p>\r\n </article>\r\n ),\r\n topic: 'pop_BA_CampaignCreate_Ads_ActionExtensions',\r\n },\r\n};\r\n\r\nexport const extensionEntityMapping = {\r\n Action: 'ActionAdExtension',\r\n App: 'AppAdExtension',\r\n Call: 'CallAdExtension',\r\n Callout: 'CalloutAdExtension',\r\n Image: 'ImageAdExtension',\r\n Location: 'LocationAdExtension',\r\n Price: 'PriceAdExtension',\r\n Review: 'ReviewAdExtension',\r\n SiteLink: 'Sitelink2AdExtension',\r\n StructuredSnippet: 'StructuredSnippetAdExtension',\r\n Automated: 'AutomatedAdExtension',\r\n Promotion: 'PromotionAdExtension',\r\n FilterLink: 'FilterLinkAdExtension',\r\n Flyer: 'FlyerAdExtension',\r\n Video: 'VideoAdExtension',\r\n LeadForm: 'LeadFormAdExtension',\r\n BusinessInfo: 'LogoAdExtension',\r\n};\r\n\r\nexport const extensionNameMapping = {\r\n ActionAdExtension: 'Action',\r\n AppAdExtension: 'App',\r\n CallAdExtension: 'Call',\r\n CalloutAdExtension: 'Callout',\r\n ImageAdExtension: 'Image',\r\n LocationAdExtension: 'Location',\r\n PriceAdExtension: 'Price',\r\n ReviewAdExtension: 'Review',\r\n Sitelink2AdExtension: 'SiteLink',\r\n StructuredSnippetAdExtension: 'StructuredSnippet',\r\n AutomatedAdExtension: 'Automated',\r\n PromotionAdExtension: 'Promotion',\r\n FilterLinkAdExtension: 'FilterLink',\r\n FlyerAdExtension: 'Flyer',\r\n VideoAdExtension: 'Video',\r\n LeadFormAdExtension: 'LeadForm',\r\n LogoAdExtension: 'BusinessInfo',\r\n};\r\n\r\nexport const getAvailableExtensions = (permissions, campaignType) => {\r\n const campaignTypeFilter = campaignTypeExtensionTypeFilter(campaignType);\r\n\r\n return chain([\r\n ['Action', permissions.IsActionLinkExtensionAllowed],\r\n ['Price', permissions.IsPriceExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Location', permissions.IsLocationExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['App', permissions.IsAppExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['SiteLink', permissions.IsSiteLinkExtensionsAllowed],\r\n ['Call', permissions.IsCallExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Callout', permissions.IsCalloutExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Review', permissions.IsReviewExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['StructuredSnippet', permissions.IsStructuredSnippetExtensionAllowed && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ['Promotion', permissions.IsPromotionAdExtensionEnabled],\r\n ['FilterLink', permissions.IsFilterLinkAdExtensionEnabled],\r\n ['Flyer', permissions.IsFlyerAdExtensionEnabled && !permissions.IsDomesticSimplifiedChineseEnabled],\r\n ]).filter(([type, allowed]) => allowed && campaignTypeFilter(type))\r\n .map(([name]) => name)\r\n .value();\r\n};\r\n\r\nconst getObjectiveExtensionMap = availableExtensions => ({\r\n WebsiteVisits: {\r\n suggestedExtensions: ['SiteLink', 'Action', 'Callout', 'Promotion'],\r\n otherExtensions: ['Price', 'StructuredSnippet', 'FilterLink', 'Review', 'Call', 'Location', 'Flyer'],\r\n },\r\n LocationVisits: {\r\n suggestedExtensions: ['Location', 'Call', 'Action', 'Promotion'],\r\n otherExtensions: ['Review', 'Callout', 'StructuredSnippet', 'FilterLink', 'Price', 'SiteLink', 'Flyer'],\r\n },\r\n WebsiteConversions: {\r\n suggestedExtensions: ['Action', 'Price', 'Promotion', 'SiteLink'],\r\n otherExtensions: ['Callout', 'StructuredSnippet', 'FilterLink', 'Review', 'Location', 'Call', 'Flyer'],\r\n },\r\n PhoneCalls: {\r\n suggestedExtensions: ['Call', 'Callout', 'Review', 'SiteLink'],\r\n otherExtensions: ['StructuredSnippet', 'FilterLink', 'Price', 'Promotion', 'Action', 'Flyer'],\r\n },\r\n AppInstalls: {\r\n suggestedExtensions: ['App', 'Review'],\r\n otherExtensions: difference(availableExtensions, ['App', 'Review']),\r\n },\r\n});\r\n\r\nexport const getObjectiveExtensions = (permissions, { campaignType, campaignObjective }) => {\r\n const availableExtensions = getAvailableExtensions(permissions, campaignType);\r\n const { suggestedExtensions, otherExtensions } = result(\r\n getObjectiveExtensionMap(availableExtensions),\r\n campaignObjective,\r\n { suggestedExtensions: [], otherExtensions: [] }\r\n );\r\n const suggestedObjectiveExtensions = intersection(suggestedExtensions, availableExtensions);\r\n const otherObjectiveExtensions = intersection(otherExtensions, availableExtensions);\r\n\r\n return { suggestedObjectiveExtensions, otherObjectiveExtensions };\r\n};\r\n\r\nconst adExtensionsStaticFeatures = {\r\n Action: {\r\n universalItemTemplate: actionUniversalItemTemplate,\r\n },\r\n App: {\r\n universalItemTemplate: appUniversalItemTemplate,\r\n },\r\n Call: {\r\n universalItemTemplate: callUniversalItemTemplate,\r\n },\r\n Callout: {\r\n universalItemTemplate: calloutUniversalItemTemplate,\r\n },\r\n Location: {\r\n universalItemTemplate: locationUniversalItemTemplate,\r\n },\r\n Price: {\r\n universalItemTemplate: priceUniversalItemTemplate,\r\n },\r\n Review: {\r\n universalItemTemplate: reviewUniversalItemTemplate,\r\n },\r\n SiteLink: {\r\n universalItemTemplate: sitelinkUniversalItemTemplate,\r\n },\r\n StructuredSnippet: {\r\n universalItemTemplate: structuredsnippetUniversalItemTemplate,\r\n },\r\n};\r\n\r\nexport const extensionsAssociationsFactory = (campaignId, campaignName, extensionTypes = [], adExtensionsDynamicFeatures) =>\r\n extensionTypes.map((extensionType) => {\r\n const {\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n selectedExtensionsLayoutOptions,\r\n } = editorViewMapper[extensionType];\r\n const staticFeatures = adExtensionsStaticFeatures[extensionType];\r\n const dynamicFeatures = adExtensionsDynamicFeatures(extensionType);\r\n\r\n return {\r\n extensionType,\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n };\r\n }).map(({\r\n extensionType,\r\n editor,\r\n title,\r\n topic,\r\n details,\r\n renderDescription,\r\n staticFeatures,\r\n dynamicFeatures,\r\n selectedExtensionsLayoutOptions,\r\n }) => {\r\n const AssociationPanel = React.memo((renderTimeProps = {}) => (\r\n <AdExtensionsAssociationsWrapper\r\n extensionType={extensionType}\r\n campaignId={campaignId}\r\n campaignName={campaignName}\r\n renderDescription={renderDescription}\r\n associationEditor={editor}\r\n staticFeatures={staticFeatures}\r\n dynamicFeatures={dynamicFeatures}\r\n selectedExtensionsLayoutOptions={selectedExtensionsLayoutOptions}\r\n {...renderTimeProps}\r\n />\r\n ));\r\n return {\r\n extensionType,\r\n title,\r\n topic,\r\n details,\r\n AssociationPanel,\r\n };\r\n });\r\n","\r\nimport { BaseSchemaProcessor, addCampaignTypePropertyForFilter } from '@bingads-webui-campaign/common-grid-config';\r\nimport * as putil from '@bingads-webui-universal/primitive-utilities';\r\nimport globalConfig from '@bingads-webui-component-legacy/config/index';\r\nimport cacheService from '@bingads-webui-static-legacy/cache-service';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport _ from 'underscore';\r\nimport { updateDeliveryStatusOptionForFilter } from '@bingads-webui-campaign-legacy/common-grid-config/filter/update-delivery-status-option-for-filter';\r\n\r\nexport class AdExtensionSchemaProcessor extends BaseSchemaProcessor {\r\n constructor(adextensionType, hasCampaignColumn, hasAdGroupColumn, disableScheduling, isForVNext, i18n, schemaI18nCampaign) {\r\n super({\r\n globalConfig,\r\n schemaI18nCampaign,\r\n i18n,\r\n cacheService,\r\n dataContextManager,\r\n jsdata,\r\n });\r\n this.adextensionType = adextensionType;\r\n this.hasCampaignColumn = hasCampaignColumn;\r\n this.hasAdGroupColumn = hasAdGroupColumn;\r\n this.disableScheduling = disableScheduling;\r\n this.isForVNext = isForVNext;\r\n this.i18n = i18n;\r\n }\r\n\r\n updateEntitySchemaForFeatures(entitySchema) {\r\n const updatedSchema = super.updateEntitySchemaForFeatures(entitySchema);\r\n\r\n // update schema to remove labels property\r\n updatedSchema.properties = _.omit(updatedSchema.properties, 'Labels');\r\n\r\n // update schema to reflect all conv metrics filters\r\n const allConvMetrics = [\r\n 'PerformanceMetricsAllConversionCPA',\r\n 'PerformanceMetricsAllConversions',\r\n 'PerformanceMetricsAllConversionRate',\r\n 'PerformanceMetricsAllConversionAdvertiserReportedRevenue',\r\n 'PerformanceMetricsAllConversionRevenueOnAdSpend',\r\n 'PerformanceMetricsAllPartialConversionCPA',\r\n 'PerformanceMetricsAllConversionsCredit',\r\n 'PerformanceMetricsAllPartialConversionRate',\r\n ];\r\n\r\n _.each(allConvMetrics, (allConvMetric) => {\r\n if (putil.get(updatedSchema.properties, allConvMetric)) {\r\n updatedSchema.properties[allConvMetric].filterable = true;\r\n }\r\n });\r\n\r\n // AdExtension does not support ViewThroughConversions\r\n updatedSchema.properties = _.omit(updatedSchema.properties, [\r\n 'PerformanceMetricsViewThroughConversions',\r\n 'PerformanceMetricsViewThroughConversionsCredit',\r\n ]);\r\n\r\n const deliveryStatusProperty = updatedSchema.properties.AdExtensionDelivery;\r\n\r\n let deliveryEnum = ['Eligible',\r\n 'EditorialApprovedLimited',\r\n 'InvalidFinancialStatusOther',\r\n 'CampaignDeleted',\r\n 'CampaignBudgetPaused',\r\n 'EditorialRejected',\r\n 'CampaignSuspended',\r\n 'EditorialUnderAppeal',\r\n 'EditorialPending',\r\n 'CampaignUserPaused',\r\n 'AssociationDeleted'];\r\n\r\n if (this.adextensionType === 'PriceAdExtension') {\r\n deliveryEnum.splice(6, 0, 'StoreIdNotAssociated');\r\n }\r\n\r\n if (this.adextensionType === 'AppAdExtension') {\r\n deliveryEnum = deliveryEnum.concat(['ApplicationNotFound', 'UrlInvalid', 'ApplicationDestinationUrlMismatch']);\r\n }\r\n if (this.adextensionType === 'VideoAdExtension') {\r\n deliveryEnum = deliveryEnum.concat([\r\n 'VideoExtensionProcessing',\r\n 'VideoExtensionVideoProcessingFailed',\r\n 'VideoExtensionVideoTooSmall',\r\n 'VideoExtensionVideoAspectRatioInvalid',\r\n 'VideoExtensionVideoDurationInvalid',\r\n 'VideoExtensionThumbnailProcessingFailed',\r\n 'VideoExtensionThumbnailTooSmall',\r\n 'VideoExtensionThumbnailAspectInvalid',\r\n ]);\r\n }\r\n if (!_.isEmpty(deliveryStatusProperty)) {\r\n updateDeliveryStatusOptionForFilter(deliveryStatusProperty, deliveryEnum, this.i18n);\r\n }\r\n\r\n if (!this.hasCampaignColumn) {\r\n updatedSchema.properties.CampaignName.filterable = false;\r\n }\r\n\r\n if (!this.hasAdGroupColumn) {\r\n updatedSchema.properties.AdGroupName.filterable = false;\r\n }\r\n\r\n if (this.isForVNext) {\r\n addCampaignTypePropertyForFilter({ entitySchema, permissions: this.Permissions });\r\n\r\n updatedSchema.properties.CampaignType.filterable = false;\r\n\r\n updatedSchema.properties.AdExtensionSchedulingEndDate.filterable = false;\r\n updatedSchema.properties.AdExtensionSchedulingStartDate.filterable = false;\r\n }\r\n\r\n // Hide global filters from UI\r\n updatedSchema.properties.CampaignStatus.filterable = false;\r\n updatedSchema.properties.AdGroupStatus.filterable = false;\r\n\r\n updatedSchema.properties = _.omit(updatedSchema.properties, 'PerformanceMetricsAveragePosition');\r\n\r\n if (this.adextensionType === 'CalloutAdExtension' || this.adextensionType === 'StructuredSnippetAdExtension') {\r\n updatedSchema.properties = _.omit(updatedSchema.properties, [\r\n 'PerformanceMetricsClicks',\r\n 'PerformanceMetricsCTR',\r\n ]);\r\n }\r\n\r\n // Exclude entity columns for AutomatedExtensions\r\n if (this.adextensionType === 'AutomatedAdExtension') {\r\n updatedSchema.properties = _.omit(updatedSchema.properties, [\r\n 'AdExtensionDelivery',\r\n 'AdExtensionId',\r\n 'AdExtensionSchedulingEndDate',\r\n 'AdExtensionSchedulingStartDate',\r\n 'AdExtensionStatus',\r\n 'AdExtensionUpdatedOnLastImport',\r\n 'AdGroupName',\r\n 'CampaignName',\r\n 'CampaignIsExperiment',\r\n ]);\r\n }\r\n\r\n if (this.disableScheduling) {\r\n updatedSchema.properties = _.omit(updatedSchema.properties, [\r\n 'AdExtensionSchedulingStartDate',\r\n 'AdExtensionSchedulingEndDate',\r\n ]);\r\n }\r\n\r\n return updatedSchema;\r\n }\r\n\r\n updateOdataOptions(odataOptions) {\r\n super.updateOdataOptions(odataOptions);\r\n\r\n _.extendOwn(odataOptions.custom, {\r\n 'AdExtension/UpdatedOnLastImport': {\r\n eq: (value) => {\r\n const url = `AdExtension/UpdatedOnLastImport eq ${value}`;\r\n\r\n return url.replace(/Enum.AdExtensionUpdatedOnLastImport'1'/g, '1');\r\n },\r\n },\r\n });\r\n\r\n return odataOptions;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { getCommonFilterConfig } from '@bingads-webui-campaign/common-grid-config';\r\nimport cacheService from '@bingads-webui-static-legacy/cache-service';\r\nimport dataContextManager from '@bingads-webui-static-legacy/summary/SummaryDataContextManager';\r\nimport { getFilters } from '@bingads-webui-component-legacy/bingads-grid/service/filter-preferences';\r\nimport globalConfig from '@bingads-webui-component-legacy/config/index';\r\nimport jsdata from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport sessionStore from '@bingads-webui-component-legacy/js-data-storage/session-storage';\r\nimport * as customColumnPreference from '@bingads-webui-component-legacy/bingads-grid/service/custom-column-preferences';\r\nimport { AdExtensionSchemaProcessor } from './adextension-schema-processor';\r\n\r\n\r\nconst AdExtensionAssociationSchema = window.globalLegacySchema.get('AdExtensionAssociation');\r\n\r\nexport const mockI18n = {\r\n get: _.identity,\r\n getString: _.identity,\r\n type: _.identity,\r\n enum: _.identity,\r\n value: _.identity,\r\n enumMappedString: _.identity,\r\n enumDescription: _.identity,\r\n valueDescription: _.identity,\r\n parseInt: _.identity,\r\n property: _.identity,\r\n};\r\nconst i18nCache = {\r\n i18n: mockI18n,\r\n newI18n: mockI18n,\r\n legacyGlobalI18n: mockI18n,\r\n schemaI18nCampaign: mockI18n,\r\n};\r\n\r\nexport function getFilterConfig(featureName, adextensionType, associationType, hasCampaignColumn, hasAdGroupColumn, disableScheduling, preferenceService, extraPerformanceColumns) {\r\n const isForVNext = true;\r\n const adExtensionSchemaProcessor = new AdExtensionSchemaProcessor(adextensionType, hasCampaignColumn, hasAdGroupColumn, disableScheduling, isForVNext, i18nCache.i18n, i18nCache.schemaI18nCampaign);\r\n\r\n const filterConfig = {\r\n featureName,\r\n preferenceService,\r\n customColumnPreference,\r\n schemaProcessor: adExtensionSchemaProcessor,\r\n enableCampaignWaterfall: true,\r\n enableAdGroupWaterfall: true,\r\n editor: {},\r\n selector: [{\r\n property: 'AdExtensionStatus',\r\n items: [{\r\n text: i18nCache.i18n.getString('AdExtensions_Quickfilter_ButDeleted'),\r\n value: ['Enum.AdExtensionStatus\\'Active\\''],\r\n }, {\r\n text: i18nCache.i18n.getString('AdExtensions_Quickfilter_All'),\r\n value: null,\r\n }],\r\n removable: false,\r\n defaultValue: ['Enum.AdExtensionStatus\\'Active\\''],\r\n }],\r\n ...i18nCache,\r\n entitySchema: AdExtensionAssociationSchema,\r\n sessionStore,\r\n preferenceStoreFactory: getFilters,\r\n globalConfig,\r\n cacheService,\r\n dataContextManager,\r\n jsdata,\r\n extraPerformanceColumns,\r\n };\r\n return getCommonFilterConfig(filterConfig);\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { getColumnsConversionMap } from '@bingads-webui-campaign/column-conversions';\r\nimport { bingadsGridColumn } from '@bingads-webui-component-legacy/bingads-grid/shared/column';\r\nimport state from '@bingads-webui-component-legacy/state/index';\r\nimport { adextensionGridColumn } from '@bingads-webui-campaign-legacy/adextension-shared/viewmodel/adextension-grid-column';\r\nimport { getUseTotalsPlugin } from '@bingads-webui-campaign-legacy/adextension-shared/util/feature-control';\r\nimport edm from '@bingads-webui-component-legacy/edm-campaign/index';\r\nimport DataStore from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport appConfig from '@bingads-webui-component-legacy/config/index';\r\nimport dateUtil from '@bingads-webui-component-legacy/humanize/date';\r\nimport * as customColumnPreference from '@bingads-webui-component-legacy/bingads-grid/service/custom-column-preferences';\r\nimport * as ColumnChooserPreference from '@bingads-webui-component-legacy/bingads-grid/service/column-chooser-preferences';\r\nimport * as SegmentationPreference from '@bingads-webui-component-legacy/bingads-grid/service/segmentation-preferences';\r\nimport { fetchPaginationConfig } from '@bingads-webui-component-legacy/bingads-grid/service/fetch-pagination';\r\nimport { fetchSortInfo } from '@bingads-webui-component-legacy/bingads-grid/service/fetch-sortinfo';\r\nimport { getGridDataParams } from '@bingads-webui-campaign/summary-grid-helper';\r\nimport { FilterService } from '@bingads-webui/filter-service';\r\nimport * as putil from '@bingads-webui/primitive-utilities';\r\nimport { getNewColumnChooserConfig } from './column-config';\r\nimport { getFilterConfig } from './filter-config';\r\n\r\nfunction specificAggRowText(item, property) {\r\n const prop = property.replace(/\\//g, '.');\r\n\r\n if (item.isAggregateRow || item.$total) {\r\n return '-';\r\n }\r\n return putil.get(item, prop);\r\n}\r\nconst AdExtensionAssociationSchema = window.globalLegacySchema.get('AdExtensionAssociation');\r\nconst isOdataActionSource = true;\r\nconst refreshCampaignCache = 'x-ms-refreshcampaigncache';\r\n\r\nexport function getDataSourceConfig({\r\n logActivity,\r\n scope,\r\n preferenceService,\r\n adextensionType,\r\n associationType,\r\n gridName,\r\n filter,\r\n}) {\r\n const permissions = appConfig.get('Permissions');\r\n const {campaignId} = scope.values;\r\n const {adGroupId} = scope.values;\r\n const headerRefreshCache = 'x-ms-refreshcampaigncache';\r\n\r\n\r\n let columns = [];\r\n let completeColumns = [];\r\n let excludedColumns = [];\r\n let extraPerformanceColumns = [];\r\n let campaignNameColumnExist;\r\n let adgroupNameColumnExist;\r\n\r\n const useTotalsPlugin = getUseTotalsPlugin(permissions);\r\n\r\n if (adextensionType === 'AutomatedAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: _.identity,\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: {\r\n get: _.identity,\r\n key: 'Id',\r\n },\r\n })];\r\n excludedColumns = ['Status', 'AdExtensionId', 'StartDate', 'EndDate', 'TimeZone', 'Schedule', 'Delivery'];\r\n } else if (adextensionType === 'StructuredSnippetAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Category', 'Texts');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Category', 'Texts');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n excludedColumns = ['Clicks', 'CTR'];\r\n } else if (adextensionType === 'ReviewAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Text', 'Source');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Text', 'Source');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else if (adextensionType === 'PriceAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'TableRows');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'TableRows');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else if (adextensionType === 'LocationAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.formatData, 'CompanyName', 'Address', 'PhoneNumber');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.formatData, 'CompanyName', 'Address', 'PhoneNumber');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else if (adextensionType === 'ImageAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'DisplayText', 'AltText', 'Images', 'DestinationUrl', 'FinalUrls');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'DisplayText', 'AltText', 'Images', 'DestinationUrl', 'FinalUrls');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else if (adextensionType === 'CalloutAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Text');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'Text');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n excludedColumns = ['Clicks', 'CTR'];\r\n } else if (adextensionType === 'CallAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'PhoneNumber', 'IsCallTrackingEnabled');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'PhoneNumber', 'IsCallTrackingEnabled');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else if (adextensionType === 'AppAdExtension') {\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'AppPlatform', 'DisplayText');\r\n },\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: (item) => {\r\n if (item.isAggregateRow) {\r\n return item.AdExtension;\r\n }\r\n return _.pick(item.AdExtension, 'AppPlatform', 'DisplayText');\r\n },\r\n title: 'ErrorGrid_AdExtension_Column',\r\n })];\r\n } else {\r\n if (adextensionType === 'VideoAdExtension') {\r\n extraPerformanceColumns = permissions.IsVideoAdExtensionsPerfMetricsEnabled ? [\r\n 'VideoViews',\r\n 'ViewThroughRate',\r\n 'AverageCPV',\r\n 'TotalWatchTimeInMS',\r\n 'AverageWatchTimePerImpression',\r\n 'AverageWatchTimePerVideoView',\r\n 'VideoViewsAt25Percent',\r\n 'VideoViewsAt50Percent',\r\n 'VideoViewsAt75Percent',\r\n 'CompletedVideoViews',\r\n 'VideoCompletionRate'] : [];\r\n }\r\n columns = [useTotalsPlugin ? adextensionGridColumn({\r\n property: item => item.AdExtension,\r\n }) : bingadsGridColumn({\r\n name: 'AdExtension',\r\n property: item => item.AdExtension,\r\n })];\r\n }\r\n\r\n const hasCampaignNameColumn = _.isUndefined(campaignNameColumnExist) ?\r\n !campaignId && associationType !== 'Account' :\r\n campaignNameColumnExist;\r\n const hasAdGroupNameColumn = _.isUndefined(adgroupNameColumnExist) ?\r\n !adGroupId && associationType === 'AdGroup' :\r\n adgroupNameColumnExist;\r\n\r\n const BaseCols = [bingadsGridColumn({\r\n name: 'Status',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Status');\r\n },\r\n key: 'AdExtension',\r\n },\r\n }), bingadsGridColumn({\r\n name: 'AdExtensionId',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Id');\r\n },\r\n key: 'AdExtension',\r\n },\r\n }), bingadsGridColumn({\r\n name: 'StartDate',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Scheduling/StartDate');\r\n },\r\n key: 'AdExtension',\r\n },\r\n }), bingadsGridColumn({\r\n name: 'EndDate',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Scheduling/EndDate');\r\n },\r\n key: 'AdExtension',\r\n },\r\n }), bingadsGridColumn({\r\n name: 'TimeZone',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Scheduling/UseSearcherTimeZone');\r\n },\r\n key: 'AdExtension',\r\n },\r\n }), bingadsGridColumn({\r\n name: 'Schedule',\r\n property: {\r\n get(item) {\r\n return specificAggRowText(item, 'AdExtension/Scheduling/DayTimeRanges');\r\n },\r\n key: 'AdExtension',\r\n },\r\n })];\r\n\r\n let PerformanceColumns = [bingadsGridColumn({\r\n name: 'Clicks',\r\n property: 'PerformanceMetrics/Clicks',\r\n }),\r\n bingadsGridColumn({\r\n name: 'Impressions',\r\n property: 'PerformanceMetrics/Impressions',\r\n }), bingadsGridColumn({\r\n name: 'CTR',\r\n property: 'PerformanceMetrics/CTR',\r\n }), bingadsGridColumn({\r\n name: 'AverageCPC',\r\n property: 'PerformanceMetrics/AverageCPC',\r\n }),\r\n bingadsGridColumn({\r\n name: 'AverageCPM',\r\n property: 'PerformanceMetrics/AverageCPM',\r\n }), bingadsGridColumn({\r\n name: 'Spend',\r\n property: 'PerformanceMetrics/Spend',\r\n })];\r\n\r\n\r\n const usePartialConversions = permissions.dynamic.PartialConversions && permissions.dynamic.ColumnConversion;\r\n let ConversionColumns = [\r\n usePartialConversions ? bingadsGridColumn({\r\n name: 'PartialConversionCPA',\r\n property: 'PerformanceMetrics/PartialConversionCPA',\r\n }) : bingadsGridColumn({\r\n name: 'CPA',\r\n property: 'PerformanceMetrics/CPA',\r\n }), usePartialConversions ? bingadsGridColumn({\r\n name: 'ConversionsCredit',\r\n property: 'PerformanceMetrics/ConversionsCredit',\r\n }) : bingadsGridColumn({\r\n name: 'Conversions',\r\n property: 'PerformanceMetrics/Conversions',\r\n }),\r\n bingadsGridColumn({\r\n name: 'RevenueOnAdSpend',\r\n property: 'PerformanceMetrics/RevenueOnAdSpend',\r\n }), bingadsGridColumn({\r\n name: 'AdvertiserReportedRevenue',\r\n property: 'PerformanceMetrics/AdvertiserReportedRevenue',\r\n }), usePartialConversions ?\r\n bingadsGridColumn({\r\n name: 'PartialConversionRate',\r\n property: 'PerformanceMetrics/PartialConversionRate',\r\n }) : bingadsGridColumn({\r\n name: 'ConversionRate',\r\n property: 'PerformanceMetrics/ConversionRate',\r\n }),\r\n usePartialConversions ?\r\n bingadsGridColumn({\r\n name: 'AllConversionsCredit',\r\n property: 'PerformanceMetrics/AllConversionsCredit',\r\n }) : bingadsGridColumn({\r\n name: 'AllConversions',\r\n property: 'PerformanceMetrics/AllConversions',\r\n }),\r\n usePartialConversions ?\r\n bingadsGridColumn({\r\n name: 'AllPartialConversionCPA',\r\n property: 'PerformanceMetrics/AllPartialConversionCPA',\r\n }) : bingadsGridColumn({\r\n name: 'AllConversionCPA',\r\n property: 'PerformanceMetrics/AllConversionCPA',\r\n }),\r\n usePartialConversions ?\r\n bingadsGridColumn({\r\n name: 'AllPartialConversionRate',\r\n property: 'PerformanceMetrics/AllPartialConversionRate',\r\n }) : bingadsGridColumn({\r\n name: 'AllConversionRate',\r\n property: 'PerformanceMetrics/AllConversionRate',\r\n }),\r\n bingadsGridColumn({\r\n name: 'AllConversionAdvertiserReportedRevenue',\r\n property: 'PerformanceMetrics/AllConversionAdvertiserReportedRevenue',\r\n }), bingadsGridColumn({\r\n name: 'AllConversionRevenueOnAdSpend',\r\n property: 'PerformanceMetrics/AllConversionRevenueOnAdSpend',\r\n }),\r\n ];\r\n const ExtraPerfCol = [bingadsGridColumn({\r\n name: 'VideoViews',\r\n property: 'PerformanceMetrics/VideoViews',\r\n }), bingadsGridColumn({\r\n name: 'ViewThroughRate',\r\n property: 'PerformanceMetrics/ViewThroughRate',\r\n }), bingadsGridColumn({\r\n name: 'AverageCPV',\r\n property: 'PerformanceMetrics/AverageCPV',\r\n }), bingadsGridColumn({\r\n name: 'TotalWatchTimeInMS',\r\n property: 'PerformanceMetrics/TotalWatchTimeInMS',\r\n }), bingadsGridColumn({\r\n name: 'AverageWatchTimePerImpression',\r\n property: 'PerformanceMetrics/AverageWatchTimePerImpression',\r\n }), bingadsGridColumn({\r\n name: 'AverageWatchTimePerVideoView',\r\n property: 'PerformanceMetrics/AverageWatchTimePerVideoView',\r\n }), bingadsGridColumn({\r\n name: 'VideoViewsAt25Percent',\r\n property: 'PerformanceMetrics/VideoViewsAt25Percent',\r\n }), bingadsGridColumn({\r\n name: 'VideoViewsAt50Percent',\r\n property: 'PerformanceMetrics/VideoViewsAt50Percent',\r\n }), bingadsGridColumn({\r\n name: 'VideoViewsAt75Percent',\r\n property: 'PerformanceMetrics/VideoViewsAt75Percent',\r\n }), bingadsGridColumn({\r\n name: 'CompletedVideoViews',\r\n property: 'PerformanceMetrics/CompletedVideoViews',\r\n }), bingadsGridColumn({\r\n name: 'VideoCompletionRate',\r\n property: 'PerformanceMetrics/VideoCompletionRate',\r\n })];\r\n\r\n const EntityCampaignColumn = [bingadsGridColumn({\r\n name: 'CampaignName',\r\n property: item => _.extend(_.pick(item.Campaign, 'Id', 'Name', 'BaseCampaignName'), {\r\n IsDeleted: _.result(item.AdExtension, 'Delivery', '') === 'CampaignDeleted',\r\n }),\r\n })];\r\n\r\n const EntityAdGroupColumn = [bingadsGridColumn({\r\n name: 'AdGroupName',\r\n property: item => _.defaults(_.pick(item.AdGroup, 'Id', 'Name'), {\r\n CampaignId: _.result(item.Campaign, 'Id', ''),\r\n IsDeleted: _.result(item.AdExtension, 'Delivery', '') === 'AdGroupDeleted' || _.result(item.AdExtension, 'Delivery', '') === 'CampaignDeleted',\r\n }),\r\n })];\r\n\r\n const DeliveryColumn = [bingadsGridColumn({\r\n name: 'Delivery',\r\n property: 'AdExtension',\r\n })];\r\n\r\n let SharedColumns = [\r\n bingadsGridColumn({\r\n name: 'TopImpressionRate',\r\n property: 'PerformanceMetrics/TopImpressionRate',\r\n }), bingadsGridColumn({\r\n name: 'AbsoluteTopImpressionRate',\r\n property: 'PerformanceMetrics/AbsoluteTopImpressionRate',\r\n })];\r\n\r\n SharedColumns = SharedColumns.concat(BaseCols);\r\n SharedColumns = SharedColumns.concat(ExtraPerfCol);\r\n\r\n if (excludedColumns !== []) {\r\n columns = _.reject(columns, col => _.contains(excludedColumns, col.name));\r\n SharedColumns = _.reject(SharedColumns, col => _.contains(excludedColumns, col.name));\r\n ConversionColumns = _.reject(ConversionColumns, col => _.contains(excludedColumns, col.name));\r\n PerformanceColumns = _.reject(PerformanceColumns, col => _.contains(excludedColumns, col.name));\r\n }\r\n\r\n completeColumns = completeColumns.concat(columns);\r\n completeColumns = completeColumns.concat(SharedColumns);\r\n completeColumns = completeColumns.concat(DeliveryColumn);\r\n completeColumns = completeColumns.concat(ConversionColumns);\r\n completeColumns = completeColumns.concat(PerformanceColumns);\r\n\r\n if (adextensionType === 'VideoAdExtension') { PerformanceColumns = PerformanceColumns.concat(ExtraPerfCol); }\r\n\r\n const perfColumns = _.map(PerformanceColumns, colObj => colObj.name);\r\n\r\n if (hasCampaignNameColumn) {\r\n completeColumns = completeColumns.concat(EntityCampaignColumn);\r\n }\r\n if (hasAdGroupNameColumn) {\r\n completeColumns = completeColumns.concat(EntityAdGroupColumn);\r\n }\r\n\r\n const disableScheduling = false;\r\n\r\n const filterConfig = filter || getFilterConfig(gridName, adextensionType, associationType, hasCampaignNameColumn, hasAdGroupNameColumn, disableScheduling, preferenceService, extraPerformanceColumns);\r\n const automatedType = adextensionType === 'AutomatedAdExtension';\r\n\r\n const columnConfig = getNewColumnChooserConfig({\r\n columnsConfig: completeColumns,\r\n performanceCols: perfColumns,\r\n associationType,\r\n permissions,\r\n });\r\n\r\n const extraImgExpand = adextensionType === 'ImageAdExtension' ? '($expand=Model.ImageAdExtension/Images)' : '';\r\n\r\n const { dynamic = {} } = permissions;\r\n const { ColumnConversion: IsColumnConversionEnabled } = dynamic;\r\n const initialQuery = isOdataActionSource ? { gridDataParameters: getGridDataParams(appConfig), query: { nullifynotapplybidamounts: true, $expand: `AdExtension${extraImgExpand},Campaign,AdGroup` } } : {};\r\n\r\n\r\n let edmEntity = edm.currentAccount;\r\n\r\n if (!_.isUndefined(campaignId)) {\r\n edmEntity = edmEntity.Campaigns.$withKey(campaignId);\r\n }\r\n\r\n if (!_.isUndefined(adGroupId)) {\r\n edmEntity = edmEntity.AdGroups.$withKey(adGroupId);\r\n }\r\n\r\n const entitySet = automatedType ? edmEntity.AutomatedExtensions['Default.GridData'] : edmEntity.AdExtensionAssociations['Default.GridData'];\r\n\r\n const filterService = new FilterService(filterConfig);\r\n\r\n const quickFilterName = `quick-filter-storage-campaignwebui-${filterConfig.featureName}-undefined/QuickFilter`;\r\n const quickFilterValue = preferenceService.findByNameAtUserLevel(quickFilterName);\r\n\r\n if (!quickFilterValue) {\r\n const defaultFilter = {\r\n query:\r\n {\r\n AdExtensionStatus:\r\n {\r\n $in: ['Enum.AdExtensionStatus\\'Active\\''],\r\n },\r\n },\r\n };\r\n filterService.setQuickFilter('', defaultFilter);\r\n }\r\n const gridDataParameterDecorator = { name: 'gridDataParameters', entitySet };\r\n const decorators = [\r\n {\r\n ...columnConfig,\r\n name: 'columnChooser',\r\n customColumnsEnabled: true,\r\n addPoPColumnsOnComparisonEnabled: true,\r\n IsAvgPositionDeprecationPhase2Enabled: permissions.IsAvgPositionDeprecationPhase2Enabled,\r\n comparisonPoPColumns: [\r\n 'PeriodPerformanceMetrics',\r\n 'PerformanceMetricsChange',\r\n 'PerformanceMetricsChangePercentage',\r\n ],\r\n },\r\n { name: 'dateFilter' },\r\n { name: 'segment' },\r\n { name: 'pagination', defaultPageSize: 50 },\r\n { name: 'sorting' },\r\n { name: 'filter', filterService },\r\n ];\r\n gridDataParameterDecorator.associationType = associationType;\r\n gridDataParameterDecorator.adExtensionTypes = [adextensionType];\r\n decorators.push(gridDataParameterDecorator);\r\n\r\n return {\r\n dataSource: {\r\n type: 'jsdata',\r\n primaryKey: 'Id',\r\n entity: DataStore[AdExtensionAssociationSchema.name],\r\n options:\r\n {\r\n entitySet: edmEntity.AdExtensionAssociations,\r\n usePendingFindAll: false,\r\n useDfmCache: false,\r\n cacheResponse: false,\r\n headers: {\r\n [refreshCampaignCache]: true,\r\n [headerRefreshCache]: true,\r\n },\r\n },\r\n query: {\r\n $expand: `AdExtension${extraImgExpand},Campaign,AdGroup`,\r\n },\r\n schema: AdExtensionAssociationSchema,\r\n },\r\n queryBuilder: {\r\n decorators,\r\n commonConfig: {\r\n featureName: gridName,\r\n isOdataActionSource,\r\n deps: {\r\n dateUtil,\r\n state,\r\n ColumnChooserPreference,\r\n CustomColumnPreference: customColumnPreference,\r\n SegmentationPreference,\r\n fetchPaginationConfig,\r\n fetchSortInfo,\r\n },\r\n IsColumnConversionEnabled,\r\n ...IsColumnConversionEnabled ? {\r\n columnConversions: getColumnsConversionMap('AdExtensionsGrid', permissions),\r\n } : {},\r\n },\r\n logActivity,\r\n initialQuery,\r\n },\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport { applyPartialConversionColumnName } from '@bingads-webui-campaign/column-conversions';\r\n\r\n\r\nexport function getNewColumnChooserConfig({\r\n columnsConfig,\r\n performanceCols,\r\n associationType,\r\n permissions,\r\n}) {\r\n const columnPropertyMap = {};\r\n\r\n _.each(columnsConfig, (column) => {\r\n columnPropertyMap[column.name] = column.property;\r\n });\r\n\r\n const columnsMap = _.object(_.map(columnsConfig, column => [column.name, column.property]));\r\n\r\n const perfColumns = performanceCols;\r\n\r\n const selectedColumns = _.chain(applyPartialConversionColumnName(permissions, ['AdExtension', 'Delivery', 'Conversions']))\r\n .concat((associationType === 'Campaign' || associationType === 'AdGroup') && 'CampaignName')\r\n .concat((associationType === 'AdGroup') && 'AdGroupName')\r\n .concat(perfColumns)\r\n .compact()\r\n .value();\r\n\r\n const lockedColumns = _.chain(['AdExtension', 'AdExtensionId'])\r\n .concat((associationType === 'Campaign' || associationType === 'AdGroup') && 'CampaignName')\r\n .concat((associationType === 'AdGroup') && 'AdGroupName')\r\n .compact()\r\n .value();\r\n\r\n return {\r\n lockedColumns,\r\n defaultColumns: selectedColumns,\r\n columnsMap,\r\n };\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport Promise from 'bluebird';\r\nimport { getGridName } from '@bingads-webui-campaign/inline-download-grids-metadata';\r\nimport DataStore from '@bingads-webui-component-legacy/js-data-campaign/index';\r\nimport logger from '@bingads-webui-static-legacy/instrumentation/index';\r\nimport { connect } from '@bingads-webui-campaign/dqb-grid-datasource-connector';\r\nimport { DataSourceStore } from '@bingads-webui-campaign/data-source-store';\r\nimport { QueryBuilderFactory } from '@bingads-webui-campaign/query-builder';\r\nimport { dataSource as AdExtensionsGridDataSource } from '@bingads-webui-component-legacy/github/modules/projection-grid/module/projection-grid';\r\nimport { QueryErrorFactory } from '@bingads-webui-campaign/dqb-grid-datasource-error-handler';\r\nimport { getDataSourceConfig } from './data-fetch-config';\r\n\r\nconst extensionItems = {\r\n ActionAdExtension: { associationType: 'Account', typeString: _TL_('Action Extensions'), schema: window.globalLegacySchema.get('ActionAdExtension') },\r\n AppAdExtension: { associationType: 'Account', typeString: _TL_('App Extensions'), schema: window.globalLegacySchema.get('AppAdExtension') },\r\n CallAdExtension: { associationType: 'Campaign', typeString: _TL_('Call Extensions'), schema: window.globalLegacySchema.get('CallAdExtension') },\r\n CalloutAdExtension: { associationType: 'Account', typeString: _TL_('Callout Extensions'), schema: window.globalLegacySchema.get('CalloutAdExtension') },\r\n ImageAdExtension: { associationType: 'Account', typeString: _TL_('Image Extensions'), schema: window.globalLegacySchema.get('ImageAdExtension') },\r\n LocationAdExtension: { associationType: 'Account', typeString: _TL_('Location Extensions'), schema: window.globalLegacySchema.get('LocationAdExtension') },\r\n PriceAdExtension: { associationType: 'Account', typeString: _TL_('Price Extensions'), schema: window.globalLegacySchema.get('PriceAdExtension') },\r\n ReviewAdExtension: { associationType: 'Account', typeString: _TL_('Review Extensions'), schema: window.globalLegacySchema.get('ReviewAdExtension') },\r\n Sitelink2AdExtension: { associationType: 'Account', typeString: _TL_('Sitelink Extensions'), schema: window.globalLegacySchema.get('Sitelink2AdExtension') },\r\n StructuredSnippetAdExtension: { associationType: 'Account', typeString: _TL_('Structured Snippet Extensions'), schema: window.globalLegacySchema.get('StructuredSnippetAdExtension') },\r\n AutomatedAdExtension: { associationType: 'Account', typeString: _TL_('Automated Extensions Report'), schema: window.globalLegacySchema.get('AutomatedExtension') },\r\n PromotionAdExtension: { associationType: 'Account', typeString: _TL_('Promotion Extensions'), schema: window.globalLegacySchema.get('PromotionAdExtension') },\r\n FilterLinkAdExtension: { associationType: 'Account', typeString: _TL_('Filter Link Extensions'), schema: window.globalLegacySchema.get('FilterLinkAdExtension') },\r\n FlyerAdExtension: { associationType: 'Account', typeString: _TL_('Flyer Extensions'), schema: window.globalLegacySchema.get('FlyerAdExtension') },\r\n VideoAdExtension: { associationType: 'Account', typeString: _TL_('Video Extensions'), schema: window.globalLegacySchema.get('VideoAdExtension') },\r\n LeadFormAdExtension: { associationType: 'Account', typeString: _TL_('Lead form Extensions'), schema: window.globalLegacySchema.get('LeadFormAdExtension') },\r\n BusinessInfoAdExtension: { associationType: 'Account', typeString: _TL_('Logo Extensions'), schema: window.globalLegacySchema.get('LogoAdExtension') },\r\n // TODO CHANGE TO BusinessInfoAdExtension\r\n};\r\nconst AdExtensionAssociationSchema = window.globalLegacySchema.get('AdExtensionAssociation');\r\nexport function getDataSource({\r\n logActivity,\r\n scope,\r\n adextensionType,\r\n preferenceService,\r\n associationType,\r\n useCache,\r\n filter,\r\n}) {\r\n const { campaignId } = scope.values;\r\n const { adGroupId } = scope.values;\r\n // eslint-disable-next-line no-nested-ternary\r\n const associationScope = adGroupId ? 'AdGroup' : (campaignId ? 'Campaign' : undefined);\r\n\r\n const gridName = adextensionType === 'AutomatedAdExtension' ?\r\n getGridName('AutomatedExtension', {\r\n CampaignId: campaignId,\r\n AdGroupId: adGroupId,\r\n }) :\r\n getGridName('AdExtensionAssociation', {\r\n AdExtensionType: adextensionType,\r\n AssociationType: associationType || associationScope || extensionItems[adextensionType].associationType,\r\n CampaignId: campaignId,\r\n AdGroupId: adGroupId,\r\n });\r\n\r\n if (useCache) {\r\n const existingDataSource = DataSourceStore.get(gridName);\r\n if (existingDataSource) {\r\n return existingDataSource;\r\n }\r\n }\r\n\r\n const configParams = {\r\n logActivity,\r\n scope,\r\n preferenceService,\r\n gridName,\r\n adextensionType,\r\n associationType: associationType || associationScope || extensionItems[adextensionType].associationType,\r\n filter,\r\n };\r\n\r\n const dataFetchConfig = getDataSourceConfig(configParams);\r\n let afterFindAllPromiseResolve = null;\r\n const { featureName } = dataFetchConfig.queryBuilder.commonConfig;\r\n const queryBuilder = QueryBuilderFactory.make(dataFetchConfig.queryBuilder);\r\n const queryErrors = QueryErrorFactory.make(dataFetchConfig.dataSource);\r\n const customDataSource = new AdExtensionsGridDataSource.JSData(dataFetchConfig.dataSource.entity, dataFetchConfig.dataSource.options);\r\n const usingCacheManager = false;\r\n const useJSGridChartDataSource = false;\r\n const afterFindAllPromise = new Promise((res) => {\r\n afterFindAllPromiseResolve = res;\r\n });\r\n const dataSource = connect(\r\n dataFetchConfig.dataSource,\r\n queryBuilder,\r\n featureName,\r\n logger,\r\n usingCacheManager,\r\n useJSGridChartDataSource,\r\n customDataSource,\r\n afterFindAllPromiseResolve\r\n );\r\n dataSource.queryErrors = queryErrors;\r\n dataSource.entity = DataStore[AdExtensionAssociationSchema.name];\r\n dataSource.afterFindAllPromise = afterFindAllPromise;\r\n\r\n DataSourceStore.set(featureName, dataSource);\r\n\r\n return dataSource;\r\n}\r\n"],"names":["ARWJsDataContextProvider","_ref","children","_ref$serverContext","serverContext","CurrentUser","CurrentCustomer","ServicesEndpoints","_jsx","CcJsDataContextProvider","userId","Id","customerId","appendErrorSummary","appendJsDataErrorSummary","handleAjaxAuthFailure","clientCenterBaseUrl","ClientCenterUIAPI","useAction","Action","useARWContextValue","jsData","useJsDataContext","useMemo","reparentingId","ReparentingId","sourceCustomerId","SourceCustomer","targetCustomerId","TargetCustomer","AccountActions","_createClass","_this","_classCallCheck","fetch","id","Account","find","fetchAll","ids","findAll","accountIds","this","useAccountActions","CustomerActions","Customer","updateServiceLevel","_ref2","serviceLevel","ServiceLevel","update","cacheResponse","updatePilotFeatures","_ref3","pilotFeatures","PilotFeatures","useCustomerActions","PaymentInstrumentActions","billToCustomerId","PaymentInstrument","fetchWithId","piId","usePaymentInstrumentActions","usePaymentInstruments","paymentInstrumentActions","_usePromise$data","usePromise","data","BillingActions","fetchBulkTaxEstimates","BulkEstimateTaxes","useBillingActions","ReparentingJobActions","add","AccountReparentingJobAdd","create","updateType","lifeCycleStatus","accountLinkingSettings","accountBillingSettings","defaultBillingSetting","AccountReparentingJobUpdate","sourceCid","targetCid","load","AccountReparentingJobLoad","params","loadAccounts","AccountReparentingLoadAccounts","submit","AccountReparentingJobSubmit","useReparentingJobActions","ReparentingValidateActions","AccountReparentingValidateAccounts","targetCustomer","targetCustomerNumber","AccountReparentingValidateTargetCustomer","linkSettings","_ref4","AccountReparentingValidateLinkInfo","billingSettings","_ref5","AccountReparentingValidateBillingInfo","fullValidate","AccountReparentingFullValidate","useReparentingValidateActions","UETTagActions","userSettings","get","toPromise","UETTags","$makeCall","payload","TagSettings","download","odata","odataURL","xhrFields","responseType","dataType","oDataToken","window","campaignODataConfigs","Token","edmCustomer","edmCampaign","Customers","$withKey","ReparentingUserSettings","useUETTagActions","ARWServerContext","React","Value","Actions","Permissions","useContext","useARWContextActions","useARWContextPermissions","ARWContextProvider","_React$Component","props","_callSuper","setShowSummaryPaneLinkSettings","showSummaryPaneLinkSettings","setState","ShowSummaryPaneLinkSettings","setShowSummaryPaneBillingSetting","showSummaryPaneBillingSetting","ShowSummaryPaneBillingSetting","setIOPreApprovalRequired","ioPreApprovalRequired","IOPreApprovalRequired","updateAccountBillToCustomersMap","accountBillToCustomersMap","AccountBillToCustomersMap","updateAccountLinks","accountLinks","mandatoryNewBillToAccountIds","updatedAccounts","state","Accounts","_","accLink","accountIndex","acc","updatedAccount","linkIndex","LinkedManagers","manager","LinkedManager","Unlink","BillToManager","BillTo","slice","MandatoryNewBillToAccountIds","updateAccountBilling","accountsBilling","accBilling","updateNewBillToSettings","billToCustomer","paymentOptionId","paymentInstrumentId","insertionOrder","prepayConfig","NewBillTo","PaymentOptionId","PaymentInstrumentId","InsertionOrder","PrepayConfig","updateAccountsBillingSettings","updatedAccountsBillingSettings","toUpdateIds","account","updatedSettingsIndex","aid","_updatedAccountsBilli","Constants","Invoice","BillToChange","contextInsertionOrder","areUiInsertionOrdersEqual","ioStatus","InsertionOrderStatus","PendingBillToPartyChangeAndUserReview","_objectSpread","BillToCustomer","updateJobLoadAccounts","accounts","jobAccount","jobAcc","AccountId","LinkSettings","linkSetting","linkedManager","AgencyCustomerId","KeepLink","BillingSetting","BillToChangeSetting","_toClientSideBillingS","toClientSideBillingSetting","updateTargetCustomer","customer","updateJobTimestamp","timestamp","Timestamp","updateSourceCustomer","updateSelectedAccountIds","AccountIds","updateSelectedAccounts","convertAccountModelToServerContext","updateUETTags","uetTags","deleteAccount","accountId","newUETTags","prevState","IsAccountReparentingUETEnabled","render","_this$state","_this$props$serverCon","Provider","value","contextActions","_props$serverContext","SourceCustomerId","UpdateJobTimestamp","DeleteAccount","UpdateTargetCustomer","UpdateSourceCustomer","UpdateSelectedAccountIds","UpdateSelectedAccounts","UpdateJobLoadAccounts","UpdateAccountLinks","UpdateAccountBilling","UpdateAccountsBillingSettings","SetIOPreApprovalRequired","UpdateNewBillToSettings","UpdateAccountBillToCustomersMap","UpdateUETTags","SetShowSummaryPaneLinkSettings","SetShowSummaryPaneBillingSetting","_inherits","useAccountsWithNewBillTo","useAccountsForBillingSetup","_useARWContextValue","useEligibleBillToCustomers","arguments","length","undefined","billToCustomersMap","allAccountIds","billToCustomersList","accId","list1","list2","item1","item2","usePaymentOptionId","contextAccounts","firstAccountWithBillToChange","defaultSchema","scenario","name","activity","getInstrumentation","applicationName","systemName","INSTRUMENTATION_SYSTEM_NAME","subSystemName","INSTRUMENTATION_SUB_SYSTEM","userContext","getInstrumentationInstance","pageTrackingId","PageTrackingId","errorMappers","isInDevelopmentMode","getInstrumentationService","instrumentation","addScenario","defaultScenario","default","logger","InstrumentationContext","InstrumentationContextProvider","context","ListItem","Name","Url","NavItem","className","target","href","defaultProps","EntityPopover","i18n","classes","popoverId","entities","matchSearch","isShowing","onCancelClick","title","searchboxPlaceholder","_useState","useState","_useState2","_slicedToArray","searchText","setSearchText","entityList","entity","toLowerCase","trim","classNames","entityPopover","FocusLock","onExit","focusFirstItemOnMount","isControlledFocusLock","isFocusLock","_jsxs","getString","SearchBox","onQueryChange","onSearch","placeholder","Children","child","Button","onClick","CommonLocStrings","CloseLabel","ARWEntityPopover","withI18nConsumer","withDefaultStyles","getEntityPopoverStyles","ARWStepFooter","saveAndProceed","onPreviousClick","onNextClick","onSubmitClick","nextButtonDisabled","I18nContext","onNextButtonClick","useCallback","onSaveAndExit","BackLabel","disabled","NextLabel","SubmitLabel","CancelLabel","SaveAndExitLabel","ARWStepBaseLayout","ARWAccountsPopover","sourceCustomer","currentUser","onAccountDelete","accountsList","srcText","stringContains","Number","toString","onAccountDeleteCb","buildCampaignsUrl","URI","concat","location","origin","search","uid","cid","accountsPopover","LocStrings","SelectedAccountsLabel","SearchAccounts","RemoveAccount","getAccountsPopoverStyles","ARWAccountManagerPopover","popoverTitle","onAccountClickUrl","onManagerClickUrl","Manager","StaticText","replace","withouEvents","ButtonOrStatic","Component","isButton","newProps","iconStyle","fontWeight","margin","fontSize","OkIcon","Glyphicon","glyph","style","color","WarningIcon","ARWAccountLinksSummary","isUnlinkedAccountsModalDisplayed","setIsUnlinkedAccountsModalDisplayed","_useState3","_useState4","isRetainedAccountsModalDisplayed","setIsRetainedAccountsModalDisplayed","showUnlinkedAccountsModal","hideUnlinkedAccountsModal","showRetainedAccountsModal","hideRetainedAccountsModal","buildAccountsUrl","_useMemo","retained","unlinked","accountManager","push","unlinkedAccounts","retainedAccounts","RetainedAccountsLabel","count","UnlinkedAccountsLabel","UnlinkedAccountLinksLabel","RatinedAccountLinksLabel","ARWAccountBillingSummary","clientCenterUIAPI","isNewBillToAccountsModalDisplayed","setIsNewBillToAccountsModalDisplayed","showNewBillToAccountsModal","hideNewBillToAccountsModal","newBillToAccounts","toAccountManagerMap","buildBillingUrl","NewBillToLabel","RetainedBillToLabel","NewBillToAccountsLabel","RetainedBillToAccountsLabel","AccountPaymentSummary","paymentOptionKey","paymentOptionIdToKeyMap","FormGroup","Label","PaymentOption","ARWAccountPaymentSummary","ARWInsertionOrdersSummary","preApprovalIOPageUrl","rpid","iosrc","IOCreationSource","Reparenting","ioStatusCounts","accountsBillToChange","billToChange","counts","pending","PendingBillToPartyChange","approved","Declined","declined","navigateToIOApprovalPage","renderCountsRow","locKey","icon","approvedLabel","InsertionOrdersApproved","declinedLabel","InsertionOrdersDeclined","pendingLabel","InsertionOrdersPending","InsertionOrders","matchSearchAccount","matchSearchTag","tag","ARWUETTagsSummary","isUETPanelDisplayed","setIsUETPanelDisplayed","isAccountPanelDisplayed","setIsAccountPanelDisplayed","showUETPanel","hideUETPanel","showAccountsPanel","hideAccountsPanel","transferTags","Move","loseAccessAccounts","memo","_toConsumableArray","TagUsedByInfosImpactedByTransfer","TagUsedByInfosImpactedByKeep","obj","getRoutePathById","allSiteMap","buildUETUrl","filterExpressions","JSON","stringify","SelectedColumn","SelectedOperator","Values","uets","item","UETTagLabel","UETTagsTransfered","UETTagTransfered","AccountsLoseAccess","AccountLoseAccess","SearchUETTags","UETPopoverTitle","LoseAccessAccountPopoverTitle","RequestSummaryPane","newBillTo","isAccountsListPopoverDisplayed","setIsAccountsListPopoverDisplayed","showAccountsListPopover","hideAccountsListPopover","uetActions","isUETEnabled","downloadSummary","then","response","downloadifyBlob","catch","e","buildTransferSummaryDownloadUrl","SummaryPaneHeader","CurrentManagerAccountLabel","AccountsSelectedLabel","NumberOfAccounts","NewManagerAccountLabel","AccountLinksLabel","BillingSetupLabel","saved","DownloadSummaryLinkLabel","TransferRequestSummary","ARWSummaryPane","jobActions","JobUpdateTypes","ReparentingAccountDelete","UetSetting","tagInfos","TagInfos","IsSaved","finally","withUiBlock","$","summaryPaneContainer","getSummaryPaneStyles","AccountsPageDescription","accountsSummaryPageDescription","_ref$palette","palette","padding","top","bottom","left","fontFamily","lineHeight","neutralPrimary","getAdExtensionEditorStyles","components","theme","mergeStyles","convertToLocalStyle","helpbuttonStyle","extensionEditorStyles","messageBarStyle","scrollbarStyle","glyphIconStyle","searchboxStyle","selectElementStyle","includeSelector","validationErrorsStyle","getAdExtensionsAssociationsStyles","buttonInputStyle","adExtensionsAssociationsContainer","adExtensionsAssociationsContainerLayoutType","ExpandHorizontallyToContainer","Extension","template","extension","extensionContainer","dangerouslySetInnerHTML","__html","Extensions","layoutOptions","associations","useDefaultStyles","_ref2$type","type","_ref2$itemsPerRow","itemsPerRow","extensionsContainer","display","flexDirection","flexWrap","gap","gridGap","gridTemplateColumns","marginBottom","border","borderRadius","alignContent","adExtensionItemTemplateStyles","withEllipsisItemText","getExtensionsStyles","map","association","index","getEditorStyles","datePickerStyle","adExtensionEditorsGlobalStyles","extensionsAssociations","editorPanel","Editor","container","campaignId","campaignName","AssociationEditor","associationEditor","dynamicFeatures","onEditorSave","onSave","onEditorCancel","onCancel","onEditorChange","onChange","view","useRef","viewListener","clone","Backbone","useEffect","current","useNewDlbLayout","showSaveButtonAsDefaultButton","allowSelectAll","allowDeselectAll","entityType","hasSubTitle","showErrorsInline","popupFront","usePanel","panelClassName","isForVNext","vnextContext","$el","appendTo","remove","console","log","isFunction","listenTo","stopListening","ref","getAdExtensionsAssociationsWrapperStyles","controlsBar","paddingTop","iconButtonColor","themePrimary","extensionDescription","AdExtensionsAssociationsWrapper","_ref6","extensionType","renderDescription","staticFeatures","selectedExtensionsLayoutOptions","onUpdateExtensionsAssociations","isEditorOpen","setIsEditorOpen","onOpenEditor","_Fragment","DefaultButton","iconProps","iconName","_TL_","text","dynamicTemplate","universalItemTemplate","staticTemplate","detailsFuncFactory","noAssociationsKey","hasAssociationsKeySingular","hasAssociationsKeyPlural","number","editorViewMapper","App","editor","appAssociationsEditor","details","Call","callAssociationsEditor","topic","Callout","calloutAssociationsEditor","Location","locationAssociationsEditor","Review","reviewAssociationsEditor","_ref7","SiteLink","sitelinkAssociationsEditor","_ref8","StructuredSnippet","structuredsnippetAssociationsEditor","_ref9","Price","priceAssociationsEditor","_ref10","Promotion","promotionAssociationsEditor","_ref11","FilterLink","filterLinkAssociationsEditor","_ref12","Flyer","flyerAssociationsEditor","_ref13","actionlinkAssociationsEditor","_ref14","extensionEntityMapping","Image","Automated","Video","LeadForm","BusinessInfo","extensionNameMapping","ActionAdExtension","AppAdExtension","CallAdExtension","CalloutAdExtension","ImageAdExtension","LocationAdExtension","PriceAdExtension","ReviewAdExtension","Sitelink2AdExtension","StructuredSnippetAdExtension","AutomatedAdExtension","PromotionAdExtension","FilterLinkAdExtension","FlyerAdExtension","VideoAdExtension","LeadFormAdExtension","LogoAdExtension","getAvailableExtensions","permissions","campaignType","campaignTypeFilter","campaignTypeExtensionTypeFilter","chain","IsActionLinkExtensionAllowed","IsPriceExtensionAllowed","IsDomesticSimplifiedChineseEnabled","IsLocationExtensionAllowed","IsAppExtensionAllowed","IsSiteLinkExtensionsAllowed","IsCallExtensionAllowed","IsCalloutExtensionAllowed","IsReviewExtensionAllowed","IsStructuredSnippetExtensionAllowed","IsPromotionAdExtensionEnabled","IsFilterLinkAdExtensionEnabled","IsFlyerAdExtensionEnabled","filter","_ref15","_ref16","_ref17","getObjectiveExtensions","_ref19","campaignObjective","availableExtensions","_result","result","WebsiteVisits","suggestedExtensions","otherExtensions","LocationVisits","WebsiteConversions","PhoneCalls","AppInstalls","difference","getObjectiveExtensionMap","suggestedObjectiveExtensions","intersection","otherObjectiveExtensions","adExtensionsStaticFeatures","actionUniversalItemTemplate","appUniversalItemTemplate","callUniversalItemTemplate","calloutUniversalItemTemplate","locationUniversalItemTemplate","priceUniversalItemTemplate","reviewUniversalItemTemplate","sitelinkUniversalItemTemplate","structuredsnippetUniversalItemTemplate","extensionsAssociationsFactory","adExtensionsDynamicFeatures","_editorViewMapper$ext","_ref20","AssociationPanel","renderTimeProps","AdExtensionSchemaProcessor","_BaseSchemaProcessor","adextensionType","hasCampaignColumn","hasAdGroupColumn","disableScheduling","schemaI18nCampaign","globalConfig","cacheService","dataContextManager","jsdata","key","entitySchema","updatedSchema","_superPropGet","properties","allConvMetric","putil","filterable","deliveryStatusProperty","AdExtensionDelivery","deliveryEnum","splice","updateDeliveryStatusOptionForFilter","CampaignName","AdGroupName","addCampaignTypePropertyForFilter","CampaignType","AdExtensionSchedulingEndDate","AdExtensionSchedulingStartDate","CampaignStatus","AdGroupStatus","odataOptions","custom","eq","BaseSchemaProcessor","AdExtensionAssociationSchema","globalLegacySchema","mockI18n","enum","enumMappedString","enumDescription","valueDescription","parseInt","property","i18nCache","newI18n","legacyGlobalI18n","specificAggRowText","prop","isAggregateRow","$total","isOdataActionSource","refreshCampaignCache","getDataSourceConfig","campaignNameColumnExist","adgroupNameColumnExist","logActivity","scope","preferenceService","associationType","gridName","appConfig","values","adGroupId","columns","completeColumns","excludedColumns","extraPerformanceColumns","useTotalsPlugin","getUseTotalsPlugin","adextensionGridColumn","bingadsGridColumn","AdExtension","formatData","IsVideoAdExtensionsPerfMetricsEnabled","hasCampaignNameColumn","hasAdGroupNameColumn","BaseCols","PerformanceColumns","usePartialConversions","dynamic","PartialConversions","ColumnConversion","ConversionColumns","ExtraPerfCol","EntityCampaignColumn","Campaign","IsDeleted","EntityAdGroupColumn","AdGroup","CampaignId","DeliveryColumn","SharedColumns","col","perfColumns","colObj","filterConfig","featureName","adExtensionSchemaProcessor","customColumnPreference","schemaProcessor","enableCampaignWaterfall","enableAdGroupWaterfall","selector","items","removable","defaultValue","sessionStore","preferenceStoreFactory","getFilters","getCommonFilterConfig","getFilterConfig","automatedType","columnConfig","columnsConfig","performanceCols","columnPropertyMap","column","columnsMap","selectedColumns","applyPartialConversionColumnName","compact","lockedColumns","defaultColumns","getNewColumnChooserConfig","extraImgExpand","_permissions$dynamic","IsColumnConversionEnabled","initialQuery","gridDataParameters","getGridDataParams","query","nullifynotapplybidamounts","$expand","edmEntity","edm","currentAccount","Campaigns","AdGroups","entitySet","AutomatedExtensions","AdExtensionAssociations","filterService","FilterService","quickFilterName","findByNameAtUserLevel","setQuickFilter","AdExtensionStatus","$in","gridDataParameterDecorator","decorators","customColumnsEnabled","addPoPColumnsOnComparisonEnabled","IsAvgPositionDeprecationPhase2Enabled","comparisonPoPColumns","defaultPageSize","adExtensionTypes","dataSource","primaryKey","DataStore","options","usePendingFindAll","useDfmCache","headers","_defineProperty","schema","queryBuilder","commonConfig","deps","dateUtil","ColumnChooserPreference","CustomColumnPreference","SegmentationPreference","fetchPaginationConfig","fetchSortInfo","columnConversions","getColumnsConversionMap","extensionItems","typeString","BusinessInfoAdExtension","getDataSource","useCache","associationScope","getGridName","AdGroupId","AdExtensionType","AssociationType","existingDataSource","DataSourceStore","dataFetchConfig","afterFindAllPromiseResolve","QueryBuilderFactory","make","queryErrors","QueryErrorFactory","customDataSource","AdExtensionsGridDataSource","JSData","afterFindAllPromise","Promise","res","connect","set"],"sourceRoot":""}