{ "version": 3, "sources": ["libs/crm/dynamic/src/lib/crm-components/task-queue/task-queue-storage.service.ts", "libs/crm/dynamic/src/lib/crm-components/task-queue/interfaces.ts", "libs/crm/dynamic/src/lib/crm-components/task-queue/task-queue.service.ts", "libs/crm/dynamic/src/lib/crm-components/task-queue/reschedule-task/reschedule-task.component.ts", "libs/crm/dynamic/src/lib/crm-components/task-queue/reschedule-task/reschedule-task.component.html", "libs/crm/dynamic/src/lib/crm-components/task-queue/task-queue.component.ts", "libs/crm/dynamic/src/lib/crm-components/task-queue/task-queue.component.html", "libs/crm/dynamic/src/lib/crm-components/task-queue/index.ts"], "sourcesContent": ["import { Injectable } from '@angular/core';\nimport { TaskQueueInterface, TaskQueueStorageServiceInterface } from './interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class TaskQueueStorageService implements TaskQueueStorageServiceInterface {\n private readonly TaskQueueStorageKey = 'crm:task-queue';\n\n async load(): Promise {\n try {\n const storage = localStorage.getItem(this.TaskQueueStorageKey);\n return storage ? JSON.parse(storage) : null;\n } catch (error) {\n return null;\n }\n }\n\n async save(taskQueue: TaskQueueInterface): Promise {\n localStorage.setItem(this.TaskQueueStorageKey, JSON.stringify(taskQueue));\n }\n\n async empty(): Promise {\n localStorage.removeItem(this.TaskQueueStorageKey);\n }\n}\n", "import { InjectionToken, inject } from '@angular/core';\nimport { TaskQueueStorageService } from './task-queue-storage.service';\nimport { ActivityAssociation } from '@vendasta/crm';\n\nexport interface Task {\n id: string;\n namespace: string;\n}\n\nexport interface TaskQueueInterface {\n current: number;\n tasks: Task[];\n}\n\nexport interface AssociationWithName {\n name: string;\n association: ActivityAssociation;\n}\n\nexport interface TaskQueueStorageServiceInterface {\n load(): Promise;\n save(taskQueue: TaskQueueInterface): Promise;\n empty(): Promise;\n}\n\nexport const TaskQueueStorageServiceInterface = new InjectionToken(\n 'TaskQueueStorageServiceInterface',\n {\n providedIn: 'root',\n factory: () => inject(TaskQueueStorageService),\n },\n);\n", "import { inject, Injectable, signal } from '@angular/core';\nimport { TaskQueueInterface, TaskQueueStorageServiceInterface } from './interfaces';\nimport { Activity, ActivityAssociation, CRMActivityApiService, UpdateActivityRequestInterface } from '@vendasta/crm';\nimport { firstValueFrom, map, of } from 'rxjs';\nimport {\n CrmInjectionToken,\n CrmMultilocationInjectionToken,\n MultiLocationContext,\n PAGE_ROUTES,\n} from '@galaxy/crm/static';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { Router } from '@angular/router';\n\nexport interface Action {\n type: 'complete' | 'reschedule';\n undoRequest?: UpdateActivityRequestInterface;\n}\n\ninterface AssociationWithNamespace extends ActivityAssociation {\n namespace?: string;\n}\n\n@Injectable()\nexport class TaskQueueService {\n private readonly storageService = inject(TaskQueueStorageServiceInterface);\n private readonly analyticsService = inject(ProductAnalyticsService);\n private readonly config = inject(CrmInjectionToken);\n private readonly activityApiService = inject(CRMActivityApiService);\n private readonly router = inject(Router);\n private readonly multiLocationConfig = inject(CrmMultilocationInjectionToken);\n\n loading = signal(false);\n taskQueue = signal(null);\n action = signal(null);\n private currentTaskNamespace: string | null = null;\n private taskNamespaces = new Map();\n private objectNamespaces = new Map();\n\n public setTaskNamespaces(namespaces: Map): void {\n this.taskNamespaces = new Map(namespaces);\n }\n\n public getTaskNamespace(taskId: string): string | undefined {\n return this.taskNamespaces.get(taskId);\n }\n\n public hasTaskNamespaces(): boolean {\n return this.taskNamespaces.size > 0;\n }\n\n public async startQueue(taskIds: string[], namespace?: string, startIndex = 0): Promise {\n try {\n this.loading.set(true);\n const isMultiLocation = await firstValueFrom(this.multiLocationConfig.isMultiLocation$ ?? of(false));\n\n let queue: TaskQueueInterface;\n\n if (isMultiLocation) {\n const tasksWithNamespaces = this.hasTaskNamespaces()\n ? taskIds.filter((id) => this.getTaskNamespace(id))\n : taskIds;\n\n if (tasksWithNamespaces.length === 0) {\n this.loading.set(false);\n return;\n }\n\n queue = {\n tasks: tasksWithNamespaces.map((id) => ({\n id,\n namespace: this.getTaskNamespace(id) || '',\n })),\n current: startIndex,\n };\n } else {\n queue = {\n tasks: taskIds.map((id) => ({\n id,\n namespace: namespace || '',\n })),\n current: startIndex,\n };\n }\n\n await this.saveQueue(queue);\n this.navigateToCurrentTask(queue);\n this.analyticsService.trackEvent('task-queue-start-queue', 'sales-tasks', 'click', 1);\n } finally {\n this.loading.set(false);\n }\n }\n\n public queueCurrentID(queue: TaskQueueInterface | null): string | null {\n if (queue) {\n return queue.tasks[queue.current]?.id || null;\n }\n return null;\n }\n\n public async fetchCurrentTask(id: string | null): Promise {\n if (!id) {\n return null;\n }\n\n try {\n this.loading.set(true);\n const queue = await this.storageService.load();\n const currentTask = queue?.tasks[queue.current];\n\n const isMultiLocation = await firstValueFrom(this.multiLocationConfig.isMultiLocation$ ?? of(false));\n\n if (isMultiLocation) {\n if (this.hasTaskNamespaces() && this.getTaskNamespace(id)) {\n const namespace = this.getTaskNamespace(id)!;\n\n try {\n const result = await this.fetchTaskWithNamespace(id, namespace);\n if (result) {\n return result;\n }\n } catch (error) {\n return null;\n }\n }\n\n return null;\n } else {\n let taskNamespace: string | undefined;\n\n if (currentTask?.namespace) {\n taskNamespace = currentTask.namespace;\n } else if (this.currentTaskNamespace) {\n taskNamespace = this.currentTaskNamespace;\n }\n\n if (!taskNamespace) {\n return null;\n }\n\n try {\n const result = await this.fetchTaskWithNamespace(id, taskNamespace);\n return result;\n } catch (error) {\n return null;\n }\n }\n } catch (error) {\n return null;\n } finally {\n this.currentTaskNamespace = null;\n this.loading.set(false);\n }\n }\n\n private async fetchTaskWithNamespace(id: string, namespace: string): Promise {\n return await firstValueFrom(\n this.activityApiService.getMultiActivity({ namespace, crmObjectIds: [id] }).pipe(\n map((result) => {\n const activity = result?.activities[0];\n if (activity?.associations) {\n activity.associations.forEach((association) => {\n if (association.crmObjectType === 'Contact') {\n this.objectNamespaces.set(`Contact:${association.crmObjectId}`, namespace);\n }\n });\n }\n return activity;\n }),\n map((activity) => (activity?.crmObjectId ? activity : null)),\n ),\n );\n }\n\n private getAssociationRoute(association: ActivityAssociation): string | null {\n switch (association.crmObjectType) {\n case 'Contact':\n return `${PAGE_ROUTES.CONTACT.ROOT}/${PAGE_ROUTES.CONTACT.SUBROUTES.PROFILE}`;\n case 'Company':\n return `${PAGE_ROUTES.COMPANY.ROOT}/${PAGE_ROUTES.COMPANY.SUBROUTES.PROFILE}`;\n default:\n return null;\n }\n }\n\n public async saveQueue(queue: TaskQueueInterface): Promise {\n await this.storageService.save(queue);\n this.taskQueue.set({ ...queue });\n }\n\n public async navigateToCurrentTask(queue: TaskQueueInterface): Promise {\n const id = this.queueCurrentID(queue);\n const task = await this.fetchCurrentTask(id);\n this.action.set(null);\n await this.navigateToPrimaryAssociation(task);\n }\n\n private async navigateToPrimaryAssociation(task: Activity | null): Promise {\n if (task) {\n const contactAssociation = task.associations?.find((a) => a.crmObjectType === 'Contact');\n const companyAssociation = task.associations?.find((a) => a.crmObjectType === 'Company');\n await this.navigateToAssociation(contactAssociation ?? companyAssociation);\n }\n }\n\n public async navigateToAssociation(association?: ActivityAssociation): Promise {\n if (!association) return;\n\n const isMultiLocation = await this.isMultiLocationEnabled();\n\n if (isMultiLocation && this.isContactAssociation(association)) {\n await this.handleMultiLocationNavigation(association);\n return;\n }\n\n await this.handleStandardNavigation(association);\n }\n\n private async handleMultiLocationNavigation(association: AssociationWithNamespace): Promise {\n const namespace =\n this.objectNamespaces.get(`Contact:${association.crmObjectId}`) || (await this.determineNamespace());\n\n const multiLocationContext = await this.getMultiLocationContext();\n const brandId = multiLocationContext?.groupId;\n const crmObjectId = association.crmObjectId;\n\n const routePrefix = await firstValueFrom(this.multiLocationConfig.routePrefix$ ?? of(`/account/brands/${brandId}`));\n\n const url = this.buildMultiLocationUrl(routePrefix, namespace, crmObjectId);\n await this.router.navigateByUrl(url);\n }\n\n private async handleStandardNavigation(association: ActivityAssociation): Promise {\n const associationRoute = this.getAssociationRoute(association);\n if (!associationRoute) return;\n\n const routePrefix = await firstValueFrom(this.config.routePrefix$);\n\n this.analyticsService.trackEvent('task-queue-view-association', 'sales-tasks', 'click', 1, {\n type: routePrefix,\n });\n\n const url = this.buildStandardUrl(routePrefix, associationRoute, association.crmObjectId);\n await this.router.navigateByUrl(url);\n }\n\n private async isMultiLocationEnabled(): Promise {\n return firstValueFrom(this.multiLocationConfig.isMultiLocation$ ?? of(false));\n }\n\n private isContactAssociation(association: ActivityAssociation): boolean {\n return association.crmObjectType === 'Contact';\n }\n\n private async determineNamespace(): Promise {\n return (\n this.currentTaskNamespace ||\n (await this.getNamespaceFromMultilocationContext()) ||\n (await firstValueFrom(this.config.namespace$ ?? of('')))\n );\n }\n\n private async getMultiLocationContext(): Promise {\n return firstValueFrom(this.multiLocationConfig.multiLocationContext$ ?? of(null));\n }\n\n private buildMultiLocationUrl(routePrefix: string, namespace: string, crmObjectId: string): string {\n const viewRoute = `contacts/${namespace}/profile/${crmObjectId}`;\n return `${routePrefix}/${viewRoute}`;\n }\n\n private buildStandardUrl(routePrefix: string, route: string, objectId: string): string {\n const associationUrl = route.replace(':crmObjectId', objectId);\n return `${routePrefix}/${associationUrl}`;\n }\n\n private async getNamespaceFromMultilocationContext(): Promise {\n try {\n const context = await this.getMultiLocationContext();\n return context?.accountGroupsIds?.[0] || null;\n } catch {\n return null;\n }\n }\n\n public setCurrentTaskNamespace(namespace: string): void {\n if (namespace) {\n this.currentTaskNamespace = namespace;\n }\n }\n}\n", "import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Activity } from '@vendasta/crm';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { GalaxyPopoverModule, PopoverPositions } from '@vendasta/galaxy/popover';\nimport { BehaviorSubject, filter, firstValueFrom } from 'rxjs';\nimport { CrmFieldService, StandardIds } from '@galaxy/crm/static';\nimport { format as formatDate } from 'date-fns-tz';\nimport { MatInputModule } from '@angular/material/input';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { TranslateModule } from '@ngx-translate/core';\n\nexport interface RescheduleEvent {\n dueDate: Date;\n changed: boolean;\n}\n\n@Component({\n selector: 'crm-reschedule-task',\n templateUrl: 'reschedule-task.component.html',\n styleUrls: ['reschedule-task.component.scss'],\n imports: [\n CommonModule,\n GalaxyFormFieldModule,\n GalaxyPopoverModule,\n ReactiveFormsModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatDatepickerModule,\n TranslateModule,\n ],\n})\nexport class CrmRescheduleTaskComponent {\n private readonly fieldService = inject(CrmFieldService);\n private readonly snackbarService = inject(SnackbarService);\n\n protected readonly PopoverPositionBottom = PopoverPositions['Bottom'];\n private readonly isOpen$$ = new BehaviorSubject(false);\n protected isOpen$ = this.isOpen$$.asObservable();\n\n private _task: Activity | null = null;\n @Input() set task(value: Activity | null) {\n this._task = value;\n this.closePopover();\n }\n get task(): Activity | null {\n return this._task;\n }\n\n @Output() handleReschedule = new EventEmitter();\n\n protected rescheduleFormControl = new FormControl(\n {\n value: '',\n disabled: true,\n },\n Validators.required,\n );\n\n constructor() {\n this.isOpen$\n .pipe(\n takeUntilDestroyed(),\n filter((isOpen) => isOpen),\n )\n .subscribe(() => {\n if (this.task) {\n const dueDate = this.fieldService.getFieldValueFromCrmObject(\n this.task,\n StandardIds.ActivityTaskDueDate,\n )?.dateValue;\n this.rescheduleFormControl.setValue(dueDate ? formatDate(dueDate, \"yyyy-MM-dd'T'HH:mm\") : '');\n this.rescheduleFormControl.markAsPristine();\n this.rescheduleFormControl.enable();\n }\n });\n }\n\n togglePopover() {\n firstValueFrom(this.isOpen$).then((isOpen) => this.isOpen$$.next(!isOpen));\n }\n\n closePopover() {\n this.isOpen$$.next(false);\n }\n\n async handleRescheduleTaskClick(): Promise {\n const hasChanged = this.rescheduleFormControl.dirty;\n const hasError = this.rescheduleFormControl.invalid;\n const newDueDate = this.rescheduleFormControl.value ? new Date(this.rescheduleFormControl.value) : undefined;\n if (hasError || !newDueDate) {\n this.snackbarService.openErrorSnack('TASK_QUEUE.ERRORS.INVALID_DUE_DATE');\n return;\n }\n\n this.handleReschedule.emit({\n dueDate: newDueDate,\n changed: hasChanged,\n });\n }\n}\n", "\n calendar_today\n {{ 'TASK_QUEUE.ACTIONS.RESCHEDULE' | translate }}\n\n\n\n {{ 'TASK_QUEUE.RESCHEDULE_TASK' | translate }}\n\n \n \n \n \n\n \n \n {{ 'ACTIONS.SAVE' | translate }}\n \n \n \n\n", "import { Component, computed, effect, inject, signal, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { AssociationWithName, TaskQueueInterface, TaskQueueStorageServiceInterface } from './interfaces';\nimport {\n Activity,\n ActivityAssociation,\n CRMActivityApiService,\n CrmObjectInterface,\n UpdateActivityRequestInterface,\n} from '@vendasta/crm';\nimport { combineLatest, firstValueFrom, map, Observable, of } from 'rxjs';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ActivityTaskStatus, CrmFieldService, PAGE_ROUTES, StandardExternalIds, StandardIds } from '@galaxy/crm/static';\nimport { CrmRescheduleTaskComponent, RescheduleEvent } from './reschedule-task/reschedule-task.component';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { format, ParsedNumber, parseNumber } from 'libphonenumber-js';\nimport { startWith } from 'rxjs/operators';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { CrmInjectionToken, CrmObjectService, CrmMultilocationInjectionToken } from '@galaxy/crm/static';\nimport { TaskQueueService } from './task-queue.service';\n\n@Component({\n selector: 'crm-task-queue',\n templateUrl: 'task-queue.component.html',\n styleUrls: ['task-queue.component.scss'],\n imports: [\n CommonModule,\n MatButtonModule,\n MatChipsModule,\n MatIconModule,\n MatToolbarModule,\n CrmRescheduleTaskComponent,\n TranslateModule,\n MatProgressSpinnerModule,\n MatMenuModule,\n ],\n})\nexport class CrmTaskQueueComponent {\n private readonly crmObjectService = inject(CrmObjectService);\n private readonly storageService = inject(TaskQueueStorageServiceInterface);\n private readonly config = inject(CrmInjectionToken);\n private readonly activityApiService = inject(CRMActivityApiService);\n private readonly router = inject(Router);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly fieldService = inject(CrmFieldService);\n private readonly snackbarService = inject(SnackbarService);\n private readonly analyticsService = inject(ProductAnalyticsService);\n private readonly taskQueueService = inject(TaskQueueService);\n private readonly multiLocationConfig = inject(CrmMultilocationInjectionToken);\n\n protected readonly taskQueue = this.taskQueueService.taskQueue;\n protected readonly hasTasks = computed(() => this.queueHasTasks(this.taskQueue()));\n protected readonly hasPendingTasks = computed(() => this.queueHasPendingTasks(this.taskQueue()));\n protected readonly currentTaskId = computed(() => this.taskQueueService.queueCurrentID(this.taskQueue()));\n protected readonly currentTask = signal(null);\n protected readonly currentTaskName = computed(() => this.getTaskName(this.currentTask()));\n protected readonly currentAssociations = signal([]);\n protected readonly loading = this.taskQueueService.loading;\n protected readonly action = this.taskQueueService.action;\n protected readonly isResolved = computed(() => {\n const isCompleted = this.currentTaskStatus() === ActivityTaskStatus.Completed;\n const actionDone = Boolean(this.action()?.type);\n return isCompleted || actionDone;\n });\n\n @ViewChild('rescheduleTask') rescheduleTask?: CrmRescheduleTaskComponent;\n protected readonly currentTaskStatus = computed(() => this.getTaskStatus(this.currentTask()));\n\n protected readonly updateTaskLoadingStatus = signal(false);\n\n protected currentPageId$: Observable;\n\n constructor() {\n this.storageService.load().then((taskQueue) => this.taskQueue.set(taskQueue));\n\n effect(() => {\n //fetch associations\n const task = this.currentTask();\n this.fetchTaskAssociations(task).then((associations) => this.currentAssociations.set(associations));\n // fetch the activity and update currentTask signal when the currentTaskId changes\n const newId = this.currentTaskId();\n const currentId = task?.crmObjectId;\n if (newId !== currentId) {\n this.taskQueueService.fetchCurrentTask(newId).then((task) => this.currentTask.set(task));\n }\n });\n\n //watch for when we navigate to a company or contact page\n this.currentPageId$ = this.activatedRoute.params.pipe(\n map((routeParams) => routeParams['crmObjectId'] || 'none'),\n startWith('none'),\n );\n }\n\n async startQueue(ids: string[], namespace?: string): Promise {\n this.taskQueueService.startQueue(ids, namespace);\n }\n\n protected async handleReschedule(event: RescheduleEvent): Promise {\n try {\n const task = this.currentTask();\n if (task && event.changed) {\n const namespace = await firstValueFrom(this.config.namespace$);\n const request: UpdateActivityRequestInterface = {\n namespace,\n activity: {\n crmObjectId: task.crmObjectId,\n fields: [\n {\n fieldId: StandardIds.ActivityTaskDueDate,\n dateValue: event.dueDate,\n },\n ],\n },\n fieldMask: { paths: [StandardIds.ActivityTaskDueDate] },\n };\n await this.updateTask(request);\n }\n this.rescheduleTask?.closePopover();\n this.snackbarService.openSuccessSnack('TASK_QUEUE.SUCCESS_MESSAGES.RESCHEDULE');\n if (this.hasPendingTasks()) {\n // move to next task\n this.handleNextClick();\n } else {\n // show the resolved state so the user can go back to the task list\n this.action.set({ type: 'reschedule' });\n }\n } catch {\n this.snackbarService.openErrorSnack('TASK_QUEUE.ERRORS.RESCHEDULE');\n }\n this.analyticsService.trackEvent('task-queue-reschedule-task', 'sales-tasks', 'click', 1);\n }\n\n protected async handleSkipClick(): Promise {\n const queue = this.taskQueue();\n if (queue) {\n const current = queue.tasks[queue.current];\n queue.tasks.splice(queue.current, 1);\n queue.tasks.push(current);\n await this.taskQueueService.saveQueue(queue);\n this.taskQueueService.navigateToCurrentTask(queue);\n }\n this.analyticsService.trackEvent('task-queue-skip-task', 'sales-tasks', 'click', 1);\n }\n\n protected async handleNextClick(): Promise {\n const queue = this.taskQueue();\n if (queue) {\n queue.current++;\n await this.taskQueueService.saveQueue(queue);\n this.taskQueueService.navigateToCurrentTask(queue);\n }\n this.analyticsService.trackEvent('task-queue-next-task', 'sales-tasks', 'click', 1);\n }\n\n protected handleEmptyClick(): void {\n this.taskQueue.set(null);\n this.storageService.empty();\n this.analyticsService.trackEvent('task-queue-exit-queue', 'sales-tasks', 'click', 1);\n }\n\n protected async handleCompleteClick(): Promise {\n try {\n this.updateTaskLoadingStatus.set(true);\n const task = this.currentTask();\n\n if (!task) {\n return;\n }\n let namespace = task.namespace;\n if (task.crmObjectId && this.taskQueueService.hasTaskNamespaces()) {\n const storedNamespace = this.taskQueueService.getTaskNamespace(task.crmObjectId);\n if (storedNamespace) {\n namespace = storedNamespace;\n }\n }\n if (!namespace) {\n namespace = await firstValueFrom(this.config.namespace$);\n }\n\n const request: UpdateActivityRequestInterface = {\n namespace,\n activity: {\n crmObjectId: task.crmObjectId,\n fields: [\n {\n fieldId: StandardIds.ActivityTaskStatus,\n stringValue: ActivityTaskStatus.Completed,\n },\n ],\n },\n fieldMask: { paths: [StandardIds.ActivityTaskStatus] },\n };\n\n const undoRequest: UpdateActivityRequestInterface = {\n namespace,\n activity: {\n crmObjectId: task.crmObjectId,\n fields: [\n {\n fieldId: StandardIds.ActivityTaskStatus,\n stringValue: task.fields?.find((f) => f.fieldId === StandardIds.ActivityTaskStatus)?.stringValue || '',\n },\n ],\n },\n fieldMask: { paths: [StandardIds.ActivityTaskStatus] },\n };\n\n await this.updateTask(request);\n\n const queue = this.taskQueue();\n this.action.set({ type: 'complete', undoRequest });\n this.snackbarService.openSuccessSnack('TASK_QUEUE.ACTIONS.MARK_AS_COMPLETE');\n if (queue) {\n this.taskQueue.set({ ...queue });\n }\n } catch (error) {\n this.snackbarService.openErrorSnack('TASK_QUEUE.ERRORS.COMPLETE');\n } finally {\n this.updateTaskLoadingStatus.set(false);\n }\n this.analyticsService.trackEvent('task-queue-complete-task', 'sales-tasks', 'click', 1);\n }\n\n protected async handleUndoClick(): Promise {\n const req = this.action()?.undoRequest;\n if (req) {\n try {\n await this.updateTask(req);\n this.action.set(null);\n } catch {\n this.snackbarService.openErrorSnack('TASK_QUEUE.ERRORS.UNDO');\n }\n }\n this.analyticsService.trackEvent('task-queue-undo-task', 'sales-tasks', 'click', 1);\n }\n\n protected async handleBackToTasksClick(): Promise {\n this.taskQueue.set(null);\n await this.storageService.empty();\n const routePrefix = await firstValueFrom(this.config.routePrefix$);\n this.router.navigateByUrl(`${routePrefix}/${PAGE_ROUTES.TASK.ROOT}/${PAGE_ROUTES.TASK.SUBROUTES.LIST}`);\n this.analyticsService.trackEvent('task-queue-back-to-table', 'sales-tasks', 'click', 1);\n }\n\n private async updateTask(req: UpdateActivityRequestInterface): Promise {\n try {\n this.updateTaskLoadingStatus.set(true);\n await firstValueFrom(this.activityApiService.updateActivity(req));\n const taskId = this.currentTaskId();\n if (taskId) {\n if (req.namespace) {\n this.taskQueueService.setCurrentTaskNamespace(req.namespace);\n }\n const updatedTask = await this.taskQueueService.fetchCurrentTask(taskId);\n this.currentTask.set(updatedTask);\n }\n } finally {\n this.updateTaskLoadingStatus.set(false);\n }\n this.analyticsService.trackEvent('task-queue-update-task', 'sales-tasks', 'click', 1);\n }\n\n private queueHasTasks(queue: TaskQueueInterface | null): boolean {\n return Boolean(queue?.tasks?.length);\n }\n\n private queueHasPendingTasks(queue: TaskQueueInterface | null): boolean {\n const current = queue?.current || 0;\n const length = queue?.tasks.length || 0;\n return current < length - 1;\n }\n\n getDisplayName(crmObject: CrmObjectInterface): string {\n const companyName = this.fieldService.getFieldValueFromCrmObject(crmObject, StandardIds.CompanyName);\n if (companyName?.stringValue) {\n return companyName.stringValue;\n }\n\n const firstName = this.fieldService.getFieldValueFromCrmObject(crmObject, StandardExternalIds.FirstName);\n const lastName = this.fieldService.getFieldValueFromCrmObject(crmObject, StandardExternalIds.LastName);\n if (firstName?.stringValue || lastName?.stringValue) {\n return `${firstName?.stringValue ?? ''} ${lastName?.stringValue ?? ''}`.trim();\n }\n\n const email = this.fieldService.getFieldValueFromCrmObject(crmObject, StandardExternalIds.Email);\n if (email?.stringValue) {\n return email.stringValue;\n }\n\n const phone = this.fieldService.getFieldValueFromCrmObject(crmObject, StandardExternalIds.PhoneNumber);\n if (phone?.stringValue) {\n return this.formatPhoneNumber(phone.stringValue);\n }\n\n return crmObject?.crmObjectId || '';\n }\n\n private formatPhoneNumber(phoneNumber: string): string {\n const parsedNumber = parseNumber(phoneNumber, {\n defaultCountry: 'US',\n });\n if (Object.keys(parsedNumber).length === 0) {\n return '';\n }\n\n return format(parsedNumber as ParsedNumber, 'INTERNATIONAL');\n }\n\n private mapAssociationNamesToIds(associations: CrmObjectInterface[]): Map {\n const idToName = new Map();\n associations?.forEach((association) => {\n if (association?.crmObjectId) idToName.set(association.crmObjectId, this.getDisplayName(association));\n });\n return idToName;\n }\n\n private async fetchTaskAssociations(task: Activity | null): Promise {\n if (!task?.associations) return [];\n const contacts: string[] = [];\n const companies: string[] = [];\n const associations: CrmObjectInterface[] = [];\n task.associations.forEach((association) => {\n if (association.crmObjectType === 'Contact') {\n contacts.push(association.crmObjectId);\n associations.push(association);\n } else if (association.crmObjectType === 'Company') {\n companies.push(association.crmObjectId);\n associations.push(association);\n }\n });\n\n const contacts$ =\n contacts.length > 0\n ? this.crmObjectService.getMultiObject('Contact', contacts).pipe(map((contact) => contact.crmObjects))\n : of([]);\n const companies$ =\n companies.length > 0\n ? this.crmObjectService.getMultiObject('Company', companies).pipe(map((company) => company.crmObjects))\n : of([]);\n\n const displayNames$ = combineLatest([contacts$, companies$]).pipe(\n map(([contacts, companies]) => {\n const associations = (contacts || []).concat(companies || []);\n return this.mapAssociationNamesToIds(associations);\n }),\n );\n\n try {\n const displayNames = await firstValueFrom(displayNames$);\n return (\n associations\n .filter((association) => displayNames.has(association.crmObjectId || ''))\n .map((association) => {\n return {\n name: displayNames.get(association.crmObjectId || ''),\n association: association,\n } as AssociationWithName;\n })\n .sort((a, b) => {\n const nameA = a.name.toLowerCase();\n const nameB = b.name.toLowerCase();\n if (nameA > nameB) {\n return 1;\n }\n if (nameA < nameB) {\n return -1;\n }\n return 0;\n }) || []\n );\n } catch {\n return [];\n }\n }\n\n private getTaskName(task: Activity | null): string {\n if (task) {\n return this.fieldService.getFieldValueFromCrmObject(task, StandardIds.ActivityName)?.stringValue ?? '';\n }\n return '';\n }\n\n protected async changeAssociation(association?: ActivityAssociation): Promise {\n this.analyticsService.trackEvent('task-queue-change-association', 'sales-tasks', 'click', 1);\n return this.taskQueueService.navigateToAssociation(association);\n }\n\n private getTaskStatus(task: Activity | null): string {\n if (task) {\n return this.fieldService.getFieldValueFromCrmObject(task, StandardIds.ActivityTaskStatus)?.stringValue ?? '';\n }\n return '';\n }\n}\n", "\n
\n assignment_turned_in\n \n {{ 'TASK_QUEUE.TASKS' | translate }}\n ({{ taskQueue.current + 1 }}/{{ taskQueue.tasks.length }})\n \n
\n
\n \n {{ currentTaskName() }}\n \n 1; else oneAssociation\"\n class=\"task-associations\"\n [matMenuTriggerFor]=\"menu\"\n >\n {{\n 'TASK.LIST_OBJECTS_TABLE.ACTIONS.TASK_QUEUE.ASSOCIATIONS_CHIP' | translate: { count: associations.length }\n }}\n arrow_drop_down\n \n \n \n {{ association.name }}\n \n \n \n \n \n \n {{ associations[0].name }}\n \n \n \n \n
\n
\n \n \n
\n
\n\n\n \n \n \n skip_next\n {{ 'TASK_QUEUE.ACTIONS.SKIP' | translate }}\n \n \n check\n {{ 'TASK_QUEUE.ACTIONS.MARK_AS_COMPLETE' | translate }}\n \n \n\n\n\n \n \n check\n \n \n {{ 'TASK_QUEUE.STATUS.RESCHEDULED' | translate }}\n \n \n \n {{ 'TASK_QUEUE.STATUS.COMPLETED' | translate }}\n \n \n \n\n \n {{ 'TASK_QUEUE.ACTIONS.UNDO' | translate }}\n \n\n \n {{ 'TASK_QUEUE.ACTIONS.NEXT' | translate }}\n \n \n {{ 'TASK_QUEUE.ACTIONS.BACK_TO_TASKS' | translate }}\n \n \n\n\n\n \n\n", "export * from './interfaces';\nexport * from './task-queue-storage.service';\nexport * from './task-queue.component';\nexport * from './task-queue.service';\n"], "mappings": "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", "names": ["TaskQueueStorageService", "init_task_queue_storage_service", "__esmMin", "constructor", "TaskQueueStorageKey", "load", "__async", "storage", "localStorage", "getItem", "JSON", "parse", "save", "taskQueue", "setItem", "stringify", "empty", "removeItem", "factory", "\u0275fac", "providedIn", "TaskQueueStorageServiceInterface", "init_interfaces", "__esmMin", "init_core", "init_task_queue_storage_service", "InjectionToken", "providedIn", "factory", "inject", "TaskQueueStorageService", "TaskQueueService", "init_task_queue_service", "__esmMin", "init_core", "init_interfaces", "init_vendasta_crm", "init_esm", "init_src", "init_router", "constructor", "storageService", "inject", "TaskQueueStorageServiceInterface", "analyticsService", "ProductAnalyticsService", "config", "CrmInjectionToken", "activityApiService", "CRMActivityApiService", "router", "Router", "multiLocationConfig", "CrmMultilocationInjectionToken", "loading", "signal", "taskQueue", "action", "currentTaskNamespace", "taskNamespaces", "Map", "objectNamespaces", "setTaskNamespaces", "namespaces", "getTaskNamespace", "taskId", "get", "hasTaskNamespaces", "size", "startQueue", "taskIds", "namespace", "startIndex", "__async", "set", "isMultiLocation", "firstValueFrom", "isMultiLocation$", "of", "queue", "tasksWithNamespaces", "filter", "id", "length", "tasks", "map", "current", "saveQueue", "navigateToCurrentTask", "trackEvent", "queueCurrentID", "fetchCurrentTask", "load", "currentTask", "result", "fetchTaskWithNamespace", "taskNamespace", "getMultiActivity", "crmObjectIds", "pipe", "activity", "activities", "associations", "forEach", "association", "crmObjectType", "crmObjectId", "getAssociationRoute", "PAGE_ROUTES", "CONTACT", "ROOT", "SUBROUTES", "PROFILE", "COMPANY", "save", "__spreadValues", "task", "navigateToPrimaryAssociation", "contactAssociation", "find", "a", "companyAssociation", "navigateToAssociation", "isMultiLocationEnabled", "isContactAssociation", "handleMultiLocationNavigation", "handleStandardNavigation", "determineNamespace", "brandId", "getMultiLocationContext", "groupId", "routePrefix", "routePrefix$", "url", "buildMultiLocationUrl", "navigateByUrl", "associationRoute", "type", "buildStandardUrl", "getNamespaceFromMultilocationContext", "namespace$", "multiLocationContext$", "viewRoute", "route", "objectId", "associationUrl", "replace", "accountGroupsIds", "setCurrentTaskNamespace", "factory", "\u0275fac", "CrmRescheduleTaskComponent", "init_reschedule_task_component", "__esmMin", "init_common", "init_core", "init_rxjs_interop", "init_forms", "init_button", "init_datepicker", "init_icon", "init_form_field", "init_popover", "init_esm", "init_src", "init_input", "init_snackbar_service", "init_ngx_translate_core", "task", "value", "_task", "closePopover", "constructor", "fieldService", "inject", "CrmFieldService", "snackbarService", "SnackbarService", "PopoverPositionBottom", "PopoverPositions", "isOpen$$", "BehaviorSubject", "isOpen$", "asObservable", "handleReschedule", "EventEmitter", "rescheduleFormControl", "FormControl", "disabled", "Validators", "required", "pipe", "takeUntilDestroyed", "filter", "isOpen", "subscribe", "dueDate", "getFieldValueFromCrmObject", "StandardIds", "ActivityTaskDueDate", "dateValue", "setValue", "formatDate", "markAsPristine", "enable", "togglePopover", "firstValueFrom", "then", "next", "handleRescheduleTaskClick", "__async", "hasChanged", "dirty", "hasError", "invalid", "newDueDate", "Date", "undefined", "openErrorSnack", "emit", "changed", "selectors", "inputs", "outputs", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275listener", "i0", "\u0275\u0275restoreView", "_r1", "\u0275\u0275resetView", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275property", "taskReschedulePopover_r2", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind1", "\u0275\u0275pureFunction1", "_c0", "\u0275\u0275textInterpolate", "CommonModule", "AsyncPipe", "GalaxyFormFieldModule", "FormFieldComponent", "GalaxyPopoverModule", "PopoverComponent", "PopoverTitleDirective", "PopoverActionsDirective", "GalaxyPopoverDirective", "ReactiveFormsModule", "DefaultValueAccessor", "NgControlStatus", "FormControlDirective", "MatInputModule", "MatInput", "MatIconModule", "MatIcon", "MatButtonModule", "MatButton", "MatDatepickerModule", "MatDatepicker", "TranslateModule", "TranslatePipe", "styles", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate2", "taskQueue_r2", "current", "tasks", "length", "\u0275\u0275listener", "association_r4", "\u0275\u0275restoreView", "_r3", "$implicit", "ctx_r4", "\u0275\u0275nextContext", "\u0275\u0275resetView", "changeAssociation", "association", "\u0275\u0275property", "\u0275\u0275pureFunction1", "_c3", "crmObjectId", "pageId_r6", "\u0275\u0275textInterpolate1", "name", "\u0275\u0275template", "CrmTaskQueueComponent_mat_toolbar_0_span_13_mat_chip_1_span_7_button_1_Template", "associations_r7", "CrmTaskQueueComponent_mat_toolbar_0_span_13_mat_chip_1_span_7_Template", "menu_r8", "\u0275\u0275pipeBind2", "_c2", "\u0275\u0275pipeBind1", "currentPageId$", "_r9", "ngIf", "\u0275\u0275textInterpolate", "CrmTaskQueueComponent_mat_toolbar_0_span_13_ng_template_2_mat_chip_0_Template", "CrmTaskQueueComponent_mat_toolbar_0_span_13_mat_chip_1_Template", "CrmTaskQueueComponent_mat_toolbar_0_span_13_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "oneAssociation_r10", "\u0275\u0275elementContainer", "CrmTaskQueueComponent_mat_toolbar_0_span_8_Template", "\u0275\u0275elementContainerStart", "CrmTaskQueueComponent_mat_toolbar_0_span_13_Template", "CrmTaskQueueComponent_mat_toolbar_0_ng_container_15_Template", "_r1", "handleEmptyClick", "_c1", "isResolved", "taskQueue", "currentTaskName", "currentAssociations", "resolvedActions_r12", "actions_r11", "_r14", "handleSkipClick", "loading", "$event", "_r13", "handleReschedule", "CrmTaskQueueComponent_ng_template_1_ng_container_0_button_3_Template", "handleCompleteClick", "currentTask", "hasPendingTasks", "updateTaskLoadingStatus", "CrmTaskQueueComponent_ng_template_1_ng_container_0_Template", "isLoading_r15", "_r16", "handleUndoClick", "_r17", "handleNextClick", "_r18", "handleBackToTasksClick", "CrmTaskQueueComponent_ng_template_3_ng_container_0_ng_container_5_Template", "CrmTaskQueueComponent_ng_template_3_ng_container_0_ng_container_6_Template", "CrmTaskQueueComponent_ng_template_3_ng_container_0_button_7_Template", "CrmTaskQueueComponent_ng_template_3_ng_container_0_button_8_Template", "CrmTaskQueueComponent_ng_template_3_ng_container_0_button_9_Template", "tmp_5_0", "action", "type", "tmp_7_0", "undoRequest", "CrmTaskQueueComponent_ng_template_3_ng_container_0_Template", "\u0275\u0275element", "CrmTaskQueueComponent", "init_task_queue_component", "__esmMin", "init_core", "init_common", "init_icon", "init_chips", "init_button", "init_toolbar", "init_interfaces", "init_vendasta_crm", "init_esm", "init_router", "init_src", "init_reschedule_task_component", "init_snackbar_service", "init_ngx_translate_core", "init_menu", "init_progress_spinner", "init_libphonenumber_js", "init_operators", "init_task_queue_service", "constructor", "crmObjectService", "inject", "CrmObjectService", "storageService", "TaskQueueStorageServiceInterface", "config", "CrmInjectionToken", "activityApiService", "CRMActivityApiService", "router", "Router", "activatedRoute", "ActivatedRoute", "fieldService", "CrmFieldService", "snackbarService", "SnackbarService", "analyticsService", "ProductAnalyticsService", "taskQueueService", "TaskQueueService", "multiLocationConfig", "CrmMultilocationInjectionToken", "hasTasks", "computed", "queueHasTasks", "queueHasPendingTasks", "currentTaskId", "queueCurrentID", "signal", "getTaskName", "isCompleted", "currentTaskStatus", "ActivityTaskStatus", "Completed", "actionDone", "Boolean", "getTaskStatus", "load", "then", "set", "effect", "task", "fetchTaskAssociations", "associations", "newId", "currentId", "fetchCurrentTask", "params", "pipe", "map", "routeParams", "startWith", "startQueue", "ids", "namespace", "__async", "event", "changed", "request", "firstValueFrom", "namespace$", "activity", "fields", "fieldId", "StandardIds", "ActivityTaskDueDate", "dateValue", "dueDate", "fieldMask", "paths", "updateTask", "rescheduleTask", "closePopover", "openSuccessSnack", "openErrorSnack", "trackEvent", "queue", "splice", "push", "saveQueue", "navigateToCurrentTask", "empty", "hasTaskNamespaces", "storedNamespace", "getTaskNamespace", "stringValue", "find", "f", "__spreadValues", "req", "routePrefix", "routePrefix$", "navigateByUrl", "PAGE_ROUTES", "TASK", "ROOT", "SUBROUTES", "LIST", "updateActivity", "taskId", "setCurrentTaskNamespace", "updatedTask", "getDisplayName", "crmObject", "companyName", "getFieldValueFromCrmObject", "CompanyName", "firstName", "StandardExternalIds", "FirstName", "lastName", "LastName", "trim", "email", "Email", "phone", "PhoneNumber", "formatPhoneNumber", "phoneNumber", "parsedNumber", "parseNumber", "defaultCountry", "Object", "keys", "format", "mapAssociationNamesToIds", "idToName", "Map", "forEach", "contacts", "companies", "crmObjectType", "contacts$", "getMultiObject", "contact", "crmObjects", "of", "companies$", "company", "displayNames$", "combineLatest", "concat", "displayNames", "filter", "has", "get", "sort", "a", "b", "nameA", "toLowerCase", "nameB", "ActivityName", "navigateToAssociation", "selectors", "viewQuery", "rf", "ctx", "CrmTaskQueueComponent_mat_toolbar_0_Template", "CrmTaskQueueComponent_ng_template_1_Template", "CrmTaskQueueComponent_ng_template_3_Template", "CrmTaskQueueComponent_ng_template_5_Template", "CommonModule", "NgClass", "NgForOf", "NgIf", "NgSwitch", "NgSwitchCase", "NgSwitchDefault", "AsyncPipe", "MatButtonModule", "MatButton", "MatIconButton", "MatChipsModule", "MatChip", "MatChipTrailingIcon", "MatIconModule", "MatIcon", "MatToolbarModule", "MatToolbar", "CrmRescheduleTaskComponent", "TranslateModule", "TranslatePipe", "MatProgressSpinnerModule", "MatProgressSpinner", "MatMenuModule", "MatMenu", "MatMenuItem", "MatMenuTrigger", "styles", "init_task_queue", "__esmMin", "init_interfaces", "init_task_queue_storage_service", "init_task_queue_component", "init_task_queue_service"] }