{"version":3,"file":"static/js/application.initial~ca746a7a.42734826.js","mappings":"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","sources":["../../../node_modules/@bingads-webui/campaign-entity-dependants/src/index.js","../../../node_modules/@bingads-webui/custom-column-service-wrapper/src/index.js"],"sourcesContent":["import _ from 'underscore';\r\n\r\n/* eslint-disable max-len */\r\n\r\nconst deps = {};\r\n\r\nfunction addDependency(from, to) {\r\n deps[to] = deps[to] || [];\r\n deps[to].push(from);\r\n}\r\n\r\nfunction addDependencies(from, to) {\r\n const [fromArr, toArr] = [from, to].map(o => (_.isArray(o) ? o : [o]));\r\n _.each(fromArr, f => _.each(toArr, t => addDependency(f, t)));\r\n}\r\n\r\n// addDependencies(EntityA, EntityB) means:\r\n// as long as EntityB is changed, invalidate the cache for EntityA\r\n\r\n// Start adding dependencies\r\naddDependencies(['AdGroup', 'CampaignCriterion', 'Enum.CampaignType', 'NegativeCampaignDsaTarget', 'CampaignNegativeWebpage', 'FeedAssociation', 'SharedEntityAssociation'], 'Campaign');\r\naddDependencies(['Keyword', 'Ad', 'CampaignCriterion', 'DsaTarget', 'NegativeAdGroupDsaTarget', 'AudienceAssociation'], 'AdGroup');\r\naddDependencies(['Campaign', 'AdGroupCriterion'], 'CampaignCriterion');\r\naddDependencies('Campaign', 'ShoppingCampaign'); // ShoppingCampaign is a \"dynamic\"/\"virtual\" subclass of Campaign\r\naddDependencies('NegativeKeyword', ['CampaignNegativeKeyword', 'AdGroupNegativeKeyword', 'SearchTerm']);\r\naddDependencies(['Campaign', 'PerformanceTargetInstance', 'PerformanceTimeSeries'], 'PerformanceTarget');\r\naddDependencies(['Campaign', 'AdGroup', 'Keyword', 'NegativeKeyword', 'Ad', 'CampaignCriterion', 'AdGroupCriterion'], 'Experiment');\r\naddDependencies('AssetLink', 'Ad');\r\naddDependencies('Campaign', 'SeasonalityAdjustment');\r\naddDependencies('SearchTerm', ['Keyword', 'NegativeKeyword', 'CampaignNegativeKeyword', 'AdGroupNegativeKeyword']);\r\naddDependencies(['Account', 'Campaign', 'AdGroup', 'Ad', 'AutomatedExtension', 'AdExtensionAssociation', 'Keyword', 'SearchTerm'], 'CustomColumn');\r\naddDependencies(['Campaign', 'AdGroup', 'Keyword', 'Ad'], 'AdCustomizerAttribute');\r\naddDependencies(['Campaign', 'ProductListingGroup', 'AudienceAssociation', 'AssetLink', 'AssetGroupInstance', 'AudienceGroup'], 'AssetGroup');\r\naddDependencies('AssetGroup', 'AudienceGroup');\r\naddDependencies(['Campaign', 'ConversionGoalDetails'], 'Goal');\r\naddDependencies(['FeedAssociation'], 'Feed');\r\n\r\n// If PortfolioBidStrategy is created / renamed, need to invalidate Campaign cache, otherwise bid strategy name in campaign grid is incorrect.\r\naddDependencies('Campaign', 'PortfolioBidStrategy');\r\n// If Campaign is deleted, need to invalidate PortfolioBidStrategy cache, otherwise the associated campaigns count in portfolio grid is incorrect.\r\n// If Campaign is imported, need to invalidate PortfolioBidStrategy cache, otherwise imported PortfolioBidStrategy does not show.\r\naddDependencies('PortfolioBidStrategy', 'Campaign');\r\n\r\n// Mutual dependency between Ad and its subclasses\r\nconst adTypes = [\r\n 'TextAd',\r\n 'MobileAd',\r\n 'ProductAd',\r\n 'AppInstallAd',\r\n 'DynamicSearchAd',\r\n 'ExpandedTextAd',\r\n 'ResponsiveAd',\r\n 'ResponsiveSearchAd',\r\n 'HotelAd',\r\n];\r\naddDependencies('Ad', adTypes);\r\naddDependencies(adTypes, 'Ad');\r\n// End adding dependencies\r\n\r\nexport const dependants = _.mapObject(deps, d => _.uniq(d));\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { parseIdFromGridKey, MCCPREFERENCENAME } from '@bingads-webui-universal/custom-column-utils';\r\nimport { getEntityFromScope, edmCampaign } from '@bingads-webui/edm-campaign';\r\nimport { QueryParam } from '@bingads-webui-react/scope-service';\r\n\r\nconst expressionToken = /(\\+|-|\\*|\\/|\\(|\\)| )/;\r\n\r\nfunction updatePreferenceStoreWithColumn(customColumn) {\r\n const existingColumns = this.getAll();\r\n const editCustomColumnData = _.defaults({\r\n id: parseIdFromGridKey(customColumn.id),\r\n }, customColumn);\r\n const customColumns = _.reject(existingColumns, col => editCustomColumnData.id === col.id)\r\n .concat(customColumn);\r\n\r\n this.setPreferencesRecord(this.recordId, customColumns);\r\n}\r\n\r\nfunction getCustomColumnsFromMT(avoidCache) {\r\n if (avoidCache) {\r\n edmCampaign['odata.cache'].invalidateTypeCache('Model.CustomColumn');\r\n }\r\n\r\n return this.getCustomColumnEntity().findAll({ limit: 100 })\r\n .then(data => _.map(data, column => ({\r\n description: column.Description,\r\n expression: _.filter(column.CustomColumnExpression.split(expressionToken), token => token !== '' && token !== ' '),\r\n format: column.Format,\r\n id: String(column.Id),\r\n name: column.Name,\r\n })));\r\n}\r\n\r\nexport class CustomColumnServiceWrapper {\r\n constructor({\r\n name,\r\n CustomColumns,\r\n }) {\r\n _.extend(this, {\r\n name,\r\n CustomColumns,\r\n isMCCLevel: name === MCCPREFERENCENAME,\r\n });\r\n }\r\n\r\n get query() {\r\n return {\r\n project: 'CampaignUI',\r\n grid: this.name,\r\n };\r\n }\r\n\r\n get recordId() {\r\n return (this.getPreferencesRecord() || {}).id || -1;\r\n }\r\n\r\n getPreferencesRecord() {\r\n return _.first(this.CustomColumns.filter({ where: this.query }));\r\n }\r\n\r\n setPreferencesRecord(recordId, customColumns) {\r\n const promises = [];\r\n\r\n if (recordId === -1) {\r\n promises.push(this.CustomColumns.create(_.defaults(\r\n {\r\n customColumns,\r\n },\r\n this.query\r\n )));\r\n } else {\r\n promises.push(this.CustomColumns.update(recordId, { customColumns }));\r\n }\r\n\r\n return Promise.all(promises).thenReturn();\r\n }\r\n\r\n warmCache() {\r\n return this.CustomColumns.findAll({ where: this.query });\r\n }\r\n\r\n getAll() {\r\n const record = this.getPreferencesRecord();\r\n\r\n return record ? record.get('customColumns') : [];\r\n }\r\n\r\n get(id) {\r\n return _.findWhere(this.getAll(), { id });\r\n }\r\n\r\n add(column) {\r\n return this.getCustomColumnEntity().post({\r\n Name: column.name,\r\n Description: column.description,\r\n CustomColumnExpression: column.expression.join(''),\r\n Format: column.format,\r\n }).toPromise().then(({ value }) => {\r\n const id = String(value);\r\n\r\n this.setPreferencesRecord(this.recordId, this.getAll().concat(_.defaults({\r\n id,\r\n }, column)));\r\n\r\n return id;\r\n });\r\n }\r\n\r\n remove(columnId) {\r\n const customColumnId = parseIdFromGridKey(columnId);\r\n\r\n this.getCustomColumnEntity().$withKey(customColumnId).destroyAsPromise();\r\n const existingColumns = this.getAll();\r\n\r\n if (!_.isEmpty(existingColumns)) {\r\n const customColumns = _.reject(existingColumns, col => customColumnId === col.id);\r\n\r\n this.setPreferencesRecord(this.recordId, customColumns);\r\n }\r\n }\r\n\r\n edit(customColumn) {\r\n return this.getCustomColumnEntity().post({\r\n Id: parseInt(customColumn.id, 10),\r\n Name: customColumn.name,\r\n Description: customColumn.description,\r\n CustomColumnExpression: customColumn.expression.join(''),\r\n Format: customColumn.format,\r\n }).toPromise().then(({ value }) => {\r\n const id = String(value);\r\n if (id === customColumn.id) {\r\n updatePreferenceStoreWithColumn.call(this, customColumn);\r\n }\r\n return id;\r\n });\r\n }\r\n\r\n // get custom columns from MT and update preference store\r\n updateCustomColumnPreferenceStore(avoidCache = false) {\r\n return getCustomColumnsFromMT.call(this, avoidCache).then((latestColumns) => {\r\n const currentColumns = this.getAll();\r\n\r\n this.setPreferencesRecord(this.recordId, latestColumns);\r\n\r\n const columnGroups = _.groupBy(latestColumns, (newColumn) => {\r\n const index = _.findIndex(currentColumns, oldColumn => (newColumn.id === oldColumn.id));\r\n if (index === -1) {\r\n return 'addedColumns';\r\n }\r\n if (_.isEqual(currentColumns[index], newColumn)) {\r\n return 'noChange';\r\n }\r\n return 'editedColumns';\r\n });\r\n\r\n const removedColumns = _.filter(\r\n currentColumns,\r\n oldColumn => _.findIndex(latestColumns, newColumn => (newColumn.id === oldColumn.id)) === -1\r\n );\r\n\r\n return new Promise((resolve) => {\r\n resolve({\r\n removedColumns,\r\n editedColumns: columnGroups.editedColumns,\r\n addedColumns: columnGroups.addedColumns,\r\n });\r\n });\r\n });\r\n }\r\n\r\n getCustomColumnEntity() {\r\n const queryParam = new QueryParam(window.location);\r\n\r\n queryParam.remove(['adGroupId', 'campaignId']);\r\n const { currentEntity } = getEntityFromScope(queryParam);\r\n\r\n return currentEntity.CustomColumns;\r\n }\r\n\r\n getCustomColumnDetailFromMT(id) {\r\n return this.getCustomColumnEntity().$withKey(id).get().fetch()\r\n .then((column) => {\r\n const formatted = {\r\n description: column.Description,\r\n expression: _.filter(column.CustomColumnExpression.split(expressionToken), token => token !== '' && token !== ' '),\r\n format: column.Format,\r\n id: String(column.Id),\r\n name: column.Name,\r\n };\r\n updatePreferenceStoreWithColumn.call(this, formatted);\r\n\r\n return formatted;\r\n });\r\n }\r\n}\r\n"],"names":["deps","addDependencies","from","to","_map","map","o","_","_map2","_slicedToArray","fromArr","toArr","f","t","push","addDependency","adTypes","dependants","d","expressionToken","updatePreferenceStoreWithColumn","customColumn","existingColumns","this","getAll","editCustomColumnData","id","parseIdFromGridKey","customColumns","col","concat","setPreferencesRecord","recordId","getCustomColumnsFromMT","avoidCache","edmCampaign","invalidateTypeCache","getCustomColumnEntity","findAll","limit","then","data","column","description","Description","expression","CustomColumnExpression","split","token","format","Format","String","Id","name","Name","CustomColumnServiceWrapper","_createClass","_ref","CustomColumns","_classCallCheck","isMCCLevel","MCCPREFERENCENAME","key","get","project","grid","getPreferencesRecord","value","filter","where","query","promises","create","update","Promise","thenReturn","record","_this","post","join","toPromise","_ref2","columnId","customColumnId","$withKey","destroyAsPromise","_this2","parseInt","_ref3","call","_this3","arguments","length","undefined","latestColumns","currentColumns","columnGroups","newColumn","index","oldColumn","removedColumns","resolve","editedColumns","addedColumns","queryParam","QueryParam","window","location","remove","getEntityFromScope","currentEntity","_this4","fetch","formatted"],"sourceRoot":""}