{"version":3,"file":"static/js/application.async.non-landing~2944b42b.7fd825d9.chunk.js","mappings":"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","sources":["../../../node_modules/@bingads-webui-campaign-react/wizard-utils/src/marketing-utils.js","../../../node_modules/@bingads-webui-campaign-react/wizard-utils/src/signup-flow-step-logger.js","../../../node_modules/@bingads-webui-campaign-react/wizard-utils/src/signup-flow-step-logger-with-activity.js","../../../node_modules/@bingads-webui-campaign-react/wizard-utils/src/step-render-page-ready.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/repository/default-import-user-preference.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/repository/multi-account-google-import-repository.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/bing-account-title-grid-viewmodel.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/bing-account-title-grid-view.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/bing-account-title-step.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/multi-google-account-grid-viewmodel.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/bing-account-selection-col/bing-account-drop-down-menu.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/bing-account-selection-col/bing-account-list-dropdown-view.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/multi-google-account-grid-view.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/multi-google-account-grid-config.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/multi-account-google-account-step.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/grid/google-account-selector.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/grid/multi-account-google-campaign-grid-viewmodel.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/grid/multi-account-google-campaign-grid-view.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/multi-account-google-campaign-step.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/schedule-import/multi-account-schedule-import-step.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/import-summary/multi-account-import-summary-step.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/page/multi-account-google-import-step-factory.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/page/multi-account-google-import-page.js","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/bing-account-title-grid-view.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/itemContentTemplate.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/selectedItemTemplate.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/sourceItemTemplate.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/bing-account-title/grid/view-details-pop-up-view.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/bing-account-selection-col/bing-account-selection-col-template.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/grid/multi-google-account-grid-template.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-account/multi-account-google-account-step.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/grid/multi-account-google-campaign-grid-template.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/google-campaign/multi-account-google-campaign-step.pug","../../../node_modules/@bingads-webui-campaign/account-import-page/src/step/import-summary/multi-account-import-summary-template.pug","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-selector.types.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/selector-option.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/double-list.types.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/styles.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/selector-tree.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/selector-list.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/selector-container.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/selector.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/utils.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/double-list/double-list.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/styles.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/glyphicon-wrapper.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/acccount-campaign-container-config.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-result-box.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-selector-box.tsx","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-data-store/account-campaign-data-processor.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-data-store/account-campaign-data-store.ts","../../../node_modules/@bingads-webui-campaign/account-campaign-selector/src/account-campaign/account-campaign-selector.tsx"],"sourcesContent":["import { updatePdlPage, updatePdlUser, triggerOmnitureEvent } from '@bingads-webui-campaign/global-app-init';\r\n\r\nexport function omniturePageLoad({\r\n pageId,\r\n pageTitle,\r\n isSignUp = false,\r\n signUpPrefix = 'wizard_signup_step_',\r\n}) {\r\n const navLevel3 = isSignUp ? `${signUpPrefix}${pageId}` : pageId;\r\n updatePdlPage({\r\n navLevel3,\r\n navLevel3Title: pageTitle,\r\n });\r\n}\r\n\r\nexport const omnitureAccountUpdated = ({\r\n serverContext,\r\n}) => {\r\n const {\r\n CurrentAccount,\r\n } = serverContext;\r\n\r\n updatePdlUser(serverContext);\r\n\r\n triggerOmnitureEvent({\r\n user: {\r\n aid: CurrentAccount.Id,\r\n cid: CurrentAccount.AdvertiserCustomerID,\r\n accountMode: CurrentAccount.AccountMode,\r\n },\r\n });\r\n};\r\n","import PropTypes from 'prop-types';\r\nimport { useEffect } from 'react';\r\nimport { useLogEnteredPage } from '@bingads-webui-campaign-react/shared-app-capi';\r\nimport { useWizardService, getCurrentStepId, getCurrentFlow } from '@bingads-webui-react/wizard-core';\r\nimport { isTestEnvironment } from '@bingads-webui-campaign/global-app-init';\r\nimport { omniturePageLoad } from './marketing-utils';\r\n\r\nexport const SignupFlowStepLogger = ({\r\n flow, activity, stepToPage, getSubFlowFromCurrentFlow, signUpPrefix,\r\n}) => {\r\n const { state } = useWizardService();\r\n const currentStepId = getCurrentStepId(state);\r\n const currentFlow = getCurrentFlow(state);\r\n const subFlow = getSubFlowFromCurrentFlow(currentFlow);\r\n\r\n if (!stepToPage[currentStepId]) {\r\n activity.error(`Cannot find the step name from stepToPage: ${currentStepId}`);\r\n\r\n if (isTestEnvironment(document.domain)) {\r\n throw new Error('The current step is not in stepToPage config.');\r\n }\r\n }\r\n\r\n useLogEnteredPage({ Flow: flow, SubFlow: subFlow, Page: stepToPage[currentStepId] || 'unknown step' });\r\n\r\n useEffect(() => {\r\n omniturePageLoad({\r\n isSignUp: true,\r\n pageId: stepToPage[currentStepId] || 'unknown step',\r\n pageTitle: currentStepId,\r\n signUpPrefix,\r\n });\r\n }, [currentStepId, signUpPrefix, stepToPage]);\r\n\r\n return null;\r\n};\r\n\r\n\r\nSignupFlowStepLogger.propTypes = {\r\n activity: PropTypes.shape({ error: PropTypes.func }).isRequired,\r\n flow: PropTypes.string.isRequired,\r\n stepToPage: PropTypes.shape({}).isRequired,\r\n getSubFlowFromCurrentFlow: PropTypes.func,\r\n signUpPrefix: PropTypes.string.isRequired,\r\n};\r\n\r\nSignupFlowStepLogger.defaultProps = {\r\n getSubFlowFromCurrentFlow: () => null,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { InstrumentationContext } from '@bingads-webui-react/hoc-with-instrumentation';\r\nimport { SignupFlowStepLogger } from './signup-flow-step-logger';\r\n\r\nexport const SignupFlowStepLoggerWithActivity = ({\r\n flow, stepToPage, getSubFlowFromCurrentFlow, signUpPrefix,\r\n}) => {\r\n const instrumentation = useContext(InstrumentationContext);\r\n const activity = useMemo(() => {\r\n if (instrumentation && instrumentation.signupFlowScenario) {\r\n const scenario = instrumentation.signupFlowScenario.create();\r\n return scenario.signupFlow.create();\r\n }\r\n return { trace: _.noop, error: _.noop };\r\n }, [instrumentation]);\r\n return (\r\n \r\n );\r\n};\r\n\r\nSignupFlowStepLoggerWithActivity.propTypes = {\r\n flow: PropTypes.string.isRequired,\r\n stepToPage: PropTypes.shape({}).isRequired,\r\n getSubFlowFromCurrentFlow: PropTypes.func,\r\n signUpPrefix: PropTypes.string,\r\n};\r\nSignupFlowStepLoggerWithActivity.defaultProps = {\r\n signUpPrefix: 'signup_step_',\r\n getSubFlowFromCurrentFlow: () => null,\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { matchStepState, useWizardService } from '@bingads-webui-react/wizard-core';\r\nimport { FORM_STATES } from '@bingads-webui-react/form-core';\r\nimport { PageReadyTrigger } from '@bingads-webui-campaign-react/page-ready-trigger';\r\nimport { PageReady } from '@bingads-webui/page-ready';\r\n\r\n// Page ready timeout is set to 15 seconds to allow for the page to load\r\n// and the wizard to initialize.\r\nconst PAGE_READY_TIMEOUT = 15000;\r\n\r\nexport const StepRenderPageReady = () => {\r\n const [isStepRendered, setIsAnyStepRendered] = useState(false);\r\n const { state } = useWizardService();\r\n\r\n useEffect(() => {\r\n _.delay(() => {\r\n PageReady.pageIsReady();\r\n }, PAGE_READY_TIMEOUT);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isStepRendered && matchStepState(state, FORM_STATES.ACTIVE)) {\r\n setTimeout(() => {\r\n setIsAnyStepRendered(true);\r\n }, 0);\r\n }\r\n }, [isStepRendered, state]);\r\n\r\n return isStepRendered ? : null;\r\n};\r\n","export const defaultOptions = {\r\n ImportNewEntities: true,\r\n ImportUpdatedEntities: true,\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport * as urlUtil from '@bingads-webui/url-util';\r\n\r\nimport { GoogleImportRepository } from '@bingads-webui-campaign/import-shared-repositories';\r\n\r\nimport { defaultOptions } from './default-import-user-preference';\r\n\r\nconst getGoogleSessionUrlTmpl =\r\n 'ImportSession/StartGoogleSession(CustomerId=:customer_id,AccountId={{AccountId}})?authCode={{AuthCode}}&redirectUri=postmessage';\r\nconst getGoogleSessionWithTokenUrlTmpl =\r\n 'ImportSession/StartGoogleSession(CustomerId=:customer_id,AccountId={{AccountId}})?refreshToken={{Token}}&redirectUri=postmessage';\r\nconst getGoogleLoginEmailUrlTmpl =\r\n 'ImportSession/GoogleLoginEmail(CustomerId=:customer_id,AccountId={{AccountId}},SessionId={{SessionId}})';\r\nconst getGoogleAccountsUrlTmpl =\r\n '/ImportSession/GoogleAccounts(CustomerId=:customer_id,AccountId={{AccountId}},SessionId={{SessionId}})';\r\nconst getGoogleCampaignsUrlTmpl =\r\n '/ImportSession/GoogleCampaigns(CustomerId=:customer_id,AccountId={{AccountId}},SessionId={{SessionId}})';\r\nconst getImportUserPreferenceUrlTmpl =\r\n '/ImportSession/MultiAccountGoogleImportUserPreference(CustomerId=:customer_id)';\r\nconst getGoogleAccountPropertiesUrlTmpl =\r\n '/ImportSession/MultiGoogleAccountProperties(CustomerId=:customer_id,AccountId={{AccountId}},SessionId={{SessionId}})';\r\nconst importType = 'GoogleAPIImport';\r\n\r\nexport class MultiAccountGoogleImportRepository extends GoogleImportRepository {\r\n constructor({ deps }) {\r\n super({ deps });\r\n }\r\n\r\n startGoogleSession(authCode) {\r\n const url = _.template(getGoogleSessionUrlTmpl)({ AccountId: this.aid, AuthCode: authCode });\r\n\r\n return this.startGoogleSessionInternal(url);\r\n }\r\n\r\n startGoogleSessionWithToken(token) {\r\n const url = _.template(getGoogleSessionWithTokenUrlTmpl)({ AccountId: this.aid, Token: token });\r\n\r\n return this.startGoogleSessionInternal(url);\r\n }\r\n\r\n fetchGoogleLoginEmail(sessionId) {\r\n // eslint-disable-next-line max-len\r\n const url = _.template(getGoogleLoginEmailUrlTmpl)({ AccountId: this.aid, SessionId: sessionId });\r\n\r\n return this.odata.get(url);\r\n }\r\n\r\n getGoogleAccounts(currentSessionId = null) {\r\n const sessionId = currentSessionId || this.getGoogleSessionIdFromCookie();\r\n const url = _.template(getGoogleAccountsUrlTmpl)({ AccountId: this.aid, SessionId: sessionId });\r\n\r\n return this.odata.get(url);\r\n }\r\n\r\n getGoogleCampaigns(googleCustomerId) {\r\n const sessionId = this.getGoogleSessionIdFromCookie();\r\n let url = _.template(getGoogleCampaignsUrlTmpl)({ AccountId: this.aid, SessionId: sessionId });\r\n\r\n url = this.formatUrl({\r\n url,\r\n queryParameters: {\r\n googleCustomerId,\r\n },\r\n });\r\n\r\n return this.getGoogleCampaignsInternal(url);\r\n }\r\n\r\n prepareSingleAccountGoogleImportTaskItem(\r\n timeZoneId,\r\n bingAccountInfo,\r\n adWordsImportContext\r\n ) {\r\n return {\r\n '@odata.type': '#Model.SingleAccountGoogleImportTaskItem',\r\n AccountId: bingAccountInfo.Id,\r\n AdWordsImportContext: adWordsImportContext,\r\n CampaignTimeZone: this.timeZoneEnumMapper.getEnumbyId(timeZoneId || this.config.get('AccountTimeZone')),\r\n CultureName: this.config.get('CultureName'),\r\n LCID: this.config.get('CultureLcid'),\r\n AdGroupMedium: this.adGroupMedium,\r\n Language: this.language,\r\n CustomerMarket: this.market,\r\n ImportType: importType,\r\n AccountName: bingAccountInfo.Name,\r\n AccountNumber: bingAccountInfo.AccountNumber,\r\n UserName: this.config.get('CurrentUser') && this.config.get('CurrentUser').Name,\r\n };\r\n }\r\n\r\n prepareMultiAccountGoogleImportTaskItem({\r\n importOptions,\r\n stepState,\r\n }) {\r\n const {\r\n importUserPreferences,\r\n notificationType,\r\n notificationEmailAddresses,\r\n timeZoneId,\r\n taskItemState,\r\n name,\r\n cron,\r\n } = importOptions;\r\n\r\n const {\r\n loginCustomerId,\r\n initialAdWordsAccount,\r\n selectedCampaignIds,\r\n selectedGoogleAccountToBingAccountMap,\r\n selectedGoogleAccounts,\r\n bingAccount,\r\n } = stepState;\r\n\r\n // get sessionId from state or cookie\r\n let sessionId;\r\n let googleAccountName;\r\n if (initialAdWordsAccount) {\r\n ({ sessionId } = initialAdWordsAccount);\r\n ({ googleAccountName } = initialAdWordsAccount);\r\n } else {\r\n const info = this.getGoogleImportInfoFromCookie();\r\n sessionId = info.googleSessionId;\r\n ({ googleAccountName } = info);\r\n }\r\n\r\n const importTaskItemList = [];\r\n selectedGoogleAccounts.forEach((googleAccount) => {\r\n // prepare singleAccountGoogleImportTaskItem for each account\r\n const campaignIds = _.findWhere(\r\n selectedCampaignIds,\r\n { googleCustomerId: googleAccount.CustomerId }\r\n ).selectedCampaignIds;\r\n const adWordsImportContext = {\r\n '@odata.type': '#Model.AdWordsImportContext',\r\n SessionId: sessionId,\r\n CustomerId: googleAccount.CustomerId,\r\n AccountName: googleAccountName,\r\n LoginCustomerId: loginCustomerId,\r\n CampaignIds: campaignIds,\r\n };\r\n\r\n const bingAccountId = _.findWhere(\r\n selectedGoogleAccountToBingAccountMap,\r\n { GoogleCustomerId: googleAccount.CustomerId }\r\n ).BingAccountId;\r\n const bingAccountInfo = _.findWhere(bingAccount, { Id: bingAccountId });\r\n\r\n const singleAccountGoogleImportTaskItem = this.prepareSingleAccountGoogleImportTaskItem(\r\n timeZoneId,\r\n bingAccountInfo,\r\n adWordsImportContext\r\n );\r\n\r\n importTaskItemList.push(singleAccountGoogleImportTaskItem);\r\n });\r\n\r\n const multiAccountGoogleImportTaskItem = _.extend(\r\n {\r\n '@odata.type': '#Model.MultiAccountGoogleImportTaskItem',\r\n SessionId: sessionId,\r\n LoginCustomerId: loginCustomerId,\r\n ImportUserPreference: importUserPreferences,\r\n NotificationEmailAddresses: notificationEmailAddresses,\r\n ImportTaskItemList: importTaskItemList,\r\n UserName: this.config.get('CurrentUser') && this.config.get('CurrentUser').Name,\r\n NotificationType: notificationType,\r\n Type: `MultiAccountGoogleImport${this.testTypeSuffix}`,\r\n NotificationMedium: 'Email',\r\n TimeZoneId: timeZoneId,\r\n },\r\n !!name && { Name: name },\r\n !!taskItemState && { State: taskItemState },\r\n !!cron && { Cron: cron }\r\n );\r\n\r\n return Promise.resolve(multiAccountGoogleImportTaskItem);\r\n }\r\n\r\n getMultiAccountGoogleImportUserPreferences(googleCustomerList) {\r\n let preferences = {};\r\n\r\n return this.getMultiAccountImportUserPreferenceWithBMCandMinInfo()\r\n .then((userPref) => {\r\n preferences = _.extend(preferences, userPref);\r\n const googleCustomerIdList = _.keys(googleCustomerList);\r\n return this.getMultiAccountGoogleAccountProperties(googleCustomerIdList.join());\r\n })\r\n .then((result) => {\r\n if (result === false) {\r\n return false;\r\n }\r\n const TrackingTemplate = [];\r\n const FinalUrlSuffix = [];\r\n _.each(googleCustomerList, (item) => {\r\n if (result[item.CustomerId]) {\r\n TrackingTemplate.push({\r\n googleCustomerId: item.CustomerId,\r\n googleAccountName: item.AccountName,\r\n trackingTemplate: result[item.CustomerId].TrackingTemplate,\r\n });\r\n FinalUrlSuffix.push({\r\n googleCustomerId: item.CustomerId,\r\n googleAccountName: item.AccountName,\r\n finalUrlSuffix: result[item.CustomerId].FinalUrlSuffix,\r\n });\r\n }\r\n });\r\n\r\n preferences = _.extend(\r\n preferences,\r\n {\r\n AdWordsAccountTrackingTemplate: TrackingTemplate,\r\n AdWordsAccountFinalUrlSuffix: FinalUrlSuffix,\r\n }\r\n );\r\n return preferences;\r\n });\r\n }\r\n\r\n getImportUserPreference() {\r\n const url = this.formatUrl({\r\n url: getImportUserPreferenceUrlTmpl,\r\n });\r\n\r\n return this.odata.get(url);\r\n }\r\n\r\n getMultiAccountImportUserPreferenceWithBMCandMinInfo() {\r\n const storeIds = _.map(\r\n _.pluck(this.storeList, 'Value'),\r\n id => parseInt(id, 10)\r\n );\r\n const preferences = _.extend(\r\n {},\r\n {\r\n AvailableStoreValues: storeIds,\r\n AvailableStoreValueMessages: _.pluck(this.storeList, 'Text'),\r\n }\r\n );\r\n\r\n return this.getImportUserPreference(importType)\r\n .then(userPref => (\r\n _.defaults(preferences, userPref, defaultOptions)\r\n ));\r\n }\r\n\r\n getMultiAccountGoogleAccountProperties(googleCustomerIdList) {\r\n const sessionId = this.getGoogleSessionIdFromCookie();\r\n\r\n if (sessionId) {\r\n let url = _.template(getGoogleAccountPropertiesUrlTmpl)({\r\n AccountId: this.aid,\r\n SessionId: sessionId,\r\n });\r\n\r\n url = this.formatUrl({\r\n url,\r\n queryParameters: {\r\n googleCustomerIdList,\r\n },\r\n });\r\n\r\n return this.odata.get(url);\r\n }\r\n\r\n this.logTrace('Did not send request in method getGoogleAccountProperties because no SessionId was found');\r\n\r\n return Promise.resolve(false);\r\n }\r\n\r\n // options: { url, routerValue, queryParameters }\r\n formatCustomerLevelUrl(options, addDefaultParameters = false) {\r\n let url;\r\n let queryParameters;\r\n let routerValue;\r\n\r\n if (_.isString(options)) {\r\n url = options;\r\n } else {\r\n ({ url } = options);\r\n ({ queryParameters } = options);\r\n ({ routerValue } = options);\r\n }\r\n if (addDefaultParameters) {\r\n queryParameters = _.extend({}, queryParameters, {\r\n cid: this.cid,\r\n uid: this.uid,\r\n });\r\n }\r\n\r\n if (!_.isEmpty(queryParameters)) {\r\n url = urlUtil.queryify(url, queryParameters);\r\n }\r\n\r\n if (routerValue) {\r\n url += `#customer/${this.cid}/${routerValue}`;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n redirectToAccountsSummary() {\r\n if (this.deps.isForVNext) {\r\n this.deps.router.navigateToRoute('accounts_performance');\r\n } else {\r\n const url = this.formatCustomerLevelUrl({\r\n url: '/Campaign/AccountsSummary',\r\n routerValue: 'accounts-summary/performance',\r\n }, true);\r\n\r\n this.navigateToUrl(url);\r\n }\r\n }\r\n\r\n redirectToImportScheduleAndHistory() {\r\n if (this.deps.isForVNext) {\r\n this.deps.router.navigateToRoute('importschedule');\r\n } else {\r\n const url = this.formatCustomerLevelUrl({\r\n url: '/Campaign/AccountsSummary',\r\n routerValue: 'import-accounts/importschedule',\r\n }, true);\r\n\r\n this.navigateToUrl(url);\r\n }\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport ko from 'knockout';\r\nimport _ from 'underscore';\r\n\r\nexport function BingAccountGridViewModel(i18n, AccountSelectionList, SelectedAccountIdList) {\r\n this.selectedlists = ko.observableArray();\r\n\r\n this.listDataCallBack = (options, cb) => {\r\n const accountlist = new AccountSelectionList();\r\n // filter out deleted and inactive accounts.\r\n accountlist.url += \"&$filter=Status ne Enum.AccountStatus'Inactive' and Status ne Enum.AccountStatus'Deleted'\";\r\n accountlist\r\n .fetch()\r\n .done((response) => {\r\n let accounts = response.value;\r\n\r\n if (!_.isEmpty(accounts)) {\r\n // DEFAULT: null,\r\n // EXPERT: 0,\r\n // SMART: 1,\r\n // UNIFIED_SMART: 2,\r\n // UNIFIED_EXPERT: 3,\r\n accounts = _.filter(accounts, account =>\r\n account.AccountMode === null || account.AccountMode === 0 || account.AccountMode === 3);\r\n _.each(accounts, (account) => {\r\n this.setStatusCssClass(account);\r\n });\r\n\r\n cb(null, {\r\n items: accounts,\r\n total: accounts.length,\r\n });\r\n this.setSelectedList(accounts, SelectedAccountIdList);\r\n }\r\n });\r\n };\r\n\r\n this.setStatusCssClass = (account) => {\r\n if (!_.isEmpty(account)) {\r\n if (account.Status === 'Active') {\r\n account.StatusCssClass = 'Enabled';\r\n } else if (account.Status === 'Inactive' || account.Status === 'Deleted') {\r\n account.StatusCssClass = 'Deleted';\r\n } else if (account.Status === 'Pause' || account.Status === 'Paused' || account.Status === 'BudgetPaused') {\r\n account.StatusCssClass = 'Paused';\r\n } else if (account.Status === 'Pending' || account.Status === 'PendingPaymentInstrument' || account.Status === 'PendingCreditCheck') {\r\n account.StatusCssClass = 'Pending';\r\n } else if (account.Status === 'Suspended') {\r\n account.StatusCssClass = 'Suspended';\r\n } else if (account.Status === 'Processing') {\r\n account.StatusCssClass = 'Processing';\r\n } else {\r\n account.StatusCssClass = 'Header';\r\n }\r\n\r\n account.StatusCssClass = `status${account.StatusCssClass}_icon`;\r\n }\r\n };\r\n\r\n this.setSelectedList = (accounts, selectedAccountNumbers) => {\r\n if (!_.isEmpty(accounts) && !_.isEmpty(selectedAccountNumbers)) {\r\n const accountSelectionHash = {};\r\n _.each(selectedAccountNumbers, (selectedAccountNumber) => {\r\n accountSelectionHash[selectedAccountNumber] = true;\r\n });\r\n\r\n _.each(accounts, (account) => {\r\n if (account.Id in accountSelectionHash) {\r\n this.selectedlists.push(account);\r\n }\r\n });\r\n }\r\n };\r\n\r\n this.showValidationError = ko.computed(() => _.isEmpty(this.selectedlists()));\r\n this.hasError = ko.computed(() => this.showValidationError());\r\n\r\n this.stringsMapping = {\r\n sourceItems: i18n.get('Bulk_Download_Edit_Data_AccountTitle'),\r\n selectedItems: i18n.get('Bulk_Download_Edit_Data_SelectedAccountTitle'),\r\n };\r\n}\r\n","/* eslint-disable indent */\r\nimport ko from 'knockout';\r\nimport Backbone from 'backbone';\r\nimport sourceItemTemplate from './sourceItemTemplate.pug';\r\nimport selectedItemTemplate from './selectedItemTemplate.pug';\r\nimport itemContentTemplate from './itemContentTemplate.pug';\r\nimport template from './bing-account-title-grid-view.pug';\r\nimport { BingAccountGridViewModel } from './bing-account-title-grid-viewmodel';\r\n\r\nexport class BingAccountTitleGridView extends Backbone.View {\r\n initialize({\r\n i18n,\r\n DoubleListBox,\r\n AccountSelectionList,\r\n SelectedAccountIdList,\r\n }) {\r\n this.i18n = i18n;\r\n this.DoubleListBox = DoubleListBox;\r\n this.AccountSelectionList = AccountSelectionList;\r\n this.SelectedAccountIdList = SelectedAccountIdList;\r\n }\r\n\r\n render() {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n }));\r\n // eslint-disable-next-line max-len\r\n this.koModel = new BingAccountGridViewModel(this.i18n, this.AccountSelectionList, this.SelectedAccountIdList);\r\n ko.applyBindings(this.koModel, this.el);\r\n this.koModel.showValidationError.subscribe((value) => {\r\n this.trigger('change:error', value);\r\n });\r\n const doubleListControlOptions = {\r\n el: this.$('.multi-bing-account-grid'),\r\n strings: this.koModel.stringsMapping,\r\n data: {\r\n sourceItems: this.koModel.listDataCallBack,\r\n itemIdField: 'Id',\r\n itemFilterField: 'Name',\r\n selectedPageSize: 10,\r\n pageSize: 10,\r\n selectedItems: this.koModel.selectedlists,\r\n useCallbackForFetchOnly: true,\r\n },\r\n features: {\r\n selectAll: true,\r\n deselectAll: true,\r\n filtering: true,\r\n paging: true,\r\n },\r\n templates: {\r\n sourceItemLayoutTemplate: sourceItemTemplate({ i18n: this.i18n }),\r\n selectedItemLayoutTemplate: selectedItemTemplate({ i18n: this.i18n }),\r\n sourceItemContentTemplate: itemContentTemplate({ i18n: this.i18n }),\r\n selectedItemContentTemplate: itemContentTemplate({ i18n: this.i18n }),\r\n },\r\n itemActions: {},\r\n };\r\n this.doubleListBox = new this.DoubleListBox(doubleListControlOptions);\r\n this.doubleListBox.render();\r\n this.koModel.selectedlists.subscribe((newValue) => {\r\n this.doubleListBox.selectedItems(newValue);\r\n });\r\n this.doubleListBox.selectedItems.subscribe((newValue) => {\r\n this.koModel.selectedlists(newValue);\r\n\r\n // set tab index to -1 when there is no selected account otherwise set it to 0\r\n if (newValue.length === 0) {\r\n this.$('.dlb-selected').attr('tabIndex', -1);\r\n } else {\r\n this.$('.dlb-selected').attr('tabIndex', 0);\r\n }\r\n\r\n this.trigger('change:select');\r\n }, this);\r\n return this;\r\n }\r\n\r\n isValid() {\r\n if (this.doubleListBox.selectedItems().length <= 0) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { get, set } from '@bingads-webui/cookie';\r\nimport { BaseImportStep } from '@bingads-webui-campaign/import-components';\r\nimport { BingAccountTitleGridView } from './grid/bing-account-title-grid-view';\r\n\r\nexport class BingAccountTitleStep extends BaseImportStep {\r\n initialize({\r\n deps,\r\n }) {\r\n super.initialize({\r\n deps,\r\n });\r\n this.isContinueButtonEnabled = false;\r\n }\r\n\r\n get title() {\r\n return this.buildTitle({\r\n activeTitle: this.i18n.get('GoogleImport_MicrosoftAdvertising_Account'),\r\n summaryTitle: this.i18n.get('GoogleImport_MicrosoftAdvertising_Account_Summary'),\r\n });\r\n }\r\n\r\n willShow() {\r\n if (!this.state.bingAccount) {\r\n const state = this.getState();\r\n const { isEditingScheduledImport, initialSettings } = state;\r\n\r\n let selectedBingAccountIds = [];\r\n if (isEditingScheduledImport && initialSettings) {\r\n selectedBingAccountIds = _.pluck(initialSettings.ImportTaskItemList, 'AccountId');\r\n }\r\n if (_.size(selectedBingAccountIds) === 0) {\r\n const strMultiAccountPreSelectedAccountIds = 'multi-account-presseleced-account-ids';\r\n const preSelectedAccountIds = get(strMultiAccountPreSelectedAccountIds);\r\n if (_.size(preSelectedAccountIds)) {\r\n selectedBingAccountIds = _.map(preSelectedAccountIds.split(','), accontId => parseInt(accontId, 10));\r\n set(strMultiAccountPreSelectedAccountIds, '');\r\n }\r\n }\r\n\r\n this.grid = new BingAccountTitleGridView({\r\n i18n: this.i18n,\r\n DoubleListBox: this.deps.doubleListBox,\r\n AccountSelectionList: this.deps.accountSelectionLists,\r\n SelectedAccountIdList: selectedBingAccountIds,\r\n });\r\n this.grid.on('change:error', (hasError) => {\r\n this.isContinueButtonEnabled = !hasError;\r\n this.isEdited = true;\r\n this.trigger('change:action');\r\n });\r\n this.grid.on('change:select', () => {\r\n this.isEdited = true;\r\n });\r\n\r\n this.$el.html(this.grid.render().$el);\r\n\r\n // set tab index to -1 when there is no selected account otherwise set it to 0\r\n if (this.grid.doubleListBox.selectedItems().length === 0) {\r\n this.$('.dlb-selected').attr('tabIndex', -1);\r\n } else {\r\n this.$('.dlb-selected').attr('tabIndex', 0);\r\n }\r\n } else {\r\n this.logTrace('not edited, directly expand bing account selection step');\r\n }\r\n }\r\n\r\n wizardShouldGoNext() {\r\n if (this.grid.isValid()) {\r\n this.patchState({\r\n bingAccount: _.map(\r\n this.grid.doubleListBox.selectedItems(),\r\n singleAccount => _.pick(singleAccount, 'AccountNumber', 'Id', 'Name', 'Currency')\r\n ),\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get actions() {\r\n const original = super.actions;\r\n\r\n original[0].enabled = this.isContinueButtonEnabled;\r\n return original;\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\n\r\nexport class MultiGoogleAccountGridViewModel {\r\n constructor() {\r\n this.SelectedAcountMaxCount = 5; // const value for account count limitation\r\n this.selectedAccount = ko.observableArray([]);\r\n this.accountMap = ko.observableArray([\r\n // { GoogleCustomerId: 17, BingAccountId: 7 },\r\n ]);\r\n\r\n this.selectedAccountsHasCampaigns = ko.observable(true);\r\n this.hasNoCampaignsCustomerNameList = ko.observable('');\r\n this.isDropdownMenuExpanded = ko.observable(false);\r\n\r\n this.showNoSelectedGoogleAccountError = ko.computed(() => _.isEmpty(this.selectedAccount()));\r\n this.showNoSelectedBingAccountError = ko.computed(() => (\r\n !this.showNoSelectedGoogleAccountError() &&\r\n (_.size(this.accountMap()) < _.size(this.selectedAccount()))\r\n ));\r\n this.showSelectedAccountCountExceedLimitError = ko.computed(() => (\r\n !this.showNoSelectedGoogleAccountError() &&\r\n !this.showNoSelectedBingAccountError() &&\r\n (_.size(this.selectedAccount()) > this.SelectedAcountMaxCount)\r\n ));\r\n this.showSelectedGoogleAccountNoCampaignError = ko.computed(() => (\r\n !this.showNoSelectedGoogleAccountError() &&\r\n !this.showNoSelectedBingAccountError() &&\r\n !this.showSelectedAccountCountExceedLimitError() &&\r\n !this.selectedAccountsHasCampaigns()\r\n ));\r\n\r\n this.hasError = ko.computed(() => this.showNoSelectedGoogleAccountError() ||\r\n this.showNoSelectedBingAccountError() ||\r\n this.showSelectedAccountCountExceedLimitError() ||\r\n this.showSelectedGoogleAccountNoCampaignError());\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FocusLock } from '@bingads-webui-react/focus-lock';\r\nimport { EntitySelector } from '@bingads-webui-react/entity-selector';\r\n\r\nconst PageSize = 10;\r\n\r\nexport class BingAccountDropDownMenu extends React.PureComponent {\r\n static propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n bingAccountList: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n Name: PropTypes.string,\r\n })).isRequired,\r\n selectedBingAccountId: PropTypes.number,\r\n updateSelection: PropTypes.func.isRequired,\r\n };\r\n\r\n static defaultProps = {\r\n selectedBingAccountId: undefined,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedItem: this.props.selectedBingAccountId ?\r\n _.findWhere(this.props.bingAccountList, { Id: this.props.selectedBingAccountId }) :\r\n null,\r\n totalCount: _.size(this.props.bingAccountList),\r\n items: this.props.bingAccountList,\r\n };\r\n\r\n this.enableArrowKeysSupport = true;\r\n this.ariaLabel = this.props.i18n.getString('GoogleImport_MultiAccount_GoogleAccountGrid_MicrosoftAdvertisingAccountList');\r\n }\r\n\r\n componentDidMount() {\r\n this.onFetch({ query: '', pageNumber: 0 });\r\n }\r\n\r\n onSelect = (selectedItem) => {\r\n this.setState({ selectedItem });\r\n this.props.updateSelection(selectedItem.Id);\r\n };\r\n\r\n onFetch = ({ query = '', pageNumber }) => {\r\n const filterItems = _.filter(this.props.bingAccountList, item => item && item.Name &&\r\n item.Name.toLowerCase().indexOf(query.toLowerCase()) !== -1);\r\n this.setState({\r\n items: filterItems.slice(pageNumber * PageSize, (pageNumber * PageSize) + PageSize),\r\n totalCount: filterItems.length,\r\n });\r\n }\r\n\r\n renderEmptyList = () => (\r\n
\r\n {this.props.i18n.getString('GoogleImport_SearchBingAccount_NoResult')}\r\n
\r\n )\r\n\r\n renderItem = item => (\r\n
\r\n {item.Name} (\r\n {item.Currency})\r\n
\r\n )\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Backbone from 'backbone';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BingAccountDropDownMenu } from './bing-account-drop-down-menu';\r\n\r\nexport class BingAccountListDropDownView extends Backbone.View {\r\n initialize({\r\n i18n,\r\n bingAccountList,\r\n googleCustomerId,\r\n selectedBingAccountId,\r\n accountMap,\r\n eventName,\r\n }) {\r\n this.i18n = i18n;\r\n this.googleCustomerId = googleCustomerId;\r\n this.selectedBingAccountId = selectedBingAccountId;\r\n this.accountMap = accountMap;\r\n // eslint-disable-next-line new-cap\r\n this.dropDownMenu = new React.createRef();\r\n\r\n // For bing account which has already been selected for linking, will not show it in dropdown list\r\n const unavailableBingAccountIdList = _.without(_.pluck(accountMap(), 'BingAccountId'), selectedBingAccountId);\r\n this.bingAccountList = _.reject(bingAccountList, item => _.contains(unavailableBingAccountIdList, item.Id));\r\n this.eventName = eventName;\r\n\r\n this.key = this.googleCustomerId.toString();\r\n this.dropdownToggleString = `tr.row-selected[data-key=${this.key}] div.bing-account-selector button.dropdown-toggle`;\r\n this.dropdownToggleSelector = $(this.dropdownToggleString);\r\n }\r\n\r\n render(element) {\r\n // eslint-disable-next-line prefer-destructuring\r\n this.grandparentEle = $('.import-grid .ba-dropdown-list-popup')[0];\r\n this.parentEle = document.createElement('div');\r\n this.parentEle.className = 'dropdown-menu';\r\n this.grandparentEle.appendChild(this.parentEle);\r\n\r\n const {\r\n top, left, height, width,\r\n } = element.getBoundingClientRect();\r\n this.parentEle.style.top = `${(top + height).toString()}px`;\r\n this.parentEle.style.left = `${left.toString()}px`;\r\n this.parentEle.style.width = `${width.toString()}px`;\r\n this.dropdownToggleSelector[0].setAttribute('aria-expanded', 'true');\r\n\r\n ReactDOM.render(\r\n ,\r\n this.parentEle\r\n );\r\n }\r\n\r\n updateSelection = (selectedItemId) => {\r\n const updateBingAccountId = selectedItemId;\r\n\r\n const updatedAccountMap = _.reject(\r\n this.accountMap(),\r\n item => item.GoogleCustomerId === this.googleCustomerId || item.BingAccountId === updateBingAccountId\r\n );\r\n updatedAccountMap.push({ GoogleCustomerId: this.googleCustomerId, BingAccountId: updateBingAccountId });\r\n\r\n this.accountMap(updatedAccountMap);\r\n\r\n // update selected bing account name in dropdown toggle button\r\n const selectorString = `tr.row-selected[data-key=${this.key}] div.bing-account-selector button.dropdown-toggle span.truncated`;\r\n const bingAccountSelectionPlaceholder = $(selectorString);\r\n if (bingAccountSelectionPlaceholder.length) {\r\n const updateBingAccountName = _.findWhere(this.bingAccountList, { Id: updateBingAccountId }).Name;\r\n bingAccountSelectionPlaceholder[0].innerText = updateBingAccountName;\r\n this.dropdownToggleSelector[0].setAttribute('aria-label', updateBingAccountName);\r\n }\r\n this.remove();\r\n this.dropdownToggleSelector[0].setAttribute('aria-expanded', 'false');\r\n $(document).off(this.eventName);\r\n }\r\n\r\n remove() {\r\n if (this.parentEle) {\r\n this.parentEle.remove();\r\n this.parentEle = null;\r\n }\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\n\r\nimport projectionGrid from 'projection-grid';\r\nimport { a11yPlugin } from '@bingads-webui/projection-grid-a11y';\r\nimport { placeholderPlugin } from '@bingads-webui/projection-grid-placeholder';\r\nimport { assistedSelectionPlugin } from '@bingads-webui/projection-grid-assisted-selection';\r\nimport { uiBlockerPlugin } from '@bingads-webui/projection-grid-uiblocker';\r\nimport { generateFilterPlugin } from '@bingads-webui-campaign/google-import-page';\r\n\r\nimport template from './multi-google-account-grid-template.pug';\r\nimport { MultiGoogleAccountGridViewModel } from './multi-google-account-grid-viewmodel';\r\n\r\nimport { generateConfig } from './multi-google-account-grid-config';\r\n\r\nimport { BingAccountListDropDownView } from './bing-account-selection-col/bing-account-list-dropdown-view';\r\n\r\nexport class MultiGoogleAccountGridView extends Backbone.View {\r\n initialize({\r\n parentElement,\r\n googleAccountData,\r\n bingAccountData,\r\n i18n,\r\n initialAccountMap,\r\n }) {\r\n this.googleAccountData = googleAccountData;\r\n this.bingAccountData = bingAccountData;\r\n this.parentElement = parentElement;\r\n this.i18n = i18n;\r\n this.initialAccountMap = initialAccountMap;\r\n }\r\n\r\n isRowSelected = {\r\n get: key => !!_.findWhere(this.koModel.selectedAccount(), { CustomerId: key }),\r\n }\r\n\r\n selectedBingAccount = {\r\n get: (key) => {\r\n const accountPair = _.findWhere(this.koModel.accountMap(), { GoogleCustomerId: key });\r\n return accountPair ? accountPair.BingAccountId : undefined;\r\n },\r\n }\r\n\r\n events() {\r\n return {\r\n 'click .dropdown-toggle': 'dropDownBingAccountList',\r\n };\r\n }\r\n\r\n dropDownBingAccountList(event) {\r\n event.stopPropagation();\r\n\r\n const googleCustomerId = parseInt($(event.target).closest('tr')[0].getAttribute('data-key'), 10);\r\n const accountPair = _.findWhere(\r\n this.koModel.accountMap(),\r\n { GoogleCustomerId: googleCustomerId }\r\n );\r\n const selectedBingAccountId = accountPair ? accountPair.BingAccountId : null;\r\n\r\n if (this.bingAccountListView) {\r\n this.bingAccountListView.remove();\r\n this.bingAccountListView = null;\r\n }\r\n\r\n const eventName = _.uniqueId('click.import.google.account.grid.bing.account.selection');\r\n this.bingAccountListView = new BingAccountListDropDownView({\r\n i18n: this.i18n,\r\n bingAccountList: this.bingAccountData,\r\n googleCustomerId,\r\n selectedBingAccountId,\r\n accountMap: this.koModel.accountMap,\r\n eventName,\r\n });\r\n this.bingAccountListView.render($(event.target).closest('.ba-dropdown-selector')[0]);\r\n let view = this.bingAccountListView;\r\n\r\n function hideDropDownList(e) {\r\n const key = googleCustomerId.toString();\r\n const dropdownToggleString = `tr.row-selected[data-key=${key}] div.bing-account-selector button.dropdown-toggle`;\r\n const dropdownToggleSelector = $(dropdownToggleString);\r\n\r\n if ($(e.target).hasClass('dropdown-menu')) {\r\n return false;\r\n }\r\n\r\n if ($(e.target).parents('.dropdown-menu').length) {\r\n return true;\r\n }\r\n\r\n $(document).off(eventName);\r\n if (view) {\r\n view.remove();\r\n view = null;\r\n }\r\n dropdownToggleSelector[0].setAttribute('aria-expanded', 'false');\r\n return false;\r\n }\r\n\r\n $(document).on(eventName, hideDropDownList);\r\n this.trigger('change:select');\r\n }\r\n\r\n render() {\r\n // eslint-disable-next-line max-len\r\n this.koModel = new MultiGoogleAccountGridViewModel();\r\n\r\n this.isRowSelected.koModel = this.koModel;\r\n this.selectedBingAccount.koModel = this.koModel;\r\n\r\n this.el.innerHTML = template({\r\n i18n: this.i18n,\r\n SelectedAcountMaxCount: this.koModel.SelectedAcountMaxCount,\r\n });\r\n ko.applyBindings(this.koModel, this.el);\r\n this.koModel.hasError.subscribe((value) => {\r\n this.trigger('change:error', value);\r\n });\r\n this.koModel.accountMap.subscribe(() => {\r\n this.trigger('change:select');\r\n });\r\n\r\n // this is to ensure grid container element is on DOM tree before rendering grid.\r\n this.parentElement.append(this.el);\r\n\r\n const config = generateConfig({\r\n i18n: this.i18n,\r\n isRowSelected: this.isRowSelected,\r\n selectedBingAccount: this.selectedBingAccount,\r\n bingAccountData: this.bingAccountData,\r\n isDropdownMenuExpanded: this.koModel.isDropdownMenuExpanded,\r\n });\r\n\r\n config.dataSource.data = _.sortBy(\r\n this.googleAccountData,\r\n obj => (obj.AccountName ? obj.AccountName.toString().toLowerCase() : '')\r\n );\r\n this.grid = projectionGrid\r\n .factory({ vnext: true })\r\n .use(a11yPlugin)\r\n .use(placeholderPlugin)\r\n .use(generateFilterPlugin({\r\n i18n: this.i18n,\r\n }))\r\n .use(assistedSelectionPlugin)\r\n .use(uiBlockerPlugin)\r\n .create(config);\r\n\r\n this.gridView = this.grid.gridView;\r\n this.gridView.render();\r\n this.grid.memoryFilter.render();\r\n\r\n this.gridView.on('willUpdate', (changes) => {\r\n $(config.el).addClass('fixed-height');\r\n // only update koModel if the change is a selection/deselection rather than a query\r\n if (changes && changes.selection) {\r\n const selectedItems = _.filter(\r\n _.union(this.gridView.itemArray, this.koModel.selectedAccount()),\r\n item => _.contains(changes.selection.selected, item.CustomerId.toString())\r\n );\r\n this.koModel.selectedAccount(selectedItems);\r\n this.koModel.accountMap(_.filter(\r\n this.koModel.accountMap(),\r\n item => _.contains(_.pluck(selectedItems, 'CustomerId'), item.GoogleCustomerId)\r\n ));\r\n }\r\n }, this);\r\n\r\n this.gridView.on('didUpdate', () => {\r\n $(config.el).removeClass('fixed-height');\r\n this.koModel.selectedAccountsHasCampaigns(true); // clean up error message\r\n this.trigger('change:select');\r\n }, this);\r\n\r\n this.gridView.once('didUpdate', () => {\r\n // render initial selection for edit schedule import scenario\r\n let initialSelectedAccount = [];\r\n if (_.size(this.initialAccountMap)) {\r\n initialSelectedAccount = _.filter(this.googleAccountData, item => _.contains(_.pluck(this.initialAccountMap, 'GoogleCustomerId'), item.CustomerId));\r\n this.koModel.selectedAccount(initialSelectedAccount);\r\n this.koModel.accountMap(this.initialAccountMap);\r\n }\r\n initialSelectedAccount.forEach(item => this.gridView.selectRow(item.CustomerId));\r\n }, this);\r\n\r\n return this;\r\n }\r\n\r\n isValid() {\r\n return !this.koModel.hasError();\r\n }\r\n\r\n remove() {\r\n if (this.grid) {\r\n this.grid.memoryFilter.remove();\r\n this.gridView.remove();\r\n }\r\n\r\n return super.remove();\r\n }\r\n\r\n validateSelectedAccountsHasCampaigns(googleCampaignsForSelectedAccounts) {\r\n let isValid = true;\r\n const invalidCustomerNameList = [];\r\n googleCampaignsForSelectedAccounts.forEach((item) => {\r\n if (!_.size(item.googleCampaigns)) {\r\n isValid = false;\r\n const invalidCustomerName = _.findWhere(\r\n this.koModel.selectedAccount(),\r\n { CustomerId: item.googleCustomerId }\r\n ).AccountName;\r\n invalidCustomerNameList.push(invalidCustomerName);\r\n }\r\n });\r\n this.koModel.hasNoCampaignsCustomerNameList(`${invalidCustomerNameList.join()}.`);\r\n this.koModel.selectedAccountsHasCampaigns(isValid);\r\n return isValid;\r\n }\r\n}\r\n","\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport BingAccountSelectionColTemplate from './bing-account-selection-col/bing-account-selection-col-template.pug';\r\n\r\nexport function generateConfig({\r\n i18n,\r\n isRowSelected,\r\n selectedBingAccount,\r\n bingAccountData,\r\n isDropdownMenuExpanded,\r\n}) {\r\n const columnsConfig = _.compact([{\r\n name: 'AccountName',\r\n title: i18n.get('GoogleImport_SelectAccount_AccountName'),\r\n sortable: (item) => {\r\n const accountName = item.AccountName;\r\n return accountName ? accountName.toString().toLowerCase() : '';\r\n },\r\n bodyClasses: 'truncated',\r\n }, {\r\n name: 'CustomerId',\r\n title: i18n.get('GoogleImport_SelectAccount_CustomerId'),\r\n }, {\r\n name: 'Currency',\r\n title: i18n.get('GoogleImport_SelectAccount_CurrencyName'),\r\n bodyClasses: 'truncated',\r\n }, {\r\n name: 'bingAccountList',\r\n field: 'CustomerId',\r\n property: 'CustomerId',\r\n helpId: 'pop_BA_Import_Acct_MAA_Name',\r\n html: `${i18n.get('GoogleImport_MultiAccountImport_BingAccountCurrencyName')}`,\r\n template: (local) => {\r\n const enableToggleButton = isRowSelected.get(local.value);\r\n const selectedBingAccountId = selectedBingAccount.get(local.value);\r\n const selectedBingAccountName = selectedBingAccountId ?\r\n _.findWhere(bingAccountData, { Id: selectedBingAccountId }).Name :\r\n i18n.get('GoogleImport_SelectMultiGoogleAccount_SelectBingAccountPlaceholder');\r\n return BingAccountSelectionColTemplate({\r\n enableToggleButton,\r\n selectedBingAccountName,\r\n isDropdownMenuExpanded,\r\n });\r\n },\r\n }]);\r\n\r\n const plugins = {\r\n a11y: { i18n },\r\n filter: {\r\n search: {\r\n container: '.import-grid .grid-filter-container',\r\n property: 'AccountName',\r\n title: i18n.get('Search_AdWordsAccountName'),\r\n },\r\n },\r\n placeholder: {\r\n container: '.import-grid .grid-noresult',\r\n text: i18n.get('GoogleImport_SelectAccount_NoAccounts'),\r\n },\r\n uiBlocker: {\r\n el: $('.import-grid'),\r\n },\r\n };\r\n\r\n return {\r\n el: '.import-grid .grid-table',\r\n dataSource: {\r\n type: 'memory',\r\n data: null,\r\n primaryKey: 'CustomerId',\r\n },\r\n\r\n selection: {\r\n single: false,\r\n bodyClasses: 'text-center',\r\n headClasses: 'text-center',\r\n },\r\n\r\n scrolling: {\r\n virtualized: true,\r\n header: 'fixed',\r\n },\r\n\r\n columns: columnsConfig,\r\n tableClasses: ['table', 'table-bordered'],\r\n plugins,\r\n };\r\n}\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { BaseImportStep, ImportSource } from '@bingads-webui-campaign/import-components';\r\nimport { CurrencyConversionView } from '@bingads-webui-campaign/google-import-page';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport template from './multi-account-google-account-step.pug';\r\nimport { MultiGoogleAccountGridView } from './grid/index';\r\n\r\nexport class MultiAccountGoogleAccountStep extends BaseImportStep {\r\n initialize({\r\n deps,\r\n }) {\r\n super.initialize({\r\n deps,\r\n });\r\n this.isContinueButtonEnabled = false;\r\n }\r\n\r\n get title() {\r\n return this.buildTitle({\r\n activeTitle: this.i18n.get('GoogleImport_MultiAccount_SelectAccount_Title'),\r\n summaryTitle: this.i18n.get('GoogleImport_SelectAccount_Summary'),\r\n });\r\n }\r\n\r\n getSelectedAccountName() {\r\n return this.grid && _.propertyOf(this.grid.getSelectedItem())('AccountName');\r\n }\r\n\r\n willShow() {\r\n if (this.checkIfShouldUpdateAndResetFlagIfTrue()) {\r\n this.deps.logActivities.renderSelectAdWordsAccount.start();\r\n\r\n const state = this.getState();\r\n const {\r\n googleAccount, bingAccount, initialSettings, isEditingScheduledImport,\r\n } = state;\r\n\r\n const hasNoData = _.isEmpty(googleAccount);\r\n\r\n this.$el.html(template({\r\n hasNoData,\r\n i18n: this.i18n,\r\n }));\r\n\r\n const initialAccountMap = [];\r\n if (isEditingScheduledImport && initialSettings) {\r\n initialSettings.ImportTaskItemList.forEach((item) => {\r\n if (_.contains(_.pluck(bingAccount, 'Id'), item.AccountId)) {\r\n initialAccountMap.push({\r\n GoogleCustomerId: item.AdWordsImportContext.CustomerId,\r\n BingAccountId: item.AccountId,\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (!hasNoData) {\r\n this.grid = new MultiGoogleAccountGridView({\r\n parentElement: this.$('.multi-google-account-grid'),\r\n googleAccountData: googleAccount,\r\n bingAccountData: bingAccount,\r\n i18n: this.i18n,\r\n initialAccountMap,\r\n });\r\n\r\n this.currencyConversionView = new CurrencyConversionView({\r\n parentElement: this.$('.currency-conversion-control'),\r\n // wrap i18n to use the shared CurrencyConversionView\r\n i18n: ImportSource.google(this.i18n).i18n,\r\n importSourceAccountCurrency: '',\r\n bingAccountCurrency: '',\r\n isSingleAccountMode: false,\r\n });\r\n this.currencyConversionView.on('change:convert', () => {\r\n this.isEdited = true;\r\n });\r\n this.currencyConversionView.render();\r\n\r\n this.grid.on('change:error', (hasError) => {\r\n this.isContinueButtonEnabled = !hasError;\r\n this.trigger('change:action');\r\n });\r\n this.grid.on('change:select', () => {\r\n this.isEdited = true;\r\n this.currencyConversionView.koModel.importSourceAccountCurrency('');\r\n this.currencyConversionView.koModel.bingAccountCurrency('');\r\n this.grid.koModel.accountMap().forEach((item) => {\r\n const googleCurrency = _.findWhere(\r\n this.grid.googleAccountData,\r\n { CustomerId: item.GoogleCustomerId }\r\n ).Currency;\r\n const bingCurrency = _.findWhere(\r\n this.grid.bingAccountData,\r\n { Id: item.BingAccountId }\r\n ).Currency;\r\n if (googleCurrency !== bingCurrency) {\r\n this.currencyConversionView.koModel.importSourceAccountCurrency(googleCurrency);\r\n this.currencyConversionView.koModel.bingAccountCurrency(bingCurrency);\r\n }\r\n });\r\n });\r\n this.grid.render();\r\n }\r\n this.logTrace('render google account step');\r\n this.deps.logActivities.renderSelectAdWordsAccount.stop();\r\n } else {\r\n this.logTrace('not edited, directly expand google account step');\r\n }\r\n }\r\n\r\n wizardShouldGoNext() {\r\n if (this.grid && this.grid.isValid()) {\r\n const promises = [];\r\n const selectedGoogleAccounts = this.grid.koModel.selectedAccount();\r\n const googleCampaignsForSelectedAccounts = [];\r\n selectedGoogleAccounts.forEach((item) => {\r\n promises.push(this.repository.getGoogleCampaigns(item.CustomerId)\r\n .then((googleCampaigns) => {\r\n googleCampaignsForSelectedAccounts.push({\r\n googleCustomerId: item.CustomerId,\r\n googleCampaigns,\r\n });\r\n }));\r\n });\r\n\r\n if (this.currencyConversionView) {\r\n this.patchState({\r\n autoCurrencyConversionEnabled: this.currencyConversionView.koModel.doConvert(),\r\n });\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n // validate again if all selected google accounts has campaigns\r\n if (!this.grid.validateSelectedAccountsHasCampaigns(googleCampaignsForSelectedAccounts)) {\r\n return false;\r\n }\r\n this.patchState({\r\n selectedGoogleAccounts,\r\n googleCampaignsForSelectedAccounts,\r\n selectedGoogleAccountToBingAccountMap: this.grid.koModel.accountMap(),\r\n loginCustomerId: selectedGoogleAccounts[0].LoginCustomerId,\r\n });\r\n return true;\r\n })\r\n .catch((err) => {\r\n this.handleErrorInImport(err);\r\n return false;\r\n })\r\n .finally(withUiBlock());\r\n }\r\n return false;\r\n }\r\n\r\n get actions() {\r\n const original = super.actions;\r\n\r\n original[0].enabled = this.isContinueButtonEnabled;\r\n return original;\r\n }\r\n\r\n remove() {\r\n if (this.grid) {\r\n this.grid.remove();\r\n this.grid = null;\r\n }\r\n\r\n if (this.currencyConversionView) {\r\n this.currencyConversionView.remove();\r\n this.currencyConversionView = null;\r\n }\r\n\r\n super.remove();\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { DropdownSelector } from '@bingads-webui-react/dropdown-selector';\r\n\r\nconst PageSize = 10;\r\nconst Mode = 'async';\r\n\r\nexport class GoogleAccountSelector extends React.PureComponent {\r\n static propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n googleAccountList: PropTypes.arrayOf(PropTypes.shape({\r\n Id: PropTypes.number,\r\n Name: PropTypes.string,\r\n })).isRequired,\r\n switchGoogleAccount: PropTypes.func.isRequired,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedItem: this.props.googleAccountList[0],\r\n totalCount: this.props.googleAccountList && this.props.googleAccountList.length,\r\n items: this.props.googleAccountList,\r\n };\r\n\r\n this.enableArrowKeysSupport = true;\r\n this.dropdownMenuAriaLabel = this.props.i18n.getString('GoogleImport_MultiAccount_SelectCampaign_SelectedGoogleAdsAccountList');\r\n }\r\n\r\n onSelect = (selectedItem) => {\r\n this.setState({ selectedItem });\r\n this.props.switchGoogleAccount(selectedItem);\r\n };\r\n\r\n onFetch = ({ query = '', pageNumber }) => {\r\n const filterItems = _.filter(this.props.googleAccountList, item => item && item.Name &&\r\n item.Name.toString().toLowerCase().indexOf(query.toLowerCase()) !== -1);\r\n this.setState({\r\n items: filterItems.slice(pageNumber * PageSize, (pageNumber * PageSize) + PageSize),\r\n totalCount: filterItems.length,\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n (\r\n
\r\n {item.Name}\r\n
\r\n )}\r\n renderSelectedItem={item => {item.Name}}\r\n enableArrowKeysSupport={this.enableArrowKeysSupport}\r\n dropdownMenuAriaLabel={this.dropdownMenuAriaLabel}\r\n />\r\n );\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport ko from 'knockout';\r\nimport { cloneDeep } from '@bingads-webui/primitive-utilities';\r\n\r\nexport class MultiAccountGoogleCampaignGridViewModel {\r\n constructor(\r\n editGoogleCampaignSelection,\r\n googleAccountList,\r\n googleCampaignList\r\n ) {\r\n this.selectedGoogleCustomerId = ko.observable(googleAccountList[0].Id);\r\n this.selectedGoogleAccountFullCampaignList = ko.computed(() => cloneDeep(_.where(\r\n googleCampaignList,\r\n { googleCustomerId: this.selectedGoogleCustomerId() }\r\n )[0].googleCampaigns));\r\n\r\n\r\n const initCampaignSelection = [];\r\n googleAccountList.forEach((item) => {\r\n let itemCampaignIds = [];\r\n if (_.size(editGoogleCampaignSelection)) {\r\n const editItem = _.findWhere(editGoogleCampaignSelection, { googleCustomerId: item.Id });\r\n if (editItem) {\r\n itemCampaignIds = editItem.selectedCampaignIds;\r\n }\r\n }\r\n initCampaignSelection.push({\r\n googleCustomerId: item.Id,\r\n selectedCampaignIds: itemCampaignIds,\r\n });\r\n });\r\n\r\n this.multiAccountsCampaignSelectionInfo = ko.observableArray(initCampaignSelection);\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport $ from 'jquery';\r\nimport Backbone from 'backbone';\r\nimport ko from 'knockout';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nimport { createGoogleCampaignGridView } from '@bingads-webui-campaign/google-import-page';\r\n\r\nimport { GoogleAccountSelector } from './google-account-selector';\r\nimport template from './multi-account-google-campaign-grid-template.pug';\r\nimport { MultiAccountGoogleCampaignGridViewModel } from './multi-account-google-campaign-grid-viewmodel';\r\n\r\nexport class MultiAccountGoogleCampaignGridView extends Backbone.View {\r\n initialize({\r\n parentElement,\r\n googleAccountList,\r\n googleCampaignList,\r\n i18n,\r\n appConfig,\r\n repo,\r\n editGoogleCampaignSelection,\r\n }) {\r\n this.googleAccountList = googleAccountList;\r\n this.googleCampaignList = googleCampaignList;\r\n this.parentElement = parentElement;\r\n this.i18n = i18n;\r\n this.appConfig = appConfig;\r\n this.repo = repo;\r\n this.editGoogleCampaignSelection = editGoogleCampaignSelection;\r\n this.showPaused = false;\r\n this.koModel = new MultiAccountGoogleCampaignGridViewModel(\r\n editGoogleCampaignSelection,\r\n googleAccountList,\r\n googleCampaignList\r\n );\r\n }\r\n\r\n render() {\r\n this.el.innerHTML = template({\r\n i18n: this.i18n,\r\n });\r\n ko.applyBindings(this.koModel, this.el);\r\n\r\n // this is to ensure grid container element is on DOM tree before rendering grid.\r\n this.parentElement.append(this.el);\r\n\r\n this.renderGoogleAccountSelector();\r\n\r\n this.renderSingleAccountCampaignGridView();\r\n\r\n this.applyInitialSelection(this.koModel.selectedGoogleCustomerId());\r\n }\r\n\r\n renderGoogleAccountSelector() {\r\n const googleAccountSelectorProps = {\r\n i18n: this.i18n,\r\n googleAccountList: this.googleAccountList,\r\n switchGoogleAccount: this.switchGoogleAccount.bind(this),\r\n };\r\n const googleAccountSelectorElement = React.createElement(\r\n GoogleAccountSelector,\r\n googleAccountSelectorProps\r\n );\r\n\r\n ReactDOM.render(googleAccountSelectorElement, $('.google-account-selector')[0]);\r\n }\r\n\r\n renderSingleAccountCampaignGridView() {\r\n this.singleAccountView = createGoogleCampaignGridView({\r\n data: this.koModel.selectedGoogleAccountFullCampaignList(),\r\n showPaused: this.showPaused,\r\n i18n: this.i18n,\r\n appConfig: this.appConfig,\r\n repo: this.repo,\r\n multiAccountMode: true,\r\n isAIMImportEnabled: this.appConfig.get('permissions').IsAIMCampaignEnabled,\r\n });\r\n\r\n // if campaign selection grid for current account has error,\r\n // disable google account dropdown selector\r\n this.singleAccountView.koModel.hasError.subscribe((newValue) => {\r\n this.trigger('change:error', newValue);\r\n if (newValue) {\r\n this.$('.google-account-selector .ba-dropdown-selector button.dropdown-toggle')[0].disabled = true;\r\n } else {\r\n this.$('.google-account-selector .ba-dropdown-selector button.dropdown-toggle')[0].disabled = false;\r\n }\r\n });\r\n\r\n this.$('.google-campaign-grid-for-single-account').html(this.singleAccountView.render().el);\r\n\r\n this.singleAccountView.on('change:select', () => {\r\n this.trigger('change:select');\r\n });\r\n }\r\n\r\n switchGoogleAccount(selectedItem) {\r\n if (selectedItem.Id === this.koModel.selectedGoogleCustomerId()) {\r\n return;\r\n }\r\n\r\n // reserve campaign selection info for the unselected account\r\n this.updateMultiAccountCampaignSelectionInfo();\r\n this.showPaused = this.singleAccountView.getCurrentSetting().showPaused;\r\n\r\n // re-render campaign selection grid according to the newly selected google account\r\n this.koModel.selectedGoogleCustomerId(selectedItem.Id);\r\n\r\n if (this.singleAccountView) {\r\n this.singleAccountView.remove();\r\n this.singleAccountView = null;\r\n }\r\n this.renderSingleAccountCampaignGridView();\r\n\r\n this.applyInitialSelection(selectedItem.Id);\r\n }\r\n\r\n applyInitialSelection(selectedGoogleCustomerId) {\r\n // update if import all and selected campaign according to reserved info\r\n const reservedInfoForSelectedAccount = _.where(\r\n this.koModel.multiAccountsCampaignSelectionInfo(),\r\n { googleCustomerId: selectedGoogleCustomerId }\r\n );\r\n if (_.size(reservedInfoForSelectedAccount)) {\r\n if (!_.size(reservedInfoForSelectedAccount[0].selectedCampaignIds)) {\r\n // if selectedCampaignIds is empty[], it means importAll\r\n this.singleAccountView.koModel.importAll(true);\r\n } else {\r\n // eslint-disable-next-line max-len\r\n this.singleAccountView.selectCampaigns(reservedInfoForSelectedAccount[0].selectedCampaignIds);\r\n }\r\n }\r\n }\r\n\r\n updateMultiAccountCampaignSelectionInfo() {\r\n const selectedCustomerId = this.koModel.selectedGoogleCustomerId();\r\n const updatedMultiAccountsCampaignSelectionInfo = _.reject(\r\n this.koModel.multiAccountsCampaignSelectionInfo(),\r\n item => item.googleCustomerId === selectedCustomerId\r\n );\r\n updatedMultiAccountsCampaignSelectionInfo.push({\r\n googleCustomerId: selectedCustomerId,\r\n selectedCampaignIds: this.singleAccountView.koModel.importAll() ?\r\n [] :\r\n _.pluck(this.singleAccountView.koModel.selectedCampaigns(), 'Id'),\r\n });\r\n this.koModel.multiAccountsCampaignSelectionInfo(updatedMultiAccountsCampaignSelectionInfo);\r\n }\r\n\r\n areAnyPausedCampaignsSelected() {\r\n let result = false;\r\n this.koModel.multiAccountsCampaignSelectionInfo().forEach((item) => {\r\n const allCampaigns = _.where(\r\n this.googleCampaignList,\r\n { googleCustomerId: item.googleCustomerId }\r\n )[0].googleCampaigns;\r\n\r\n if (_.size(item.selectedCampaignId)) {\r\n item.selectedCampaignId.forEach((campaignId) => {\r\n const selectedCampaign = _.where(allCampaigns, { Id: campaignId });\r\n if (_.size(selectedCampaign) && selectedCampaign[0].Status === 'Paused') {\r\n result = true;\r\n }\r\n });\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n\r\n remove() {\r\n if (this.singleAccountView) {\r\n this.singleAccountView.remove();\r\n this.singleAccountView = null;\r\n }\r\n return super.remove();\r\n }\r\n}\r\n\r\n","import _ from 'underscore';\r\nimport { BaseImportStep } from '@bingads-webui-campaign/import-components';\r\nimport { withUiBlock } from '@bingads-webui/uiblocker';\r\n\r\nimport template from './multi-account-google-campaign-step.pug';\r\nimport { MultiAccountGoogleCampaignGridView } from './grid/index';\r\n\r\nexport class MultiAccountGoogleCampaignStep extends BaseImportStep {\r\n initialize({\r\n deps,\r\n }) {\r\n super.initialize({\r\n deps,\r\n });\r\n this.isContinueButtonEnabled = true;\r\n this.generateImportUserPreferencesFromPreviousOptions =\r\n deps.generateImportUserPreferencesFromPreviousOptions;\r\n this.config = deps.config;\r\n this.deps = deps;\r\n this.permissions = this.config.get('Permissions') || {};\r\n }\r\n\r\n render() {\r\n this.$el.html(template({\r\n i18n: this.i18n,\r\n }));\r\n return this;\r\n }\r\n\r\n get title() {\r\n return this.buildTitle({\r\n activeTitle: this.i18n.get('GoogleImport_SelectCampaign_Title'),\r\n summaryTitle: this.i18n.get('GoogleImport_SelectCampaign_Summary'),\r\n });\r\n }\r\n\r\n willShow() {\r\n if (this.checkIfShouldUpdateAndResetFlagIfTrue()) {\r\n this.isContinueButtonEnabled = true;\r\n this.deps.logActivities.renderSelectAdWordsCampaigns.start();\r\n const state = this.getState() || {};\r\n const {\r\n selectedGoogleAccounts, googleCampaignsForSelectedAccounts, initialSettings,\r\n isEditingScheduledImport,\r\n } = state;\r\n this.isEditingScheduledImport = isEditingScheduledImport;\r\n\r\n const editGoogleCampaignSelection = [];\r\n if (isEditingScheduledImport && initialSettings) {\r\n initialSettings.ImportTaskItemList.forEach((item) => {\r\n const itemCustomerId = item.AdWordsImportContext && item.AdWordsImportContext.CustomerId;\r\n if (itemCustomerId && _.contains(_.pluck(selectedGoogleAccounts, 'CustomerId'), itemCustomerId)) {\r\n editGoogleCampaignSelection.push({\r\n googleCustomerId: itemCustomerId,\r\n selectedCampaignIds: item.AdWordsImportContext.CampaignIds,\r\n });\r\n }\r\n });\r\n }\r\n\r\n const googleAccountList = [];\r\n selectedGoogleAccounts.forEach((item) => {\r\n googleAccountList.push({\r\n Id: item.CustomerId,\r\n Name: item.AccountName || item.CustomerId,\r\n });\r\n });\r\n\r\n if (this.view) {\r\n this.view.remove();\r\n this.view = null;\r\n }\r\n\r\n this.view = new MultiAccountGoogleCampaignGridView({\r\n parentElement: this.$('.multi-google-campaign-grid'),\r\n googleAccountList,\r\n googleCampaignList: googleCampaignsForSelectedAccounts,\r\n i18n: this.i18n,\r\n appConfig: this.config,\r\n repo: this.repository,\r\n editGoogleCampaignSelection,\r\n });\r\n\r\n // initialize events\r\n this.view.on('change:error', (hasError) => {\r\n this.isContinueButtonEnabled = !hasError;\r\n this.trigger('change:action');\r\n });\r\n\r\n this.view.on('change:select', () => {\r\n this.isEdited = true;\r\n });\r\n\r\n this.view.render();\r\n\r\n this.logTrace('render google campaign step');\r\n this.deps.logActivities.renderSelectAdWordsCampaigns.stop();\r\n } else {\r\n this.logTrace('not edited, directly expand google campaign step');\r\n }\r\n }\r\n\r\n get actions() {\r\n const original = super.actions;\r\n\r\n original[0].enabled = this.isContinueButtonEnabled;\r\n original[0].htmlAttributes['data-analyticsid'] = 'omniture-google-import-choose-campaigns';\r\n return original;\r\n }\r\n\r\n wizardShouldGoNext() {\r\n this.view.updateMultiAccountCampaignSelectionInfo();\r\n this.patchState({\r\n selectedCampaignIds: this.view.koModel.multiAccountsCampaignSelectionInfo(),\r\n googleCampaignsSummary: this.getSummaryInfo(),\r\n includePausedCampaigns: this.view.areAnyPausedCampaignsSelected()\r\n && !this.isEditingScheduledImport,\r\n });\r\n\r\n // log campaign selection per account\r\n const selection = [];\r\n _.each(this.state.googleCampaignsForSelectedAccounts, (account) => {\r\n const selected = _.find(\r\n this.state.selectedCampaignIds,\r\n campaigns => campaigns.googleCustomerId === account.googleCustomerId\r\n );\r\n if (selected) {\r\n const allSelected = selected.selectedCampaignIds.length === 0;\r\n const userCampaignSelection = {\r\n selection: allSelected ? 'all' : 'selected',\r\n totalCampaigns: account.googleCampaigns.length,\r\n selectedCampaigns: (allSelected && account.googleCampaigns.length)\r\n || selected.selectedCampaignIds.length,\r\n };\r\n selection.push(userCampaignSelection);\r\n }\r\n });\r\n // payload looks like\r\n // [\r\n // {\r\n // selection: all/selectedGoogleAccounts,\r\n // totalCampaigns: x,\r\n // selectedCampaigns: y,\r\n // }\r\n // ]\r\n this.logTrace({ CampaignSelection: selection });\r\n\r\n const state = this.getState() || {};\r\n const { selectedGoogleAccounts } = state;\r\n const googleCustomerList = _.indexBy(selectedGoogleAccounts, 'CustomerId');\r\n\r\n return this.repository.getMultiAccountGoogleImportUserPreferences(googleCustomerList)\r\n .then((preferences) => {\r\n if (preferences) {\r\n this.patchState({\r\n previousImportOptions: preferences,\r\n });\r\n return true;\r\n }\r\n return this.deps.onCredentialsError();\r\n })\r\n .catch((err) => { //eslint-disable-line\r\n this.handleGenericError(err);\r\n return false;\r\n })\r\n .finally(withUiBlock());\r\n }\r\n\r\n getCurrentSetting() {\r\n return this.grid && this.grid.getCurrentSetting();\r\n }\r\n\r\n remove() {\r\n if (this.view) {\r\n this.view.remove();\r\n this.view = null;\r\n }\r\n\r\n super.remove();\r\n }\r\n}\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { ScheduleImportStep } from '@bingads-webui-campaign/google-import-page';\r\n\r\nexport class MultiAccountScheduleImportStep extends ScheduleImportStep {\r\n initialize({\r\n deps,\r\n }) {\r\n super.initialize({\r\n deps,\r\n });\r\n this.IsMultiAccountImport = true;\r\n }\r\n\r\n createImportRunNowWithScheduledAndGoNextWhenReady(state) {\r\n this.logTrace('multiaccount run now feature used');\r\n\r\n const taskItemBody = this.scheduleFormView.serializeImportSchedulingOptions();\r\n if (taskItemBody) {\r\n taskItemBody.scheduledTaskItemBody = _.extend(taskItemBody.scheduledTaskItemBody, {\r\n importUserPreferences: state.importUserPreferences,\r\n });\r\n\r\n taskItemBody.runNowTaskItemBody = _.extend(taskItemBody.runNowTaskItemBody, {\r\n importUserPreferences: state.importUserPreferences,\r\n });\r\n return this.repository.prepareMultiAccountGoogleImportTaskItem({\r\n importOptions: taskItemBody.scheduledTaskItemBody,\r\n stepState: state,\r\n }).then(scheduleBody => (\r\n this.createScheduledImportAndGoNextWhenReady(scheduleBody, state)\r\n )).then(() => {\r\n this.patchState({\r\n isScheduledImport: false,\r\n });\r\n return this.repository.prepareMultiAccountGoogleImportTaskItem({\r\n importOptions: taskItemBody.runNowTaskItemBody,\r\n stepState: state,\r\n });\r\n }).then(runNowBody => (\r\n this.createRunNowImportAndGoNextWhenReady(runNowBody) // eslint-disable-line\r\n ));\r\n }\r\n return Promise.resolve(false);\r\n }\r\n\r\n createImportAndGoNextWhenReady(state) {\r\n this.logTrace({\r\n ImportUserSettings: {\r\n ScheduleFrequency: this.scheduleFormView.viewModel.chosenFrequency().value,\r\n ImportOptions: state.importUserPreferences,\r\n },\r\n });\r\n let taskItemBody = this.scheduleFormView.serializeImportSchedulingOptions();\r\n\r\n if (taskItemBody) {\r\n taskItemBody = _.extend(taskItemBody, {\r\n importUserPreferences: state.importUserPreferences,\r\n });\r\n\r\n return this.repository.prepareMultiAccountGoogleImportTaskItem({\r\n importOptions: taskItemBody,\r\n stepState: state,\r\n })\r\n .then((finalBody) => {\r\n if (this.scheduleFormView.isScheduledImport()) {\r\n return this.createScheduledImportAndGoNextWhenReady(finalBody, state);\r\n }\r\n\r\n return this.createRunNowImportAndGoNextWhenReady(finalBody);\r\n });\r\n }\r\n\r\n this.logTrace('No taskItemBody returned from scheduleFormView.serializeImportSchedulingOptions');\r\n return Promise.resolve(false);\r\n }\r\n\r\n createScheduledImportAndGoNextWhenReady(taskItemBody, state) {\r\n let taskItemPromise;\r\n this.patchState({\r\n isScheduledImport: true,\r\n scheduledTimeDisplayString: this.scheduleFormView.getDisplayString(),\r\n });\r\n\r\n if (state.isEditingScheduledImport) {\r\n taskItemPromise = this.repository.updateScheduledImportTaskItem(\r\n taskItemBody,\r\n state.initialSettings.taskItemId\r\n );\r\n } else {\r\n taskItemPromise = this.repository.createScheduledImportTaskItem(taskItemBody);\r\n }\r\n return taskItemPromise\r\n .then(() => {\r\n this.importButtonEnabled = false;\r\n this.trigger('change:action');\r\n return true;\r\n });\r\n }\r\n\r\n createRunNowImportAndGoNextWhenReady(taskItemBody) {\r\n const taskItemPromise = this.repository.createRunNowImportTaskItem(taskItemBody);\r\n return taskItemPromise.then(() => {\r\n this.importButtonEnabled = false;\r\n this.trigger('change:action');\r\n return true;\r\n });\r\n }\r\n}\r\n","import _ from 'underscore';\r\nimport { ImportSummaryStep, ImportSource } from '@bingads-webui-campaign/import-components';\r\n\r\nimport template from './multi-account-import-summary-template.pug';\r\n\r\nexport class MultiAccountImportSummaryStep extends ImportSummaryStep {\r\n initialize({ deps }) {\r\n super.initialize({ deps });\r\n this.permissions = deps.config.get('Permissions') || {};\r\n this.repo = deps.repository;\r\n }\r\n\r\n willShow() {\r\n const state = this.getState() || {};\r\n\r\n let summaryText;\r\n if (state.isScheduledImport) {\r\n summaryText = this.i18n.get('Scheduled_Import_Summary_Header').replace('{0}', state.scheduledTimeDisplayString);\r\n } else {\r\n summaryText = this.i18n.get('MultiAccountGoogleImport_RunNow_Import_Summary_Header');\r\n }\r\n\r\n this.$el.html(template({\r\n summaryText,\r\n i18n: ImportSource.google(this.i18n, this.repo).i18n,\r\n showAlert: this.showDisplayCampaignAlert(),\r\n }));\r\n\r\n this.logTrace('render multi account google import summary step');\r\n }\r\n\r\n get actions() {\r\n const state = this.getState() || {};\r\n return [{\r\n name: 'view-schedule-and-history',\r\n displayText: state.isScheduledImport ?\r\n this.i18n.get('Scheduled_Import_View_Schedule_Button') :\r\n this.i18n.get('MultiAccountGoogleImport_RunNow_Import_View_History_Button'),\r\n method: 'viewScheduleAndHistory',\r\n enabled: true,\r\n htmlAttributes: {\r\n class: 'btn btn-default',\r\n },\r\n }];\r\n }\r\n\r\n viewScheduleAndHistory() {\r\n this.repository.redirectToImportScheduleAndHistory();\r\n }\r\n\r\n getSelectedCampaigns() {\r\n const state = this.getState() || {};\r\n\r\n const { googleCampaignsForSelectedAccounts, selectedCampaignIds } = state;\r\n\r\n const tmp = _.indexBy(googleCampaignsForSelectedAccounts, 'googleCustomerId');\r\n\r\n let selectedCampaigns = [];\r\n\r\n _.each(selectedCampaignIds, (campaign) => {\r\n const googleCampaigns = _.result(_.result(tmp, campaign.googleCustomerId), 'googleCampaigns', []);\r\n if (_.size(campaign.selectedCampaignIds) === 0) {\r\n selectedCampaigns = selectedCampaigns.concat(googleCampaigns);\r\n } else {\r\n selectedCampaigns = selectedCampaigns.concat(_.filter(googleCampaigns, cm => _.result(campaign, 'selectedCampaignIds', []).includes(cm.Id)));\r\n }\r\n });\r\n\r\n return selectedCampaigns;\r\n }\r\n\r\n showDisplayCampaignAlert = () => {\r\n if (!this.permissions.IsAIMCampaignEnabled) {\r\n return false;\r\n }\r\n\r\n return this.repo.containDisplayType(this.getSelectedCampaigns());\r\n };\r\n}\r\n","import _ from 'underscore';\r\n\r\nimport {\r\n GoogleLoginStep,\r\n GoogleImportOptionsStep,\r\n} from '@bingads-webui-campaign/google-import-page';\r\n\r\nimport {\r\n MultiAccountGoogleAccountStep,\r\n MultiAccountGoogleCampaignStep,\r\n MultiAccountScheduleImportStep,\r\n MultiAccountImportSummaryStep,\r\n BingAccountTitleStep,\r\n} from '../step/index';\r\n\r\nfunction createBingAccountTitleStep(deps) {\r\n return {\r\n stepName: 'bing-account-title-step',\r\n stepView: new BingAccountTitleStep({\r\n deps: _.defaults({\r\n linkTextForTitle: deps.i18n.get('GoogleImport_MultiAccount_StepSummary_ViewDetails'),\r\n }, deps),\r\n }),\r\n };\r\n}\r\n\r\nfunction createGoogleLoginStep(deps) {\r\n return {\r\n stepName: 'google-login-step',\r\n stepView: new GoogleLoginStep({\r\n deps: _.defaults({\r\n previousStepName: 'bing-account-title-step',\r\n linkTextForTitle: deps.i18n.get('GoogleImport_Logout_Title'),\r\n }, deps),\r\n singleAccountMode: false,\r\n }),\r\n };\r\n}\r\n\r\nfunction createGoogleAccountStep(deps) {\r\n return {\r\n stepName: 'google-account-step',\r\n stepView: new MultiAccountGoogleAccountStep({\r\n deps: _.defaults({\r\n previousStepName: 'google-login-step',\r\n linkTextForTitle: deps.i18n.get('GoogleImport_MultiAccount_StepSummary_ViewDetails'),\r\n }, deps),\r\n }),\r\n };\r\n}\r\n\r\nfunction createGoogleCampaignStep(deps) {\r\n return {\r\n stepName: 'google-campaign-step',\r\n stepView: new MultiAccountGoogleCampaignStep({\r\n deps: _.defaults({\r\n previousStepName: 'google-account-step',\r\n linkTextForTitle: deps.i18n.get('GoogleImport_MultiAccount_StepSummary_ViewDetails'),\r\n }, deps),\r\n }),\r\n };\r\n}\r\n\r\nfunction createImportOptionsStep(deps) {\r\n return {\r\n stepName: 'import-options-step',\r\n stepView: new GoogleImportOptionsStep({\r\n deps: _.defaults({\r\n previousStepName: 'google-campaign-step',\r\n isCustomerLevel: true,\r\n }, deps),\r\n }),\r\n };\r\n}\r\n\r\nfunction createScheduleImportStep(deps) {\r\n return {\r\n stepName: 'schedule-import-step',\r\n stepView: new MultiAccountScheduleImportStep({\r\n deps: _.defaults({ previousStepName: 'import-options-step' }, deps),\r\n }),\r\n };\r\n}\r\n\r\nfunction createImportSummaryStep(deps) {\r\n return {\r\n stepName: 'import-summary-step',\r\n stepView: new MultiAccountImportSummaryStep({ deps }),\r\n };\r\n}\r\n\r\nexport class MultiAccountGoogleImportStepFactory {\r\n static createSteps(deps) {\r\n deps.check();\r\n const steps = [];\r\n\r\n steps.push(createBingAccountTitleStep(deps));\r\n steps.push(createGoogleLoginStep(deps));\r\n steps.push(createGoogleAccountStep(deps));\r\n steps.push(createGoogleCampaignStep(deps));\r\n steps.push(createImportOptionsStep(deps));\r\n steps.push(createScheduleImportStep(deps));\r\n steps.push(createImportSummaryStep(deps));\r\n\r\n return steps;\r\n }\r\n}\r\n","import Backbone from 'backbone';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport $ from 'jquery';\r\n\r\nimport { PopoverView, contents } from '@bingads-webui/popover';\r\nimport { BaseImportView, showPopoverTableView } from '@bingads-webui-campaign/import-components';\r\nimport { MultiAccountGoogleImportRepository } from '../repository/index';\r\nimport { MultiAccountGoogleImportStepFactory } from './multi-account-google-import-step-factory';\r\nimport BingAccountViewDetailsTempalte from '../step/bing-account-title/grid/view-details-pop-up-view.pug';\r\n\r\n// Common dependency checks should happen in base-import-view\r\nfunction checkRequiredDepsForGoogleImport(deps) {\r\n deps.check('edm');\r\n deps.check('jsData');\r\n deps.check('google');\r\n deps.check('timeZoneMapper');\r\n deps.check('uxMode');\r\n deps.check('cookieHelperForEditImport');\r\n deps.check('doubleListBox');\r\n deps.check('accountSelectionLists');\r\n}\r\n\r\nexport class MultiAccountGoogleImportPage extends Backbone.View {\r\n initialize({\r\n deps,\r\n options = {},\r\n }) {\r\n checkRequiredDepsForGoogleImport(deps);\r\n this.deps = deps;\r\n this.perfMarker = this.deps.perfMarker;\r\n this.options = _.extend({\r\n pageTitle: deps.i18n.get('GoogleImport_PageTitle'),\r\n subTitle: deps.i18n.get('GoogleImport_MultiAccount_PageDescription'),\r\n }, options);\r\n this.isGoogleAccountSkipped = false;\r\n this.googleImportRepository = new MultiAccountGoogleImportRepository({ deps });\r\n this.initialState = {};\r\n this.baseImportOptions = this.options;\r\n\r\n this.steps = MultiAccountGoogleImportStepFactory.createSteps(_.extend(deps, {\r\n repository: this.googleImportRepository,\r\n isContinueImport: !!options.importId,\r\n subFieldsBlacklist: options.subFieldsBlacklist,\r\n onCredentialsError: this.onCredentialsError.bind(this),\r\n }));\r\n this.baseImportOptions.showAllStepsInLastStepFunc = () => true;\r\n if (this.options.importId) {\r\n this.initialState.importId = options.importId;\r\n this.baseImportOptions.currentStep = 'schedule-import-step';\r\n }\r\n this.baseImportOptions.enableEdit = true;\r\n\r\n this.onSwitchFinished = () => {\r\n $('[data-step-name=\"google-login-step\"] .edit-step').hide();\r\n const $accountEdit = $('[data-step-name=\"google-account-step\"] .edit-step');\r\n\r\n if (this.isGoogleAccountSkipped) {\r\n $accountEdit.hide();\r\n } else {\r\n $accountEdit.show();\r\n }\r\n };\r\n this.onSwitchFinished.bind(this);\r\n }\r\n\r\n logTrace(...args) {\r\n this.googleImportRepository.logTrace(...args);\r\n }\r\n\r\n render() {\r\n this.perfMarker.willRender();\r\n let initBaseViewPromise = Promise.resolve([]);\r\n\r\n let initialStateFetchPromise = Promise.resolve([]);\r\n\r\n if (this.options.taskItemId) {\r\n this.logTrace('taskItemId is passed');\r\n\r\n initialStateFetchPromise =\r\n this.googleImportRepository.getImportTaskItem(this.options.taskItemId)\r\n .then((taskItem) => {\r\n // in this case, if user has signed in on import schedule page, update session Id\r\n const currentUserId = _.propertyOf(this.deps.config.get('CurrentUser'))('Id');\r\n\r\n if (taskItem.ModifiedBy.Id !== currentUserId) {\r\n this.logTrace('a different user is editing');\r\n const { cookieHelperForEditImport } = this.deps;\r\n const sessionId = cookieHelperForEditImport.getSessionId(this.options.taskItemId);\r\n\r\n cookieHelperForEditImport.deleteCookie();\r\n if (sessionId) {\r\n taskItem.SessionId = sessionId; // eslint-disable-line\r\n }\r\n }\r\n\r\n this.initialState.initialSettings = taskItem;\r\n this.initialState.initialSettings.taskItemId = this.options.taskItemId;\r\n this.initialState.isEditingScheduledImport = true;\r\n });\r\n }\r\n\r\n initBaseViewPromise = initialStateFetchPromise.then(() => {\r\n this.baseImportView = new BaseImportView({\r\n deps: this.deps,\r\n steps: this.steps,\r\n options: this.baseImportOptions,\r\n initialState: this.initialState,\r\n onSwitchFinished: this.onSwitchFinished,\r\n });\r\n });\r\n\r\n return initBaseViewPromise.then(() => (\r\n this.baseImportView.render()\r\n .then((baseImportView) => {\r\n this.$el.html(baseImportView.el);\r\n this.attachPageEventHandlers();\r\n this.perfMarker.done();\r\n return this;\r\n })\r\n ));\r\n }\r\n\r\n attachPageEventHandlers() {\r\n const googleLoginStepView = _.findWhere(this.steps, { stepName: 'google-login-step' }).stepView;\r\n const googleCampaignStepView = {}; // google-campaign-step\r\n\r\n this.baseImportView.on('click:step.header.link', (e) => {\r\n const stepName = $(e.target).closest('.step-header').attr('data-step-name');\r\n\r\n if (stepName === 'google-login-step') {\r\n this.logTrace('signout clicked. start to log out and go to google login step');\r\n googleLoginStepView.logoutGoogle();\r\n // preserve bing account selection data\r\n const previousState = this.baseImportView.currentStepInstance.getState();\r\n const { bingAccount } = previousState;\r\n this.baseImportView.currentStepInstance.setState({\r\n savedSetting: _.result(googleCampaignStepView, 'getCurrentSetting') || {},\r\n isEditEnabledForWizard: true, // !this.isSignUpMode,\r\n bingAccount,\r\n });\r\n\r\n if (!_.isEmpty(this.initialState)) {\r\n this.initialState.initialSettings.ImportTaskItemList = [];\r\n }\r\n this.baseImportView.currentStepInstance.patchState(this.initialState);\r\n this.baseImportView.goToStep(stepName);\r\n }\r\n\r\n if (stepName === 'bing-account-title-step') {\r\n const targetRect = e.target.getBoundingClientRect();\r\n new PopoverView({\r\n target: this.$(e.target),\r\n position: {\r\n isAbsolute: true,\r\n left: targetRect.left,\r\n top: targetRect.bottom,\r\n },\r\n containerClassName: ['BingAccountViewDetailsView'],\r\n }).setContent(new contents.TitledContent()\r\n .setTitle(this.deps.i18n.getString('GoogleImport_MicrosoftAdvertising_ViewDetail'))\r\n .setBody({\r\n html: BingAccountViewDetailsTempalte({\r\n i18n: this.deps.i18n,\r\n selectedAccounts: _.pluck(this.baseImportView.view.state.bingAccount, 'Name'),\r\n }),\r\n }));\r\n }\r\n\r\n if (stepName === 'google-account-step') {\r\n const data = [];\r\n this.baseImportView.view.state.selectedGoogleAccountToBingAccountMap.forEach((item) => {\r\n const tempGoogleCustomerName = _.findWhere(\r\n this.baseImportView.view.state.selectedGoogleAccounts,\r\n { CustomerId: item.GoogleCustomerId }\r\n ).AccountName;\r\n const tempBingAccountName = _.findWhere(\r\n this.baseImportView.view.state.bingAccount,\r\n { Id: item.BingAccountId }\r\n ).Name;\r\n data.push({\r\n AccountName: `${tempGoogleCustomerName} (${item.GoogleCustomerId})`,\r\n customizedContents: `${tempBingAccountName} (${item.BingAccountId})`,\r\n });\r\n });\r\n\r\n showPopoverTableView(\r\n e.target,\r\n ['StepSummaryDetailView'],\r\n this.deps.i18n.getString('GoogleImport_GoogleAdsAccounts_ViewDetail'),\r\n [{\r\n bodyClasses: 'AccountName',\r\n name: 'AccountName',\r\n title: this.deps.i18n.get('GoogleImport_MicrosoftAdvertising_GoogleAccounts'),\r\n }, {\r\n bodyClasses: 'customizedContents',\r\n name: 'customizedContents',\r\n title: this.deps.i18n.getString('GoogleImport_GoogleAdsAccounts_Microsoft_Advertising_Account'),\r\n }],\r\n data,\r\n this.deps.i18n\r\n );\r\n }\r\n\r\n if (stepName === 'google-campaign-step') {\r\n const data = [];\r\n this.baseImportView.view.state.selectedCampaignIds.forEach((item) => {\r\n const tempGoogleCustomerName = _.findWhere(\r\n this.baseImportView.view.state.selectedGoogleAccounts,\r\n { CustomerId: item.googleCustomerId }\r\n ).AccountName;\r\n data.push({\r\n AccountName: `${tempGoogleCustomerName} (${item.googleCustomerId})`,\r\n customizedContents: _.size(item.selectedCampaignIds) ?\r\n this.deps.i18n.getString('GoogleImport_GoogleAdsCampaigns_ViewDetail_SelectSpecific') :\r\n this.deps.i18n.getString('GoogleImport_GoogleAdsCampaigns_ViewDetail_SelectAll'),\r\n });\r\n });\r\n\r\n showPopoverTableView(\r\n e.target,\r\n ['StepSummaryDetailView'],\r\n this.deps.i18n.getString('GoogleImport_GoogleAdsCampaigns_ViewDetail'),\r\n [{\r\n bodyClasses: 'AccountName',\r\n name: 'AccountName',\r\n title: this.deps.i18n.get('GoogleImport_MicrosoftAdvertising_GoogleAccounts'),\r\n }, {\r\n bodyClasses: 'customizedContents',\r\n name: 'customizedContents',\r\n title: this.deps.i18n.getString('GoogleImport_GoogleAdsCampaigns_ViewDetail_ColumnName'),\r\n }],\r\n data,\r\n this.deps.i18n\r\n );\r\n }\r\n });\r\n\r\n googleLoginStepView.on('switch:step', () => {\r\n this.isGoogleAccountSkipped = false;\r\n this.baseImportView.steps[1].stepView.trigger('next');\r\n });\r\n }\r\n\r\n onCredentialsError() {\r\n this.logTrace('call onCredentialsError');\r\n\r\n const googleLoginStepView = _.findWhere(this.steps, { stepName: 'google-login-step' }).stepView;\r\n googleLoginStepView.logoutGoogleWithErrorMessage();\r\n this.baseImportView.currentStepInstance.setState({});\r\n this.baseImportView.goToStep('google-login-step');\r\n }\r\n\r\n // this needs to be called after this view has been attached to dom\r\n // otherwise UI blocker throws exception\r\n startPollingAfterContinueImport() {\r\n if (this.options.taskItemId && !this.baseImportView.onContinueImportView) {\r\n this.logTrace('taskItemId is passed, set cookie');\r\n\r\n const { ImportTaskItemList, SessionId } = this.initialState.initialSettings;\r\n if (_.size(ImportTaskItemList) === 0) {\r\n return;\r\n }\r\n const { AccountName } = ImportTaskItemList[0].AdWordsImportContext;\r\n\r\n this.logTrace(`set adwords context to cookie: AccountName - ${AccountName}, SessionId - ${SessionId} `);\r\n this.googleImportRepository.setGoogleImportAccountInfoInCookie({\r\n loginAccount: AccountName,\r\n sessionId: SessionId,\r\n });\r\n }\r\n }\r\n}\r\n\r\n","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-horizontal\\\"\\u003E\\u003Cdiv class=\\\"form-group multi-account-title-grid\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MicrosoftAdvertising_Account_Select')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"row\\\"\\u003E\\u003Cdiv class=\\\"col-sm-9\\\"\\u003E\\u003Cdiv class=\\\"multi-bing-account-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error-message-no-bing-account-grid\\\"\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: showValidationError\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_SelectBingadsAccount_Required')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"dlbItem-status-icon #:data.StatusCssClass#\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dlbItem-text\\\"\\u003E\" + (pug.escape(null == (pug_interp = \"#:data.Name#\") ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"dlbItem clearfix\\\" data-id=\\\"#:_uniqueId#\\\" id=\\\"selectedItem-#:_uniqueId#\\\" role=\\\"option\\\"\\u003E\\u003Cdiv class=\\\"dlbItem-content\\\"\\u003E\\u003C!--content--\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dlbItem-actions\\\"\\u003E\\u003Ca\" + (\" class=\\\"arrow-button remove a11y-k-listview-button selectedAction-deselect\\\"\"+\" role=\\\"button\\\"\"+pug.attr(\"title\", i18n.get('Bulk_Download_Edit_Scope_Deselect'), true, true)+\" href=\\\"javascript:void(0);\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"dlbItem clearfix #:selected#\\\" data-id=\\\"#:_uniqueId#\\\" id=\\\"sourceItem-#:_uniqueId#\\\" role=\\\"option\\\"\\u003E\\u003Cdiv class=\\\"dlbItem-content\\\"\\u003E\\u003C!--content--\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"dlbItem-actions\\\"\\u003E\\u003Ca\" + (\" class=\\\"arrow-button a11y-k-listview-button sourceAction-select #if (selected) {# disabled #} else {# enabled #}#\\\"\"+\" role=\\\"button\\\"\"+pug.attr(\"title\", i18n.get('Bulk_Download_Edit_Scope_Select'), true, true)+\" href=\\\"javascript:void(0);\\\" tabindex=\\\"-1\\\"\") + \"\\u003E\\u003C\\u002Fa\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (selectedAccounts) {pug_html = pug_html + \"\\u003Cdiv class=\\\"selected-account\\\"\\u003E\";\n// iterate selectedAccounts\n;(function(){\n var $$obj = selectedAccounts;\n if ('number' == typeof $$obj.length) {\n for (var pug_index0 = 0, $$l = $$obj.length; pug_index0 < $$l; pug_index0++) {\n var val = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Ch6 class=\\\"main-item truncated\\\"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh6\\u003E\";\n }\n } else {\n var $$l = 0;\n for (var pug_index0 in $$obj) {\n $$l++;\n var val = $$obj[pug_index0];\npug_html = pug_html + \"\\u003Ch6 class=\\\"main-item truncated\\\"\\u003E\" + (pug.escape(null == (pug_interp = val) ? \"\" : pug_interp)) + \"\\u003C\\u002Fh6\\u003E\";\n }\n }\n}).call(this);\n\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"selectedAccounts\" in locals_for_with?locals_for_with.selectedAccounts:typeof selectedAccounts!==\"undefined\"?selectedAccounts:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (enableToggleButton, isDropdownMenuExpanded, selectedBingAccountName) {pug_html = pug_html + \"\\u003Cdiv class=\\\"bing-account-selector\\\"\\u003E\\u003Cdiv class=\\\"ba-dropdown-selector\\\"\\u003E\\u003Cbutton\" + (\" class=\\\"btn btn-default dropdown-toggle\\\"\"+\" type=\\\"button\\\" role=\\\"button\\\"\"+pug.attr(\"disabled\", !enableToggleButton, true, true)+\" tabindex=\\\"0\\\" style=\\\"display: flex; justify-content: space-between;\\\"\"+pug.attr(\"aria-expanded\", isDropdownMenuExpanded() ? 'true' : 'false', true, true)+pug.attr(\"aria-label\", selectedBingAccountName, true, true)) + \"\\u003E\\u003Cspan class=\\\"truncated\\\"\\u003E\" + (pug.escape(null == (pug_interp = selectedBingAccountName) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003Cdiv class=\\\"icon-right glyphicon glyphicon-triangle-bottom\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"enableToggleButton\" in locals_for_with?locals_for_with.enableToggleButton:typeof enableToggleButton!==\"undefined\"?enableToggleButton:undefined,\"isDropdownMenuExpanded\" in locals_for_with?locals_for_with.isDropdownMenuExpanded:typeof isDropdownMenuExpanded!==\"undefined\"?isDropdownMenuExpanded:undefined,\"selectedBingAccountName\" in locals_for_with?locals_for_with.selectedBingAccountName:typeof selectedBingAccountName!==\"undefined\"?selectedBingAccountName:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (SelectedAcountMaxCount, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cspan id=\\\"SelectGoogleAccountDesc\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_SelectGoogleAccount_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"import-grid\\\"\\u003E\\u003Cdiv class=\\\"grid-toolbar\\\"\\u003E\\u003Cdiv class=\\\"grid-toolbar grid-toolbar-container\\\" role=\\\"toolbar\\\"\\u003E\\u003Cdiv class=\\\"grid-filter-container\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-table grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"grid-noresult\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"ba-dropdown-list-popup\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: showNoSelectedGoogleAccountError\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Validation_SelectedAccountRequired')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: showNoSelectedBingAccountError\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_GoogleAccountGrid_SelectedBingAccountRequired')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: showSelectedAccountCountExceedLimitError\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_GoogleAccountGrid_SelectedAccountCountExceedLimit', {count: SelectedAcountMaxCount})) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"error\\\" data-bind=\\\"visible: showSelectedGoogleAccountNoCampaignError\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_GoogleAccountGrid_SelectedAccountNoCampaign')) ? \"\" : pug_interp)) + \"\\u003Cspan data-bind=\\\"text: hasNoCampaignsCustomerNameList\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"SelectedAcountMaxCount\" in locals_for_with?locals_for_with.SelectedAcountMaxCount:typeof SelectedAcountMaxCount!==\"undefined\"?SelectedAcountMaxCount:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (hasNoData, i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\";\nif (hasNoData) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"error\\\" role=\\\"alert\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_SelectAccount_NoAvailableAccounts')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\n}\nelse {\npug_html = pug_html + \"\\u003Cdiv class=\\\"multi-google-account-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"currency-conversion-control\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";\n}\npug_html = pug_html + \"\\u003C\\u002Fdiv\\u003E\";}.call(this,\"hasNoData\" in locals_for_with?locals_for_with.hasNoData:typeof hasNoData!==\"undefined\"?hasNoData:undefined,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cspan id=\\\"SelectCampaignDesc\\\"\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('GoogleImport_MultiAccount_SelectCampaign_Description')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"google-account-selector\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Cdiv class=\\\"google-campaign-grid-for-single-account\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined));;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group multi-google-campaign-grid\\\"\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../../../../../../node_modules/.pnpm/pug@2.0.4/node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;;var locals_for_with = (locals || {});(function (i18n, showAlert, summaryText) {pug_html = pug_html + \"\\u003Cdiv class=\\\"form-group\\\"\\u003E\" + (pug.escape(null == (pug_interp = summaryText) ? \"\" : pug_interp)) + \"\\u003C\\u002Fdiv\\u003E\";\nif (showAlert) {\npug_html = pug_html + \"\\u003Cdiv class=\\\"alert alert-info\\\" role=\\\"alert\\\" style=\\\"margin-bottom: 15px\\\"\\u003E\\u003Cspan class=\\\"infomark infoalign\\\"\\u003E\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E\" + (pug.escape(null == (pug_interp = i18n.get('Import_SelectCampaign_DisplayCampaignAlert')) ? \"\" : pug_interp)) + \"\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\";\n}}.call(this,\"i18n\" in locals_for_with?locals_for_with.i18n:typeof i18n!==\"undefined\"?i18n:undefined,\"showAlert\" in locals_for_with?locals_for_with.showAlert:typeof showAlert!==\"undefined\"?showAlert:undefined,\"summaryText\" in locals_for_with?locals_for_with.summaryText:typeof summaryText!==\"undefined\"?summaryText:undefined));;return pug_html;};\nmodule.exports = template;","/* eslint-disable no-restricted-globals */\r\n// @ts-ignore\r\nimport { IDataStore } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { AccountCampaignDataStore } from './account-campaign-data-store';\r\nimport { ClassNames, Ii18n } from '../double-list/double-list.types';\r\nimport { SelectorOption, SelectorExpandableOption } from '../double-list';\r\n\r\nexport interface IFeaturePilots {\r\n IsReportingUINewDesignEnabled: boolean,\r\n}\r\n\r\nexport interface IAccountCampaignSelectorProps {\r\n featurePilots: IFeaturePilots;\r\n ccBaseUrl: string;\r\n ccToken: string;\r\n customerId: string;\r\n userId: string;\r\n accountId?: string;\r\n i18n: Ii18n;\r\n odataURI: string;\r\n allSelected: boolean;\r\n isCreateSimilar: boolean;\r\n onSelectedChange: (value: RdsSelected, addtionInfo?: { searchHistorySelectorOptions?: SelectorOption[] }) => void;\r\n defaultSelected: RdsSelected,\r\n forceAccountScope: boolean;\r\n scopeFilterLevel: string;\r\n isInternalReport?: boolean;\r\n hideRadioButtons?: boolean;\r\n finishedLoading?: () => void;\r\n classes: ClassNames;\r\n isReportingUIPhaseNext?: boolean;\r\n ccJsData?: IDataStore;\r\n searchHistorySelectorOptions?: SelectorOption[];\r\n hideAccountSearchBar?: boolean;\r\n hideAccountNodeArrow?: boolean;\r\n customFetchAndBuildCampaignOptionList?: (rootOption: SelectorExpandableOption) => Promise;\r\n customFetchAndBuildAccountOptionList?: (rootOption: SelectorExpandableOption) => Promise;\r\n}\r\n\r\nexport interface IAccountCampaignSelectorInternalProps extends IAccountCampaignSelectorProps {\r\n store: AccountCampaignDataStore;\r\n}\r\n\r\nexport type RdsSelected = {\r\n allSelected: boolean,\r\n AccountIds: number[],\r\n CustomerScopes: number[],\r\n CampaignReportScopes: CampaignReportScopeType[],\r\n};\r\n\r\nexport type CampaignReportScopeType = {\r\n AccountId: number,\r\n CampaignId: number,\r\n};\r\n\r\ndeclare global {\r\n function _TL_(str: string): string;\r\n}\r\n\r\nexport enum AccountCampaignContainerType {\r\n customerAccount = 'customerAccount',\r\n campaign = 'campaign'\r\n}\r\n\r\nexport enum AccountCampaignOptionType {\r\n customer = 'customer',\r\n account = 'account',\r\n campaign = 'campaign'\r\n}\r\n\r\nexport enum ScopeFilterLevelType {\r\n Customer = 'Customer',\r\n Account = 'Account',\r\n Campaign = 'Campaign'\r\n}\r\n\r\nexport enum ScopeSelectorLevelType {\r\n Customer = 'Customer',\r\n Account = 'Account',\r\n}\r\n\r\nexport enum FilterKeyType {\r\n customer = 'f:cust',\r\n account = 'f:acct',\r\n campaign = 'f:cmp',\r\n undeterminedAccounts = 'undeterminedAccounts'\r\n}\r\n\r\nexport interface IFilter {\r\n FilterKey: FilterKeyType;\r\n Values: string[];\r\n}\r\n\r\nexport interface ISearchAccount {\r\n accountId: number;\r\n accountName: string;\r\n status: string;\r\n advertiserCustomerName: string;\r\n}\r\n\r\nexport interface ISearchCustomer {\r\n advertiserCustomerId: number;\r\n advertiserCustomerName: string;\r\n status: string;\r\n serviceLevel: string;\r\n}\r\n\r\ninterface statusMap {\r\n [key: string]: string;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare\r\nexport const statusMap: statusMap = {\r\n Active: _TL_('Active'),\r\n Inactive: _TL_('Inactive'),\r\n};\r\n","import { IPaginationParams } from './double-list.types';\r\n/**\r\n * Normal selectorOption type\r\n */\r\n\r\nexport interface SelectorOptionRestParams {\r\n unAuthorized?: boolean;\r\n childFetched?: boolean;\r\n expanded?: boolean;\r\n optionType?: string;\r\n childPagination?: IPaginationParams;\r\n extra?: any;\r\n disabled?: boolean;\r\n visible?: any;\r\n number?: string;\r\n}\r\n\r\nexport class SelectorOption {\r\n id: string;\r\n name: string;\r\n // The option type mapping to business entity\r\n optionType: string;\r\n children: Array; // only tree need that\r\n parent?: SelectorOption;\r\n childFetched: boolean;\r\n extra: any;\r\n state: any;\r\n deepness: number;\r\n key: string;\r\n isSelected: boolean;\r\n visible: boolean;\r\n disabled: boolean;\r\n number: string;\r\n unAuthorized: boolean;\r\n\r\n constructor(id: string, name: string, rest: SelectorOptionRestParams = {}) {\r\n this.childFetched = rest.childFetched || false;\r\n this.children = [];\r\n this.name = name;\r\n this.optionType = rest.optionType || '++';\r\n this.id = id;\r\n this.state = {\r\n expanded: true,\r\n };\r\n\r\n if (rest.expanded !== undefined) {\r\n this.state.expanded = rest.expanded;\r\n }\r\n this.number = rest.number || '';\r\n this.extra = rest.extra || undefined;\r\n this.unAuthorized = !!rest.unAuthorized;\r\n this.deepness = 0;\r\n this.key = `${this.optionType}-${this.id}`;\r\n this.isSelected = false;\r\n this.disabled = rest.disabled || false;\r\n if (rest.visible != null || rest.visible !== undefined) {\r\n this.visible = rest.visible;\r\n } else {\r\n this.visible = true;\r\n }\r\n }\r\n\r\n addChild(option: SelectorOption, childFetched: boolean = true) {\r\n option.parent = this;\r\n this.children.push(option);\r\n this.childFetched = childFetched;\r\n option.updateDeepness(this.deepness + 1);\r\n\r\n return this;\r\n }\r\n\r\n resetChildren() {\r\n this.children = [];\r\n this.childFetched = false;\r\n }\r\n\r\n updateDeepness(deepness: number) {\r\n this.deepness = deepness;\r\n this.children.forEach((child: SelectorOption) => {\r\n child.updateDeepness(deepness + 1);\r\n });\r\n }\r\n\r\n /**\r\n * visit this tree in mid children order\r\n * @param option the tree to visit\r\n * @param visitSeq the exsiting visit seq\r\n * @returns the visit seq\r\n */\r\n midTraverseTree(visitSeq: SelectorOption[] = []): SelectorOption[] {\r\n visitSeq.push(this);\r\n this.children.filter(item => !!item).forEach(o => o.midTraverseTree(visitSeq));\r\n\r\n return visitSeq;\r\n }\r\n\r\n find(predicate: (o: SelectorOption) => boolean): SelectorOption | undefined {\r\n if (predicate(this)) {\r\n return this;\r\n }\r\n for (let i = 0; i < this.children.length; i++) {\r\n const res = this.children[i].find(predicate);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Root option of one container start to render\r\n */\r\nexport class SelectorExpandableOption extends SelectorOption {\r\n // children data pagination, if false means there is no need to do pagination\r\n childPagination?: IPaginationParams | boolean;\r\n\r\n // use cotainerKey to find corresponding containerConfig and render that container\r\n containerKey: string;\r\n\r\n constructor(id: string, name: string, containerKey: string, rest: SelectorOptionRestParams = {}) {\r\n super(id, name, rest);\r\n this.containerKey = containerKey;\r\n this.childPagination = rest.childPagination || false;\r\n }\r\n\r\n updateChildPagination(childPagination: IPaginationParams | boolean) {\r\n this.childPagination = childPagination;\r\n }\r\n}\r\n\r\nexport class SelectorRootOption extends SelectorExpandableOption {\r\n isRoot: boolean;\r\n constructor(containerKey: string, id = 'root', name = 'root', rest: SelectorOptionRestParams = {}) {\r\n super(id, name, containerKey, rest);\r\n this.isRoot = true;\r\n }\r\n}\r\n","import { ReactNode, ComponentClass } from 'react';\r\nimport { SelectorOption, SelectorExpandableOption } from './selector-option';\r\n\r\nexport interface IDoubleListProps {\r\n // customized selectBox component\r\n selectorBox: ComponentClass;\r\n\r\n // customized resultBox component\r\n resultBox: ComponentClass;\r\n\r\n // when user click add, remove, addAll, removeAll\r\n onChange?: (selected: SelectorOption[]) => void;\r\n\r\n // selected map\r\n defaultSelectedOptions: SelectorOption[];\r\n\r\n rootOption: SelectorExpandableOption; // | Promise;\r\n\r\n // in multi columns container, just pass expandableOptionList init each container to render in each col\r\n defaultVisibleExpandableOptionList: SelectorExpandableOption[];\r\n\r\n // render the selectorBox and stick to one container config\r\n selectorBoxConfig: ISelectorContainerConfig;\r\n\r\n // key -> SelectorContainer, used during container rendering\r\n containerMap: SelectorContainerMap;\r\n\r\n classNames: {\r\n [key: string]: string;\r\n };\r\n i18n: Ii18n;\r\n onVisibleExpandableOptionChange?: (optionList: SelectorExpandableOption[]) => void;\r\n scopeFilterLevel?: string;\r\n hideAccountSearchBar? : boolean;\r\n hideAccountNodeArrow? : boolean;\r\n}\r\n\r\n/**\r\n * @interface SelectorContainerMap is\r\n */\r\nexport interface SelectorContainerMap {\r\n [key: string]: ISelectorContainerConfig;\r\n}\r\n\r\nexport interface IRenderSelectorNodeOps {\r\n onAdd: (selected: SelectorOption[] | SelectorOption) => void;\r\n onRemove: (unselected: SelectorOption[] | SelectorOption) => void;\r\n}\r\n\r\nexport interface Ii18n {\r\n getString: (str: string) => string;\r\n}\r\nexport interface ClassNames {\r\n [key: string]: any;\r\n}\r\n\r\nexport type RenderSelectorItemFunc = (\r\n option: SelectorOption,\r\n ops: IRenderSelectorNodeOps,\r\n config: ISelectorContainerConfig,\r\n i18n: Ii18n,\r\n classes: ClassNames,\r\n hideAccountNodeArrow?: boolean,\r\n) => ReactNode;\r\n\r\n/**\r\n * @interface SelectorContainer is bundle of rendering, navigation, filter functions and attrs\r\n * Here do one assumption that data under one contaienr is with the same business logic\r\n */\r\nexport interface ISelectorContainerConfig {\r\n // container key used to identify\r\n containerKey: string;\r\n scopeFilterLevel?: string;\r\n isInternalReport?: boolean;\r\n isReportingUIPhaseNext?: boolean;\r\n scopeSelectorLevel?: string;\r\n\r\n // cotainer view type used to render\r\n containerViewType: SelectorContainerViewType;\r\n\r\n renderSelectorNode?: RenderSelectorItemFunc;\r\n renderSelectorHeader?: RenderSelectorItemFunc;\r\n\r\n onQueryCampaignChange: (searchTerm: string) => void;\r\n\r\n onQueryCustomerAccountChange: (searchTerm: string) => void;\r\n // user click search button to search account\r\n onSearchCustomerAccount: (searchText: string) => void;\r\n\r\n onSearchCampaign: (searchText: string) => void;\r\n\r\n onClearSearchCustomerAccount: () => void;\r\n\r\n onClearSearchCampaign: () => void;\r\n\r\n onSelectScopeLevel: (scopeLevel: string) => void;\r\n\r\n // on user filter change\r\n onFilterChange?: (params: any) => void;\r\n\r\n // When user click next page or previous page, load that page data, according to SelectorContainerOption according to that container\r\n onPageChange?: (option: SelectorExpandableOption, pageNumber: number) => void;\r\n\r\n // When user click selectorNode, if the child data is not fetched, loadData will be called to load children data for current node\r\n loadData?: (selectorOption?: SelectorOption) => void;\r\n\r\n // Filter local options according to search keyword\r\n localFilter?: (option: SelectorOption) => boolean;\r\n searchTerm: string,\r\n customerAccountSearchStr: string,\r\n campaignSearchStr: string,\r\n // container from left to right, row add 1, such as 0 1 2\r\n // container do drill down, col add 1, such as 0 1 2\r\n coordinate: {\r\n row: number;\r\n col: number;\r\n };\r\n\r\n // height of container, overflow will be scrolled\r\n containerHeight: number;\r\n rowHeight: number;\r\n isLoading: boolean;\r\n}\r\n\r\nexport interface ISelectorContainerProps {\r\n containerConfig: ISelectorContainerConfig;\r\n rootOption: SelectorExpandableOption;\r\n onAdd: (values: SelectorOption[] | SelectorOption) => void;\r\n isSelected: (option: SelectorOption) => boolean;\r\n onRemove: (values: SelectorOption[] | SelectorOption) => void;\r\n i18n: Ii18n;\r\n classNames: {\r\n [key: string]: any;\r\n };\r\n hideAccountNodeArrow?: boolean;\r\n}\r\n\r\nexport interface ISelectContainerHeaderProps extends IDoubleListProps {\r\n CascaderContainerConfig: ISelectorContainerConfig;\r\n}\r\n\r\nexport interface ISelectorBoxProps extends IDoubleListProps {}\r\n\r\nexport interface IResultBoxProps extends IDoubleListProps {\r\n isReportingUIPhaseNext: boolean;\r\n removeAll: () => void;\r\n selected: SelectorOption[];\r\n onRemove: (option: SelectorOption[] | SelectorOption) => void;\r\n}\r\n\r\nexport interface ISelectorProps extends IDoubleListProps {\r\n onAdd: (values: SelectorOption[] | SelectorOption) => void;\r\n isSelected: (option: SelectorOption) => boolean;\r\n onRemove: (option: SelectorOption[] | SelectorOption) => void;\r\n refresh: number;\r\n}\r\n\r\nexport interface IResultListProps extends IDoubleListProps {\r\n removeAll: () => void;\r\n onRemove?: (values: SelectorOption[] | SelectorOption) => void;\r\n}\r\n\r\nexport interface IResultNodeProps {\r\n onRemove?: (values: SelectorOption[] | SelectorOption) => void;\r\n option: SelectorOption;\r\n}\r\n\r\nexport interface ISelectorNodeProps {\r\n onAdd?: (values: SelectorOption[] | SelectorOption) => void;\r\n option: SelectorOption;\r\n isSelected: boolean;\r\n}\r\n\r\nexport interface ISelectorHeaderProps {\r\n option: SelectorExpandableOption;\r\n onAdd?: (values: SelectorOption[] | SelectorOption) => void;\r\n}\r\n\r\nexport interface IPaginationParams {\r\n currentPage: number;\r\n totalPage: number;\r\n pageSize: number;\r\n}\r\n\r\nexport enum SelectorContainerViewType {\r\n tree = 'tree',\r\n list = 'list'\r\n}\r\n\r\nexport interface IListNodeProps extends ISelectorNodeProps {}\r\nexport interface ITreeNodeProps extends ISelectorNodeProps {}\r\nexport interface ISelectorTreeProps extends ISelectorContainerProps {}\r\nexport interface ISelectorListProps extends ISelectorContainerProps {}\r\n","import jss from 'jss';\r\n// @ts-ignore\r\nimport preset from 'jss-preset-default';\r\n\r\ninterface IStyleParams {\r\n [key: string]: any;\r\n}\r\njss.setup(preset() as any);\r\n\r\nexport function buildSelectorTreeStyles(params: IStyleParams) {\r\n const styles = {\r\n selectorTree: {\r\n height: params.selectorTreeHeight,\r\n margin: 'auto',\r\n padding: '10px 0',\r\n },\r\n };\r\n\r\n const { classes } = jss.createStyleSheet(styles).attach();\r\n return classes;\r\n}\r\n\r\nexport function buildSelectorListStyles(params: IStyleParams) {\r\n const styles = {\r\n selectorList: {\r\n height: params.selectorListHeight,\r\n margin: 'auto',\r\n padding: '10px 0',\r\n overflow: 'auto',\r\n },\r\n };\r\n\r\n const { classes } = jss.createStyleSheet(styles).attach();\r\n return classes;\r\n}\r\n\r\nconst styles = {\r\n selectorContainerHidden: {\r\n display: 'none',\r\n },\r\n isSelected: {\r\n color: 'gray',\r\n },\r\n selectorTreeExpandIcon: {\r\n verticalAlign: 'sub',\r\n float: 'left',\r\n marginTop: 3,\r\n marginRight: 4,\r\n },\r\n};\r\n\r\nconst { classes } = jss.createStyleSheet(styles as any).attach();\r\nexport default classes;\r\n","import React, { Component, ReactNode } from 'react';\r\nimport { TreeView, ExpandableNode, Node, IFlattenedNode } from '@bingads-webui-react/tree-view';\r\nimport { ISelectorTreeProps, RenderSelectorItemFunc } from './double-list.types';\r\nimport { SelectorOption, SelectorExpandableOption } from './selector-option';\r\nimport classes, { buildSelectorTreeStyles } from './styles';\r\n\r\ninterface ISelectorTreeState {\r\n refresh: number;\r\n}\r\n\r\ninterface INodeCache {\r\n [key: string]: Node;\r\n}\r\n\r\nexport default class SelectorTree extends Component {\r\n private rootNode: Node;\r\n private classes: any;\r\n private nodeCache: INodeCache;\r\n\r\n constructor(props: ISelectorTreeProps) {\r\n super(props);\r\n this.nodeCache = {};\r\n this.rootNode = {} as Node;\r\n this.state = {\r\n refresh: 0,\r\n };\r\n }\r\n\r\n onChange = (nodes: Node[]) => {\r\n this.rootNode.children = nodes;\r\n this.setState({\r\n refresh: this.state.refresh + 1,\r\n });\r\n };\r\n\r\n render() {\r\n this.rebuildNodeTreeIncrementally();\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * tree node renderer\r\n * @param node data node to render\r\n * @param rest rest params\r\n */\r\n nodeRenderer = (node: IFlattenedNode, rest: any) => {\r\n let selectorNode: ReactNode;\r\n let renderSelectorNode: RenderSelectorItemFunc;\r\n\r\n if (this.props.containerConfig.renderSelectorNode) {\r\n renderSelectorNode = this.props.containerConfig.renderSelectorNode;\r\n } else {\r\n throw new Error('containerConfig.renderSelectorNode should not be null');\r\n }\r\n\r\n const { option } = node;\r\n if (this.props.isSelected(option)) {\r\n option.isSelected = true;\r\n } else {\r\n option.isSelected = false;\r\n }\r\n\r\n // eslint-disable-next-line prefer-const\r\n selectorNode = renderSelectorNode(\r\n option,\r\n {\r\n onAdd: this.props.onAdd,\r\n onRemove: this.props.onRemove,\r\n },\r\n this.props.containerConfig,\r\n this.props.i18n,\r\n this.props.classNames,\r\n this.props.hideAccountNodeArrow\r\n );\r\n\r\n return (\r\n
\r\n \r\n
{selectorNode}
\r\n
\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * Travel rootOptions and build corresponding node tree, the node tree built will be used to store tree state\r\n */\r\n buildNodeTree(option: SelectorOption): Node | undefined {\r\n if (!option.visible) {\r\n return undefined;\r\n }\r\n\r\n const node = this.buildNode(option);\r\n if (!(option instanceof SelectorExpandableOption && option !== this.props.rootOption)) {\r\n const children = option.children\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n .map((option) => {\r\n return this.buildNodeTree(option);\r\n })\r\n .filter(v => v !== undefined) as Node[];\r\n node.children = children;\r\n }\r\n\r\n return node;\r\n }\r\n\r\n buildNode(option: SelectorOption): Node {\r\n if (this.nodeCache[option.key]) {\r\n const node = this.nodeCache[option.key];\r\n node.option = option;\r\n return node;\r\n }\r\n const key = `${option.optionType}-${option.id}`;\r\n const node: Node = {\r\n id: option.id,\r\n key,\r\n name: option.name,\r\n state: {\r\n expanded: option.state && option.state.expanded,\r\n },\r\n option,\r\n };\r\n return node;\r\n }\r\n\r\n rebuildNodeTreeIncrementally() {\r\n this.nodeCache = {};\r\n this.buildNodeCache(this.rootNode);\r\n this.rootNode = this.buildNodeTree(this.props.rootOption) as Node;\r\n this.classes = buildSelectorTreeStyles({\r\n selectorTreeHeight: this.props.containerConfig.containerHeight,\r\n });\r\n }\r\n\r\n buildNodeCache(node: IFlattenedNode) {\r\n this.nodeCache[node.key] = node;\r\n if (node.children) {\r\n for (let i = 0; i < node.children.length; i++) {\r\n this.buildNodeCache(node.children[i]);\r\n }\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { List, AutoSizer, ListRowProps } from 'react-virtualized';\r\nimport { SelectorOption } from './selector-option';\r\nimport { ISelectorListProps, RenderSelectorItemFunc } from './double-list.types';\r\nimport { buildSelectorListStyles } from './styles';\r\n\r\ninterface ISelectorListState {\r\n refresh: number;\r\n}\r\n\r\nexport default class SelectorList extends Component {\r\n private classes: any;\r\n private visibleOptions: SelectorOption[];\r\n\r\n constructor(props: ISelectorListProps) {\r\n super(props);\r\n this.classes = buildSelectorListStyles({\r\n selectorListHeight: this.props.containerConfig.containerHeight,\r\n });\r\n this.state = {\r\n // eslint-disable-next-line react/no-unused-state\r\n refresh: 0,\r\n };\r\n this.visibleOptions = [];\r\n }\r\n\r\n render() {\r\n const { rootOption } = this.props;\r\n\r\n this.visibleOptions = rootOption.children.filter(option => {\r\n return option.visible;\r\n });\r\n\r\n return (\r\n
\r\n \r\n {({ width, height }) => (\r\n \r\n )}\r\n \r\n
\r\n );\r\n }\r\n\r\n private rowRenderer(rowProps: ListRowProps) {\r\n const { index, key, style } = rowProps;\r\n\r\n return (\r\n
\r\n {this.renderListNode(this.visibleOptions[index])}\r\n
\r\n );\r\n }\r\n\r\n private renderListNode(option: SelectorOption) {\r\n let renderSelectorNode: RenderSelectorItemFunc;\r\n\r\n if (this.props.containerConfig.renderSelectorNode) {\r\n renderSelectorNode = this.props.containerConfig.renderSelectorNode;\r\n } else {\r\n throw new Error('containerConfig.renderSelectorNode should not be null');\r\n }\r\n\r\n if (this.props.isSelected(option)) {\r\n option.isSelected = true;\r\n } else {\r\n option.isSelected = false;\r\n }\r\n\r\n return renderSelectorNode(\r\n option,\r\n {\r\n onAdd: this.props.onAdd,\r\n onRemove: this.props.onRemove,\r\n },\r\n this.props.containerConfig,\r\n this.props.i18n,\r\n this.props.classNames,\r\n this.props.hideAccountNodeArrow\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { UiBlocker } from '@bingads-webui-react/ui-blocker';\r\nimport { ISelectorContainerProps, SelectorContainerViewType } from './double-list.types';\r\nimport SelectorTree from './selector-tree';\r\nimport SelectorList from './selector-list';\r\n\r\nexport default class SelectorContainer extends Component {\r\n render() {\r\n let containerContent = null;\r\n\r\n if (!this.props.rootOption.childFetched || this.props.rootOption.children.length === 0) {\r\n containerContent = (\r\n
{this.props.i18n.getString(_TL_('No data available'))}
\r\n );\r\n } else if (this.props.containerConfig.containerViewType === SelectorContainerViewType.tree) {\r\n containerContent = ;\r\n } else {\r\n containerContent = ;\r\n }\r\n\r\n let containerHeader = null;\r\n if (this.props.containerConfig.renderSelectorHeader) {\r\n containerHeader = this.props.containerConfig.renderSelectorHeader(\r\n this.props.rootOption,\r\n {\r\n onAdd: this.props.onAdd,\r\n onRemove: this.props.onRemove,\r\n },\r\n this.props.containerConfig,\r\n this.props.i18n,\r\n this.props.classNames,\r\n this.props.hideAccountNodeArrow\r\n );\r\n }\r\n\r\n const { col } = this.props.containerConfig.coordinate;\r\n const { row } = this.props.containerConfig.coordinate;\r\n\r\n return (\r\n
\r\n {containerHeader}\r\n \r\n {containerContent}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { PureComponent } from 'react';\r\nimport { Col, Row } from '@bingads-webui-react/primitive';\r\nimport { ISelectorProps, ISelectorContainerConfig } from './double-list.types';\r\nimport { SelectorExpandableOption, SelectorOption, SelectorRootOption } from './selector-option';\r\nimport SelectorContainer from './selector-container';\r\n\r\ninterface ISelectorState {\r\n refresh: number;\r\n}\r\n\r\nexport default class Selector extends PureComponent {\r\n render() {\r\n const containerConfig = this.props.rootOption.containerKey === 'customerAccount' ?\r\n this.props.containerMap.customerAccount :\r\n this.props.containerMap.campaign\r\n\r\n this.confirmOptionVisiblity(this.props.rootOption, containerConfig);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n /**\r\n * check the visibility of option with optionContainerConfig\r\n * @param option option to check\r\n * @param optionContainerConfig container config the option is\r\n */\r\n confirmOptionVisiblity(option: SelectorOption, optionContainerConfig: ISelectorContainerConfig) {\r\n let childrenVisible = false;\r\n option.children.forEach(child => {\r\n if (option instanceof SelectorExpandableOption) {\r\n this.confirmOptionVisiblity(child, this.props.containerMap[option.containerKey]);\r\n } else {\r\n this.confirmOptionVisiblity(child, optionContainerConfig);\r\n }\r\n childrenVisible = childrenVisible || child.visible;\r\n });\r\n\r\n if (option instanceof SelectorRootOption) {\r\n option.visible = true;\r\n return;\r\n }\r\n\r\n const localFilter = optionContainerConfig.localFilter\r\n ? optionContainerConfig.localFilter\r\n : () => true;\r\n\r\n option.visible = childrenVisible || localFilter(option);\r\n }\r\n}\r\n","\r\ninterface ICache {\r\n [key: string]: any;\r\n}\r\n\r\nfunction union(leftArr: T[], rightArr: T[], getKey: (item: T) => string): T[] {\r\n const cache: ICache = {};\r\n const result: T[] = [];\r\n\r\n leftArr.forEach((item: T) => {\r\n if (!cache[getKey(item)]) {\r\n result.push(item);\r\n cache[getKey(item)] = item;\r\n }\r\n });\r\n\r\n rightArr.forEach((item: T) => {\r\n if (!cache[getKey(item)]) {\r\n result.push(item);\r\n cache[getKey(item)] = item;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\ninterface ISetCache {\r\n [key: string]: T;\r\n}\r\n\r\nexport class Set {\r\n protected toStringFunction: (item: T) => string;\r\n protected setCache: ISetCache;\r\n constructor(toStringFunction: (item: T) => string) {\r\n this.toStringFunction = toStringFunction;\r\n this.setCache = {};\r\n }\r\n\r\n contains(element: T): boolean {\r\n return this.setCache[this.toStringFunction(element)] !== undefined;\r\n }\r\n\r\n add(element: T): boolean {\r\n if (this.contains(element) || element === undefined || element == null) {\r\n return false;\r\n }\r\n this.setCache[this.toStringFunction(element)] = element;\r\n return true;\r\n }\r\n\r\n remove(element: T): boolean {\r\n if (!this.contains(element)) {\r\n return false;\r\n }\r\n delete this.setCache[this.toStringFunction(element)];\r\n return true;\r\n }\r\n\r\n isEmpty(): boolean {\r\n return Object.keys(this.setCache).length === 0;\r\n }\r\n\r\n size(): number {\r\n return Object.keys(this.setCache).length;\r\n }\r\n\r\n forEach(callback: (item: T) => void): void {\r\n Object.keys(this.setCache).forEach((key: string) => {\r\n return callback(this.setCache[key]);\r\n });\r\n }\r\n\r\n isSubsetOf(otherSet: Set): boolean {\r\n if (this.size() > otherSet.size()) {\r\n return false;\r\n }\r\n\r\n let isSub = true;\r\n // eslint-disable-next-line consistent-return\r\n this.forEach(element => {\r\n if (!otherSet.contains(element)) {\r\n isSub = false;\r\n return false;\r\n }\r\n });\r\n return isSub;\r\n }\r\n\r\n difference(otherSet: Set): void {\r\n const set = this;\r\n otherSet.forEach((element: T): boolean => {\r\n set.remove(element);\r\n return true;\r\n });\r\n }\r\n\r\n union(otherSet: Set): void {\r\n const set = this;\r\n otherSet.forEach((element: T): boolean => {\r\n set.add(element);\r\n return true;\r\n });\r\n }\r\n\r\n toArray(): T[] {\r\n return Object.keys(this.setCache).map((key: string) => {\r\n return this.setCache[key];\r\n });\r\n }\r\n}\r\n\r\nexport const utils = {\r\n union,\r\n};\r\n","import React, { Component } from 'react';\r\nimport _ from 'underscore';\r\nimport { Col, Row } from '@bingads-webui-react/primitive';\r\nimport { IDoubleListProps } from './double-list.types';\r\nimport Selector from './selector';\r\nimport { SelectorOption } from './selector-option';\r\nimport { utils, Set } from './utils';\r\n\r\ninterface IDoubleListState {\r\n refresh: number;\r\n}\r\n\r\nexport class DoubleList extends Component {\r\n refreshEnabled: boolean;\r\n selected: SelectorOption[];\r\n selectedSet: Set;\r\n\r\n constructor(props: IDoubleListProps) {\r\n super(props);\r\n this.selected = this.props.defaultSelectedOptions || [];\r\n this.selectedSet = this.buildOptionSet(this.prepareDefaultSelectedOptions(this.selected));\r\n this.state = {\r\n refresh: 0,\r\n };\r\n this.refreshEnabled = true;\r\n }\r\n\r\n render() {\r\n const SelectorBox = this.props.selectorBox;\r\n const ResultBox = this.props.resultBox;\r\n\r\n // @ts-ignore\r\n return (\r\n
\r\n \r\n \r\n {/* @ts-ignore */}\r\n \r\n \r\n \r\n \r\n \r\n {/* @ts-ignore */}\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n onAdd = (newSelected: SelectorOption[] | SelectorOption) => {\r\n if (newSelected instanceof SelectorOption) {\r\n if (newSelected.deepness === 0) {\r\n newSelected = newSelected.children;\r\n } else {\r\n const temp = [newSelected];\r\n newSelected = temp;\r\n }\r\n }\r\n\r\n const originSelected = [...this.selected];\r\n newSelected = this.unionSelected(originSelected, newSelected);\r\n newSelected = this.bubbleSelected(newSelected);\r\n\r\n this.updateSelected(newSelected);\r\n this.refresh();\r\n };\r\n\r\n onRemove = (unselected: SelectorOption[] | SelectorOption) => {\r\n if (unselected instanceof SelectorOption) {\r\n const temp = [unselected];\r\n unselected = temp;\r\n }\r\n\r\n let selected: SelectorOption[] = [...this.selected];\r\n selected = this.removeUnselected(selected, unselected);\r\n\r\n this.updateSelected(selected);\r\n this.refresh();\r\n };\r\n\r\n removeAll = () => {\r\n this.updateSelected([]);\r\n this.refresh();\r\n };\r\n\r\n /**\r\n * Merge rightMap into leftMap\r\n * @param leftMap the left selectedMap to merge to\r\n * @param rightMap the right selectedMap to merge\r\n */\r\n private unionSelected(leftOptionList: SelectorOption[], rightOptionList: SelectorOption[]) {\r\n return utils.union(leftOptionList, rightOptionList, (option: SelectorOption) => {\r\n return option.key;\r\n });\r\n }\r\n\r\n /**\r\n * If one option's children are all selected, then try to add this option to @param selected\r\n * and remove its all children from @param selected\r\n *\r\n * If one option is in @param selected, means that all its children is selected,\r\n * then remove all its children from @param selected\r\n *\r\n * @param selected the selected option list to bubble\r\n */\r\n private bubbleSelected(selected: SelectorOption[]) {\r\n // build option set for each deepness\r\n const selectedOptionSetList: Set[] = this.buildSelectedSetByDeepness(selected);\r\n\r\n // iterate from the maximum deepness option to minimum deepness option to\r\n // find whether its sibling is all selected\r\n // if true, then remove all of them and add their parent to selectedOptionList\r\n for (let i = selectedOptionSetList.length - 1; i >= 0; i--) {\r\n const optionSet = selectedOptionSetList[i];\r\n const processedSet = this.buildOptionSet();\r\n const optionArr = optionSet.toArray();\r\n\r\n for (let j = 0; j < optionArr.length; j++) {\r\n const option = optionArr[j];\r\n\r\n // this option is handled before\r\n if (processedSet.contains(option) || !option.parent) {\r\n // eslint-disable-next-line no-continue\r\n continue;\r\n }\r\n\r\n const parent = option.parent as SelectorOption;\r\n\r\n // if this option's parent is in selected too, then remove all its children from selected\r\n if (this.isAncestorSelected(option, selectedOptionSetList)) {\r\n const childrenSet = this.buildOptionSet(parent.children);\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n selected = selected.filter((option) => {\r\n return !childrenSet.contains(option);\r\n });\r\n\r\n optionSet.difference(childrenSet);\r\n processedSet.union(childrenSet);\r\n\r\n // eslint-disable-next-line no-continue\r\n continue;\r\n }\r\n\r\n // determine whether or not this option's parent should be checked\r\n // check if option.parent.children are in current optionSet\r\n // if true, then pop its parernt to @selected option list and remove all its siblings from selected\r\n // if not, ignore it\r\n const childrenSet = this.buildOptionSet(parent.children);\r\n\r\n // FixMe: Pagination is not supported yet\r\n if (childrenSet.isSubsetOf(optionSet)) {\r\n if (i > 0 && parent.childFetched && parent.deepness !== 0) {\r\n // add parent to original selected and remove all its children from selected\r\n selected.push(parent);\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n selected = selected.filter((option) => {\r\n return !childrenSet.contains(option);\r\n });\r\n // add parent to the set to check in next iteration\r\n selectedOptionSetList[i - 1].add(parent);\r\n }\r\n }\r\n\r\n optionSet.difference(childrenSet);\r\n processedSet.union(childrenSet);\r\n }\r\n }\r\n\r\n return selected;\r\n }\r\n\r\n /**\r\n * If one option's parent been selected\r\n * @param option selector option\r\n * @param selectedOptionSetList selected option set group by deepness\r\n */\r\n private isAncestorSelected(option: SelectorOption, selectedOptionSetList: Set[]): boolean {\r\n let deepness = option.deepness - 1;\r\n let { parent } = option;\r\n\r\n while (parent && deepness >= 0) {\r\n const optionSet = selectedOptionSetList[deepness];\r\n if (optionSet.contains(parent)) {\r\n return true;\r\n }\r\n deepness--;\r\n parent = parent.parent;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * remove unselected from selected\r\n *\r\n * if one option in unselected, but its parent is in @param selected,\r\n * then try to remove its parent from selected and add all its sibling back to selected\r\n *\r\n * @param selected existing selected options\r\n * @param unselected optins to remove\r\n *\r\n * @returns all selected options expcept for allt he options removed\r\n */\r\n private removeUnselected(selected: SelectorOption[], unselected: SelectorOption[]): SelectorOption[] {\r\n unselected.forEach((unselectedOption) => {\r\n const res: SelectorOption[] | boolean = this.removeOneUnselected(selected, unselectedOption);\r\n if (res) {\r\n selected = res as SelectorOption[];\r\n }\r\n });\r\n\r\n return selected;\r\n }\r\n\r\n /**\r\n * Remove one option from selected\r\n * @param selected\r\n * @param unselectedOption\r\n * @returns selected that is processed if unselectedOption is valid, or return false for unexisted unselectedOption\r\n */\r\n private removeOneUnselected(\r\n selected: SelectorOption[],\r\n unselectedOption: SelectorOption | undefined\r\n ): SelectorOption[] | boolean {\r\n if (!unselectedOption) {\r\n return false;\r\n }\r\n\r\n // Found the option to be removed then remove it directly\r\n if (this.isOptionInList(unselectedOption, selected)) {\r\n selected = selected.filter((o) => {\r\n return o.key !== unselectedOption.key;\r\n });\r\n } else {\r\n const res = this.removeOneUnselected(selected, unselectedOption.parent);\r\n\r\n if (!res) {\r\n return false;\r\n }\r\n selected = res as SelectorOption[];\r\n\r\n\r\n const { parent } = unselectedOption;\r\n if (parent) {\r\n let children: SelectorOption[] = [...parent.children];\r\n children = children.filter((o) => {\r\n return o.key !== unselectedOption.key;\r\n });\r\n\r\n selected = utils.union(selected, children, (item) => {\r\n return item.key;\r\n });\r\n }\r\n }\r\n\r\n return selected;\r\n }\r\n\r\n private isOptionInList(option: SelectorOption, optionList: SelectorOption[]) {\r\n const res = _.findIndex(optionList, (item) => {\r\n return item.key === option.key;\r\n });\r\n\r\n if (res !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private prepareDefaultSelectedOptions(defaultOptions: SelectorOption[]) {\r\n this.disableRefresh();\r\n defaultOptions.forEach((option) => {\r\n this.onAdd(option);\r\n });\r\n this.enableRefresh();\r\n return this.selected;\r\n }\r\n\r\n /**\r\n * build option set\r\n */\r\n private buildOptionSet = (options?: SelectorOption[]) => {\r\n const set = new Set((item: SelectorOption) => {\r\n return item.key;\r\n });\r\n\r\n if (options) {\r\n options.forEach((option) => {\r\n set.add(option);\r\n });\r\n }\r\n\r\n return set;\r\n };\r\n\r\n private buildSelectedSetByDeepness(selected: SelectorOption[]): Set[] {\r\n // build option set for each deepness\r\n const optionSetList: Set[] = [];\r\n selected.forEach((option: SelectorOption) => {\r\n let optionSet = optionSetList[option.deepness];\r\n if (!optionSet) {\r\n optionSet = this.buildOptionSet();\r\n optionSetList[option.deepness] = optionSet;\r\n }\r\n optionSet.add(option);\r\n });\r\n\r\n // in case some deepness's optionSet is undefined, replace undefined with empty set\r\n for (let i = 0; i < optionSetList.length; i++) {\r\n if (!optionSetList[i]) {\r\n optionSetList[i] = this.buildOptionSet();\r\n }\r\n }\r\n\r\n return optionSetList;\r\n }\r\n\r\n private isSelected = (option: SelectorOption | undefined): boolean => {\r\n const set = this.selectedSet;\r\n while (option) {\r\n if (set.contains(option)) {\r\n return true;\r\n }\r\n option = option.parent;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n private updateSelected(selected: SelectorOption[]) {\r\n this.selected = selected;\r\n this.selectedSet = this.buildOptionSet(selected);\r\n this.props.onChange!(selected);\r\n }\r\n\r\n refresh() {\r\n if (this.refreshEnabled) {\r\n this.setState({\r\n refresh: this.state.refresh + 1,\r\n });\r\n }\r\n }\r\n\r\n disableRefresh() {\r\n this.refreshEnabled = false;\r\n }\r\n\r\n enableRefresh() {\r\n this.refreshEnabled = true;\r\n }\r\n}\r\n","import jss from 'jss';\r\n// @ts-ignore\r\nimport preset from 'jss-preset-default';\r\nimport _ from 'underscore';\r\n\r\njss.setup(preset() as any);\r\n\r\nexport const sharedBasicStyle = {\r\n doubleListHeight: 450,\r\n bingColor: '#007daa',\r\n doubleListBackgroundColor: '#f2f2f2',\r\n containerBorder: '1px solid #bbbbbb',\r\n containerHegiht: 450 - 130,\r\n resultListHeight: 450 - 90,\r\n};\r\n\r\nconst headerStyle = {\r\n backgroundColor: sharedBasicStyle.doubleListBackgroundColor,\r\n height: 30,\r\n padding: '8px 8px',\r\n fontWeight: 'bold',\r\n overflow: 'hidden',\r\n};\r\n\r\nconst styles = {\r\n maxLimitContainer: {\r\n paddingBottom: '8px',\r\n paddingLeft: '8px',\r\n clear: 'both',\r\n color: 'red',\r\n },\r\n doubleList: {\r\n width: 832,\r\n height: sharedBasicStyle.doubleListHeight,\r\n },\r\n selectorBox: {\r\n height: sharedBasicStyle.doubleListHeight,\r\n border: sharedBasicStyle.containerBorder,\r\n paddingRight: -15,\r\n '& .search-box__input-group': {\r\n position: 'relative',\r\n },\r\n '& .search-box__input': {\r\n paddingRight: '206px',\r\n },\r\n '& .blocker-global': {\r\n position: 'absolute',\r\n },\r\n '& .blocker-indicator': {\r\n position: 'absolute',\r\n top: '100px',\r\n right: '150px',\r\n },\r\n },\r\n selectorTreeNode: {\r\n padding: '3px 17px 0 0',\r\n display: 'flex',\r\n '&.disabled': {\r\n opacity: 0.5,\r\n '& .accountNode': {\r\n cursor: 'not-allowed',\r\n },\r\n },\r\n '& span': {\r\n flex: 1,\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n },\r\n '& span:nth-last-child(2)': {\r\n flex: 2,\r\n },\r\n '& span:first-child': {\r\n flex: 2,\r\n },\r\n },\r\n selectorNodeArrow: {\r\n position: 'absolute',\r\n right: '0px',\r\n fontWeight: 'bold',\r\n cursor: 'pointer',\r\n paddingRight: 5,\r\n '&.disabled': {\r\n cursor: 'not-allowed',\r\n },\r\n },\r\n selectorListNode: {\r\n padding: '3px 0 10px 10px',\r\n },\r\n addAll: {\r\n cursor: 'pointer',\r\n padding: '8px 0',\r\n },\r\n addAllText: {\r\n color: sharedBasicStyle.bingColor,\r\n },\r\n\r\n selectorAccountContainerHeader: headerStyle,\r\n selectorCampaignContainerHeader: headerStyle,\r\n selectorBoxHeader: headerStyle,\r\n searchListHeader: {\r\n display: 'flex',\r\n paddingRight: '16px',\r\n paddingBottom: '2px',\r\n marginTop: '5px',\r\n color: '#333',\r\n fontWeight: 'bold',\r\n borderBottom: '1px solid lightgray',\r\n '& span': {\r\n flex: 1,\r\n },\r\n '& span:last-child': {\r\n flex: 2,\r\n },\r\n '& span:first-child': {\r\n flex: 2,\r\n },\r\n },\r\n selectorDrillUpButton: {\r\n cursor: 'pointer',\r\n margin: '0 5px 0 0',\r\n },\r\n clearIcon: {\r\n position: 'absolute',\r\n right: '49px',\r\n top: '47px',\r\n },\r\n selectorNodeOverflowSafeText: {\r\n maxWidth: '90%',\r\n display: 'inline-block',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n },\r\n selectorAccountNodeText: {\r\n color: '#007daa',\r\n cursor: 'pointer',\r\n },\r\n selectedNodeArrow: {\r\n color: '#aaa',\r\n },\r\n accountNodeSelectedText: {\r\n color: 'gray',\r\n cursor: 'pointer',\r\n },\r\n resultListBox: {\r\n border: sharedBasicStyle.containerBorder,\r\n height: sharedBasicStyle.doubleListHeight,\r\n padding: '0px !important',\r\n },\r\n resultListHeader: headerStyle,\r\n resultListItemArrow: {\r\n float: 'left',\r\n padding: '0 10px',\r\n cursor: 'pointer',\r\n },\r\n resultList: {\r\n paddingTop: 3,\r\n height: sharedBasicStyle.resultListHeight,\r\n overflow: 'auto',\r\n },\r\n resultListItem: {\r\n padding: '0 10px',\r\n paddingBottom: 10,\r\n },\r\n resultListItemContent: {\r\n padding: '5px 0',\r\n backgroundColor: '#e7f0f6',\r\n border: '1px solid #00719a',\r\n },\r\n resultParentChainItem: {\r\n display: 'inline-block',\r\n position: 'relative',\r\n paddingRight: '10px',\r\n paddingLeft: '3px',\r\n verticalAlign: 'top',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n parentArrow: {\r\n position: 'absolute',\r\n right: '0',\r\n },\r\n itemName: {\r\n paddingLeft: '3px',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n accountParent: {\r\n position: 'relative',\r\n paddingLeft: '3px',\r\n paddingRight: '10px',\r\n display: 'inline-block',\r\n verticalAlign: 'top',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n },\r\n removeAll: {\r\n cursor: 'pointer',\r\n padding: '15px 10px 10px 10px',\r\n padidngTop: 15,\r\n },\r\n removeAllText: {\r\n color: sharedBasicStyle.bingColor,\r\n },\r\n hidden: {\r\n display: 'none',\r\n },\r\n scopeSelector: {\r\n position: 'absolute',\r\n width: '155px',\r\n right: '70px',\r\n top: '41px',\r\n },\r\n};\r\n\r\nconst { classes } = jss.createStyleSheet(styles as any).attach();\r\nexport default classes;\r\nexport const getStyle = function (components: any, core: any) {\r\n if (!core.isUIVnext) {\r\n return styles;\r\n }\r\n return {\r\n ...styles,\r\n doubleList: _.extend(styles.doubleList, {\r\n height: '475px',\r\n }),\r\n selectorBox: _.extend(styles.selectorBox, {\r\n height: '475px',\r\n '& .search-box__icon': {\r\n '&:focus': {\r\n outline: 'none',\r\n },\r\n fontFamily: 'MsAds MDL2 Assets',\r\n position: 'absolute',\r\n top: '6px',\r\n right: '13px',\r\n '&:before': {\r\n content: '\"\\\\E721\"',\r\n },\r\n },\r\n '& .search-box__input': {\r\n paddingRight: '219px',\r\n fontSize: '13px',\r\n },\r\n }),\r\n selectorBoxHeader: _.extend(styles.selectorBoxHeader, {\r\n height: 'auto',\r\n }),\r\n selectorCampaignContainerHeader: _.extend(styles.selectorCampaignContainerHeader, {\r\n height: 'auto',\r\n }),\r\n resultListBox: _.extend(styles.resultListBox, {\r\n height: '475px',\r\n }),\r\n resultList: _.extend(styles.resultList, {\r\n height: '385px',\r\n }),\r\n resultListHeader: _.extend(styles.resultListHeader, {\r\n height: 'auto',\r\n }),\r\n clearIcon: _.extend(styles.clearIcon, {\r\n top: '53px',\r\n right: '61px',\r\n fontSize: '16px',\r\n fontFamily: 'MsAds MDL2 Assets',\r\n color: '#605e5c',\r\n cursor: 'pointer',\r\n '&:before': {\r\n content: '\"\\\\E711\"',\r\n },\r\n }),\r\n selectorListNode: _.extend(styles.selectorListNode, {\r\n '& .glyph-shift-right': {\r\n fontFamily: 'MsAds MDL2 Assets',\r\n '&:before': {\r\n content: '\"\\\\EDBF\"',\r\n },\r\n },\r\n }),\r\n resultListItemArrow: _.extend(styles.resultListItemArrow, {\r\n height: '25px',\r\n }),\r\n scopeSelector: _.extend(styles.scopeSelector, {\r\n right: '87px',\r\n top: '48px',\r\n }),\r\n radioArea: {\r\n '& .row': {\r\n marginBottom: '20px',\r\n },\r\n '& .radio label': {\r\n paddingLeft: '25px !important',\r\n },\r\n '& .radio label > input[type=radio]': {\r\n marginLeft: '-25px !important',\r\n },\r\n },\r\n selectorList: {\r\n height: '100px',\r\n },\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport _ from 'underscore';\r\nimport { Glyphicon } from '@bingads-webui-react/primitive';\r\n\r\ninterface IGlyphiconWrapperProps {\r\n // eslint-disable-next-line react/no-unused-prop-types\r\n env?: 'demo' | 'prod';\r\n glyph: string;\r\n baIcon: boolean;\r\n isUINext?: boolean;\r\n}\r\n\r\n\r\nconst getNextIcon = (glyph: string) => {\r\n return _.result({\r\n 'shift-left': 'ba-DoubleChevronLeft',\r\n 'shift-right': 'ba-DoubleChevronRight',\r\n }, glyph, '');\r\n};\r\n\r\nexport class GlyphiconWrapper extends Component {\r\n static defaultProps = {\r\n env: 'demo',\r\n isUINext: false,\r\n };\r\n\r\n render() {\r\n const ajustStyle = {\r\n display: 'inline-block',\r\n verticalAlign: '-1px',\r\n margin: '0, 5px',\r\n };\r\n\r\n if (this.props.isUINext) {\r\n return \r\n }\r\n\r\n if (this.props.baIcon) {\r\n return ;\r\n }\r\n return ;\r\n }\r\n}\r\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\r\n/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\nimport classNames from 'classnames';\r\nimport React from 'react';\r\nimport { ClassNames, Ii18n } from '../double-list/double-list.types';\r\nimport {\r\n ISelectorContainerConfig,\r\n SelectorContainerViewType,\r\n SelectorOption,\r\n IRenderSelectorNodeOps,\r\n SelectorExpandableOption\r\n} from '../double-list';\r\nimport { sharedBasicStyle } from './styles';\r\nimport {\r\n AccountCampaignContainerType,\r\n AccountCampaignOptionType, statusMap,\r\n ScopeFilterLevelType,\r\n } from './account-campaign-selector.types';\r\nimport { AccountCampaignDataStore } from './account-campaign-data-store';\r\nimport { GlyphiconWrapper } from './glyphicon-wrapper';\r\n\r\nfunction createContainerConfig(store: AccountCampaignDataStore) {\r\n const isInternalSearch = store.state.isOnApiSearch && store.state.isInternalReport;\r\n\r\n const renderCustomerAccountSelectorNode = (\r\n option: SelectorOption,\r\n ops: IRenderSelectorNodeOps,\r\n config: ISelectorContainerConfig,\r\n i18n: Ii18n,\r\n classes: ClassNames\r\n ) => {\r\n let selectorNodeText = '';\r\n let selectedNodeArrow = '';\r\n let lastColumnInfo = '';\r\n if (option.optionType === AccountCampaignOptionType.account && !store.state.forceAccountScope && !isInternalSearch) {\r\n selectorNodeText = classes.selectorAccountNodeText;\r\n }\r\n if (option.isSelected) {\r\n selectedNodeArrow = classes.selectedNodeArrow;\r\n }\r\n if (isInternalSearch) {\r\n lastColumnInfo = option.optionType === AccountCampaignOptionType.customer ? option.extra.serviceLevel : option.extra.advertiserCustomerName;\r\n }\r\n\r\n return (\r\n
\r\n {\r\n if (option.disabled) {\r\n return;\r\n }\r\n\r\n if (option.optionType === AccountCampaignOptionType.account && !store.state.forceAccountScope && !isInternalSearch) {\r\n const expandableOption = option as SelectorExpandableOption;\r\n store.drillDown(expandableOption);\r\n }\r\n }}\r\n className={`${selectorNodeText} ${option.optionType === AccountCampaignOptionType.account ? 'accountNode' : 'customerNode'}`}\r\n title={option.name}\r\n data-id={option.id}\r\n >\r\n {option.name} {\r\n (option.extra && option.extra.status && option.optionType === AccountCampaignOptionType.account) ?\r\n `(${i18n.getString(statusMap[option.extra.status])})` : ''\r\n }\r\n \r\n {\r\n lastColumnInfo ?\r\n \r\n {option.id}\r\n {lastColumnInfo}\r\n \r\n : null\r\n }\r\n { {\r\n if (option.disabled) {\r\n return;\r\n }\r\n ops.onAdd(option);\r\n }}\r\n className={`${classes.selectorNodeArrow} ${selectedNodeArrow} selectorNodeArrow ${option.disabled ? 'disabled' : 'enabled'}`}\r\n >\r\n \r\n }\r\n
\r\n );\r\n };\r\n\r\n const renderCampaignSelectorNode = (\r\n option: SelectorOption,\r\n ops: IRenderSelectorNodeOps,\r\n config: ISelectorContainerConfig,\r\n i18n: Ii18n,\r\n classes: ClassNames\r\n ) => {\r\n let selectedNodeArrow = '';\r\n\r\n if (option.isSelected) {\r\n selectedNodeArrow = classes.selectedNodeArrow;\r\n }\r\n\r\n return (\r\n
\r\n \r\n {option.name} {\r\n (option.extra && option.extra.status) ?\r\n `(${i18n.getString(statusMap[option.extra.status])})` : ''\r\n }\r\n \r\n {\r\n ops.onAdd(option);\r\n }}\r\n className={`${classes.selectorNodeArrow} ${selectedNodeArrow} selectorNodeArrow`}\r\n >\r\n \r\n \r\n
\r\n );\r\n };\r\n\r\n const renderAccountSelectorHeader = (\r\n option: SelectorOption,\r\n ops: IRenderSelectorNodeOps,\r\n config: ISelectorContainerConfig,\r\n i18n: Ii18n,\r\n classes: ClassNames,\r\n hideAccountNodeArrow: boolean = false\r\n ) => {\r\n let headerStr = hideAccountNodeArrow ? i18n.getString(_TL_('All accounts')) : i18n.getString(_TL_('All manager accounts and accounts'));\r\n if (store.state.scopeFilterLevel === ScopeFilterLevelType.Customer) {\r\n headerStr = i18n.getString(_TL_('All manager accounts'));\r\n }\r\n\r\n return (\r\n
\r\n
ops.onAdd(option)} className={`${classes.addAll}`}>\r\n {i18n.getString(_TL_('Add all'))}{' '}\r\n \r\n
\r\n
{headerStr}
\r\n {\r\n store.state.isOnApiSearch && store.state.isInternalReport && option.children.length > 0 ?\r\n
\r\n {\r\n option.children[0].optionType === AccountCampaignOptionType.account ?\r\n \r\n {i18n.getString(_TL_('Account name'))}\r\n {i18n.getString(_TL_('AID'))}\r\n {i18n.getString(_TL_('Manager account name'))}\r\n :\r\n \r\n {i18n.getString(_TL_('Manager account name'))}\r\n {i18n.getString(_TL_('CID'))}\r\n {i18n.getString(_TL_('Service level'))}\r\n \r\n }\r\n
\r\n : null\r\n }\r\n
\r\n );\r\n };\r\n\r\n const renderCampaignSelectorHeader = (\r\n option: SelectorOption,\r\n ops: IRenderSelectorNodeOps,\r\n config: ISelectorContainerConfig,\r\n i18n: Ii18n,\r\n classes: ClassNames\r\n ) => {\r\n const showCampaignsWithinCurrentAccount = (store.state.scopeFilterLevel === ScopeFilterLevelType.Campaign) && store.state.accountId;\r\n return (\r\n
\r\n
ops.onAdd(option)} className={classes.addAll} tabIndex={0}>\r\n {i18n.getString('Add all')}{' '}\r\n \r\n
\r\n
\r\n {\r\n !showCampaignsWithinCurrentAccount &&\r\n \r\n \r\n \r\n }\r\n {\r\n showCampaignsWithinCurrentAccount ?\r\n i18n.getString(_TL_('Campaigns for current account')) :\r\n `${i18n.getString(_TL_('Campaigns for'))} ${option.name}`\r\n }\r\n
\r\n
\r\n );\r\n };\r\n\r\n const localFilter = (option: SelectorOption) => {\r\n if (store.state.isOnApiSearch && option.optionType !== AccountCampaignOptionType.campaign) {\r\n return true\r\n }\r\n\r\n const searchTerm = store.state.searchTerm.toLowerCase();\r\n return [option.name, option.id, option.number].some(data => {\r\n return (data || '').toLowerCase().indexOf(searchTerm) > -1\r\n });\r\n };\r\n const getContainerHeight = () => {\r\n let height = sharedBasicStyle.containerHegiht\r\n if (store.state.isInternalReport) {\r\n if (store.state.isOnApiSearch) { // will show api search result\r\n height -= 22;\r\n }\r\n }\r\n return height\r\n }\r\n\r\n const customerAccountContainer: ISelectorContainerConfig = {\r\n containerKey: AccountCampaignContainerType.customerAccount,\r\n scopeFilterLevel: store.state.scopeFilterLevel,\r\n isInternalReport: store.state.isInternalReport,\r\n isReportingUIPhaseNext: store.state.isReportingUIPhaseNext,\r\n scopeSelectorLevel: store.state.scopeSelectorLevel,\r\n containerViewType: SelectorContainerViewType.tree,\r\n coordinate: {\r\n row: 0,\r\n col: 0,\r\n },\r\n renderSelectorNode: renderCustomerAccountSelectorNode,\r\n renderSelectorHeader: renderAccountSelectorHeader,\r\n searchTerm: store.state.searchTerm,\r\n campaignSearchStr: store.state.campaignSearchStr,\r\n customerAccountSearchStr: store.state.customerAccountSearchStr,\r\n onQueryCustomerAccountChange: store.onQueryCustomerAccountChange,\r\n onQueryCampaignChange: store.onQueryCampaignChange,\r\n onSearchCustomerAccount: store.searchCustomerAccount,\r\n onSearchCampaign: store.searchCampaign,\r\n onClearSearchCampaign: store.clearSearchCampaign,\r\n onClearSearchCustomerAccount: store.clearSearchCustomerAccount,\r\n onSelectScopeLevel: store.selectScopeLevel,\r\n localFilter,\r\n containerHeight: getContainerHeight(),\r\n rowHeight: store.state.isReportingUIPhaseNext ? 30 : 20,\r\n isLoading: store.state.isLoading,\r\n };\r\n\r\n const campaignContainer: ISelectorContainerConfig = {\r\n containerKey: AccountCampaignContainerType.campaign,\r\n containerViewType: SelectorContainerViewType.list,\r\n isReportingUIPhaseNext: store.state.isReportingUIPhaseNext,\r\n coordinate: {\r\n row: 1,\r\n col: 0,\r\n },\r\n renderSelectorNode: renderCampaignSelectorNode,\r\n renderSelectorHeader: renderCampaignSelectorHeader,\r\n searchTerm: store.state.searchTerm,\r\n campaignSearchStr: store.state.campaignSearchStr,\r\n customerAccountSearchStr: store.state.customerAccountSearchStr,\r\n onClearSearchCampaign: store.clearSearchCampaign,\r\n onClearSearchCustomerAccount: store.clearSearchCustomerAccount,\r\n onQueryCustomerAccountChange: store.onQueryCustomerAccountChange,\r\n onQueryCampaignChange: store.onQueryCampaignChange,\r\n onSearchCustomerAccount: store.searchCustomerAccount,\r\n onSearchCampaign: store.searchCampaign,\r\n onSelectScopeLevel: () => null,\r\n localFilter,\r\n containerHeight: sharedBasicStyle.containerHegiht,\r\n rowHeight: store.state.isReportingUIPhaseNext ? 30 : 20,\r\n isLoading: store.state.isLoading,\r\n };\r\n\r\n return {\r\n customerAccount: customerAccountContainer,\r\n campaign: campaignContainer,\r\n };\r\n}\r\n\r\nexport class ContainerConfigFactory {\r\n static create(store: AccountCampaignDataStore) {\r\n return createContainerConfig(store);\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\n/* eslint-disable no-mixed-operators */\r\nimport { ClassNames, Ii18n } from '../double-list/double-list.types';\r\nimport { IResultBoxProps, SelectorOption, SelectorRootOption } from '../double-list';\r\n\r\nimport { AccountCampaignOptionType, statusMap } from './account-campaign-selector.types';\r\nimport { GlyphiconWrapper } from './glyphicon-wrapper';\r\n\r\nexport default class AccountCampaignResultBox extends Component {\r\n // eslint-disable-next-line react/sort-comp\r\n render() {\r\n const { i18n } = this.props;\r\n const classes = this.props.classNames;\r\n const isUIVnext = this.props.isReportingUIPhaseNext;\r\n let { selected } = this.props;\r\n if (selected.length === 1 && selected[0] instanceof SelectorRootOption) {\r\n selected = selected[0].children;\r\n }\r\n\r\n selected = [...selected];\r\n return (\r\n
\r\n
{i18n.getString(_TL_('Selected items'))}
\r\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\r\n
\r\n {' '}\r\n {i18n.getString(_TL_('Remove all'))}\r\n
\r\n
\r\n {selected.reverse().map(option => this.renderResultNode(option, i18n, classes, isUIVnext))}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderResultNode(option: SelectorOption, i18n: Ii18n, classes: ClassNames, isUIVnext: boolean) {\r\n return (\r\n
\r\n
\r\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\r\n this.props.onRemove(option)}>\r\n \r\n \r\n {this.renderParentChain(option, classes)}\r\n
\r\n {option.name} {\r\n (option.extra && option.optionType === AccountCampaignOptionType.account) ?\r\n `(${i18n.getString(statusMap[option.extra.status])})` : ''\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderParentChain(option: SelectorOption, classes: ClassNames) {\r\n let parentChain: SelectorOption[] = [];\r\n\r\n let parentOption = option.parent;\r\n let childOption = option;\r\n while (parentOption && !(parentOption instanceof SelectorRootOption)) {\r\n parentChain.push(parentOption);\r\n childOption = parentOption;\r\n parentOption = childOption.parent;\r\n }\r\n\r\n parentChain = parentChain.reverse();\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n const jonitParentStr = parentChain.reduce((joint, option) => joint + option.name + (option.optionType === AccountCampaignOptionType.account ? '' : ' > '), '');\r\n return (\r\n \r\n {/* eslint-disable-next-line @typescript-eslint/no-shadow */}\r\n {parentChain.map((option) => {\r\n if (option.optionType === AccountCampaignOptionType.account) {\r\n return (\r\n \r\n {option.name}\r\n > \r\n
\r\n );\r\n }\r\n return (\r\n \r\n \r\n {option.name}\r\n > \r\n \r\n
\r\n );\r\n })}\r\n \r\n );\r\n }\r\n}\r\n","import { SearchBox } from '@bingads-webui-react/search-box';\r\nimport { Select } from '@bingads-webui-react/primitive';\r\nimport React, { Component } from 'react';\r\nimport { ISelectorBoxProps } from '../double-list';\r\nimport { ScopeSelectorLevelType, ScopeFilterLevelType } from './account-campaign-selector.types';\r\n\r\nexport default class AccountCampaignSelectorBox extends Component {\r\n onSearch = async (newValue: any) => {\r\n const serachText = newValue.trim();\r\n if (this.props.selectorBoxConfig.containerKey === 'campaign') {\r\n this.props.selectorBoxConfig.onSearchCampaign(serachText);\r\n } else {\r\n this.props.selectorBoxConfig.onSearchCustomerAccount(serachText);\r\n }\r\n };\r\n\r\n onQueryChange = (newValue: any) => {\r\n if (this.props.selectorBoxConfig.containerKey === 'campaign') {\r\n this.props.selectorBoxConfig.onQueryCampaignChange(newValue);\r\n } else {\r\n this.props.selectorBoxConfig.onQueryCustomerAccountChange(newValue);\r\n }\r\n };\r\n\r\n onClearSearch = () => {\r\n if (this.props.selectorBoxConfig.containerKey === 'campaign') {\r\n this.props.selectorBoxConfig.onClearSearchCampaign();\r\n } else {\r\n this.props.selectorBoxConfig.onClearSearchCustomerAccount();\r\n }\r\n };\r\n\r\n onSelect = (event: any) => {\r\n this.props.selectorBoxConfig.onSelectScopeLevel(event.target.value)\r\n }\r\n\r\n getPlaceholder = () => {\r\n const {\r\n i18n,\r\n selectorBoxConfig: {\r\n isInternalReport,\r\n scopeFilterLevel,\r\n scopeSelectorLevel,\r\n containerKey,\r\n },\r\n } = this.props\r\n let placeholder = '';\r\n if (containerKey === 'campaign') {\r\n placeholder = i18n.getString(_TL_('Search campaign'));\r\n return placeholder;\r\n }\r\n\r\n if (isInternalReport) {\r\n placeholder = scopeSelectorLevel === ScopeSelectorLevelType.Customer ?\r\n i18n.getString(_TL_('Search manager account')) : `${i18n.getString(_TL_('Search account'))} (${i18n.getString(_TL_('3 to 1000 characters'))})`\r\n return placeholder;\r\n }\r\n\r\n placeholder = scopeFilterLevel === ScopeFilterLevelType.Customer ?\r\n i18n.getString(_TL_('Search manager account')) : i18n.getString(_TL_('Search manager account, account'));\r\n return placeholder;\r\n }\r\n render() {\r\n const {\r\n i18n,\r\n selectorBoxConfig: {\r\n isInternalReport,\r\n scopeFilterLevel,\r\n scopeSelectorLevel,\r\n customerAccountSearchStr,\r\n campaignSearchStr,\r\n containerKey,\r\n },\r\n hideAccountSearchBar,\r\n classNames,\r\n rootOption,\r\n } = this.props\r\n\r\n const value = containerKey === 'campaign' ?\r\n campaignSearchStr : customerAccountSearchStr\r\n\r\n const showSearchBar = !(hideAccountSearchBar && rootOption.containerKey === 'customerAccount');\r\n return (\r\n
\r\n
{i18n.getString(_TL_('Available items'))}
\r\n \r\n { showSearchBar && }\r\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\r\n {showSearchBar && }\r\n\r\n {\r\n isInternalReport && scopeFilterLevel !== ScopeFilterLevelType.Customer ?\r\n
\r\n \r\n
:\r\n null\r\n }\r\n
{this.props.children}
\r\n
\r\n \r\n );\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-shadow */\r\n/* eslint-disable no-restricted-globals */\r\nimport { generateGuid } from '@bingads-webui-universal/primitive-utilities';\r\nimport { odata, http } from '@bingads-webui/http-util';\r\nimport _ from 'underscore';\r\nimport { ODataOptions } from '@bingads-webui/http-util/src/types';\r\n\r\n// @ts-ignore\r\nimport { IDataStore, ICustomerNode, IAccountNode, ICustomerAccountBase } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { SelectorExpandableOption, SelectorOption, SelectorRootOption } from '../../double-list';\r\nimport {\r\n AccountCampaignContainerType,\r\n AccountCampaignOptionType,\r\n ScopeFilterLevelType,\r\n IFilter,\r\n ISearchAccount,\r\n ISearchCustomer,\r\n FilterKeyType\r\n} from '../account-campaign-selector.types';\r\nimport { AccountCampaignDataStore } from './account-campaign-data-store';\r\n\r\ninterface ICampaign {\r\n Id: number;\r\n Name: string;\r\n}\r\n\r\nlet ccJsDataStore: IDataStore;\r\nexport const setCCJsDataStore = (ds: IDataStore) => { if (_.isObject(ds)) { ccJsDataStore = ds; } };\r\n\r\nconst fetchCustomerHierarchy = async (searchTerm: string, limit: number) => (await ccJsDataStore.CustomerHierarchy.findAll({\r\n query: {\r\n limit, start: 0, returnOnlyDirectlyLinkedEntities: false, searchTerm,\r\n },\r\n}, {\r\n contentType: 'application/json',\r\n dataType: 'json',\r\n cacheResponse: true,\r\n preProcess: (res: any) => _.result(res, 'customerHierarchyEntities', res),\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n}) as any);\r\n\r\ntype CampaignsResult = {\r\n value: ICampaign[];\r\n};\r\n\r\nasync function fetchCampaigns(accountOption: SelectorOption, store: AccountCampaignDataStore) {\r\n const accountId = accountOption.id;\r\n const customerId = (accountOption.parent as SelectorOption).id;\r\n const { token } = store.state;\r\n const { odataURI } = store.state;\r\n\r\n return (await odata.get, CampaignsResult>(\r\n `/Customers(${customerId})/Accounts(${accountId})/Campaigns`,\r\n {\r\n headers: {\r\n 'x-ms-lastwritetime': 'Max',\r\n },\r\n data: {\r\n $top: 10000000, // FixMe: We should not pass this param, but the API still need this one\r\n $count: true,\r\n $select: 'Id,Name,Status',\r\n $orderby: 'Name',\r\n },\r\n oDataToken: token,\r\n host: odataURI,\r\n path: '/Advertiser/V2',\r\n }\r\n )).value;\r\n}\r\n\r\nfunction fetchSelectedScopeFilters() {\r\n const global = (window as any);\r\n if (global.reporting && global.reporting.accountTree && global.reporting.accountTree.selectedScopeFilters) {\r\n return global.reporting.accountTree.selectedScopeFilters;\r\n }\r\n return [];\r\n}\r\n\r\nexport async function fetchDefaultSelectedOptions(store: AccountCampaignDataStore) {\r\n const filters = fetchSelectedScopeFilters();\r\n // eslint-disable-next-line no-return-await\r\n return await buildDefaultSelectedOptions(filters, store);\r\n}\r\n\r\nexport async function buildDefaultSelectedOptions(filters: IFilter[], store: AccountCampaignDataStore) {\r\n const selectedOptions: SelectorOption[] = [];\r\n const { rootOption } = store.state;\r\n\r\n function findCustomerAndAccountFromMultiOptions(options: SelectorOption[], filter: SelectorOption): SelectorOption | null {\r\n for (let index = 0; index < options.length; index++) {\r\n const option = options[index];\r\n const res = findCustomerAndAccount(option, filter);\r\n if (res) { return res; }\r\n }\r\n return null;\r\n }\r\n\r\n function findCustomerAndAccount(option: SelectorOption, filter: SelectorOption): SelectorOption | null {\r\n let foundOption: SelectorOption | null = null;\r\n if (option.optionType === filter.optionType && option.id === filter.id) {\r\n foundOption = option;\r\n } else if (option.childFetched) {\r\n option.children.forEach((child) => {\r\n findCustomerAndAccount(child, filter);\r\n });\r\n for (let i = 0; i < option.children.length; i++) {\r\n const found = findCustomerAndAccount(option.children[i], filter);\r\n if (found != null) {\r\n foundOption = found;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return foundOption;\r\n }\r\n\r\n const campaignFilter = _.find(filters, filter => filter.FilterKey === FilterKeyType.campaign);\r\n\r\n await Promise.all(filters.map(async (filter) => {\r\n if (filter.FilterKey === FilterKeyType.customer || filter.FilterKey === FilterKeyType.account) {\r\n const optionType =\r\n filter.FilterKey === FilterKeyType.customer\r\n ? AccountCampaignOptionType.customer\r\n : AccountCampaignOptionType.account;\r\n filter.Values.forEach((v) => {\r\n const found = findCustomerAndAccountFromMultiOptions(\r\n [rootOption, ...(store.state.searchHistorySelectorOptions ?? [])],\r\n new SelectorOption(v, 'filter-unknown', { optionType })\r\n );\r\n if (found) {\r\n selectedOptions.push(found);\r\n }\r\n });\r\n }\r\n\r\n if (filter.FilterKey === FilterKeyType.undeterminedAccounts && campaignFilter) {\r\n await Promise.all(filter.Values.map(async (v) => {\r\n const foundAccount = findCustomerAndAccountFromMultiOptions(\r\n [rootOption, ...(store.state.searchHistorySelectorOptions ?? [])],\r\n new SelectorOption(v, 'filter-unknown', { optionType: AccountCampaignOptionType.account })\r\n );\r\n if (foundAccount !== null) {\r\n await store.loadCampaigns(foundAccount as SelectorExpandableOption, () => { });\r\n campaignFilter.Values.forEach((v) => {\r\n const campaignOption = _.find(foundAccount.children, child => child.id === v);\r\n if (campaignOption !== undefined) {\r\n selectedOptions.push(campaignOption);\r\n }\r\n });\r\n } else if (store.state.accountId) { // under current account scope, find selected campaigns(create similar)\r\n campaignFilter.Values.forEach((v) => {\r\n const campaignOption = _.find(store.state.rootOption.children, child => child.id === v);\r\n if (campaignOption !== undefined) {\r\n selectedOptions.push(campaignOption);\r\n }\r\n });\r\n }\r\n }));\r\n }\r\n }));\r\n\r\n const allAccountIds = rootOption.midTraverseTree().filter(o => o.optionType === AccountCampaignOptionType.account).map(o => o.id);\r\n const selectedAccountIds = selectedOptions.map(o => o.id);\r\n\r\n // If all accounts are selected, override selectedOptions\r\n if (_.isEqual(allAccountIds.sort(), selectedAccountIds.sort())) {\r\n return [];\r\n }\r\n\r\n return selectedOptions;\r\n}\r\n\r\nfunction buildCustomerAccountOptionTree(\r\n store: AccountCampaignDataStore,\r\n entities: ICustomerAccountBase[] | null | undefined,\r\n parentOption: SelectorOption\r\n) {\r\n if (entities && entities.length !== 0) {\r\n if (store.state.scopeFilterLevel === ScopeFilterLevelType.Customer) {\r\n entities.forEach((entity) => {\r\n if (entity.isCustomer) {\r\n const customer = entity as ICustomerNode;\r\n const customerOption = new SelectorOption(customer.id.toString(), customer.name, {\r\n optionType: AccountCampaignOptionType.customer,\r\n number: customer.number,\r\n unAuthorized: customer.unAuthorized,\r\n });\r\n parentOption.addChild(customerOption);\r\n buildCustomerAccountOptionTree(store, customer.children, parentOption);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n entities.forEach((entity) => {\r\n if (entity.isCustomer) {\r\n const customer = entity as ICustomerNode;\r\n const customerOption = new SelectorOption(customer.id.toString(), customer.name, {\r\n optionType: AccountCampaignOptionType.customer,\r\n number: customer.number,\r\n unAuthorized: customer.unAuthorized,\r\n });\r\n parentOption.addChild(customerOption);\r\n buildCustomerAccountOptionTree(store, customer.children, customerOption);\r\n } else {\r\n const account = entity as IAccountNode;\r\n const accountOption = new SelectorExpandableOption(\r\n account.id.toString(),\r\n account.name,\r\n AccountCampaignContainerType.campaign,\r\n {\r\n optionType: AccountCampaignOptionType.account,\r\n number: account.number,\r\n }\r\n );\r\n parentOption.addChild(accountOption);\r\n }\r\n });\r\n }\r\n}\r\n\r\nasync function buildCampaignOptionList(campaigns: ICampaign[], parentOption: SelectorOption) {\r\n parentOption.resetChildren();\r\n return campaigns.forEach((campaign: ICampaign) => {\r\n const selectorOption: SelectorOption = new SelectorOption(campaign.Id.toString(), campaign.Name, {\r\n optionType: AccountCampaignOptionType.campaign,\r\n });\r\n parentOption.addChild(selectorOption);\r\n });\r\n}\r\n\r\nexport async function fetchAndBuildCustomerAccountOptionTree(store: AccountCampaignDataStore, searchTerm: string) {\r\n const {\r\n rootCustomerId: customerId,\r\n accountId,\r\n hierarchyMaxAccountLimit,\r\n scopeFilterLevel,\r\n customFetchAndBuildAccountOptionList,\r\n } = store.state;\r\n\r\n let rootOption;\r\n\r\n if ((scopeFilterLevel === ScopeFilterLevelType.Campaign) && accountId) {\r\n // In account scope, only show campaigns within current account\r\n rootOption = new SelectorRootOption(AccountCampaignContainerType.campaign, accountId, 'root', { optionType: AccountCampaignOptionType.account });\r\n rootOption.parent = new SelectorOption(customerId, 'dummy-customer');\r\n\r\n await fetchAndBuildCampaignOptionList(rootOption, store);\r\n } else {\r\n rootOption = new SelectorRootOption(AccountCampaignContainerType.customerAccount, customerId, 'root');\r\n\r\n if (customFetchAndBuildAccountOptionList) {\r\n await customFetchAndBuildAccountOptionList(rootOption);\r\n } else {\r\n const customers = await fetchCustomerHierarchy(searchTerm, hierarchyMaxAccountLimit);\r\n buildCustomerAccountOptionTree(store, customers, rootOption);\r\n }\r\n }\r\n\r\n return rootOption;\r\n}\r\n\r\nexport async function fetchAndBuildCampaignOptionList(\r\n accountOption: SelectorExpandableOption,\r\n store: AccountCampaignDataStore\r\n) {\r\n const { customFetchAndBuildCampaignOptionList } = store.state;\r\n if (customFetchAndBuildCampaignOptionList) {\r\n await customFetchAndBuildCampaignOptionList(accountOption);\r\n return accountOption;\r\n }\r\n const campaigns = await fetchCampaigns(accountOption, store);\r\n buildCampaignOptionList(campaigns, accountOption);\r\n return accountOption;\r\n}\r\n\r\nexport async function buildInitialDoubleListOptions(store: AccountCampaignDataStore) {\r\n const rootOption = await fetchAndBuildCustomerAccountOptionTree(store, '');\r\n return rootOption;\r\n}\r\n\r\n// ==================old api, will remove it when ccPilot is opened forever=====================\r\ninterface ICustomerAccountBaseOld {\r\n title: string;\r\n attr: {\r\n scope: string;\r\n tId: number;\r\n status: string;\r\n number: string;\r\n };\r\n}\r\n\r\ninterface ICustomerOld extends ICustomerAccountBaseOld {\r\n children: IAccountOld[];\r\n}\r\n\r\ninterface IAccountOld extends ICustomerAccountBaseOld { }\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nasync function fetchCustomerHierarchyOld(customerId: string, userId: string) {\r\n return await http.get('/reporting/navigationtree/treenodes', {\r\n data: {\r\n tree: 'Customers',\r\n id: 0,\r\n parentId: 0,\r\n cid: customerId,\r\n uid: userId,\r\n ReqId: generateGuid(),\r\n },\r\n contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n }) as ICustomerAccountBaseOld[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nasync function buildCustomerAccountOptionTreeOld(\r\n store: AccountCampaignDataStore,\r\n entities: ICustomerAccountBaseOld[] | null | undefined,\r\n parentOption: SelectorOption\r\n) {\r\n if (entities && entities.length !== 0) {\r\n if (store.state.scopeFilterLevel === ScopeFilterLevelType.Customer) {\r\n entities.forEach((entity) => {\r\n if (entity.attr.scope === 'Customers') {\r\n const customer = entity as ICustomerOld;\r\n const customerOption = new SelectorOption(customer.attr.tId.toString(), customer.title, {\r\n optionType: AccountCampaignOptionType.customer,\r\n number: customer.attr.number,\r\n });\r\n parentOption.addChild(customerOption);\r\n buildCustomerAccountOptionTreeOld(store, customer.children, parentOption);\r\n }\r\n });\r\n return;\r\n }\r\n\r\n const sortedEntites =\r\n _.sortBy(\r\n _.filter(entities, entity => entity.attr.scope !== 'Customers'),\r\n account => account.attr.status\r\n )\r\n .concat(_.filter(entities, entity => entity.attr.scope === 'Customers'));\r\n\r\n sortedEntites.forEach((entity) => {\r\n if (entity.attr.scope === 'Customers') {\r\n const customer = entity as ICustomerOld;\r\n const customerOption = new SelectorOption(customer.attr.tId.toString(), customer.title, {\r\n optionType: AccountCampaignOptionType.customer,\r\n number: customer.attr.number,\r\n });\r\n parentOption.addChild(customerOption);\r\n buildCustomerAccountOptionTreeOld(store, customer.children, customerOption);\r\n } else {\r\n const account = entity as IAccountOld;\r\n const accountOption = new SelectorExpandableOption(\r\n account.attr.tId.toString(),\r\n account.title,\r\n AccountCampaignContainerType.campaign,\r\n {\r\n optionType: AccountCampaignOptionType.account,\r\n number: account.attr.number,\r\n extra: {\r\n status: account.attr.status,\r\n },\r\n }\r\n );\r\n parentOption.addChild(accountOption);\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\nexport async function fetchAndBuildSearchCustomerList(store: AccountCampaignDataStore, searchText: string) {\r\n const customerId = store.state.rootCustomerId;\r\n const { userId } = store.state;\r\n\r\n const rootOption = new SelectorRootOption(AccountCampaignContainerType.customerAccount, customerId, 'root');\r\n const searchCustomers = await fetchSearchCustomerList(store, customerId, userId, searchText);\r\n buildSearchCustomerList(searchCustomers, rootOption);\r\n\r\n return rootOption;\r\n}\r\n\r\nfunction buildSearchCustomerList(\r\n customers: ISearchCustomer[] | null | undefined,\r\n parentOption: SelectorOption\r\n) {\r\n if (customers && customers.length !== 0) {\r\n _.forEach(customers, (customer) => {\r\n const customerOption = new SelectorOption(\r\n customer.advertiserCustomerId.toString(),\r\n customer.advertiserCustomerName,\r\n {\r\n optionType: AccountCampaignOptionType.customer,\r\n number: '',\r\n extra: {\r\n serviceLevel: customer.serviceLevel,\r\n },\r\n }\r\n );\r\n parentOption.addChild(customerOption);\r\n });\r\n }\r\n}\r\n\r\nasync function fetchSearchCustomerList(store: AccountCampaignDataStore, customerId: string, userId: string, searchText: string) {\r\n store.setState({\r\n isLoading: true,\r\n });\r\n return await http.get('/reporting/navigationtree/SearchCustomers', {\r\n data: {\r\n cid: customerId,\r\n uid: userId,\r\n searchText,\r\n ReqId: generateGuid(),\r\n },\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n }).finally(() => {\r\n store.setState({\r\n isLoading: false,\r\n });\r\n }) as ISearchCustomer[];\r\n}\r\n\r\nexport async function fetchAndBuildSearchAccountList(store: AccountCampaignDataStore, searchText: string) {\r\n const customerId = store.state.rootCustomerId;\r\n const { userId } = store.state;\r\n\r\n const rootOption = new SelectorRootOption(AccountCampaignContainerType.customerAccount, customerId, 'root');\r\n const searchAccounts = await fetchSearchAccountList(store, customerId, userId, searchText);\r\n buildSearchAccountList(searchAccounts, rootOption);\r\n\r\n return rootOption;\r\n}\r\n\r\nfunction buildSearchAccountList(\r\n accounts: ISearchAccount[] | null | undefined,\r\n parentOption: SelectorOption\r\n) {\r\n if (accounts && accounts.length !== 0) {\r\n _.sortBy(accounts, account => account.status)\r\n .forEach((account) => {\r\n const accountOption = new SelectorExpandableOption(\r\n account.accountId.toString(),\r\n account.accountName,\r\n AccountCampaignContainerType.campaign,\r\n {\r\n optionType: AccountCampaignOptionType.account,\r\n extra: {\r\n status: account.status,\r\n advertiserCustomerName: account.advertiserCustomerName,\r\n },\r\n }\r\n );\r\n parentOption.addChild(accountOption);\r\n });\r\n }\r\n}\r\n\r\nasync function fetchSearchAccountList(store: AccountCampaignDataStore, customerId: string, userId: string, searchText: string) {\r\n store.setState({\r\n isLoading: true,\r\n });\r\n return await http.get('/reporting/navigationtree/SearchAccounts', {\r\n data: {\r\n cid: customerId,\r\n uid: userId,\r\n searchText,\r\n ReqId: generateGuid(),\r\n },\r\n xhrFields: {\r\n withCredentials: true,\r\n },\r\n }).finally(() => {\r\n store.setState({\r\n isLoading: false,\r\n });\r\n }) as ISearchAccount[];\r\n}\r\n","/* eslint-disable no-restricted-globals */\r\nimport _ from 'underscore';\r\nimport { StateStore } from '@bingads-webui/state-store';\r\nimport { SelectorRootOption, SelectorOption, SelectorExpandableOption } from '../../double-list';\r\nimport {\r\n AccountCampaignContainerType,\r\n IFeaturePilots,\r\n AccountCampaignOptionType,\r\n IFilter,\r\n FilterKeyType,\r\n CampaignReportScopeType,\r\n RdsSelected,\r\n ScopeFilterLevelType,\r\n ScopeSelectorLevelType,\r\n} from '../account-campaign-selector.types';\r\n\r\nimport {\r\n fetchAndBuildCustomerAccountOptionTree,\r\n fetchAndBuildCampaignOptionList,\r\n buildInitialDoubleListOptions,\r\n fetchDefaultSelectedOptions,\r\n buildDefaultSelectedOptions,\r\n fetchAndBuildSearchAccountList,\r\n fetchAndBuildSearchCustomerList,\r\n} from './account-campaign-data-processor';\r\n\r\ninterface IStateType {\r\n rootOption: SelectorRootOption;\r\n searchRootOption: SelectorRootOption;\r\n initRootOption: SelectorRootOption;\r\n loading: boolean;\r\n defaultCampaignParentOption: null | SelectorOption;\r\n searchTerm: string,\r\n campaignSearchStr: string,\r\n customerAccountSearchStr: string,\r\n isOnApiSearch: boolean;\r\n isCreateSimilar: boolean;\r\n defaultSelectedOption: SelectorOption[];\r\n rootCustomerId: string;\r\n userId: string;\r\n accountId: string;\r\n isLoading: boolean;\r\n /**\r\n * This is for initialize, when opening account selector, selected items will be filtered by knowning SelectorOptions.\r\n * However, default knowning SelectorOptions might not contain search ones, so we must store the search history results.\r\n * And then pass it when next time open the component.\r\n */\r\n searchHistorySelectorOptions?: SelectorOption[];\r\n\r\n // page level params\r\n ccBaseUrl: string;\r\n token: string;\r\n odataURI: string;\r\n featurePilots: {\r\n IsReportingUINewDesignEnabled: boolean;\r\n };\r\n forceAccountScope: boolean;\r\n scopeFilterLevel: string;\r\n isInternalReport: boolean;\r\n isReportingUIPhaseNext: boolean;\r\n scopeSelectorLevel: string;\r\n maxAccountLimit: number;\r\n hierarchyMaxAccountLimit: number;\r\n isBeyondAccountLimit: boolean;\r\n refresh: number;\r\n customFetchAndBuildCampaignOptionList?: (rootOption: SelectorExpandableOption) => Promise;\r\n customFetchAndBuildAccountOptionList?: (rootOption: SelectorExpandableOption) => Promise;\r\n}\r\n\r\nexport class AccountCampaignDataStore extends StateStore {\r\n constructor() {\r\n const defaultState = {\r\n // component level params\r\n rootOption: new SelectorRootOption(AccountCampaignContainerType.customerAccount),\r\n searchRootOption: new SelectorRootOption(AccountCampaignContainerType.customerAccount),\r\n initRootOption: new SelectorRootOption(AccountCampaignContainerType.customerAccount),\r\n loading: true,\r\n defaultCampaignParentOption: null,\r\n searchTerm: '',\r\n campaignSearchStr: '',\r\n customerAccountSearchStr: '',\r\n isOnApiSearch: false,\r\n isCreateSimilar: false,\r\n // eslint-disable-next-line no-array-constructor\r\n defaultSelectedOption: new Array(),\r\n rootCustomerId: '',\r\n userId: '',\r\n accountId: '',\r\n isLoading: false,\r\n\r\n // page level params\r\n ccBaseUrl: '',\r\n token: '',\r\n odataURI: '',\r\n featurePilots: {\r\n IsReportingUINewDesignEnabled: false,\r\n },\r\n forceAccountScope: false,\r\n scopeFilterLevel: '',\r\n isInternalReport: false,\r\n isReportingUIPhaseNext: false,\r\n scopeSelectorLevel: ScopeSelectorLevelType.Customer,\r\n maxAccountLimit: 2000,\r\n hierarchyMaxAccountLimit: 1000,\r\n isBeyondAccountLimit: false,\r\n // refresh control\r\n refresh: 0,\r\n };\r\n super(defaultState);\r\n }\r\n\r\n initialSetUp = async (\r\n odataURI: string,\r\n token: string,\r\n ccBaseUrl: string,\r\n customerId: string,\r\n userId: string,\r\n accountId: string | undefined,\r\n featurePilots: IFeaturePilots,\r\n isCreateSimilar: boolean,\r\n defaultSelected: RdsSelected,\r\n allSelected: boolean,\r\n onSelectedChange: (value: RdsSelected) => void,\r\n forceAccountScope: boolean,\r\n scopeFilterLevel: string,\r\n isInternalReport: boolean | undefined,\r\n isReportingUIPhaseNext: boolean | undefined,\r\n searchHistorySelectorOptions?: SelectorOption[],\r\n customFetchAndBuildCampaignOptionList?: (rootOption: SelectorExpandableOption) => Promise,\r\n customFetchAndBuildAccountOptionList?: (rootOption: SelectorExpandableOption) => Promise\r\n ) => {\r\n this.setState({\r\n odataURI,\r\n token,\r\n ccBaseUrl,\r\n featurePilots,\r\n isCreateSimilar,\r\n rootCustomerId: customerId,\r\n userId,\r\n accountId,\r\n forceAccountScope,\r\n scopeFilterLevel,\r\n isInternalReport,\r\n isReportingUIPhaseNext,\r\n searchHistorySelectorOptions,\r\n customFetchAndBuildCampaignOptionList,\r\n customFetchAndBuildAccountOptionList,\r\n });\r\n\r\n const rootOption = await buildInitialDoubleListOptions(this);\r\n this.setState({\r\n rootOption,\r\n initRootOption: rootOption,\r\n });\r\n\r\n if (this.countAccount(rootOption.children) >= this.state.hierarchyMaxAccountLimit) {\r\n this.setState({\r\n isBeyondAccountLimit: true,\r\n });\r\n }\r\n\r\n // Once the customer hierarchy is constructed, notify parent view\r\n onSelectedChange(this.toRdsSelected(allSelected, []));\r\n\r\n let defaultSelectedOption: SelectorOption[] = [];\r\n if (isCreateSimilar) {\r\n if (defaultSelected) {\r\n const filters = this.fromRdsSelected(defaultSelected);\r\n defaultSelectedOption = await buildDefaultSelectedOptions(filters, this);\r\n } else {\r\n defaultSelectedOption = await fetchDefaultSelectedOptions(this);\r\n }\r\n }\r\n\r\n this.setState({ defaultSelectedOption, loading: false });\r\n };\r\n\r\n countAccount = (optionList: SelectorOption[]) => {\r\n let accountNumber = 0;\r\n _.map(optionList, (option) => {\r\n if (option.optionType === 'account') {\r\n accountNumber += 1;\r\n } else if (_.isArray(option.children) && option.children.length > 0) {\r\n accountNumber += this.countAccount(option.children);\r\n }\r\n });\r\n return accountNumber;\r\n };\r\n\r\n onQueryCustomerAccountChange = (searchText: string) => {\r\n this.setState({\r\n customerAccountSearchStr: searchText,\r\n });\r\n };\r\n\r\n onQueryCampaignChange = (searchText: string) => {\r\n this.setState({\r\n campaignSearchStr: searchText,\r\n });\r\n };\r\n\r\n searchCustomerAccount = async (searchText: string) => {\r\n if (this.state.scopeFilterLevel === ScopeFilterLevelType.Customer ||\r\n (this.state.isInternalReport && this.state.scopeSelectorLevel === ScopeSelectorLevelType.Customer)\r\n ) {\r\n await this.searchCustomer(searchText);\r\n } else {\r\n await this.searchAccount(searchText);\r\n }\r\n };\r\n\r\n searchCustomer = async (searchText: string) => {\r\n if (searchText === '' || this.state.isLoading) {\r\n return;\r\n }\r\n const searchOption = await fetchAndBuildSearchCustomerList(this, searchText);\r\n const prevSearchHistorySelectorOptions = this.state.searchHistorySelectorOptions ?? [];\r\n const newSearchHistorySelectorOptions: SelectorOption[] | undefined = [...prevSearchHistorySelectorOptions, searchOption];\r\n this.setState({\r\n searchRootOption: searchOption,\r\n rootOption: searchOption,\r\n isOnApiSearch: true,\r\n searchTerm: searchText,\r\n searchHistorySelectorOptions: newSearchHistorySelectorOptions,\r\n });\r\n };\r\n\r\n searchAccount = async (searchText: string) => {\r\n if (searchText === '' || this.state.isLoading) {\r\n return;\r\n }\r\n\r\n // internal report search, internal user can sesarch all accounts\r\n if (this.state.isInternalReport) {\r\n if (searchText.length <= 2) return;\r\n const searchOption = await fetchAndBuildSearchAccountList(this, searchText);\r\n this.setState({\r\n searchRootOption: searchOption,\r\n rootOption: searchOption,\r\n isOnApiSearch: true,\r\n searchTerm: searchText,\r\n });\r\n return;\r\n }\r\n\r\n // root option has more children than maxAccountLimit\r\n if (this.state.isBeyondAccountLimit) {\r\n let searchOption = new SelectorRootOption(AccountCampaignContainerType.customerAccount);\r\n searchOption = await fetchAndBuildCustomerAccountOptionTree(this, searchText);\r\n this.setState({\r\n searchRootOption: searchOption,\r\n rootOption: searchOption,\r\n isOnApiSearch: true,\r\n searchTerm: searchText,\r\n });\r\n } else {\r\n this.setState({\r\n searchTerm: searchText,\r\n isOnApiSearch: false,\r\n });\r\n }\r\n };\r\n\r\n\r\n clearSearchCustomerAccount = () => {\r\n this.setState({\r\n rootOption: this.state.initRootOption,\r\n customerAccountSearchStr: '',\r\n searchTerm: '',\r\n isOnApiSearch: false,\r\n });\r\n };\r\n\r\n searchCampaign = (searchText: string) => {\r\n this.setState({\r\n searchTerm: searchText,\r\n });\r\n };\r\n\r\n clearSearchCampaign = () => {\r\n this.setState({\r\n searchTerm: '',\r\n campaignSearchStr: '',\r\n });\r\n };\r\n\r\n selectScopeLevel = (scopeLevel: string) => {\r\n this.setState({\r\n scopeSelectorLevel: scopeLevel,\r\n });\r\n };\r\n\r\n loadCampaigns = async (accountOption: SelectorExpandableOption, callback: () => void) => {\r\n await fetchAndBuildCampaignOptionList(accountOption, this);\r\n callback();\r\n };\r\n\r\n drillDown = async (accountOption: SelectorExpandableOption) => {\r\n if (!accountOption.childFetched) {\r\n await fetchAndBuildCampaignOptionList(accountOption, this);\r\n }\r\n this.setState({\r\n rootOption: accountOption as SelectorRootOption,\r\n searchTerm: '',\r\n campaignSearchStr: '',\r\n });\r\n };\r\n\r\n drillUp = () => {\r\n if (this.state.isOnApiSearch) {\r\n this.setState({\r\n rootOption: this.state.searchRootOption,\r\n searchTerm: this.state.customerAccountSearchStr,\r\n });\r\n } else {\r\n this.setState({\r\n rootOption: this.state.initRootOption,\r\n searchTerm: this.state.customerAccountSearchStr,\r\n });\r\n }\r\n };\r\n\r\n fromRdsSelected(rdsSelected: RdsSelected) {\r\n const filters = [\r\n {\r\n FilterKey: FilterKeyType.customer,\r\n Values: _.map(rdsSelected.CustomerScopes, v => String(v)),\r\n },\r\n {\r\n FilterKey: FilterKeyType.account,\r\n Values: _.map(rdsSelected.AccountIds, v => String(v)),\r\n },\r\n {\r\n FilterKey: FilterKeyType.campaign,\r\n Values: _.map(rdsSelected.CampaignReportScopes, scope => String(scope.CampaignId)),\r\n },\r\n {\r\n FilterKey: FilterKeyType.undeterminedAccounts,\r\n Values: _.map(rdsSelected.CampaignReportScopes, scope => String(scope.AccountId)),\r\n },\r\n ];\r\n\r\n return filters;\r\n }\r\n\r\n toRdsSelected(userAllSelected: boolean, userSelected: SelectorOption[]) {\r\n let selected = [];\r\n let allSelected = false;\r\n if (userAllSelected || (userSelected.length === 1 && userSelected[0] instanceof SelectorRootOption)) {\r\n // If in account scope reporting, do not split account id into campaign ids\r\n if (this.state.rootOption.optionType === AccountCampaignOptionType.account) {\r\n selected = [this.state.rootOption];\r\n } else {\r\n selected = [...this.state.rootOption.children];\r\n }\r\n allSelected = true;\r\n } else {\r\n selected = [...userSelected];\r\n allSelected = false;\r\n }\r\n\r\n const accountIds: number[] = [];\r\n const campaignReportScopes: CampaignReportScopeType[] = [];\r\n const customerScopes: number[] = [];\r\n\r\n while (selected.length > 0) {\r\n const option: SelectorOption = selected.shift()!;\r\n if (option.optionType === AccountCampaignOptionType.customer) {\r\n customerScopes.push(Number(option.id));\r\n } else if (option.optionType === AccountCampaignOptionType.account) {\r\n accountIds.push(Number(option.id));\r\n } else {\r\n campaignReportScopes.push({\r\n AccountId: Number((option.parent as SelectorOption).id),\r\n CampaignId: Number(option.id),\r\n });\r\n }\r\n }\r\n\r\n return {\r\n allSelected,\r\n AccountIds: accountIds,\r\n CustomerScopes: customerScopes,\r\n CampaignReportScopes: campaignReportScopes,\r\n };\r\n }\r\n\r\n getSelected(userAllSelected: boolean, userSelected: SelectorOption[]) {\r\n const customerFilter: IFilter = { FilterKey: FilterKeyType.customer, Values: [] };\r\n const accountFilter: IFilter = { FilterKey: FilterKeyType.account, Values: [] };\r\n const campaignFilter: IFilter = { FilterKey: FilterKeyType.campaign, Values: [] };\r\n const underminedAccountFilter: IFilter = { FilterKey: FilterKeyType.undeterminedAccounts, Values: [] };\r\n\r\n let selected = [];\r\n let allSelected = false;\r\n if (userAllSelected || (userSelected.length === 1 && userSelected[0] instanceof SelectorRootOption)) {\r\n selected = [...this.state.rootOption.children];\r\n allSelected = true;\r\n } else {\r\n selected = [...userSelected];\r\n allSelected = false;\r\n }\r\n\r\n // split customer into accounts\r\n selected.forEach((option: SelectorOption) => {\r\n if (option.optionType === AccountCampaignOptionType.customer) {\r\n customerFilter.Values.push(`${option.id}`);\r\n\r\n const childAccounts = option.midTraverseTree().filter(o => o.optionType === AccountCampaignOptionType.account);\r\n childAccounts.forEach((o) => {\r\n accountFilter.Values.push(`${o.id}`);\r\n });\r\n } else if (option.optionType === AccountCampaignOptionType.account) {\r\n accountFilter.Values.push(`${option.id}`);\r\n } else {\r\n campaignFilter.Values.push(`${option.id}`);\r\n // pop campaigns into undermined accounts\r\n underminedAccountFilter.Values.push(`${(option.parent as SelectorOption).id}`);\r\n }\r\n });\r\n\r\n return {\r\n Filters: [customerFilter, accountFilter, campaignFilter, underminedAccountFilter],\r\n allSelected,\r\n };\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport _ from 'underscore';\r\nimport { withStateStore } from '@bingads-webui/with-state-store';\r\nimport { Radio, Col, Row } from '@bingads-webui-react/primitive';\r\n// @ts-ignore\r\nimport { withPerfMarker } from '@bingads-webui/performance-marker-react-wrapper';\r\nimport { withDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n// @ts-ignore\r\nimport { withCcJsData } from '@bingads-webui-cc-react/js-data-rest';\r\nimport {\r\n IAccountCampaignSelectorInternalProps,\r\n IAccountCampaignSelectorProps,\r\n ScopeFilterLevelType\r\n} from './account-campaign-selector.types';\r\nimport { ContainerConfigFactory } from './acccount-campaign-container-config';\r\nimport { DoubleList, SelectorOption } from '../double-list';\r\nimport AccountCampaignResultBox from './account-campaign-result-box';\r\nimport AccountCampaignSelectorBox from './account-campaign-selector-box';\r\nimport classes, { getStyle } from './styles';\r\nimport { AccountCampaignDataStore, setCCJsDataStore } from './account-campaign-data-store';\r\n\r\n\r\ninterface AccountCampaignSelectorInternalState {\r\n allSelected: boolean;\r\n}\r\n\r\nexport class AccountCampaignSelectorInternal extends Component<\r\n IAccountCampaignSelectorInternalProps,\r\n AccountCampaignSelectorInternalState\r\n> {\r\n selected: SelectorOption[];\r\n allSelectedCorrected: boolean = false;\r\n\r\n // a book keeper to call finishedLoading only once\r\n loaded: boolean = false;\r\n\r\n static defaultProps = {\r\n isCreateSimilar: false,\r\n allSelected: true,\r\n onSelectedChange: _.noop,\r\n classes,\r\n };\r\n\r\n constructor(props: IAccountCampaignSelectorInternalProps) {\r\n super(props);\r\n if (props.ccJsData) {\r\n setCCJsDataStore(props.ccJsData)\r\n }\r\n this.selected = [];\r\n this.state = {\r\n allSelected: this.props.allSelected,\r\n };\r\n }\r\n\r\n setAllSelected = (allSelected: boolean) => {\r\n this.setState({ allSelected });\r\n this.props.onSelectedChange(\r\n this.props.store.toRdsSelected(allSelected, this.selected),\r\n { searchHistorySelectorOptions: this.props.store.state.searchHistorySelectorOptions }\r\n );\r\n };\r\n\r\n setSelected = (selected: any) => {\r\n this.selected = selected;\r\n this.props.onSelectedChange(\r\n this.props.store.toRdsSelected(this.state.allSelected, selected),\r\n { searchHistorySelectorOptions: this.props.store.state.searchHistorySelectorOptions }\r\n );\r\n };\r\n\r\n generateBeyondAccountLimitText = (scopeFilterLevel: string) => {\r\n if (scopeFilterLevel === ScopeFilterLevelType.Account || this.props.store.state.forceAccountScope) {\r\n return this.props.i18n.getString(_TL_('There are more accounts than can be displayed. Use the search box to find a specific account.'));\r\n }\r\n // TODO: Can this.props.store.state.isBeyondAccountLimit be true for ScopeFilterLevelType.Customer?\r\n // TODO: If yes, uncomment and update text if needed\r\n // else if (scopeFilterLevel === ScopeFilterLevelType.Customer) {\r\n // return this.props.i18n.getString(_TL_('Some manager accounts cannot be displayed since they have many accounts. Use the search box to find a specific manager account.'));\r\n // }\r\n\r\n return this.props.i18n.getString(_TL_('There are more accounts and campaigns than can be displayed. Use the search box to find a specific account or campaign.'));\r\n };\r\n\r\n render() {\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n const { classes } = this.props;\r\n const containerMap = ContainerConfigFactory.create(this.props.store);\r\n const selectorBoxConfig =\r\n this.props.store.state.rootOption.containerKey === 'customerAccount'\r\n ? containerMap.customerAccount\r\n : containerMap.campaign;\r\n\r\n const { scopeFilterLevel } = this.props.store.state;\r\n let allStr; let\r\nspecificStr;\r\n\r\n if (this.props.store.state.forceAccountScope) {\r\n allStr = this.props.i18n.getString(_TL_('All accounts'));\r\n specificStr = this.props.i18n.getString(_TL_('Specific accounts'));\r\n } else {\r\n switch (scopeFilterLevel) {\r\n case ScopeFilterLevelType.Account:\r\n allStr = this.props.i18n.getString(_TL_('All accounts'));\r\n specificStr = this.props.i18n.getString(_TL_('Specific accounts'));\r\n break;\r\n case ScopeFilterLevelType.Customer:\r\n allStr = this.props.i18n.getString(_TL_('Current manager account'));\r\n specificStr = this.props.i18n.getString(_TL_('Specific manager accounts'));\r\n break;\r\n default:\r\n if (this.props.store.state.accountId) {\r\n allStr = this.props.i18n.getString(_TL_('All campaigns within current account'));\r\n specificStr = this.props.i18n.getString(_TL_('Specific campaigns within current account'));\r\n } else {\r\n allStr = this.props.i18n.getString(_TL_('All accounts and campaigns'));\r\n specificStr = this.props.i18n.getString(_TL_('Specific accounts and campaigns'));\r\n }\r\n }\r\n }\r\n\r\n if (!this.props.store.state.loading\r\n && !this.loaded\r\n && this.props.finishedLoading) {\r\n this.loaded = true;\r\n this.props.finishedLoading();\r\n }\r\n\r\n return !this.props.store.state.loading ? (\r\n
\r\n {!this.props.hideRadioButtons && \r\n \r\n this.setAllSelected(true)}>\r\n {allStr}\r\n \r\n this.setAllSelected(false)}>\r\n {specificStr}\r\n \r\n \r\n }\r\n \r\n {\r\n this.props.store.state.isBeyondAccountLimit ?\r\n
\r\n {this.generateBeyondAccountLimitText(scopeFilterLevel)}\r\n
: ''\r\n }\r\n \r\n
\r\n \r\n ) : (\r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n this.props.store.initialSetUp(\r\n this.props.odataURI,\r\n this.props.ccToken,\r\n this.props.ccBaseUrl,\r\n this.props.customerId,\r\n this.props.userId,\r\n this.props.accountId,\r\n this.props.featurePilots,\r\n this.props.isCreateSimilar,\r\n this.props.defaultSelected,\r\n this.props.allSelected,\r\n this.props.onSelectedChange,\r\n this.props.forceAccountScope,\r\n this.props.scopeFilterLevel,\r\n this.props.isInternalReport,\r\n this.props.isReportingUIPhaseNext,\r\n this.props.searchHistorySelectorOptions,\r\n this.props.customFetchAndBuildCampaignOptionList,\r\n this.props.customFetchAndBuildAccountOptionList\r\n );\r\n }\r\n\r\n componentDidUpdate() {\r\n this.correctDefaultAllSelected();\r\n }\r\n\r\n correctDefaultAllSelected() {\r\n const defaultSelectedOptions = this.props.store.state.defaultSelectedOption;\r\n if (defaultSelectedOptions.length > 0 && !this.allSelectedCorrected) {\r\n this.allSelectedCorrected = true;\r\n setTimeout(() => {\r\n this.setAllSelected(false);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Transform the selected type into old api data format\r\n */\r\n getSelected() {\r\n return this.props.store.getSelected(this.state.allSelected, this.selected);\r\n }\r\n}\r\n\r\n\r\nexport const AccountCampaignSelector: any = withCcJsData(withDefaultStyles(withPerfMarker(\r\n // @ts-ignore\r\n withStateStore(AccountCampaignSelectorInternal, (() => new AccountCampaignDataStore()) as any) as any,\r\n { name: 'reporting-account-campaign-selector' }\r\n), getStyle));\r\n\r\n"],"names":["SignupFlowStepLogger","_ref","flow","activity","stepToPage","getSubFlowFromCurrentFlow","signUpPrefix","state","useWizardService","currentStepId","getCurrentStepId","subFlow","getCurrentFlow","error","concat","isTestEnvironment","document","domain","Error","useLogEnteredPage","Flow","SubFlow","Page","useEffect","pageId","pageTitle","_ref$isSignUp","isSignUp","_ref$signUpPrefix","navLevel3","updatePdlPage","navLevel3Title","omniturePageLoad","propTypes","PropTypes","isRequired","defaultProps","SignupFlowStepLoggerWithActivity","instrumentation","useContext","InstrumentationContext","useMemo","signupFlowScenario","create","signupFlow","trace","_","_jsx","StepRenderPageReady","_useState","useState","_useState2","_slicedToArray","isStepRendered","setIsAnyStepRendered","PageReady","pageIsReady","matchStepState","FORM_STATES","ACTIVE","setTimeout","PageReadyTrigger","defaultOptions","ImportNewEntities","ImportUpdatedEntities","importType","MultiAccountGoogleImportRepository","_GoogleImportReposito","deps","_classCallCheck","_callSuper","_inherits","_createClass","key","value","authCode","url","AccountId","this","aid","AuthCode","startGoogleSessionInternal","token","Token","sessionId","SessionId","odata","get","arguments","length","undefined","getGoogleSessionIdFromCookie","googleCustomerId","formatUrl","queryParameters","getGoogleCampaignsInternal","timeZoneId","bingAccountInfo","adWordsImportContext","Id","AdWordsImportContext","CampaignTimeZone","timeZoneEnumMapper","getEnumbyId","config","CultureName","LCID","AdGroupMedium","adGroupMedium","Language","language","CustomerMarket","market","ImportType","AccountName","Name","AccountNumber","UserName","_ref2","googleAccountName","_this","importOptions","stepState","importUserPreferences","notificationType","notificationEmailAddresses","taskItemState","name","cron","loginCustomerId","initialAdWordsAccount","selectedCampaignIds","selectedGoogleAccountToBingAccountMap","selectedGoogleAccounts","bingAccount","info","getGoogleImportInfoFromCookie","googleSessionId","importTaskItemList","forEach","googleAccount","campaignIds","CustomerId","LoginCustomerId","CampaignIds","bingAccountId","GoogleCustomerId","BingAccountId","singleAccountGoogleImportTaskItem","prepareSingleAccountGoogleImportTaskItem","push","multiAccountGoogleImportTaskItem","ImportUserPreference","NotificationEmailAddresses","ImportTaskItemList","NotificationType","Type","testTypeSuffix","NotificationMedium","TimeZoneId","State","Cron","Promise","googleCustomerList","_this2","preferences","getMultiAccountImportUserPreferenceWithBMCandMinInfo","then","userPref","googleCustomerIdList","getMultiAccountGoogleAccountProperties","join","result","TrackingTemplate","FinalUrlSuffix","item","trackingTemplate","finalUrlSuffix","AdWordsAccountTrackingTemplate","AdWordsAccountFinalUrlSuffix","storeIds","storeList","id","parseInt","AvailableStoreValues","AvailableStoreValueMessages","getImportUserPreference","logTrace","options","routerValue","addDefaultParameters","cid","uid","urlUtil","isForVNext","router","navigateToRoute","formatCustomerLevelUrl","navigateToUrl","GoogleImportRepository","BingAccountGridViewModel","i18n","AccountSelectionList","SelectedAccountIdList","selectedlists","ko","listDataCallBack","cb","accountlist","fetch","done","response","accounts","account","AccountMode","setStatusCssClass","items","total","setSelectedList","Status","StatusCssClass","selectedAccountNumbers","accountSelectionHash","selectedAccountNumber","showValidationError","hasError","stringsMapping","sourceItems","selectedItems","BingAccountTitleGridView","_Backbone$View","DoubleListBox","$el","html","template","koModel","el","subscribe","trigger","doubleListControlOptions","$","strings","data","itemIdField","itemFilterField","selectedPageSize","pageSize","useCallbackForFetchOnly","features","selectAll","deselectAll","filtering","paging","templates","sourceItemLayoutTemplate","sourceItemTemplate","selectedItemLayoutTemplate","selectedItemTemplate","sourceItemContentTemplate","itemContentTemplate","selectedItemContentTemplate","itemActions","doubleListBox","render","newValue","attr","Backbone","BingAccountTitleStep","_BaseImportStep","_superPropGet","isContinueButtonEnabled","buildTitle","activeTitle","summaryTitle","getState","isEditingScheduledImport","initialSettings","selectedBingAccountIds","strMultiAccountPreSelectedAccountIds","preSelectedAccountIds","split","accontId","set","grid","accountSelectionLists","on","isEdited","isValid","patchState","singleAccount","original","enabled","BaseImportStep","MultiGoogleAccountGridViewModel","SelectedAcountMaxCount","selectedAccount","accountMap","selectedAccountsHasCampaigns","hasNoCampaignsCustomerNameList","isDropdownMenuExpanded","showNoSelectedGoogleAccountError","showNoSelectedBingAccountError","showSelectedAccountCountExceedLimitError","showSelectedGoogleAccountNoCampaignError","BingAccountDropDownMenu","_React$PureComponent","props","onSelect","selectedItem","setState","updateSelection","onFetch","_ref$query","query","pageNumber","filterItems","bingAccountList","toLowerCase","indexOf","slice","totalCount","renderEmptyList","className","children","getString","renderItem","_jsxs","title","Currency","selectedBingAccountId","enableArrowKeysSupport","ariaLabel","FocusLock","EntitySelector","React","BingAccountListDropDownView","_len","args","Array","_key","selectedItemId","updateBingAccountId","updatedAccountMap","selectorString","bingAccountSelectionPlaceholder","updateBingAccountName","innerText","dropdownToggleSelector","setAttribute","remove","off","eventName","dropDownMenu","unavailableBingAccountIdList","toString","dropdownToggleString","element","grandparentEle","parentEle","createElement","appendChild","_element$getBoundingC","getBoundingClientRect","top","left","height","width","style","ReactDOM","ref","MultiGoogleAccountGridView","isRowSelected","selectedBingAccount","accountPair","parentElement","googleAccountData","bingAccountData","initialAccountMap","event","stopPropagation","target","closest","getAttribute","bingAccountListView","view","e","hasClass","parents","innerHTML","append","dataSource","type","primaryKey","selection","single","bodyClasses","headClasses","scrolling","virtualized","header","columns","sortable","accountName","field","property","helpId","local","enableToggleButton","selectedBingAccountName","BingAccountSelectionColTemplate","tableClasses","plugins","a11y","filter","search","container","placeholder","text","uiBlocker","generateConfig","obj","projectionGrid","vnext","use","a11yPlugin","placeholderPlugin","generateFilterPlugin","assistedSelectionPlugin","uiBlockerPlugin","gridView","memoryFilter","changes","addClass","itemArray","selected","removeClass","once","initialSelectedAccount","selectRow","googleCampaignsForSelectedAccounts","_this3","invalidCustomerNameList","googleCampaigns","invalidCustomerName","MultiAccountGoogleAccountStep","getSelectedItem","checkIfShouldUpdateAndResetFlagIfTrue","logActivities","renderSelectAdWordsAccount","start","hasNoData","currencyConversionView","CurrencyConversionView","ImportSource","google","importSourceAccountCurrency","bingAccountCurrency","isSingleAccountMode","googleCurrency","bingCurrency","stop","promises","repository","getGoogleCampaigns","autoCurrencyConversionEnabled","doConvert","validateSelectedAccountsHasCampaigns","catch","err","handleErrorInImport","finally","withUiBlock","GoogleAccountSelector","switchGoogleAccount","googleAccountList","dropdownMenuAriaLabel","DropdownSelector","mode","PageSize","renderSelectedItem","MultiAccountGoogleCampaignGridViewModel","editGoogleCampaignSelection","googleCampaignList","selectedGoogleCustomerId","selectedGoogleAccountFullCampaignList","cloneDeep","initCampaignSelection","itemCampaignIds","editItem","multiAccountsCampaignSelectionInfo","MultiAccountGoogleCampaignGridView","appConfig","repo","showPaused","renderGoogleAccountSelector","renderSingleAccountCampaignGridView","applyInitialSelection","googleAccountSelectorProps","bind","googleAccountSelectorElement","singleAccountView","createGoogleCampaignGridView","multiAccountMode","isAIMImportEnabled","IsAIMCampaignEnabled","disabled","updateMultiAccountCampaignSelectionInfo","getCurrentSetting","reservedInfoForSelectedAccount","selectCampaigns","importAll","selectedCustomerId","updatedMultiAccountsCampaignSelectionInfo","selectedCampaigns","allCampaigns","selectedCampaignId","campaignId","selectedCampaign","MultiAccountGoogleCampaignStep","generateImportUserPreferencesFromPreviousOptions","permissions","renderSelectAdWordsCampaigns","itemCustomerId","htmlAttributes","googleCampaignsSummary","getSummaryInfo","includePausedCampaigns","areAnyPausedCampaignsSelected","campaigns","allSelected","userCampaignSelection","totalCampaigns","CampaignSelection","getMultiAccountGoogleImportUserPreferences","previousImportOptions","onCredentialsError","handleGenericError","MultiAccountScheduleImportStep","_ScheduleImportStep","IsMultiAccountImport","taskItemBody","scheduleFormView","serializeImportSchedulingOptions","scheduledTaskItemBody","runNowTaskItemBody","prepareMultiAccountGoogleImportTaskItem","scheduleBody","createScheduledImportAndGoNextWhenReady","isScheduledImport","runNowBody","createRunNowImportAndGoNextWhenReady","ImportUserSettings","ScheduleFrequency","viewModel","chosenFrequency","ImportOptions","finalBody","scheduledTimeDisplayString","getDisplayString","updateScheduledImportTaskItem","taskItemId","createScheduledImportTaskItem","importButtonEnabled","_this4","createRunNowImportTaskItem","ScheduleImportStep","MultiAccountImportSummaryStep","_ImportSummaryStep","showDisplayCampaignAlert","containDisplayType","getSelectedCampaigns","summaryText","replace","showAlert","displayText","method","class","redirectToImportScheduleAndHistory","tmp","campaign","cm","includes","ImportSummaryStep","MultiAccountGoogleImportStepFactory","check","steps","stepName","stepView","linkTextForTitle","createBingAccountTitleStep","GoogleLoginStep","previousStepName","singleAccountMode","createGoogleLoginStep","createGoogleAccountStep","createGoogleCampaignStep","GoogleImportOptionsStep","isCustomerLevel","createImportOptionsStep","createScheduleImportStep","createImportSummaryStep","MultiAccountGoogleImportPage","_ref$options","checkRequiredDepsForGoogleImport","perfMarker","subTitle","isGoogleAccountSkipped","googleImportRepository","initialState","baseImportOptions","createSteps","isContinueImport","importId","subFieldsBlacklist","showAllStepsInLastStepFunc","currentStep","enableEdit","onSwitchFinished","hide","$accountEdit","show","_this$googleImportRep","apply","willRender","initialStateFetchPromise","getImportTaskItem","taskItem","currentUserId","ModifiedBy","cookieHelperForEditImport","getSessionId","deleteCookie","baseImportView","BaseImportView","attachPageEventHandlers","googleLoginStepView","googleCampaignStepView","logoutGoogle","currentStepInstance","savedSetting","isEditEnabledForWizard","goToStep","targetRect","PopoverView","position","isAbsolute","bottom","containerClassName","setContent","contents","TitledContent","setTitle","setBody","BingAccountViewDetailsTempalte","selectedAccounts","tempGoogleCustomerName","tempBingAccountName","customizedContents","showPopoverTableView","logoutGoogleWithErrorMessage","onContinueImportView","_this$initialState$in","setGoogleImportAccountInfoInCookie","loginAccount","pug","module","exports","locals","pug_interp","pug_html","locals_for_with","escape","call","$$obj","pug_index0","$$l","val","count","ScopeSelectorLevelType","FilterKeyType","AccountCampaignContainerType","AccountCampaignOptionType","ScopeFilterLevelType","statusMap","Active","Inactive","constructor","rest","childFetched","optionType","expanded","number","extra","unAuthorized","deepness","isSelected","visible","addChild","option","parent","updateDeepness","resetChildren","child","midTraverseTree","visitSeq","o","find","predicate","i","res","containerKey","super","childPagination","updateChildPagination","SelectorRootOption","isRoot","SelectorContainerViewType","setup","classes","createStyleSheet","selectorContainerHidden","display","color","selectorTreeExpandIcon","verticalAlign","float","marginTop","marginRight","attach","SelectorTree","Component","onChange","nodes","rootNode","refresh","nodeRenderer","node","selectorNode","renderSelectorNode","containerConfig","onAdd","onRemove","classNames","hideAccountNodeArrow","ExpandableNode","updateTypeHandlers","nodeCache","rebuildNodeTreeIncrementally","TreeView","treeViewClassNames","selectorTree","iconsClassNameMap","collapsed","lastChild","expandIconAriaLabel","buildNodeTree","buildNode","rootOption","map","v","buildNodeCache","params","styles","selectorTreeHeight","margin","padding","buildSelectorTreeStyles","containerHeight","SelectorList","selectorList","selectorListHeight","overflow","buildSelectorListStyles","visibleOptions","AutoSizer","defaultHeight","defaultWidth","List","rowCount","rowHeight","rowRenderer","rowProps","index","renderListNode","SelectorContainer","containerContent","containerViewType","tree","containerHeader","renderSelectorHeader","col","coordinate","row","UiBlocker","blocking","isLoading","loadingText","blockUiContainer","blockerIndicator","Selector","PureComponent","containerMap","customerAccount","confirmOptionVisiblity","Row","Col","xs","optionContainerConfig","childrenVisible","localFilter","Set","toStringFunction","setCache","contains","add","isEmpty","Object","keys","size","callback","isSubsetOf","otherSet","isSub","difference","union","toArray","utils","leftArr","rightArr","getKey","cache","DoubleList","newSelected","originSelected","unionSelected","bubbleSelected","updateSelected","unselected","removeUnselected","removeAll","buildOptionSet","selectedSet","defaultSelectedOptions","prepareDefaultSelectedOptions","refreshEnabled","SelectorBox","selectorBox","ResultBox","resultBox","doubleList","isReportingUIPhaseNext","selectorBoxConfig","leftOptionList","rightOptionList","selectedOptionSetList","buildSelectedSetByDeepness","optionSet","processedSet","optionArr","j","isAncestorSelected","childrenSet","unselectedOption","removeOneUnselected","isOptionInList","optionList","disableRefresh","enableRefresh","optionSetList","sharedBasicStyle","doubleListHeight","bingColor","doubleListBackgroundColor","containerBorder","containerHegiht","resultListHeight","headerStyle","backgroundColor","fontWeight","maxLimitContainer","paddingBottom","paddingLeft","clear","border","paddingRight","right","selectorTreeNode","opacity","cursor","flex","textOverflow","whiteSpace","selectorNodeArrow","selectorListNode","addAll","addAllText","selectorAccountContainerHeader","selectorCampaignContainerHeader","selectorBoxHeader","searchListHeader","borderBottom","selectorDrillUpButton","clearIcon","selectorNodeOverflowSafeText","maxWidth","selectorAccountNodeText","selectedNodeArrow","accountNodeSelectedText","resultListBox","resultListHeader","resultListItemArrow","resultList","paddingTop","resultListItem","resultListItemContent","resultParentChainItem","parentArrow","itemName","accountParent","padidngTop","removeAllText","hidden","scopeSelector","GlyphiconWrapper","ajustStyle","isUINext","Glyphicon","glyph","baIcon","env","ContainerConfigFactory","store","isInternalSearch","isOnApiSearch","isInternalReport","searchTerm","some","customerAccountContainer","scopeFilterLevel","scopeSelectorLevel","ops","selectorNodeText","lastColumnInfo","forceAccountScope","customer","serviceLevel","advertiserCustomerName","onClick","expandableOption","drillDown","status","headerStr","Customer","tabIndex","role","campaignSearchStr","customerAccountSearchStr","onQueryCustomerAccountChange","onQueryCampaignChange","onSearchCustomerAccount","searchCustomerAccount","onSearchCampaign","searchCampaign","onClearSearchCampaign","clearSearchCampaign","onClearSearchCustomerAccount","clearSearchCustomerAccount","onSelectScopeLevel","selectScopeLevel","getContainerHeight","campaignContainer","list","showCampaignsWithinCurrentAccount","Campaign","accountId","drillUp","createContainerConfig","AccountCampaignResultBox","isUIVnext","reverse","renderResultNode","renderParentChain","parentChain","parentOption","childOption","jonitParentStr","reduce","joint","AccountCampaignSelectorBox","onSearch","async","serachText","trim","onQueryChange","onClearSearch","getPlaceholder","hideAccountSearchBar","showSearchBar","SearchBox","maxLength","Select","Account","ccJsDataStore","fetchDefaultSelectedOptions","filters","global","window","reporting","accountTree","selectedScopeFilters","fetchSelectedScopeFilters","buildDefaultSelectedOptions","selectedOptions","findCustomerAndAccountFromMultiOptions","findCustomerAndAccount","foundOption","found","campaignFilter","FilterKey","all","Values","searchHistorySelectorOptions","undeterminedAccounts","foundAccount","loadCampaigns","campaignOption","allAccountIds","selectedAccountIds","sort","buildCustomerAccountOptionTree","entities","entity","isCustomer","customerOption","accountOption","fetchAndBuildCustomerAccountOptionTree","rootCustomerId","customerId","hierarchyMaxAccountLimit","customFetchAndBuildAccountOptionList","fetchAndBuildCampaignOptionList","customers","limit","CustomerHierarchy","findAll","returnOnlyDirectlyLinkedEntities","contentType","dataType","cacheResponse","preProcess","xhrFields","withCredentials","fetchCustomerHierarchy","customFetchAndBuildCampaignOptionList","odataURI","headers","$top","$count","$select","$orderby","oDataToken","host","path","fetchCampaigns","selectorOption","buildCampaignOptionList","fetchAndBuildSearchCustomerList","searchText","userId","searchCustomers","http","ReqId","generateGuid","fetchSearchCustomerList","advertiserCustomerId","fetchAndBuildSearchAccountList","searchAccounts","fetchSearchAccountList","AccountCampaignDataStore","StateStore","searchRootOption","initRootOption","loading","defaultCampaignParentOption","isCreateSimilar","defaultSelectedOption","ccBaseUrl","featurePilots","IsReportingUINewDesignEnabled","maxAccountLimit","isBeyondAccountLimit","initialSetUp","defaultSelected","onSelectedChange","buildInitialDoubleListOptions","countAccount","toRdsSelected","fromRdsSelected","accountNumber","searchCustomer","searchAccount","searchOption","newSearchHistorySelectorOptions","scopeLevel","rdsSelected","CustomerScopes","String","AccountIds","CampaignReportScopes","scope","CampaignId","userAllSelected","userSelected","accountIds","campaignReportScopes","customerScopes","shift","Number","getSelected","customerFilter","accountFilter","underminedAccountFilter","Filters","AccountCampaignSelectorInternal","ds","allSelectedCorrected","loaded","setAllSelected","setSelected","generateBeyondAccountLimitText","ccJsData","allStr","specificStr","finishedLoading","radioArea","hideRadioButtons","sm","Radio","checked","defaultVisibleExpandableOptionList","componentDidMount","ccToken","componentDidUpdate","correctDefaultAllSelected","AccountCampaignSelector","withCcJsData","withDefaultStyles","withPerfMarker","withStateStore","components","core","outline","fontFamily","content","fontSize","marginBottom","marginLeft"],"sourceRoot":""}