{ "version": 3, "sources": ["libs/crm/dynamic/src/lib/crm-components/permission-required/permission-required-panel.component.ts", "libs/crm/dynamic/src/lib/crm-components/permission-required/permission-required-panel.component.html", "libs/crm/dynamic/src/lib/crm-components/permission-required/index.ts", "libs/crm/dynamic/src/lib/activity/task/list.component.ts", "libs/crm/dynamic/src/lib/activity/task/list.component.html"], "sourcesContent": ["import { Component } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { GalaxyPageModule } from '@vendasta/galaxy/page';\nimport { GalaxyEmptyStateModule } from '@vendasta/galaxy/empty-state';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslationModule } from '@galaxy/crm/static';\nimport { PermissionRequiredComponent } from './permission-required.component';\n\n@Component({\n selector: 'crm-permission-required-panel',\n templateUrl: './permission-required-panel.component.html',\n styleUrls: ['./permission-required.component.scss'],\n imports: [MatButtonModule, GalaxyPageModule, GalaxyEmptyStateModule, MatIconModule, TranslationModule],\n standalone: true,\n})\nexport class PermissionRequiredPanelComponent extends PermissionRequiredComponent {}\n", "\n \n \n \n \n {{ 'PERMISSION.TITLE' | translate }}\n

\n {{ 'PERMISSION.DESCRIPTION' | translate }}\n

\n

\n {{ 'PERMISSION.REQUEST_ACCESS' | translate }}\n

\n
\n
\n", "export { PermissionRequiredComponent } from './permission-required.component';\nexport { PermissionRequiredPanelComponent } from './permission-required-panel.component';\n", "import { CommonModule } from '@angular/common';\nimport { Component, inject, signal, TemplateRef, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatDialog, MatDialogModule } from '@angular/material/dialog';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport {\n ActivityAssociationInterface,\n ActivityInterface,\n CRMActivityApiService,\n FieldValueInterface,\n GetMultiActivityResponse,\n FieldMaskInterface,\n} from '@vendasta/crm';\nimport {\n ActivityTaskStatus,\n ActivityType,\n CrmCompanyAssociationFormFieldComponent,\n CrmContactToCompanyAssociationFormFieldComponent,\n CrmActivityLoggerTaskComponent,\n CrmDrawerComponent,\n CrmFieldService,\n CrmInjectionToken,\n CRMRowObject,\n CustomRowStyle,\n ListObjectsPageComponent,\n ListObjectsTableContentDirective,\n MultiRowAction,\n ObjectAssociationType,\n ObjectType,\n SimplifiedUser,\n SingleRowAction,\n StandardIds,\n UserWithFullName,\n FormFieldAssociation,\n CrmMultilocationInjectionToken,\n CrmObjectManagementTableChangesService,\n} from '@galaxy/crm/static';\nimport { GalaxyButtonLoadingIndicatorModule } from '@vendasta/galaxy/button-loading-indicator';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { CustomCell, Row } from '@vendasta/galaxy/table';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { ObservableWorkState } from '@vendasta/rx-utils/work-state';\nimport {\n catchError,\n firstValueFrom,\n forkJoin,\n map,\n Observable,\n of,\n tap,\n ReplaySubject,\n shareReplay,\n switchMap,\n withLatestFrom,\n BehaviorSubject,\n debounceTime,\n take,\n combineLatest,\n} from 'rxjs';\nimport { CrmTaskQueueComponent } from '../../crm-components/task-queue';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { PermissionRequiredPanelComponent } from '../../crm-components/permission-required';\nimport { TaskQueueService } from '../../crm-components/task-queue/task-queue.service';\n\nconst errorTextColor = '#c62828'; //galaxy light mode $error-text-color\n\ntype RequestType = 'create' | 'edit';\n\ninterface TaskResponse {\n crmObjectId: string;\n request: RequestType;\n}\n\ninterface TaskWithNamespace {\n id: string;\n namespace: string;\n}\n\nconst manuallyLoggedFieldValue: FieldValueInterface = {\n fieldId: StandardIds.ActivityManuallyLogged,\n booleanValue: true,\n};\n\nenum TaskErrorStatus {\n NO_ERROR = 0,\n UNKNOWN_ERROR = 1,\n ACCESS_DENIED = 2,\n}\n\n@Component({\n selector: 'crm-list-tasks',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n standalone: true,\n imports: [\n ListObjectsPageComponent,\n CommonModule,\n CrmDrawerComponent,\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n CrmActivityLoggerTaskComponent,\n ListObjectsTableContentDirective,\n TranslateModule,\n GalaxyButtonLoadingIndicatorModule,\n GalaxyFormFieldModule,\n CrmContactToCompanyAssociationFormFieldComponent,\n CrmCompanyAssociationFormFieldComponent,\n CrmTaskQueueComponent,\n MatIconModule,\n PermissionRequiredPanelComponent,\n ],\n})\nexport class ListTasksPageComponent {\n @ViewChild('drawer') drawer?: CrmDrawerComponent;\n @ViewChild('upsert') upsertTemplateRef?: TemplateRef;\n @ViewChild(CrmActivityLoggerTaskComponent) taskLogger?: CrmActivityLoggerTaskComponent;\n @ViewChild(CrmTaskQueueComponent) taskQueue?: CrmTaskQueueComponent;\n\n private readonly activityService = inject(CRMActivityApiService);\n private readonly fieldService = inject(CrmFieldService);\n private readonly config = inject(CrmInjectionToken);\n private readonly multiLocationConfig = inject(CrmMultilocationInjectionToken);\n private readonly snackbarService = inject(SnackbarService);\n private readonly translateService = inject(TranslateService);\n private readonly analyticsService = inject(ProductAnalyticsService);\n private readonly taskQueueService = inject(TaskQueueService);\n private readonly crmObjectManagementTableChangesService = inject(CrmObjectManagementTableChangesService);\n private readonly dialog = inject(MatDialog);\n\n protected readonly isMultiLocation$ = this.multiLocationConfig?.isMultiLocation$ ?? of(false);\n protected isMultiLocation = toSignal(this.isMultiLocation$);\n protected contactAssociations: FormFieldAssociation[] = [];\n protected companyAssociations: FormFieldAssociation[] = [];\n protected otherAssociations: FormFieldAssociation[] = [];\n protected readonly taskWorkState = new ObservableWorkState();\n protected readonly tableRows = signal([]);\n protected readonly presetFilters$ = this.config.task?.presetFilters$ ?? of([]);\n private refreshRow$$ = new BehaviorSubject('');\n protected readonly refreshRow$ = this.refreshRow$$.asObservable();\n\n protected readonly customRowStyle: CustomRowStyle = (row: Row) => {\n if (this.isComplete(row))\n return {\n 'text-decoration': 'line-through',\n };\n if (this.isOverdue(row))\n return {\n color: errorTextColor,\n };\n return {};\n };\n protected readonly objectType: ObjectType = 'Activity';\n protected readonly activityType: ActivityType = 'Task';\n\n private readonly currentRowNamespace$$ = new BehaviorSubject('');\n private readonly activityId$$: ReplaySubject = new ReplaySubject(1);\n private readonly taskPermissionsSubject$$ = new BehaviorSubject([]);\n protected readonly taskPermissions$ = this.taskPermissionsSubject$$.pipe(\n switchMap((tasks) => this.verifyTaskPermissions(tasks)),\n shareReplay(1),\n );\n protected activity$: Observable;\n protected TaskError = TaskErrorStatus;\n protected activityLoadError$: Observable;\n\n protected readonly activityOwner$: Observable;\n protected readonly user$ = this.config.currentUserId$.pipe(\n switchMap((userId) => this.config.services?.userService?.getMultiUsers([userId]) ?? of([])),\n map((users) => this.mapUser(users?.[0])),\n );\n\n protected readonly hasAccessToFeature$ = this.config.hasAccessToFeature$?.('task-queue') ?? of(false);\n\n protected readonly multiRowActions$: Observable = this.hasAccessToFeature$.pipe(\n map((hasAccess) => {\n const actions: MultiRowAction[] = [\n {\n label: 'TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.PLURAL.TITLE',\n callback: (rows: Row[]) => {\n const validRows = rows.filter((row) => !this.isComplete(row) && row.id);\n\n if (validRows.length === 0) {\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.TASK_QUEUE.NO_TASKS_SELECTED');\n return;\n }\n\n const tasksToComplete: TaskWithNamespace[] = validRows.map((row) => {\n const namespace = row.data['namespace']?.value ?? '';\n return {\n id: row.id,\n namespace,\n };\n });\n\n firstValueFrom(this.completeTaskMulti(tasksToComplete)).then((failedIDs) => {\n const amountFailed = failedIDs.length;\n if (amountFailed == 0) {\n this.snackbarService.openSuccessSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.PLURAL.SUCCESS');\n } else {\n console.error('Failed to complete Task IDs: ', failedIDs);\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.PLURAL.ERROR', {\n interpolateTranslateParams: { amount: `${amountFailed}`, total: `${tasksToComplete.length}` },\n });\n }\n });\n\n this.analyticsService.trackEvent('task-table-complete-multi', 'sales-tasks', 'click', 1, {\n numTasks: tasksToComplete.length,\n });\n },\n },\n ];\n if (hasAccess) {\n actions.push({\n label: 'TASK.LIST_OBJECTS_TABLE.ACTIONS.TASK_QUEUE.START_TASKS',\n callback: (rows: Row[]) => {\n const validRows = rows.filter((row) => row.id);\n\n const tasks: TaskWithNamespace[] = validRows.map((row) => {\n const namespace = row.data['namespace']?.value ?? '';\n return {\n id: row.id,\n namespace,\n };\n });\n\n this.startTaskQueue(tasks.map((task) => task.id));\n },\n });\n }\n return actions;\n }),\n );\n protected readonly singleRowActions$: Observable = this.hasAccessToFeature$.pipe(\n map((hasAccess) => {\n const actions: SingleRowAction[] = [\n {\n label: 'TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.TITLE',\n visible: (row: Row) => !this.isComplete(row),\n callback: (row) => {\n const namespace = row.data['namespace']?.value ?? '';\n\n const task: TaskWithNamespace = {\n id: row.id,\n namespace,\n };\n\n this.completeTask(task).subscribe({\n next: (success) => {\n if (success) {\n this.snackbarService.openSuccessSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.SUCCESS');\n } else {\n console.error('Failed to complete Task with ID: ', row.id);\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.ERROR');\n }\n },\n error: (err) => {\n console.error('Error completing task:', err);\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.ERROR');\n },\n });\n\n this.analyticsService.trackEvent('task-table-complete-single', 'sales-tasks', 'click', 1);\n },\n },\n ];\n if (hasAccess) {\n actions.push({\n label: 'TASK.LIST_OBJECTS_TABLE.ACTIONS.TASK_QUEUE.START_TASK',\n callback: (row) => {\n const namespace = row.data['namespace']?.value ?? '';\n\n const task: TaskWithNamespace = {\n id: row.id,\n namespace,\n };\n\n this.taskPermissionsSubject$$.next([task]);\n firstValueFrom(combineLatest([this.isMultiLocation$, this.taskPermissions$])).then(\n ([isMultiLocation, results]) => {\n const taskResult =\n Array.isArray(results) && results.length > 0\n ? results.find((result) => result.id === task.id)\n : undefined;\n const hasAccess = taskResult?.hasAccess ?? false;\n\n if (isMultiLocation) {\n if (hasAccess) {\n const taskNamespaces = new Map();\n taskNamespaces.set(task.id, task.namespace);\n this.taskQueueService.setTaskNamespaces(taskNamespaces);\n this.taskQueueService.startQueue([task.id]);\n this.analyticsService.trackEvent('task-table-start-single', 'sales-tasks', 'click', 1);\n } else {\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.ERROR');\n }\n this.taskPermissionsSubject$$.next([]);\n } else {\n this.taskQueueService.startQueue([task.id], task.namespace);\n this.analyticsService.trackEvent('task-table-start-single', 'sales-tasks', 'click', 1);\n this.taskPermissionsSubject$$.next([]);\n }\n },\n );\n },\n });\n }\n return actions;\n }),\n );\n constructor() {\n this.taskWorkState.successEvents$\n .pipe(\n takeUntilDestroyed(),\n switchMap((valid) => (valid ? this.taskWorkState.workResults$ : of(null))),\n )\n .subscribe((result) => {\n const wasEdited = result?.request === 'edit';\n if (result) {\n this.snackbarService.openSuccessSnack(\n wasEdited ? 'ACTIVITY_LOGGER.LOGGED_TASK.EDIT.SUCCESS' : 'ACTIVITY_LOGGER.LOGGED_TASK.CREATE.SUCCESS',\n );\n this.closeDrawer();\n } else {\n this.snackbarService.openErrorSnack(\n wasEdited ? 'ACTIVITY_LOGGER.LOGGED_TASK.EDIT.ERROR' : 'ACTIVITY_LOGGER.LOGGED_TASK.CREATE.ERROR',\n );\n }\n });\n\n const getActivity$ = this.activityId$$.asObservable().pipe(\n withLatestFrom(this.currentRowNamespace$$),\n switchMap(([activityId, namespace]) => {\n if (activityId) {\n return this.activityService.getMultiActivity({ crmObjectIds: [activityId], namespace });\n }\n return of({} as GetMultiActivityResponse);\n }),\n shareReplay(1),\n );\n this.activityLoadError$ = getActivity$.pipe(\n map(() => TaskErrorStatus.NO_ERROR),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 403) {\n return of(TaskErrorStatus.ACCESS_DENIED);\n }\n return of(TaskErrorStatus.UNKNOWN_ERROR);\n }),\n // prevent emitting multiple times when opening side panel\n debounceTime(100),\n );\n this.activity$ = getActivity$.pipe(\n map((response: GetMultiActivityResponse) => response?.activities?.[0]),\n shareReplay(1),\n );\n this.activity$.pipe(takeUntilDestroyed()).subscribe((activity) => {\n this.resetAssociations();\n if (activity?.associations?.length) {\n this.setAssociations(activity.associations);\n }\n });\n\n this.activityOwner$ = this.activity$.pipe(\n switchMap((activity) => {\n if (activity?.ownerId) {\n return this.config.services?.userService?.getMultiUsers([activity.ownerId]) ?? of([]);\n }\n return of([]);\n }),\n map((users) => this.mapUser(users?.[0])),\n );\n\n this.analyticsService.trackEvent('task-table-view', 'sales-tasks', 'view', 1);\n }\n\n private mapUser(user?: SimplifiedUser): UserWithFullName | null {\n if (user) {\n return {\n userId: user.userId,\n firstName: user.firstName,\n lastName: user.lastName,\n fullName: user.displayName,\n } as UserWithFullName;\n }\n return null;\n }\n\n private isOverdue(row: Row): boolean {\n const dueDateField = row?.data[StandardIds.ActivityTaskDueDate];\n if (dueDateField?.cellType === 'custom') {\n const { dueDate, status } = this.getCustomCellFields(dueDateField as CustomCell);\n if (dueDate instanceof Date && status === ActivityTaskStatus.Open) {\n return dueDate.getTime() < Date.now();\n }\n } else if (dueDateField?.cellType === 'date' || dueDateField?.cellType === 'timestamp') {\n const dueDate = row?.data[StandardIds.ActivityTaskDueDate]?.value;\n const status = row?.data[StandardIds.ActivityTaskStatus]?.value;\n if (dueDate instanceof Date && status === ActivityTaskStatus.Open) {\n return dueDate.getTime() < Date.now();\n }\n }\n return false;\n }\n\n private isComplete(row: Row): boolean {\n const cell = row?.data[StandardIds.ActivityTaskStatus];\n if (cell?.cellType === 'custom') {\n const validFields: FieldValueInterface[] = cell.value?.filter(Boolean) ?? [];\n const statusField = validFields.find((field) => field.fieldId === StandardIds.ActivityTaskStatus);\n return statusField?.stringValue === ActivityTaskStatus.Completed;\n } else if (cell?.cellType === 'text') {\n const status = row?.data[StandardIds.ActivityTaskStatus]?.value;\n return status === ActivityTaskStatus.Completed;\n }\n return false;\n }\n\n private getCustomCellFields(cell: CustomCell): { dueDate?: Date; status?: string } {\n const validFields: FieldValueInterface[] = cell.value?.filter(Boolean) ?? [];\n const dueDateField = validFields.find((field) => field.fieldId === StandardIds.ActivityTaskDueDate);\n const statusField = validFields.find((field) => field.fieldId === StandardIds.ActivityTaskStatus);\n return {\n dueDate: dueDateField?.dateValue,\n status: statusField?.stringValue,\n };\n }\n\n private closeDrawer(): void {\n this.drawer?.close();\n this.currentRowNamespace$$.next('');\n this.activityId$$.next('');\n }\n\n private createActivity(\n fields: FieldValueInterface[],\n associations: ActivityAssociationInterface[],\n ownerId?: string,\n ): Observable {\n const activity: ActivityInterface = {\n crmObjectSubtype: 'Task',\n fields,\n associations,\n ownerId,\n };\n return this.config.namespace$.pipe(\n switchMap((namespace) => this.activityService.createActivity({ activity, namespace })),\n map((response) => response.crmObjectId),\n tap((crmObjectId) => {\n activity.crmObjectId = crmObjectId;\n this.crmObjectManagementTableChangesService.addCreatedCrmObject(this.objectType, activity, this.activityType);\n }),\n );\n }\n\n private updateActivity(\n namespace: string,\n activityId: string,\n fields: FieldValueInterface[],\n oldFields: FieldValueInterface[],\n associations: ActivityAssociationInterface[],\n ownerId?: string,\n ): Observable {\n const fieldMask = ['associations', ...this.fieldService.getFieldMaskFromFormGroup(this.taskLogger?.formGroup)];\n if (ownerId) {\n fieldMask.push('ownerId');\n }\n const activity: ActivityInterface = {\n crmObjectId: activityId,\n crmObjectSubtype: 'Task',\n fields,\n associations,\n ownerId,\n namespace: namespace,\n };\n\n return this.activityService.updateActivity({ activity, namespace, fieldMask: { paths: fieldMask } }).pipe(\n map(() => activityId),\n tap(() => {\n const fieldsCopy = [...fields];\n for (const oldField of oldFields) {\n if (fieldsCopy.some((field) => field.fieldId === oldField.fieldId)) {\n continue;\n }\n fieldsCopy.push(oldField);\n }\n activity.fields = fieldsCopy;\n this.crmObjectManagementTableChangesService.addUpdatedCrmObject(this.objectType, activity, this.activityType);\n }),\n );\n }\n\n private getAssociations(): ActivityAssociationInterface[] {\n const contacts = this.contactAssociations.map(\n (association) =>\n ({\n crmObjectId: association.crmObjectId,\n crmObjectType: association.crmObjectType,\n }) as ActivityAssociationInterface,\n );\n const companies = this.companyAssociations.map(\n (association) =>\n ({\n crmObjectId: association.crmObjectId,\n crmObjectType: association.crmObjectType,\n }) as ActivityAssociationInterface,\n );\n // Contact and Company associations are handled separately\n const filteredAssociations = this.otherAssociations.filter(\n (association) => !['Contact', 'Company'].includes(association.crmObjectType!),\n );\n const other = filteredAssociations.map(\n (association) =>\n ({\n crmObjectId: association.crmObjectId,\n crmObjectType: association.crmObjectType,\n }) as ActivityAssociationInterface,\n );\n return [...contacts, ...companies, ...other];\n }\n\n private setAssociations(associations: ActivityAssociationInterface[]): void {\n const contactAssociations: FormFieldAssociation[] = [];\n const companyAssociations: FormFieldAssociation[] = [];\n const otherAssociations: FormFieldAssociation[] = [];\n associations.forEach((association) => {\n switch (association.crmObjectType) {\n case 'Contact':\n contactAssociations.push({\n crmObjectId: association.crmObjectId,\n crmObjectType: 'Contact',\n });\n break;\n case 'Company':\n companyAssociations.push({\n crmObjectId: association.crmObjectId,\n crmObjectType: 'Company',\n });\n break;\n default:\n otherAssociations.push({\n crmObjectId: association.crmObjectId,\n crmObjectType: association.crmObjectType as ObjectType | ObjectAssociationType,\n });\n }\n });\n this.contactAssociations = contactAssociations;\n this.companyAssociations = companyAssociations;\n this.otherAssociations = otherAssociations;\n }\n\n private resetAssociations(): void {\n this.contactAssociations = [];\n this.companyAssociations = [];\n this.otherAssociations = [];\n }\n\n private async addCreateTaskDefaultAssociations(): Promise {\n const userId = await firstValueFrom(this.config.currentUserId$);\n this.otherAssociations.push({\n crmObjectId: userId,\n crmObjectType: 'User',\n });\n }\n\n handleCancelClick(): void {\n this.closeDrawer();\n }\n\n protected async handleCreateTaskClick(): Promise {\n if (this.drawer && this.upsertTemplateRef) {\n this.resetAssociations();\n this.currentRowNamespace$$.next('');\n this.activityId$$.next('');\n await this.addCreateTaskDefaultAssociations();\n this.drawer.open(\n this.upsertTemplateRef,\n this.translateService.instant('TASK.LIST_OBJECTS_TABLE.ACTIONS.CREATE.TITLE'),\n );\n }\n this.analyticsService.trackEvent('task-table-create-task', 'sales-tasks', 'click', 1);\n }\n\n protected handleEditTaskClick(request: CRMRowObject): void {\n if (this.drawer && this.upsertTemplateRef) {\n this.resetAssociations();\n this.currentRowNamespace$$.next(request.namespace);\n this.activityId$$.next(request.objectId);\n this.drawer.open(\n this.upsertTemplateRef,\n this.translateService.instant('TASK.LIST_OBJECTS_TABLE.ACTIONS.EDIT.TITLE'),\n );\n }\n this.analyticsService.trackEvent('task-table-edit-task', 'sales-tasks', 'click', 1);\n }\n\n protected handleSaveClick(requestType: RequestType): void {\n const isEdit = requestType === 'edit';\n if (!this.taskLogger) {\n return;\n }\n\n this.taskLogger.validate();\n if (this.taskLogger.formGroup.invalid) {\n this.snackbarService.openErrorSnack('ACTIVITY_LOGGER.ERROR_SET_REQUIRED_FIELDS');\n return;\n }\n const fields = [...this.taskLogger.getValues(), manuallyLoggedFieldValue];\n const associations = this.getAssociations();\n const ownerId = this.taskLogger.ownerId;\n\n let work$: Observable;\n if (isEdit) {\n work$ = this.activity$.pipe(\n switchMap((activity) => {\n const activityId = activity?.crmObjectId;\n if (activityId) {\n return this.updateActivity(\n activity.namespace ?? '',\n activityId,\n fields,\n activity.fields ?? [],\n associations,\n ownerId,\n ).pipe(map((crmObjectId) => ({ crmObjectId, request: requestType }) as TaskResponse));\n }\n return of({ crmObjectId: activityId, request: requestType } as TaskResponse);\n }),\n );\n } else {\n work$ = this.createActivity(fields, associations, ownerId).pipe(\n map((crmObjectId) => ({ crmObjectId, request: requestType }) as TaskResponse),\n );\n }\n this.taskWorkState.startWork(work$);\n\n this.analyticsService.trackEvent('task-table-save-click', 'sales-tasks', 'click', 1, {\n requestType: requestType,\n });\n }\n\n protected handleRowsChange(value: Row[]): void {\n this.tableRows.set(value);\n }\n\n protected handleStartTaskQueueClick(): void {\n firstValueFrom(this.hasAccessToFeature$).then((hasAccess) => {\n if (hasAccess) {\n const incompleteTasks = this.tableRows().filter((task) => !this.isComplete(task));\n const validRows = incompleteTasks.filter((row) => row.id);\n\n firstValueFrom(this.isMultiLocation$).then((isMultiLocation) => {\n if (isMultiLocation) {\n const tasks: TaskWithNamespace[] = validRows.map((row) => {\n const namespace = row.data['namespace']?.value ?? '';\n return {\n id: row.id,\n namespace,\n };\n });\n\n this.verifyTaskPermissions(tasks).subscribe((results) => {\n const accessibleTaskIds = results.filter((result) => result.hasAccess).map((result) => result.id);\n\n const inaccessibleTasks = results.filter((result) => !result.hasAccess);\n\n if (accessibleTaskIds.length === 0) {\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.ERROR');\n return;\n }\n\n // If some tasks were removed due to lack of permission, show confirmation modal\n if (inaccessibleTasks.length > 0) {\n this.showConfirmationModal(inaccessibleTasks.length, tasks.length, () => {\n this.startQueueWithAccessibleTasks(tasks, accessibleTaskIds);\n });\n } else {\n this.startQueueWithAccessibleTasks(tasks, accessibleTaskIds);\n }\n });\n } else {\n const tasks: TaskWithNamespace[] = validRows.map((row) => {\n const namespace = row.data['namespace']?.value ?? '';\n return {\n id: row.id,\n namespace,\n };\n });\n this.startTaskQueue(tasks.map((task) => task.id));\n }\n });\n } else {\n this.config.openRestrictedDialog?.('task-queue');\n }\n });\n }\n\n private startQueueWithAccessibleTasks(tasks: TaskWithNamespace[], accessibleTaskIds: string[]): void {\n const taskNamespaces = new Map();\n accessibleTaskIds.forEach((id) => {\n const task = tasks.find((t) => t.id === id);\n if (task) {\n taskNamespaces.set(id, task.namespace);\n }\n });\n\n this.taskQueueService.setTaskNamespaces(taskNamespaces);\n this.taskQueueService.startQueue(accessibleTaskIds);\n\n this.analyticsService.trackEvent('task-table-start-queue', 'sales-tasks', 'click', 1, {\n numTasks: accessibleTaskIds.length,\n filteredTasks: tasks.length - accessibleTaskIds.length,\n });\n }\n\n private showConfirmationModal(inaccessibleCount: number, totalCount: number, onConfirm: () => void): void {\n import('./permission-confirmation-dialog.component').then(({ PermissionConfirmationDialogComponent }) => {\n const dialogRef = this.dialog.open(PermissionConfirmationDialogComponent, {\n width: '400px',\n data: {\n inaccessibleCount,\n totalCount,\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result === true) {\n onConfirm();\n }\n });\n });\n }\n\n private startTaskQueue(taskIds: string[], defaultNamespace?: string): void {\n if (taskIds.length === 0) {\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.TASK_QUEUE.NO_TASKS_SELECTED');\n return;\n }\n const rows = this.tableRows();\n\n const validRows = taskIds\n .map((taskId) => rows.find((r) => r.id === taskId))\n .filter((row): row is Row => row !== null && row !== undefined);\n\n const tasks: TaskWithNamespace[] = validRows.map((row) => {\n const namespace = row.data['namespace']?.value ?? '';\n return {\n id: row.id,\n namespace,\n };\n });\n\n if (tasks.length === 0 && defaultNamespace) {\n this.taskQueueService.startQueue(taskIds, defaultNamespace);\n return;\n }\n\n firstValueFrom(this.isMultiLocation$).then((isMultiLocation) => {\n if (isMultiLocation) {\n const taskNamespaces = new Map();\n tasks.forEach((task) => {\n taskNamespaces.set(task.id, task.namespace);\n });\n\n // Check permissions for each task\n this.verifyTaskPermissions(tasks).subscribe((results) => {\n const accessibleTaskIds = results.filter((result) => result.hasAccess).map((result) => result.id);\n\n const inaccessibleTasks = results.filter((result) => !result.hasAccess);\n\n // Update the namespace map to include only tasks with permission\n const filteredTaskNamespaces = new Map();\n accessibleTaskIds.forEach((id) => {\n const namespace = taskNamespaces.get(id);\n if (namespace) {\n filteredTaskNamespaces.set(id, namespace);\n }\n });\n\n if (accessibleTaskIds.length === 0) {\n this.snackbarService.openErrorSnack('TASK.LIST_OBJECTS_TABLE.ACTIONS.COMPLETE.SINGLE.ERROR');\n return;\n }\n\n if (inaccessibleTasks.length > 0) {\n this.showConfirmationModal(inaccessibleTasks.length, tasks.length, () => {\n this.taskQueueService.setTaskNamespaces(filteredTaskNamespaces);\n this.taskQueueService.startQueue(accessibleTaskIds);\n\n this.analyticsService.trackEvent('task-table-start-queue', 'sales-tasks', 'click', 1, {\n numTasks: accessibleTaskIds.length,\n filteredTasks: tasks.length - accessibleTaskIds.length,\n });\n });\n } else {\n this.taskQueueService.setTaskNamespaces(filteredTaskNamespaces);\n this.taskQueueService.startQueue(accessibleTaskIds);\n\n this.analyticsService.trackEvent('task-table-start-queue', 'sales-tasks', 'click', 1, {\n numTasks: accessibleTaskIds.length,\n filteredTasks: tasks.length - accessibleTaskIds.length,\n });\n }\n });\n } else {\n const tasksByNamespace = new Map();\n\n tasks.forEach((task) => {\n if (!tasksByNamespace.has(task.namespace)) {\n tasksByNamespace.set(task.namespace, []);\n }\n tasksByNamespace.get(task.namespace)?.push(task.id);\n });\n\n tasksByNamespace.forEach((ids, namespace) => {\n this.taskQueueService.startQueue(ids, namespace);\n });\n\n this.analyticsService.trackEvent('task-table-start-queue', 'sales-tasks', 'click', 1, {\n numTasks: tasks.length,\n });\n }\n });\n }\n\n private completeTaskMulti(tasks: TaskWithNamespace[]): Observable {\n if (tasks.length === 0) {\n return of([]);\n }\n\n const completionObservables = tasks.map((task) => {\n return this.completeTask(task).pipe(map((success) => (success ? '' : task.id)));\n });\n\n return forkJoin(completionObservables).pipe(map((results) => results.filter(Boolean)));\n }\n\n private completeTask(task: TaskWithNamespace): Observable {\n const activity: ActivityInterface = {\n crmObjectId: task.id,\n crmObjectSubtype: 'Task',\n fields: [\n {\n fieldId: StandardIds.ActivityTaskStatus,\n stringValue: ActivityTaskStatus.Completed,\n },\n ],\n };\n\n const fieldMask: FieldMaskInterface = {\n paths: [StandardIds.ActivityTaskStatus],\n };\n\n if (task.namespace) {\n return this.activityService\n .updateActivity({\n namespace: task.namespace,\n activity: activity,\n fieldMask: fieldMask,\n })\n .pipe(\n tap(() => {\n this.refreshRow$$.next(task.id);\n }),\n map(() => true),\n catchError(() => of(false)),\n );\n } else {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((defaultNamespace) => {\n return this.activityService\n .updateActivity({\n namespace: defaultNamespace,\n activity: activity,\n fieldMask: fieldMask,\n })\n .pipe(\n tap(() => {\n this.refreshRow$$.next(task.id);\n }),\n map(() => true),\n catchError(() => of(false)),\n );\n }),\n );\n }\n }\n\n private verifyTaskPermissions(tasks: TaskWithNamespace[]): Observable<\n Array<{\n id: string;\n hasAccess: boolean;\n }>\n > {\n return forkJoin(\n tasks.map((task) =>\n this.activityService\n .getMultiActivity({\n crmObjectIds: [task.id],\n namespace: task.namespace,\n })\n .pipe(\n take(1),\n map(() => {\n return {\n id: task.id,\n hasAccess: true,\n };\n }),\n catchError((err: HttpErrorResponse) => {\n if (err.status === 403 || err.status === 404) {\n return of({\n id: task.id,\n hasAccess: false,\n });\n }\n return of({\n id: task.id,\n hasAccess: true,\n });\n }),\n ),\n ),\n );\n }\n}\n", "\n \n \n \n \n \n \n @if (!isMultiLocation()) {\n \n }\n \n \n\n\n\n
\n @switch (activityLoadError$ | async) {\n @case (TaskError.NO_ERROR) {\n \n }\n @case (TaskError.UNKNOWN_ERROR) {\n

{{ 'TASK.LIST_OBJECTS_TABLE.ACTIONS.EDIT.ERROR_LOADING_TASK' | translate }}

\n }\n @case (TaskError.ACCESS_DENIED) {\n \n }\n }\n
\n
\n\n\n \n\n\n\n \n \n \n \n \n
\n \n \n \n {{ 'TASK.LIST_OBJECTS_TABLE.ACTIONS.CREATE.TITLE' | translate }}\n \n \n {{ 'TASK.LIST_OBJECTS_TABLE.ACTIONS.EDIT.TITLE' | translate }}\n \n \n \n \n
\n
\n\n\n \n \n \n \n \n @if (!isMultiLocation()) {\n \n \n \n \n \n }\n\n"], "mappings": "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", "names": ["PermissionRequiredPanelComponent", "init_permission_required_panel_component", "__esmMin", "init_button", "init_page", "init_empty_state", "init_icon", "init_src", "init_permission_required_component", "PermissionRequiredComponent", "__ngFactoryType__", "selectors", "features", "\u0275\u0275InheritDefinitionFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275property", "\u0275\u0275pipeBind1", "\u0275\u0275textInterpolate", "\u0275\u0275textInterpolate1", "MatButtonModule", "GalaxyPageModule", "PageComponent", "GalaxyEmptyStateModule", "EmptyStateComponent", "EmptyStateHeroDirective", "EmptyStateTitleDirective", "MatIconModule", "TranslationModule", "TranslatePipe", "styles", "init_permission_required", "__esmMin", "init_permission_required_panel_component", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275elementContainerStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleStartTaskQueueClick", "\u0275\u0275template", "ListTasksPageComponent_ng_container_8_Conditional_2_Template", "ListTasksPageComponent_ng_container_8_Conditional_4_Template", "\u0275\u0275advance", "\u0275\u0275conditional", "\u0275\u0275pipeBind1", "hasAccessToFeature$", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "\u0275\u0275pureFunction1", "_c2", "tableRows_r4", "length", "_r5", "handleCreateTaskClick", "\u0275\u0275elementContainer", "ListTasksPageComponent_ng_template_10_Case_1_ng_container_0_Template", "\u0275\u0275property", "upsertBody_r6", "_c3", "activity$", "\u0275\u0275textInterpolate", "ListTasksPageComponent_ng_template_10_Case_4_ng_container_0_Template", "permissionRequired_r7", "ListTasksPageComponent_ng_template_10_Case_1_Template", "ListTasksPageComponent_ng_template_10_Case_3_Template", "ListTasksPageComponent_ng_template_10_Case_4_Template", "tmp_6_0", "activityLoadError$", "TaskError", "NO_ERROR", "UNKNOWN_ERROR", "ACCESS_DENIED", "\u0275\u0275element", "\u0275\u0275twoWayListener", "$event", "_r8", "i0", "\u0275\u0275twoWayBindingSet", "otherAssociations", "ListTasksPageComponent_ng_template_14_ng_container_4_Template", "activity_r9", "activity", "handleSaveClick", "ListTasksPageComponent_ng_template_14_ng_container_10_Template", "ListTasksPageComponent_ng_template_14_ng_template_11_Template", "\u0275\u0275templateRefExtractor", "handleCancelClick", "activityOwner$", "user$", "\u0275\u0275twoWayProperty", "associationFormRow_r11", "_c4", "tmp_13_0", "namespace", "undefined", "taskWorkState", "isLoading$", "editTaskButton_r10", "_r13", "companyAssociations", "_r12", "contactAssociations", "ListTasksPageComponent_ng_template_16_Conditional_4_Template", "namespace_r14", "isMultiLocation", "errorTextColor", "manuallyLoggedFieldValue", "TaskErrorStatus", "ListTasksPageComponent", "init_list_component", "__esmMin", "init_common", "init_core", "init_rxjs_interop", "init_button", "init_icon", "init_dialog", "init_ngx_translate_core", "init_vendasta_crm", "init_src", "init_button_loading_indicator", "init_form_field", "init_snackbar_service", "init_esm", "init_task_queue", "init_permission_required", "init_task_queue_service", "fieldId", "StandardIds", "ActivityManuallyLogged", "booleanValue", "constructor", "activityService", "inject", "CRMActivityApiService", "fieldService", "CrmFieldService", "config", "CrmInjectionToken", "multiLocationConfig", "CrmMultilocationInjectionToken", "snackbarService", "SnackbarService", "translateService", "TranslateService", "analyticsService", "ProductAnalyticsService", "taskQueueService", "TaskQueueService", "crmObjectManagementTableChangesService", "CrmObjectManagementTableChangesService", "dialog", "MatDialog", "isMultiLocation$", "of", "toSignal", "ObservableWorkState", "tableRows", "signal", "presetFilters$", "task", "refreshRow$$", "BehaviorSubject", "refreshRow$", "asObservable", "customRowStyle", "row", "isComplete", "isOverdue", "color", "objectType", "activityType", "currentRowNamespace$$", "activityId$$", "ReplaySubject", "taskPermissionsSubject$$", "taskPermissions$", "pipe", "switchMap", "tasks", "verifyTaskPermissions", "shareReplay", "currentUserId$", "userId", "services", "userService", "getMultiUsers", "map", "users", "mapUser", "multiRowActions$", "hasAccess", "actions", "label", "callback", "rows", "validRows", "filter", "id", "openErrorSnack", "tasksToComplete", "data", "value", "firstValueFrom", "completeTaskMulti", "then", "failedIDs", "amountFailed", "openSuccessSnack", "console", "error", "interpolateTranslateParams", "amount", "total", "trackEvent", "numTasks", "push", "startTaskQueue", "singleRowActions$", "visible", "completeTask", "subscribe", "next", "success", "err", "combineLatest", "results", "Array", "isArray", "find", "result", "taskNamespaces", "Map", "set", "setTaskNamespaces", "startQueue", "successEvents$", "takeUntilDestroyed", "valid", "workResults$", "wasEdited", "request", "closeDrawer", "getActivity$", "withLatestFrom", "activityId", "getMultiActivity", "crmObjectIds", "catchError", "status", "debounceTime", "response", "activities", "resetAssociations", "associations", "setAssociations", "ownerId", "user", "firstName", "lastName", "fullName", "displayName", "dueDateField", "ActivityTaskDueDate", "cellType", "dueDate", "getCustomCellFields", "Date", "ActivityTaskStatus", "Open", "getTime", "now", "cell", "Boolean", "field", "stringValue", "Completed", "validFields", "statusField", "dateValue", "drawer", "close", "createActivity", "fields", "crmObjectSubtype", "namespace$", "crmObjectId", "tap", "addCreatedCrmObject", "updateActivity", "oldFields", "fieldMask", "getFieldMaskFromFormGroup", "taskLogger", "formGroup", "paths", "fieldsCopy", "oldField", "some", "addUpdatedCrmObject", "getAssociations", "contacts", "association", "crmObjectType", "companies", "other", "includes", "forEach", "addCreateTaskDefaultAssociations", "__async", "upsertTemplateRef", "open", "instant", "handleEditTaskClick", "objectId", "requestType", "isEdit", "validate", "invalid", "getValues", "work$", "startWork", "handleRowsChange", "accessibleTaskIds", "inaccessibleTasks", "showConfirmationModal", "startQueueWithAccessibleTasks", "openRestrictedDialog", "t", "filteredTasks", "inaccessibleCount", "totalCount", "onConfirm", "PermissionConfirmationDialogComponent", "width", "afterClosed", "taskIds", "defaultNamespace", "taskId", "r", "filteredTaskNamespaces", "get", "tasksByNamespace", "has", "ids", "completionObservables", "forkJoin", "take", "selectors", "viewQuery", "rf", "ctx", "CrmActivityLoggerTaskComponent", "CrmTaskQueueComponent", "_r1", "ListTasksPageComponent_ng_container_8_Template", "ListTasksPageComponent_Conditional_9_Template", "ListTasksPageComponent_ng_template_10_Template", "ListTasksPageComponent_ng_template_12_Template", "ListTasksPageComponent_ng_template_14_Template", "ListTasksPageComponent_ng_template_16_Template", "ListObjectsPageComponent", "CommonModule", "NgIf", "NgTemplateOutlet", "AsyncPipe", "CrmDrawerComponent", "MatButtonModule", "MatButton", "MatIconModule", "MatIcon", "MatDialogModule", "ListObjectsTableContentDirective", "TranslateModule", "TranslatePipe", "GalaxyButtonLoadingIndicatorModule", "ButtonLoadingIndicatorComponent", "GalaxyFormFieldModule", "FormFieldComponent", "FormRowComponent", "CrmContactToCompanyAssociationFormFieldComponent", "CrmCompanyAssociationFormFieldComponent", "PermissionRequiredPanelComponent", "styles"] }