{ "version": 3, "sources": ["libs/integrated-search/tactics/data-access/shared/src/services/integrated-search-tactics-data-access-shared-tactics-api.service.ts", "libs/integrated-search/tactics/data-access/shared/src/state/integrated-search-tactics-data-access-charts.repository.ts", "libs/integrated-search/tactics/data-access/shared/src/state/integrated-search-tactics-data-access-charts.effects.ts", "libs/integrated-search/tactics/data-access/shared/src/integrated-search-tactics-data-access.module.ts", "libs/integrated-search/tactics/data-access/shared/src/services/integrated-search-tactics-data-access-shared-tactic-metrics-list.service.ts", "libs/integrated-search/tactics/data-access/shared/src/services/integrated-search-tactics-data-access-shared-performance-metrics.service.ts", "libs/integrated-search/tactics/data-access/shared/src/services/integrated-search-tactics-data-access-shared-performance-keyword-list.service.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { Params } from '@angular/router';\nimport { catchError, EMPTY, Observable, of, tap } from 'rxjs';\n\nimport { ISTacticFilters, ISTacticPerformanceFilters } from '@ess/integrated-search/filters/shared/utils';\nimport {\n IS_TACTIC_ACTION_MESSAGE,\n IS_TACTIC_PERFORMANCE_DICTIONARY,\n ISAddToNegativesValue,\n ISApprovals,\n ISRecommendation,\n ISRecommendationSummary,\n ISTacticAction,\n ISTacticsEnum,\n} from '@ess/integrated-search/tactics/shared/utils';\nimport { SharedDataAccessApiService } from '@ess/shared/data-access';\nimport { SharedFeatureServicesUserInteractionService } from '@ess/shared/feature/services';\nimport { EssGtagHelper, EssRequestParamsHelper } from '@ess/shared/utils/helpers';\nimport { SharedLineChartData } from '@ess/shared/utils/models';\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessSharedTacticsApiService {\n constructor(\n private readonly __api: SharedDataAccessApiService,\n private readonly __uiService: SharedFeatureServicesUserInteractionService,\n ) {}\n\n getRecommendationsSummary(\n resource: ISTacticsEnum,\n projectId: number,\n { timespan: { start_date, end_date }, ...filters }: ISTacticFilters,\n ): Observable> {\n return this.__api\n .post, Params>(\n `tactics/${resource}/${projectId}/summary`,\n EssRequestParamsHelper.getData({\n start_date,\n end_date,\n ...filters,\n }),\n )\n .pipe(\n catchError(() => {\n this.__uiService.openSnackbar({\n data: {\n type: 'error',\n text: 'There was an error while fetching recommendations summary. Please try again later.',\n },\n });\n return of([]);\n }),\n );\n }\n\n getChartData(\n resource: ISTacticsEnum,\n projectId: number,\n { timespan: { start_date, end_date }, ...filters }: ISTacticFilters,\n performanceFilters?: ISTacticPerformanceFilters,\n ): Observable {\n return this.__api\n .post(\n `tactics/${resource}/${projectId}/chart`,\n EssRequestParamsHelper.getData({\n start_date,\n end_date,\n ...filters,\n ...performanceFilters,\n }),\n )\n .pipe(\n catchError(() => {\n this.__uiService.openSnackbar({\n data: {\n type: 'error',\n text: 'There was an error while fetching chart data. Please try again later.',\n },\n });\n return of({ categories: [], series: [] });\n }),\n );\n }\n\n performAction(\n resource: ISTacticsEnum,\n { recommendation, keyword, country, search_term, action }: ISTacticAction,\n projectId: number,\n ): Observable {\n return this.__api\n .post(\n `tactics/${resource}/${projectId}/${IS_TACTIC_PERFORMANCE_DICTIONARY[resource].entityActionPath}`,\n {\n recommendation,\n keyword,\n country,\n search_term,\n action,\n },\n )\n .pipe(\n tap({\n next: () => {\n this.__uiService.openSnackbar({\n data: {\n text: IS_TACTIC_ACTION_MESSAGE.success[action!] ?? 'Recommendation approved.',\n type: 'success',\n },\n });\n EssGtagHelper.sendEvent('isd_recommendation_status_change', {\n event_action: `Recommendation status change`,\n event_category: 'Approval',\n performed_action: action,\n project_id: projectId,\n });\n },\n error: () => {\n this.__uiService.openSnackbar({\n data: {\n text:\n IS_TACTIC_ACTION_MESSAGE.error[action!] ??\n 'There were some problems. Please try to approve this recommendation again.',\n type: 'error',\n },\n });\n },\n }),\n );\n }\n\n getApprovals(\n resource: ISTacticsEnum,\n projectId: number,\n {\n timespan: { start_date, end_date },\n country,\n search_term__like,\n keyword__like,\n assigned_category_value_ids,\n not_assigned_category_ids,\n ad_group_ids,\n campaign_ids,\n }: ISTacticFilters,\n performanceFilters?: ISTacticPerformanceFilters,\n ): Observable[]> {\n return this.__api\n .get[]>(`tactics/${resource}/${projectId}/approvals`, {\n params: EssRequestParamsHelper.getParams({\n start_date,\n end_date,\n country,\n search_term__like,\n keyword__like,\n assigned_category_value_ids,\n not_assigned_category_ids,\n ad_group_ids,\n campaign_ids,\n ...performanceFilters,\n }),\n })\n .pipe(\n catchError(() => {\n this.__uiService.openSnackbar({\n data: {\n type: 'error',\n text: 'There was an error while fetching approved recommendations. Please try again later.',\n },\n });\n return of([]);\n }),\n );\n }\n\n getAddToNegativesValue(\n projectId: number,\n { timespan: { start_date, end_date }, ...filters }: ISTacticFilters,\n ): Observable {\n return this.__api\n .post(\n `tactics/channel-overlap/${projectId}/add-to-negatives-value`,\n EssRequestParamsHelper.getData({\n start_date,\n end_date,\n ...filters,\n }),\n )\n .pipe(\n catchError(() => {\n this.__uiService.openSnackbar({\n data: {\n type: 'error',\n text: 'There was an error while fetching value. Please try again later.',\n },\n });\n return of(null);\n }),\n );\n }\n\n downloadCSV(\n resource: ISTacticsEnum,\n projectId: number,\n { timespan: { start_date, end_date }, ...filters }: ISTacticFilters,\n ): Observable {\n return this.__api\n .post(\n `tactics/${resource}/${projectId}/csv`,\n EssRequestParamsHelper.getData({\n start_date,\n end_date,\n ...filters,\n }),\n {\n responseType: 'text',\n },\n )\n .pipe(\n catchError(() => {\n this.__uiService.openSnackbar({\n data: {\n type: 'error',\n text: 'There was an error while downloading the CSV file.',\n },\n });\n return EMPTY;\n }),\n );\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { createStore, setProp, withProps } from '@ngneat/elf';\nimport {\n addEntities,\n deleteAllEntities,\n getActiveEntity,\n hasEntity,\n resetActiveId,\n selectActiveEntity,\n selectActiveId,\n setActiveId,\n updateEntities,\n withActiveId,\n withEntities,\n} from '@ngneat/elf-entities';\nimport { excludeKeys, localStorageStrategy, persistState } from '@ngneat/elf-persist-state';\nimport { filter, map, Observable } from 'rxjs';\n\nimport {\n ISMetricEnum,\n ISNumericMetricEnum,\n ISStoreEnum,\n ISTacticKey,\n ISUser,\n} from '@ess/integrated-search/shared/utils';\nimport {\n ISTacticChartSeries,\n ISTacticMetricTab,\n ISTacticMetricTabConfig,\n ISTacticMetricTabs,\n ISTacticsInitialChartDefsHelper,\n} from '@ess/integrated-search/tactics/shared/utils';\nimport { SharedActiveEntitiesStore, SharedStoreValue } from '@ess/shared/utils/models';\n\ninterface StoreProps {\n user: string | null;\n}\n\ntype Store = SharedActiveEntitiesStore;\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessChartsRepository {\n readonly activeProject$: Observable;\n\n private readonly __store: Store;\n\n get activeEntity(): ISTacticMetricTabs | undefined {\n return this.__store.query(getActiveEntity());\n }\n\n constructor() {\n this.__store = this.__createStore();\n this.__persistState();\n\n this.activeProject$ = this.__store.pipe(selectActiveId());\n }\n\n getTabsConfig$(key: ISTacticKey): Observable {\n return this.__store.pipe(\n selectActiveEntity(),\n filter(Boolean),\n map((config: ISTacticMetricTabs) => config[key]),\n );\n }\n\n setActiveUser(user: ISUser): void {\n const currentUser: string | null = this.__store.getValue().user;\n if (!currentUser || currentUser === user.email) {\n this.__store.update(setProp('user', user.email));\n } else {\n this.__store.update(setProp('user', user.email), deleteAllEntities());\n }\n }\n\n setActiveProject(projectId: number | null): void {\n if (projectId) {\n if (this.__store.query(hasEntity(projectId))) {\n this.__store.update(setActiveId(projectId));\n } else {\n this.__store.update(addEntities(this.__getInitialState(projectId)), setActiveId(projectId));\n }\n } else {\n this.__store.update(resetActiveId());\n }\n }\n\n updateTabsConfig(key: ISTacticKey, chartConfig?: ISTacticMetricTabConfig[]): void {\n const tabsConfig = this.activeEntity;\n if (!tabsConfig) return;\n\n let updatedConfig: ISTacticMetricTabs = { ...tabsConfig };\n if (chartConfig) {\n updatedConfig = {\n ...tabsConfig,\n [key]: { tabs: chartConfig },\n };\n }\n\n this.__store.update(updateEntities(tabsConfig.projectId, updatedConfig));\n }\n\n private __createStore(): Store {\n return createStore(\n { name: ISStoreEnum.CHART_TABS },\n withProps({\n user: null,\n }),\n withEntities({ idKey: 'projectId' }),\n withActiveId(),\n );\n }\n\n private __persistState(): void {\n persistState(this.__store, {\n key: 'integratedSearchTacticsDataAccess',\n storage: localStorageStrategy,\n source: () => this.__store.pipe(excludeKeys(['ids', 'activeId'])),\n preStoreInit: (value: SharedStoreValue) => this.__preStoreInitChecks(value),\n });\n }\n\n private __preStoreInitChecks(value: SharedStoreValue): SharedStoreValue {\n const entities: Record = value.entities;\n Object.entries(entities).forEach(([key, value]) => (entities[+key] = this.__checkMetrics(value)));\n return value;\n }\n\n private __checkMetrics(tabs: ISTacticMetricTabs): ISTacticMetricTabs {\n const metrics = Object.values(ISNumericMetricEnum);\n const archive: { [key: string]: ISTacticChartSeries } = {\n conversion_rate: ISMetricEnum.PPC_CONVERSION_RATE,\n conversions_value: ISMetricEnum.CONVERSIONS_VALUE,\n roas: ISMetricEnum.PPC_ROAS,\n conversions: ISMetricEnum.PPC_CONVERSIONS,\n ctr: ISMetricEnum.PPC_CTR,\n impressions_ppc: ISMetricEnum.PPC_IMPRESSIONS,\n impressions_seo: ISMetricEnum.SEO_IMPRESSIONS,\n spend: ISMetricEnum.PPC_SPEND,\n combined: ISMetricEnum.COMBINED_IMPRESSIONS,\n ppc: ISMetricEnum.PPC_IMPRESSIONS,\n seo: ISMetricEnum.SEO_IMPRESSIONS,\n };\n\n const checkMetric = (metric: ISTacticChartSeries): ISTacticChartSeries | null => {\n const lowercased = metric.toLowerCase() as ISNumericMetricEnum;\n return metrics.includes(lowercased) ? lowercased : (archive[lowercased] ?? null);\n };\n\n Object.keys(tabs).forEach((path) => {\n const tabsConfig: ISTacticMetricTabConfig[] | undefined = tabs[path as ISTacticKey].tabs;\n if (tabsConfig?.length) {\n tabsConfig.forEach((tab) =>\n tab.charts.forEach((chart) => {\n chart.metric_1 = chart.metric_1 ? checkMetric(chart.metric_1) : null;\n chart.metric_2 = chart.metric_2 ? checkMetric(chart.metric_2) : null;\n }),\n );\n }\n });\n\n return tabs;\n }\n\n private __getInitialState(projectId?: number): ISTacticMetricTabs {\n return ISTacticsInitialChartDefsHelper.getInitialState(projectId);\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { createEffect, ofType } from '@ngneat/effects';\nimport { map } from 'rxjs';\n\nimport { IntegratedSearchAuthDataAccessAuthActions as AuthActions } from '@ess/integrated-search/auth/data-access';\nimport { IntegratedSearchProjectsDataAccessActions as ProjectsActions } from '@ess/integrated-search/projects/data-access';\n\nimport { IntegratedSearchTacticsDataAccessChartsRepository } from './integrated-search-tactics-data-access-charts.repository';\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessChartsEffects {\n setActiveTabsConfig$ = createEffect((actions) =>\n actions.pipe(\n ofType(ProjectsActions.setActiveProjectSuccess),\n map(({ projectId }) => this.__repo.setActiveProject(projectId)),\n ),\n );\n\n setActiveUser$ = createEffect((actions) =>\n actions.pipe(\n ofType(AuthActions.authSuccessFinished),\n map(({ user }) => this.__repo.setActiveUser(user)),\n ),\n );\n\n constructor(private readonly __repo: IntegratedSearchTacticsDataAccessChartsRepository) {}\n}\n", "import { NgModule } from '@angular/core';\nimport { provideEffects } from '@ngneat/effects-ng';\n\nimport { IntegratedSearchTacticsDataAccessChartsEffects } from './state/integrated-search-tactics-data-access-charts.effects';\nimport { IntegratedSearchTacticsDataAccessChartsRepository } from './state/integrated-search-tactics-data-access-charts.repository';\n\n@NgModule({\n providers: [\n IntegratedSearchTacticsDataAccessChartsRepository,\n provideEffects(IntegratedSearchTacticsDataAccessChartsEffects),\n ],\n})\nexport class IntegratedSearchTacticsDataAccessModule {}\n", "import { Inject, Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\n\nimport { IntegratedSearchFiltersDataAccessTacticsFacade } from '@ess/integrated-search/filters/data-access';\nimport { ISTacticFilters } from '@ess/integrated-search/filters/shared/utils';\nimport { IntegratedSearchProjectsDataAccessFacade } from '@ess/integrated-search/projects/data-access';\nimport {\n IS_TACTICS_RESOURCE_PATH,\n ISTacticMetric,\n ISTacticMetricsList,\n ISTacticsEnum,\n} from '@ess/integrated-search/tactics/shared/utils';\nimport { AbstractSharedDataAccessListService, SharedDataAccessApiService } from '@ess/shared/data-access';\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessSharedTacticMetricsListService<\n U extends ISTacticMetric,\n> extends AbstractSharedDataAccessListService> {\n set projectId(value: number | null) {\n this.__projectId = value;\n }\n\n activeProject$ = this.__projectsFacade.activeProject$;\n\n private __projectId: number | null = null;\n\n protected get resourcePath(): string {\n return `tactics/${this.__resource}/${this.__projectId}`;\n }\n\n constructor(\n api: SharedDataAccessApiService,\n @Inject(IS_TACTICS_RESOURCE_PATH) private readonly __resource: ISTacticsEnum,\n private readonly __filtersFacade: IntegratedSearchFiltersDataAccessTacticsFacade,\n private readonly __projectsFacade: IntegratedSearchProjectsDataAccessFacade,\n ) {\n super(api);\n this._method = 'post';\n }\n\n filters$(): Observable {\n return this.__filtersFacade.filters$.pipe(\n tap(() => (this.projectId = this.__projectsFacade.activeProjectEntity!.project_id)),\n );\n }\n}\n", "import { Inject, Injectable } from '@angular/core';\n\nimport {\n IS_TACTICS_RESOURCE_PATH,\n ISTacticMetric,\n ISTacticMetricsList,\n ISTacticsEnum,\n} from '@ess/integrated-search/tactics/shared/utils';\nimport { AbstractSharedDataAccessListService, SharedDataAccessApiService } from '@ess/shared/data-access';\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessSharedPerformanceMetricsService<\n U extends ISTacticMetric,\n> extends AbstractSharedDataAccessListService> {\n set projectId(value: number | null) {\n this.__projectId = value;\n }\n\n private __projectId: number | null = null;\n\n protected get resourcePath(): string {\n return `tactics/${this.__resource}/${this.__projectId}`;\n }\n\n constructor(\n api: SharedDataAccessApiService,\n @Inject(IS_TACTICS_RESOURCE_PATH) private readonly __resource: ISTacticsEnum,\n ) {\n super(api);\n this._method = 'post';\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { ISTacticMetric, ISTacticMetricsList } from '@ess/integrated-search/tactics/shared/utils';\nimport { AbstractSharedDataAccessListService, SharedDataAccessApiService } from '@ess/shared/data-access';\nimport { SharedTimespan } from '@ess/shared/utils/models';\n\n@Injectable()\nexport class IntegratedSearchTacticsDataAccessSharedPerformanceKeywordListService<\n U extends ISTacticMetric,\n> extends AbstractSharedDataAccessListService> {\n set projectId(value: number | null) {\n this.__projectId = value;\n }\n\n set timespan(value: SharedTimespan) {\n this.__timespan$.next(value);\n }\n\n set searchTerm(value: string) {\n this.__searchTerm = value;\n }\n\n readonly timespanChange$: Observable;\n\n private __projectId: number | null = null;\n private __searchTerm = '';\n private readonly __timespan$: BehaviorSubject = new BehaviorSubject(\n null,\n );\n\n protected get resourcePath(): string {\n return `search-term-metrics/${this.__projectId}/${encodeURIComponent(this.__searchTerm)}/keywords`;\n }\n\n constructor(api: SharedDataAccessApiService) {\n super(api);\n this.timespanChange$ = this.__timespan$.asObservable();\n }\n}\n"], "mappings": "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", "names": ["IntegratedSearchTacticsDataAccessSharedTacticsApiService", "constructor", "__api", "__uiService", "getRecommendationsSummary", "resource", "projectId", "_a", "_b", "timespan", "start_date", "end_date", "filters", "post", "EssRequestParamsHelper", "getData", "__spreadValues", "pipe", "catchError", "openSnackbar", "data", "type", "text", "of", "getChartData", "_c", "performanceFilters", "_d", "categories", "series", "performAction", "recommendation", "keyword", "country", "search_term", "action", "IS_TACTIC_PERFORMANCE_DICTIONARY", "entityActionPath", "tap", "next", "IS_TACTIC_ACTION_MESSAGE", "success", "EssGtagHelper", "sendEvent", "event_action", "event_category", "performed_action", "project_id", "error", "getApprovals", "search_term__like", "keyword__like", "assigned_category_value_ids", "not_assigned_category_ids", "ad_group_ids", "campaign_ids", "get", "params", "getParams", "getAddToNegativesValue", "_e", "_f", "downloadCSV", "_g", "_h", "responseType", "EMPTY", "\u0275\u0275inject", "SharedDataAccessApiService", "SharedFeatureServicesUserInteractionService", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessSharedTacticsApiService", "IntegratedSearchTacticsDataAccessChartsRepository", "activeEntity", "__store", "query", "getActiveEntity", "constructor", "__createStore", "__persistState", "activeProject$", "pipe", "selectActiveId", "getTabsConfig$", "key", "selectActiveEntity", "filter", "Boolean", "map", "config", "setActiveUser", "user", "currentUser", "getValue", "email", "update", "setProp", "deleteAllEntities", "setActiveProject", "projectId", "hasEntity", "setActiveId", "addEntities", "__getInitialState", "resetActiveId", "updateTabsConfig", "chartConfig", "tabsConfig", "updatedConfig", "__spreadValues", "__spreadProps", "tabs", "updateEntities", "createStore", "name", "ISStoreEnum", "CHART_TABS", "withProps", "withEntities", "idKey", "withActiveId", "persistState", "storage", "localStorageStrategy", "source", "excludeKeys", "preStoreInit", "value", "__preStoreInitChecks", "entities", "Object", "entries", "forEach", "__checkMetrics", "metrics", "values", "ISNumericMetricEnum", "archive", "conversion_rate", "ISMetricEnum", "PPC_CONVERSION_RATE", "conversions_value", "CONVERSIONS_VALUE", "roas", "PPC_ROAS", "conversions", "PPC_CONVERSIONS", "ctr", "PPC_CTR", "impressions_ppc", "PPC_IMPRESSIONS", "impressions_seo", "SEO_IMPRESSIONS", "spend", "PPC_SPEND", "combined", "COMBINED_IMPRESSIONS", "ppc", "seo", "checkMetric", "metric", "lowercased", "toLowerCase", "includes", "keys", "path", "length", "tab", "charts", "chart", "metric_1", "metric_2", "ISTacticsInitialChartDefsHelper", "getInitialState", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessChartsRepository", "IntegratedSearchTacticsDataAccessChartsEffects", "constructor", "__repo", "setActiveTabsConfig$", "createEffect", "actions", "pipe", "ofType", "ProjectsActions", "setActiveProjectSuccess", "map", "projectId", "setActiveProject", "setActiveUser$", "AuthActions", "authSuccessFinished", "user", "setActiveUser", "\u0275\u0275inject", "IntegratedSearchTacticsDataAccessChartsRepository", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessChartsEffects", "IntegratedSearchTacticsDataAccessModule", "IntegratedSearchTacticsDataAccessChartsRepository", "provideEffects", "IntegratedSearchTacticsDataAccessChartsEffects", "_IntegratedSearchTacticsDataAccessModule", "IntegratedSearchTacticsDataAccessSharedTacticMetricsListService", "AbstractSharedDataAccessListService", "projectId", "value", "__projectId", "resourcePath", "__resource", "constructor", "api", "__filtersFacade", "__projectsFacade", "activeProject$", "_method", "filters$", "pipe", "tap", "activeProjectEntity", "project_id", "\u0275\u0275inject", "SharedDataAccessApiService", "IS_TACTICS_RESOURCE_PATH", "IntegratedSearchFiltersDataAccessTacticsFacade", "IntegratedSearchProjectsDataAccessFacade", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessSharedTacticMetricsListService", "IntegratedSearchTacticsDataAccessSharedPerformanceMetricsService", "AbstractSharedDataAccessListService", "projectId", "value", "__projectId", "resourcePath", "__resource", "constructor", "api", "_method", "\u0275\u0275inject", "SharedDataAccessApiService", "IS_TACTICS_RESOURCE_PATH", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessSharedPerformanceMetricsService", "IntegratedSearchTacticsDataAccessSharedPerformanceKeywordListService", "AbstractSharedDataAccessListService", "projectId", "value", "__projectId", "timespan", "__timespan$", "next", "searchTerm", "__searchTerm", "resourcePath", "encodeURIComponent", "constructor", "api", "BehaviorSubject", "timespanChange$", "asObservable", "\u0275\u0275inject", "SharedDataAccessApiService", "factory", "\u0275fac", "_IntegratedSearchTacticsDataAccessSharedPerformanceKeywordListService"] }