{ "version": 3, "sources": ["libs/crm/dynamic/src/lib/pipeline-settings/pipeline-settings.service.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { CrmPipelineService, FieldValueInterface, Pipeline, Stage, StandardIds } from '@galaxy/crm/static';\nimport { BehaviorSubject, distinctUntilChanged, of, shareReplay, switchMap, tap } from 'rxjs';\nimport { GalaxyFilterInterface, GalaxyFilterOperator } from '@vendasta/galaxy/filter/chips';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { StageData, StageMap } from './interfaces';\n\n@Injectable()\nexport class PipelineSettingsService {\n private readonly currentPipelineId$$ = new BehaviorSubject('');\n private readonly fallbackPipelineId$$ = new BehaviorSubject('');\n readonly fallbackPipelineId$ = this.fallbackPipelineId$$.asObservable();\n\n private readonly allPipelines$$ = new BehaviorSubject([]);\n allPipelines$ = this.allPipelines$$.asObservable().pipe(distinctUntilChanged());\n\n private readonly allPipelinesLoading$$ = new BehaviorSubject(true);\n allPipelinesLoading$ = this.allPipelinesLoading$$.asObservable();\n\n private readonly loadingPipeline$$ = new BehaviorSubject(true);\n loadingPipeline$ = this.loadingPipeline$$.asObservable();\n\n readonly currentPipeline$ = this.currentPipelineId$$.pipe(\n tap(() => this.loadingPipeline$$.next(true)),\n switchMap((pipelineId) => (pipelineId ? this.crmPipelineService.getPipeline$(pipelineId) : of(null))),\n tap(() => this.loadingPipeline$$.next(false)),\n shareReplay(1),\n );\n\n constructor(private readonly crmPipelineService: CrmPipelineService) {\n this.crmPipelineService\n .listPipelines$('Opportunity')\n .pipe(takeUntilDestroyed())\n .subscribe((pipelines) => {\n this.allPipelines$$.next(pipelines);\n this.allPipelinesLoading$$.next(false);\n });\n\n this.allPipelines$.pipe(takeUntilDestroyed()).subscribe((pipelines) => {\n if (pipelines.length > 0) {\n this.fallbackPipelineId$$.next(pipelines[0].id);\n }\n });\n }\n\n setPipelineId(pipelineId: string) {\n this.currentPipelineId$$.next(pipelineId);\n }\n\n updatePipeline$(objectType: string, pipelineId: string, pipelineName: string, stageProbabilities: StageMap) {\n const updatedStages = this.getStagesToUpdate(stageProbabilities);\n const updatedPipelineData = {\n id: pipelineId,\n name: pipelineName,\n stages: updatedStages,\n };\n\n return this.crmPipelineService.updatePipeline$(objectType, updatedPipelineData).pipe(\n switchMap(() => this.crmPipelineService.getPipeline$(pipelineId)),\n tap((pipeline) => {\n const updatedPipelines = this.allPipelines$$.getValue().map((p) => (p.id === pipelineId ? pipeline : p));\n this.allPipelines$$.next(updatedPipelines);\n }),\n );\n }\n\n createPipeline$(name: string, stages: StageMap) {\n const pipeline = {\n id: '',\n name: name,\n stages: this.getStagesToUpdate(stages),\n };\n return this.crmPipelineService.createPipeline$('Opportunity', pipeline).pipe(\n tap((pipelineId) =>\n this.allPipelines$$.next([\n ...this.allPipelines$$.getValue(),\n {\n ...pipeline,\n id: pipelineId,\n },\n ]),\n ),\n );\n }\n\n deletePipeline$(pipelineId: string) {\n return this.crmPipelineService.deletePipeline$(pipelineId).pipe(\n tap(() => {\n if (this.fallbackPipelineId$$.getValue() === pipelineId) {\n this.fallbackPipelineId$$.next(this.allPipelines$$.getValue()?.[0].id);\n }\n const updatedPipelines = this.allPipelines$$.getValue().filter((pipeline) => pipeline.id !== pipelineId);\n this.allPipelines$$.next(updatedPipelines);\n if (updatedPipelines.length === 0) {\n this.currentPipelineId$$.next('');\n this.fallbackPipelineId$$.next('');\n }\n }),\n );\n }\n\n private getStagesToUpdate(stagesMap: StageMap): Stage[] {\n return Array.from(stagesMap, ([stageName, data]) => ({\n stageName,\n data,\n }))\n .sort((a, b) => {\n // Sort stages by probability. If probability is 0, it should be at the end of the list.\n if (a.data.probability === 0) {\n return 1;\n }\n if (b.data.probability === 0) {\n return -1;\n }\n return a.data.probability - b.data.probability;\n })\n .map(({ stageName, data }, index, sortedStages) => {\n const previousProbability = index > 0 ? sortedStages[index - 1].data.probability : 0;\n return {\n id: data.id || '',\n name: stageName,\n mutations: this.getMutationForStage(data),\n filters: this.getFiltersForStage(data, previousProbability),\n };\n });\n }\n\n private getMutationForStage(data: StageData): FieldValueInterface[] {\n return [\n {\n fieldId: StandardIds.OpportunityProbability,\n floatValue: data.probability,\n },\n {\n fieldId: StandardIds.OpportunityStatus,\n stringValue: data.status,\n },\n ];\n }\n\n private getFiltersForStage(data: StageData, previousProbability: number): GalaxyFilterInterface[] {\n const filters: GalaxyFilterInterface[] = [\n {\n fieldId: StandardIds.OpportunityStatus,\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [{ string: data.status }],\n },\n ];\n\n if (data.probability === 0) {\n filters.push({\n fieldId: StandardIds.OpportunityProbability,\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS_LESS_THAN_OR_EQUAL_TO,\n values: [{ float: 0 }],\n floatTolerance: 0.001,\n });\n } else if (data.probability === 1) {\n filters.push({\n fieldId: StandardIds.OpportunityProbability,\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS_GREATER_THAN_OR_EQUAL_TO,\n values: [{ float: 1 }],\n floatTolerance: 0.001,\n });\n } else {\n filters.push(\n {\n fieldId: StandardIds.OpportunityProbability,\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS_GREATER_THAN,\n values: [{ float: previousProbability }],\n floatTolerance: 0.001,\n },\n {\n fieldId: StandardIds.OpportunityProbability,\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS_LESS_THAN_OR_EQUAL_TO,\n values: [{ float: data.probability }],\n floatTolerance: 0.001,\n },\n );\n }\n return filters;\n }\n}\n"], "mappings": "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", "names": ["PipelineSettingsService", "init_pipeline_settings_service", "__esmMin", "init_src", "init_esm", "init_chips", "init_rxjs_interop", "constructor", "crmPipelineService", "currentPipelineId$$", "BehaviorSubject", "fallbackPipelineId$$", "fallbackPipelineId$", "asObservable", "allPipelines$$", "allPipelines$", "pipe", "distinctUntilChanged", "allPipelinesLoading$$", "allPipelinesLoading$", "loadingPipeline$$", "loadingPipeline$", "currentPipeline$", "tap", "next", "switchMap", "pipelineId", "getPipeline$", "of", "shareReplay", "listPipelines$", "takeUntilDestroyed", "subscribe", "pipelines", "length", "id", "setPipelineId", "updatePipeline$", "objectType", "pipelineName", "stageProbabilities", "updatedStages", "getStagesToUpdate", "updatedPipelineData", "name", "stages", "pipeline", "updatedPipelines", "getValue", "map", "p", "createPipeline$", "__spreadProps", "__spreadValues", "deletePipeline$", "filter", "stagesMap", "Array", "from", "stageName", "data", "sort", "a", "b", "probability", "index", "sortedStages", "previousProbability", "mutations", "getMutationForStage", "filters", "getFiltersForStage", "fieldId", "StandardIds", "OpportunityProbability", "floatValue", "OpportunityStatus", "stringValue", "status", "operator", "GalaxyFilterOperator", "FILTER_OPERATOR_IS", "values", "string", "push", "FILTER_OPERATOR_IS_LESS_THAN_OR_EQUAL_TO", "float", "floatTolerance", "FILTER_OPERATOR_IS_GREATER_THAN_OR_EQUAL_TO", "FILTER_OPERATOR_IS_GREATER_THAN", "\u0275\u0275inject", "CrmPipelineService", "factory", "\u0275fac"] }