{"version":3,"sources":["libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/_contact.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/_company.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/_activity_object.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-field-options.service.ts","libs/crm/static/src/lib/shared-services/crm-services/activity.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-form.service.ts","libs/crm/static/src/lib/shared-services/company-contact-cache.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/crm-association.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/crm-table-state.service.ts","libs/crm/static/src/lib/shared-services/table-customization/_abstract-table-customization.service.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/company-batch-getter.service.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/parent-company-name.component.ts","libs/crm/static/src/lib/shared-services/score.service.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/score/score.component.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/score/score.component.html","libs/crm/static/src/lib/shared-services/restricted-group.service.ts","libs/crm/static/src/lib/shared-services/table-customization/company-table-customization.service.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/primary-company-name.component.ts","libs/crm/static/src/lib/shared-services/table-customization/contact-table-customization.service.ts","node_modules/@vendasta/crm-integrations/fesm2020/vendasta-crm-integrations.mjs","libs/crm/static/src/lib/shared-services/platform-api.service.ts","libs/crm/static/src/lib/shared-services/company-profile-cards-panel.service.ts","libs/crm/static/src/lib/shared-components/association-panel-components/edit-association-tags/edit-association-tags.component.ts","libs/crm/static/src/lib/shared-components/association-panel-components/edit-association-tags/edit-association-tags.component.html","libs/crm/static/src/lib/shared-components/association-panel-components/edit-association-dialog/edit-association-dialog.component.ts","libs/crm/static/src/lib/shared-components/association-panel-components/edit-association-dialog/edit-association-dialog.component.html","libs/crm/static/src/lib/shared-services/default-association-actions.service.ts","libs/crm/static/src/lib/shared-services/preview-object.service.ts","libs/crm/static/src/lib/shared-services/page-analytics.service.ts","libs/crm/static/src/lib/shared-services/white-label.service.ts","libs/crm/static/src/lib/shared-services/content-injector/side-panel-content.service.ts","libs/crm/static/src/lib/shared-services/company-filters.service.ts","libs/crm/static/src/lib/utils.ts","libs/crm/static/src/lib/shared-services/activity-assignee.service.ts","libs/crm/static/src/lib/shared-components/custom-table-cells/task-status/task-status.component.ts","libs/crm/static/src/lib/shared-services/table-customization/task-table-customization.service.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-filters.service.ts","libs/crm/static/src/lib/tokens-and-interfaces.ts","libs/crm/static/src/lib/shared-services/crm-services/crm-object-service/crm-object.service.ts"],"sourcesContent":["import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n CreateCrmObjectRequestInterface,\n CreateCrmObjectResponseInterface,\n CRMApiService,\n DeleteCrmObjectRequestInterface,\n GetMultiCrmObjectRequestInterface,\n GetMultiCrmObjectResponseInterface,\n ListCrmObjectsRequestInterface,\n ListCrmObjectsResponseInterface,\n ListFieldOptionsRequestInterface,\n ListFieldOptionsResponseInterface,\n ListFiltersRequestInterface,\n ListFiltersResponseInterface,\n UpdateCrmObjectRequestInterface,\n ValidateCrmObjectRequestInterface,\n ValidateCrmObjectResponseInterface,\n} from '@vendasta/crm';\nimport { Observable } from 'rxjs';\nimport { AbstractCrmObjectService } from './_abstract.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ContactService implements AbstractCrmObjectService {\n constructor(private readonly service: CRMApiService) {}\n\n createCrmObject(request: CreateCrmObjectRequestInterface): Observable {\n return this.service.createContact(request);\n }\n\n deleteCrmObject(request: DeleteCrmObjectRequestInterface): Observable> {\n return this.service.deleteContact(request);\n }\n\n validateCrmObject(request: ValidateCrmObjectRequestInterface): Observable {\n return this.service.validateContact(request);\n }\n\n updateCrmObject(request: UpdateCrmObjectRequestInterface): Observable> {\n return this.service.updateContact(request);\n }\n\n listObjects(request: ListCrmObjectsRequestInterface): Observable {\n return this.service.listContacts(request);\n }\n\n listObjectsFilters(request: ListFiltersRequestInterface): Observable {\n return this.service.listContactsFilters(request);\n }\n\n getMultiObject(request: GetMultiCrmObjectRequestInterface): Observable {\n return this.service.getMultiContact(request);\n }\n\n listFieldOptions(request: ListFieldOptionsRequestInterface): Observable {\n return this.service.listContactFieldOptions(request);\n }\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport {\n CRMCompanyApiService,\n CreateCrmObjectRequestInterface,\n CreateCrmObjectResponseInterface,\n DeleteCrmObjectRequestInterface,\n GetMultiCrmObjectRequestInterface,\n GetMultiCrmObjectResponseInterface,\n ListCrmObjectsRequestInterface,\n ListCrmObjectsResponseInterface,\n ListFieldOptionsRequestInterface,\n ListFieldOptionsResponseInterface,\n ListFiltersRequestInterface,\n ListFiltersResponseInterface,\n UpdateCrmObjectRequestInterface,\n ValidateCrmObjectRequestInterface,\n ValidateCrmObjectResponseInterface,\n StartBulkCompanyCreateRequestInterface,\n StartBulkCompanyCreateResponseInterface,\n} from '@vendasta/crm';\nimport { Observable } from 'rxjs';\nimport { AbstractCrmObjectService } from './_abstract.service';\n\n@Injectable({ providedIn: 'root' })\nexport class CompanyService implements AbstractCrmObjectService {\n constructor(private readonly service: CRMCompanyApiService) {}\n\n createCrmObject(request: CreateCrmObjectRequestInterface): Observable {\n return this.service.createCompany(request);\n }\n\n deleteCrmObject(request: DeleteCrmObjectRequestInterface): Observable> {\n return this.service.deleteCompany(request);\n }\n\n validateCrmObject(request: ValidateCrmObjectRequestInterface): Observable {\n return this.service.validateCompany(request);\n }\n\n updateCrmObject(request: UpdateCrmObjectRequestInterface): Observable> {\n return this.service.updateCompany(request);\n }\n\n listObjects(request: ListCrmObjectsRequestInterface): Observable {\n return this.service.listCompanies(request);\n }\n\n listObjectsFilters(request: ListFiltersRequestInterface): Observable {\n return this.service.listCompaniesFilters(request);\n }\n\n getMultiObject(request: GetMultiCrmObjectRequestInterface): Observable {\n return this.service.getMultiCompany(request);\n }\n\n listFieldOptions(request: ListFieldOptionsRequestInterface): Observable {\n return this.service.listCompanyFieldOptions(request);\n }\n\n startBulkCreate(\n request: StartBulkCompanyCreateRequestInterface,\n ): Observable {\n return this.service.startBulkCompanyCreate(request);\n }\n}\n","import {\n CreateCrmObjectRequestInterface,\n CreateCrmObjectResponseInterface,\n CRMActivityApiService,\n DeleteCrmObjectRequestInterface,\n GetMultiCrmObjectRequestInterface,\n GetMultiCrmObjectResponseInterface,\n ListCrmObjectsRequestInterface,\n ListCrmObjectsResponseInterface,\n ListFieldOptionsRequestInterface,\n ListFieldOptionsResponseInterface,\n ListFiltersRequestInterface,\n ListFiltersResponseInterface,\n UpdateCrmObjectRequestInterface,\n ValidateCrmObjectRequestInterface,\n ValidateCrmObjectResponseInterface,\n} from '@vendasta/crm';\nimport { AbstractCrmObjectService } from './_abstract.service';\nimport { Observable } from 'rxjs';\nimport { HttpResponse } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\nimport { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ActivityObjectService implements AbstractCrmObjectService {\n constructor(private readonly activityApiService: CRMActivityApiService) {}\n\n createCrmObject(request: CreateCrmObjectRequestInterface): Observable {\n return this.activityApiService.createActivity(request);\n }\n\n deleteCrmObject(request: DeleteCrmObjectRequestInterface): Observable> {\n return this.activityApiService.deleteActivity(request);\n }\n\n getMultiObject(request: GetMultiCrmObjectRequestInterface): Observable {\n return this.activityApiService.getMultiActivity(request).pipe(\n map((response) => {\n return {\n crmObjects: response.activities,\n };\n }),\n );\n }\n\n listFieldOptions(request: ListFieldOptionsRequestInterface): Observable {\n return this.activityApiService.listActivityFieldOptions(request);\n }\n\n listObjects(request: ListCrmObjectsRequestInterface): Observable {\n return this.activityApiService.listActivities(request);\n }\n\n listObjectsFilters(request: ListFiltersRequestInterface): Observable {\n return this.activityApiService.listActivityFilters(request);\n }\n\n updateCrmObject(request: UpdateCrmObjectRequestInterface): Observable> {\n return this.activityApiService.updateActivity({\n namespace: request.namespace,\n activity: request.crmObject,\n fieldMask: request.fieldMask,\n });\n }\n\n validateCrmObject(request: ValidateCrmObjectRequestInterface): Observable {\n return this.activityApiService.validateActivity(request);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CrmObjectService } from './crm-object-service/crm-object.service';\nimport { ObjectType } from '../../tokens-and-interfaces';\n\n@Injectable()\nexport class CrmFieldOptionsService {\n constructor(private readonly objectService: CrmObjectService) {}\n\n getFieldOptions(fieldId: string, search: string, objectType: ObjectType): Observable {\n return this.objectService\n .listFieldOptions(objectType, {\n fieldId: fieldId,\n pageSize: 10,\n searchTerm: search,\n })\n .pipe(map((response) => response?.options || []));\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n ListActivitiesRequestInterface,\n ListActivitiesResponseInterface,\n CRMActivityApiService,\n ActivityInterface,\n Activity,\n FieldMaskInterface,\n} from '@vendasta/crm';\nimport { Observable } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { CrmDependencies, CrmInjectionToken } from '../../tokens-and-interfaces';\n\n@Injectable()\nexport class ActivityService {\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly activityService: CRMActivityApiService,\n ) {}\n\n listActivities(request: ListActivitiesRequestInterface): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => this.activityService.listActivities({ ...request, namespace: namespace }).pipe(take(1))),\n );\n }\n\n createActivity(activity: ActivityInterface): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) =>\n this.activityService.createActivity({ namespace: namespace, activity: activity }).pipe(\n map((response) => response.crmObjectId),\n take(1),\n ),\n ),\n );\n }\n\n getMultiActivities(crmObjectIds: string[]): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) =>\n this.activityService\n .getMultiActivity({ namespace: namespace, crmObjectIds: crmObjectIds })\n .pipe(map((response) => response.activities)),\n ),\n );\n }\n\n updateActivity(activity: ActivityInterface, fieldMask: FieldMaskInterface): Observable {\n const fieldMaskPaths = fieldMask?.paths?.length ?? 0;\n if (fieldMaskPaths === 0) {\n throw new Error('Field mask with at least one path is required for updating an activity');\n }\n\n return this.config.namespace$.pipe(\n switchMap((namespace) =>\n this.activityService.updateActivity({ namespace: namespace, activity: activity, fieldMask: fieldMask }),\n ),\n map(() => null),\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n CRMFieldLayoutApiService,\n CRMFieldSchemaApiService,\n CrmObjectInterface,\n FieldGroupInterface as CrmFieldGroupInterface,\n FieldSchema,\n FieldSchemaInterface as CrmFieldSchemaInterface,\n FieldType,\n FieldValueInterface as CrmFieldValueInterface,\n ListFieldGroupsResponseInterface,\n ListFieldSchemaResponseInterface,\n PagedRequestOptionsInterface,\n ValidateCrmObjectResponseValidationErrorInterface,\n ValidateCrmObjectResponseValidationErrorSeverity as ErrorSeverity,\n} from '@vendasta/crm';\nimport {\n EMPTY,\n forkJoin,\n Observable,\n of,\n expand,\n map,\n reduce,\n shareReplay,\n switchMap,\n take,\n combineLatest,\n filter,\n} from 'rxjs';\nimport { CrmObjectService } from './crm-object-service/crm-object.service';\nimport { TranslateByObjectTypeService } from '../../i18n/translate-by-object-type/translate-by-object-type.service';\nimport {\n CrmInjectionToken,\n CrmDependencies,\n FieldGroupInterface,\n FieldInterface,\n FieldSchemaInterface,\n FieldValueInterface,\n ObjectType,\n} from '../../tokens-and-interfaces';\nimport { SystemFieldIds } from './field.service';\n\nconst MAX_SERVER_PAGE_SIZE = 200;\n\nexport interface ValidateErrorsWithFieldSchemas {\n errors: ValidateCrmObjectResponseValidationErrorInterface[];\n fieldSchemaMap: Map;\n}\n\n@Injectable()\nexport class CrmFormService {\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly crmObjectService: CrmObjectService,\n private readonly crmFieldSchemaApiService: CRMFieldSchemaApiService,\n private readonly crmFieldLayoutApiService: CRMFieldLayoutApiService,\n private readonly translationService: TranslateService,\n private readonly translateByObjectTypeService: TranslateByObjectTypeService,\n ) {}\n\n private handleValidationErrors(objectType: ObjectType, validationResponse: ValidateErrorsWithFieldSchemas): void {\n const invalidSeverityErrors = (validationResponse.errors ?? []).filter(\n (e) => e.severity === ErrorSeverity.VALIDATION_ERROR_SEVERITY_INVALID,\n );\n // only display first error for now\n if (invalidSeverityErrors.length) {\n const firstError = invalidSeverityErrors[0];\n const firstErrorSchema = validationResponse.fieldSchemaMap.get(firstError.details?.uniquenessCheck?.fieldId);\n if (firstError.message) {\n throw new Error(\n this.translateByObjectTypeService.getTranslationByObjectType(objectType, firstError?.message, {\n label: firstErrorSchema?.fieldName?.toLowerCase() || '',\n }),\n );\n }\n throw new Error();\n }\n }\n\n /*\n * TODO: this will probably start to lag when there's a lot of fields.\n * We should probably change to using tabs for different sets of fields later.\n */\n listAllObjectFields$(objectType: ObjectType): Observable {\n return of({\n fieldSchemas: [],\n pagingMetadata: {\n nextCursor: '',\n hasMore: true,\n },\n }).pipe(\n expand((resp: ListFieldSchemaResponseInterface) => {\n if (!resp?.pagingMetadata?.hasMore) {\n return EMPTY;\n }\n return this.listObjectFieldsNextPage$(objectType, {\n cursor: resp.pagingMetadata.nextCursor,\n pageSize: MAX_SERVER_PAGE_SIZE,\n });\n }),\n reduce((acc: CrmFieldSchemaInterface[], val) => [...acc, ...(val?.fieldSchemas || [])], []),\n );\n }\n\n private listObjectFieldsNextPage$(\n objectType: ObjectType,\n paging: PagedRequestOptionsInterface,\n ): Observable {\n // listing for a specific namespace will include standard fields as well\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) =>\n this.crmFieldSchemaApiService.listFieldSchema({\n namespace: namespace,\n crmObjectType: objectType,\n pagingOptions: paging,\n }),\n ),\n );\n }\n\n /*\n * TODO: this will probably start to lag when there's a lot of fields.\n * We should probably change to using tabs for different sets of fields later.\n */\n listAllObjectFieldGroups$(objectType: ObjectType): Observable {\n return of({\n fieldSchemas: [],\n pagingMetadata: {\n nextCursor: '',\n hasMore: true,\n },\n }).pipe(\n expand((resp: ListFieldGroupsResponseInterface) => {\n if (!resp?.pagingMetadata?.hasMore) {\n return EMPTY;\n }\n return this.listObjectFieldGroupsNextPage$(objectType, {\n cursor: resp.pagingMetadata.nextCursor,\n pageSize: MAX_SERVER_PAGE_SIZE,\n });\n }),\n reduce((acc: CrmFieldGroupInterface[], val) => [...acc, ...(val?.fieldGroups || [])], []),\n );\n }\n\n private listObjectFieldGroupsNextPage$(\n objectType: ObjectType,\n paging: PagedRequestOptionsInterface,\n ): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) =>\n this.crmFieldLayoutApiService.listFieldGroups({\n namespace: namespace,\n crmObjectType: objectType,\n pagingOptions: paging,\n }),\n ),\n );\n }\n\n private crmFieldGroupToFormFieldGroup(crmFieldGroup: CrmFieldGroupInterface): FieldGroupInterface {\n return {\n description: crmFieldGroup.description,\n fieldIds: crmFieldGroup.fieldIds || [],\n };\n }\n\n listAllObjectFormFieldGroups$(objectType: ObjectType): Observable {\n return this.listAllObjectFieldGroups$(objectType).pipe(\n map((crmFieldGroups) => crmFieldGroups.map(this.crmFieldGroupToFormFieldGroup)),\n );\n }\n\n private crmFieldSchemasToFormFieldSchemas(crmFieldSchemas: CrmFieldSchemaInterface[]): FieldSchemaInterface[] {\n return crmFieldSchemas.map((crmFieldSchema) => {\n return {\n fieldId: crmFieldSchema.fieldId || '',\n fieldType: crmFieldSchema.fieldType || FieldType.FIELD_TYPE_INVALID,\n fieldName: crmFieldSchema.fieldName || '',\n fieldDescription: crmFieldSchema.fieldDescription || '',\n dropdownOptions: crmFieldSchema.dropdownOptions || [],\n currencyCode: crmFieldSchema.currencyCode || '',\n value: null,\n readOnly: crmFieldSchema.readonly,\n };\n });\n }\n\n listAllFormFields$(objectType: ObjectType): Observable {\n return this.listAllObjectFields$(objectType).pipe(\n map((crmFieldSchemas) => this.crmFieldSchemasToFormFieldSchemas(crmFieldSchemas)),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n private getCrmFieldValueToFormValue(crmFieldValue: CrmFieldValueInterface, fieldType: FieldType): any {\n switch (fieldType) {\n case FieldType.FIELD_TYPE_INTEGER:\n case FieldType.FIELD_TYPE_CURRENCY:\n return crmFieldValue.integerValue;\n case FieldType.FIELD_TYPE_STRING:\n case FieldType.FIELD_TYPE_DROPDOWN:\n case FieldType.FIELD_TYPE_EMAIL:\n case FieldType.FIELD_TYPE_PHONE:\n return crmFieldValue.stringValue;\n case FieldType.FIELD_TYPE_BOOLEAN:\n return crmFieldValue.booleanValue;\n case FieldType.FIELD_TYPE_TAG:\n case FieldType.FIELD_TYPE_STRING_LIST:\n return crmFieldValue.stringValues?.values || [];\n case FieldType.FIELD_TYPE_DATETIME:\n case FieldType.FIELD_TYPE_DATE:\n return crmFieldValue.dateValue;\n case FieldType.FIELD_TYPE_FLOAT:\n return crmFieldValue.floatValue;\n default:\n return null;\n }\n }\n\n private compareStringList(currentValue: CrmFieldValueInterface, modifiedValue: CrmFieldValueInterface): boolean {\n const currentValues = currentValue.stringValues?.values || [];\n const modifiedValues = modifiedValue.stringValues?.values || [];\n const sortedCurrentValues = currentValues.sort();\n const sortedModifiedValues = modifiedValues.sort();\n\n if (sortedCurrentValues.length !== sortedModifiedValues.length) {\n return true;\n }\n for (const [index, value] of sortedCurrentValues.entries()) {\n if (value !== sortedModifiedValues[index]) {\n return true;\n }\n }\n return false;\n }\n\n private isFieldValueEmpty(value: CrmFieldValueInterface, fieldType: FieldType): boolean {\n switch (fieldType) {\n case FieldType.FIELD_TYPE_INTEGER:\n return value.integerValue == null;\n case FieldType.FIELD_TYPE_STRING:\n case FieldType.FIELD_TYPE_DROPDOWN:\n case FieldType.FIELD_TYPE_EMAIL:\n case FieldType.FIELD_TYPE_PHONE:\n return value.stringValue == null;\n case FieldType.FIELD_TYPE_BOOLEAN:\n return value.booleanValue == null;\n case FieldType.FIELD_TYPE_TAG:\n case FieldType.FIELD_TYPE_STRING_LIST:\n return value.stringValues?.values == null;\n case FieldType.FIELD_TYPE_DATETIME:\n case FieldType.FIELD_TYPE_DATE:\n return value.dateValue == null;\n default:\n return true;\n }\n }\n\n private isModifiedFieldValue(\n currentValue: CrmFieldValueInterface,\n modifiedValue: CrmFieldValueInterface,\n fieldType: FieldType,\n ): boolean {\n switch (fieldType) {\n case FieldType.FIELD_TYPE_INTEGER:\n return currentValue.integerValue !== modifiedValue.integerValue;\n case FieldType.FIELD_TYPE_STRING:\n case FieldType.FIELD_TYPE_DROPDOWN:\n case FieldType.FIELD_TYPE_EMAIL:\n case FieldType.FIELD_TYPE_PHONE:\n return currentValue.stringValue !== modifiedValue.stringValue;\n case FieldType.FIELD_TYPE_BOOLEAN:\n return currentValue.booleanValue !== modifiedValue.booleanValue;\n case FieldType.FIELD_TYPE_TAG:\n case FieldType.FIELD_TYPE_STRING_LIST:\n return this.compareStringList(currentValue, modifiedValue);\n case FieldType.FIELD_TYPE_DATETIME:\n case FieldType.FIELD_TYPE_DATE:\n return currentValue.dateValue.getTime() !== modifiedValue.dateValue.getTime();\n default:\n return false;\n }\n }\n\n private initializeFormFieldSchemaWithCrmObject(\n fieldSchema: FieldSchemaInterface,\n crmObject: CrmObjectInterface,\n ): void {\n if (!fieldSchema?.fieldId || !crmObject?.fields) {\n return;\n }\n\n const crmObjectFieldValue = crmObject.fields.find((crmObjectField) => {\n return crmObjectField.fieldId === fieldSchema.fieldId;\n });\n\n if (!crmObjectFieldValue) {\n return;\n }\n\n fieldSchema.value = this.getCrmFieldValueToFormValue(crmObjectFieldValue, fieldSchema.fieldType);\n }\n\n listAllFormFieldsInitializedWithCrmObject$(\n objectType: ObjectType,\n crmObjectId: string,\n ): Observable {\n return forkJoin([\n this.crmObjectService.getMultiObject(objectType, [crmObjectId]),\n this.listAllFormFields$(objectType),\n ]).pipe(\n map(([getMultiResponse, fieldSchemas]) => {\n if (getMultiResponse?.crmObjects?.length === 0 || !getMultiResponse?.crmObjects?.[0].crmObjectId) {\n throw new Error(this.translationService.instant('CRM_FORM_SERVICE.RESOURCE_NOT_FOUND_ERROR'));\n } else {\n const crmObject = getMultiResponse.crmObjects[0];\n fieldSchemas.forEach((field) => {\n this.initializeFormFieldSchemaWithCrmObject(field, crmObject);\n });\n }\n return fieldSchemas;\n }),\n );\n }\n\n validateCrmObject$(\n objectType: ObjectType,\n crmObject: CrmObjectInterface,\n ): Observable {\n const validationErrors$ = this.crmObjectService\n .validateCrmObject(objectType, crmObject)\n .pipe(map((response) => response.errors || []));\n const fieldSchemaMap$ = this.listAllFormFields$(objectType).pipe(\n map((schemas) => {\n const schemaMap = new Map();\n for (const schema of schemas) {\n schemaMap.set(schema.fieldId, schema);\n }\n return schemaMap;\n }),\n );\n return forkJoin([validationErrors$, fieldSchemaMap$]).pipe(\n map(([validationErrors, fieldSchemaMap]) => {\n return {\n errors: validationErrors,\n fieldSchemaMap: fieldSchemaMap,\n };\n }),\n );\n }\n\n validateAndCreateCrmObject$(objectType: ObjectType, fields: FieldInterface[]): Observable {\n return of(null).pipe(\n map(() => fields.filter((field) => field.hasModification()).map((field) => field.fieldValue())),\n map((fields) =>\n fields.filter((fieldValue) => {\n return fieldValue?.stringValue !== '';\n }),\n ),\n switchMap((fieldValues) => {\n const crmObject: CrmObjectInterface = {\n fields: fieldValues,\n };\n const validationResponse$ = this.validateCrmObject$(objectType, crmObject);\n return forkJoin([of(fieldValues), validationResponse$]);\n }),\n switchMap(([fieldValues, validationResponse]) => {\n this.handleValidationErrors(objectType, validationResponse);\n if (!fieldValues?.length) {\n return of(null);\n }\n const crmObject: CrmObjectInterface = {};\n fieldValues = this.setSystemFields(crmObject, fieldValues);\n crmObject.fields = fieldValues;\n\n return this.crmObjectService.createCrmObject(objectType, crmObject).pipe(\n map((resp) => {\n crmObject.crmObjectId = resp.crmObjectId;\n return crmObject;\n }),\n );\n }),\n );\n }\n\n private setSystemFields(crmObject: CrmObjectInterface, fieldValues: FieldValueInterface[]): FieldValueInterface[] {\n const contactOwnerID = fieldValues.find((field) => field.fieldId === SystemFieldIds.ContactOwnerID);\n if (contactOwnerID) {\n crmObject.ownerId = contactOwnerID.stringValue;\n fieldValues = fieldValues.filter((field) => field.fieldId !== SystemFieldIds.ContactOwnerID);\n }\n const contactGroupID = fieldValues.find((field) => field.fieldId === SystemFieldIds.ContactGroupID);\n if (contactGroupID) {\n crmObject.groupId = contactGroupID.stringValue;\n fieldValues = fieldValues.filter((field) => field.fieldId !== SystemFieldIds.ContactGroupID);\n }\n const companyOwnerID = fieldValues.find((field) => field.fieldId === SystemFieldIds.CompanyOwnerID);\n if (companyOwnerID) {\n crmObject.ownerId = companyOwnerID.stringValue;\n fieldValues = fieldValues.filter((field) => field.fieldId !== SystemFieldIds.CompanyOwnerID);\n }\n const companyGroupID = fieldValues.find((field) => field.fieldId === SystemFieldIds.CompanyGroupID);\n if (companyGroupID) {\n crmObject.groupId = companyGroupID.stringValue;\n fieldValues = fieldValues.filter((field) => field.fieldId !== SystemFieldIds.CompanyGroupID);\n }\n return fieldValues;\n }\n\n validateAndUpdateCrmObject$(\n objectType: ObjectType,\n crmObjectId: string,\n fields: FieldInterface[],\n ): Observable {\n return this.validateCrmObject$(objectType, {\n crmObjectId: crmObjectId,\n fields: fields.map((field) => field.fieldValue()),\n }).pipe(\n switchMap((validationResponse) => {\n this.handleValidationErrors(objectType, validationResponse);\n\n const modifiedFieldValues = fields\n .filter((field) => field.hasModification())\n .map((field) => field.fieldValue());\n if (!modifiedFieldValues?.length) {\n return of(null);\n }\n\n return this.crmObjectService\n .updateCrmObject(objectType, {\n crmObjectId: crmObjectId,\n fields: modifiedFieldValues,\n })\n .pipe(map(() => ({ crmObjectId: crmObjectId, fields: fields.map((field) => field.fieldValue()) })));\n }),\n );\n }\n\n validateAndUpdateCrmObjectField$(\n objectType: ObjectType,\n crmObjectId: string,\n modifiedValue: FieldValueInterface,\n ): Observable {\n const fieldSchema$: Observable = this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) =>\n this.crmFieldSchemaApiService.getMultiFieldSchema({\n namespace: namespace,\n crmObjectType: objectType,\n fieldId: [modifiedValue.fieldId],\n }),\n ),\n map((response) => !!response?.fieldSchemas && response?.fieldSchemas[0]),\n );\n const currentCrmObject$ = this.crmObjectService.getMultiObject(objectType, [crmObjectId]).pipe(\n take(1),\n map((response) => {\n if (response.crmObjects.length === 0 || !(response?.crmObjects[0] && response.crmObjects[0].crmObjectId)) {\n return null;\n }\n return response.crmObjects[0];\n }),\n filter((crmObject) => !!crmObject),\n );\n const validationValues$ = combineLatest([currentCrmObject$, fieldSchema$]).pipe(\n map(([currentObject, fieldSchema]) => {\n const currentObjectFields = currentObject?.fields || [];\n const currentValueIndex = currentObjectFields.findIndex(\n (fieldValue) => fieldValue?.fieldId === modifiedValue.fieldId,\n );\n if (this.isFieldValueEmpty(modifiedValue, fieldSchema.fieldType)) {\n return [];\n }\n if (currentValueIndex === -1) {\n return [...currentObjectFields, modifiedValue];\n }\n const currentValue = currentObjectFields[currentValueIndex];\n if (!this.isModifiedFieldValue(currentValue, modifiedValue, fieldSchema.fieldType)) {\n return [];\n }\n\n currentObjectFields[currentValueIndex] = modifiedValue;\n return [...currentObjectFields];\n }),\n );\n const validationResponse$ = validationValues$.pipe(\n take(1),\n switchMap((fieldValues) => {\n if (!fieldValues?.length) {\n return EMPTY;\n }\n\n return this.validateCrmObject$(objectType, {\n crmObjectId: crmObjectId,\n fields: fieldValues,\n });\n }),\n );\n\n return combineLatest([validationResponse$, validationValues$]).pipe(\n take(1),\n switchMap(([validationResponse, validationValues]) => {\n if (!validationValues?.length) {\n return of(null);\n }\n this.handleValidationErrors(objectType, validationResponse);\n\n return this.crmObjectService\n .updateCrmObject(objectType, {\n crmObjectId: crmObjectId,\n fields: [modifiedValue],\n })\n .pipe(map(() => ({ crmObjectId: crmObjectId, fields: [modifiedValue] })));\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CompanyContactCacheService {\n // A HashMap to store the cache. The key is the page and the value is the data.\n private cache = new Map>();\n private ttlCache = new Map();\n\n // The 'set' method for storing data in the cache.\n set(key: string, data: Observable, ttl = 0): void {\n this.cache.set(key, data);\n if (ttl > 0) {\n this.ttlCache.set(key, Date.now() + ttl);\n }\n }\n\n // The 'get' method for retrieving data from the cache.\n get(key: string): Observable {\n const ttl = this.ttlCache.get(key);\n if (ttl && ttl > 0 && ttl < Date.now()) {\n this.clear(key);\n }\n\n // We retrieve the data from the cache\n return this.cache.get(key);\n }\n\n // The 'clear' method to clear data from the cache.\n clear(key: string): void {\n // We remove the data from the cache\n this.cache.delete(key);\n }\n}\n","import { EMPTY, Observable, combineLatest, of, take, zip } from 'rxjs';\nimport { catchError, expand, map, reduce, shareReplay, switchMap } from 'rxjs/operators';\n\nimport { Inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n AssociationInterface,\n CRMAssociationApiService,\n DeleteAssociationRequestInterface,\n FilterGroupOperator,\n FilterOperator,\n GetMultiCrmObjectResponseInterface,\n ListAssociationsRequestInterface,\n ListAssociationsResponseInterface,\n ListAssociationsResponse,\n TagInterface,\n GetMultiCrmObjectRequestInterface,\n} from '@vendasta/crm';\nimport { CrmObjectInterface } from '@vendasta/crm/lib/_internal/interfaces/crm-objects.interface';\n\nimport { CompanyService } from './_company.service';\nimport { ContactService } from './_contact.service';\nimport { CrmDependencies, CrmInjectionToken } from '../../../tokens-and-interfaces';\nimport { CompanyContactCacheService } from '../../company-contact-cache.service';\n\nexport interface Association {\n associationId: string;\n associationType: string;\n tags: string[];\n associatedObject: CrmObjectInterface;\n}\n\nexport interface SelectedObjects {\n crmObjects: CrmObjectInterface[];\n objects: { id: string; name?: string }[];\n}\n\nexport interface CreateAssocResponse {\n createdCount: string;\n totalCount: string;\n error: boolean;\n}\n\ntype associationDirection = 'from' | 'to';\n\n@Injectable()\nexport class CrmAssociationService {\n crmObjectIdToAssociate = '';\n copyCrmObjects: SelectedObjects = { crmObjects: [], objects: [] };\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly companyService: CompanyService,\n private contactService: ContactService,\n private readonly crmAssociationApiService: CRMAssociationApiService,\n public modal: MatDialog,\n protected readonly companyContactCacheService: CompanyContactCacheService,\n ) {}\n\n setCopyCrmObjects(objects: SelectedObjects): void {\n this.copyCrmObjects = objects;\n }\n\n setCrmObjectIdToAssociate(crmObjectIdToAssociate: string): void {\n this.crmObjectIdToAssociate = crmObjectIdToAssociate;\n }\n\n getRemainingCompanyAssociationsForContacts$(contactId: string): Observable {\n const namespace$ = this.config.namespace$;\n const associations$: Observable = namespace$.pipe(\n switchMap((namespace: string) => {\n return of({\n associations: [],\n pagingMetadata: {\n hasMore: true,\n nextCursor: '',\n },\n }).pipe(\n expand((resp: ListAssociationsResponseInterface) => {\n if (!resp.pagingMetadata?.hasMore) {\n return EMPTY;\n }\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 25,\n cursor: resp.pagingMetadata?.nextCursor,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'from_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: contactId,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Contact-Company',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n reduce(\n (acc: AssociationInterface[], val: ListAssociationsResponseInterface): AssociationInterface[] => [\n ...acc,\n ...(val?.associations || []),\n ],\n [] as AssociationInterface[],\n ),\n );\n }),\n );\n const companies$: Observable = combineLatest([namespace$, associations$]).pipe(\n switchMap(([namespace, response]) => {\n if (!response?.length) {\n return of({\n crmObjects: [],\n });\n }\n\n const companyIds: string[] = response.map((associationResponse) => {\n return associationResponse?.toId || '';\n });\n\n if (companyIds?.length === 0) {\n return of({\n crmObjects: [],\n });\n }\n\n return this.companyService.getMultiObject({\n namespace: namespace,\n crmObjectIds: companyIds,\n } as GetMultiCrmObjectRequestInterface);\n }),\n );\n\n return combineLatest([associations$, companies$]).pipe(\n map(([associations, companies]) => {\n if (!companies?.crmObjects?.length) {\n return [];\n }\n\n return associations?.map((association) => {\n const company = companies?.crmObjects?.find((company) => {\n return company?.crmObjectId === association.toId;\n });\n const tags = association.tags?.map((tag) => {\n return tag.tagValue;\n });\n return {\n associationId: association.associationId,\n associationType: association.associationType,\n tags: tags,\n associatedObject: company,\n } as Association;\n });\n }),\n );\n }\n\n getCompanyAssociationsForContact$(contactId: string): Observable {\n const namespace$ = this.config.namespace$;\n\n const associations$ = namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 5,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'from_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: contactId,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Contact-Company',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n );\n\n const companies$ = this.getCompaniesWithAssociations$(namespace$, associations$, 'to');\n\n return this.joinAssociationsWithObjects$(associations$, companies$, 'to');\n }\n\n getCompanyAssociationObjectIdsForContact$(contactId: string): Observable {\n const namespace$ = this.config.namespace$;\n\n const associations$ = namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 5,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'from_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: contactId,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Contact-Company',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n );\n\n return associations$.pipe(\n map((associations) => {\n return (\n associations?.associations?.map((asc) => {\n return asc.toId;\n }) || []\n );\n }),\n );\n }\n\n getRemainingContactAssociationsForCompanies$(companyId: string): Observable {\n const namespace$ = this.config.namespace$;\n const associations$: Observable = namespace$.pipe(\n switchMap((namespace: string) => {\n return of({\n associations: [],\n pagingMetadata: {\n hasMore: true,\n nextCursor: '',\n },\n }).pipe(\n expand((resp: ListAssociationsResponseInterface) => {\n if (!resp.pagingMetadata?.hasMore) {\n return EMPTY;\n }\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 25,\n cursor: resp.pagingMetadata?.nextCursor,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'to_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: companyId,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Contact-Company',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n take(9), // Limiting here to avoid breaking the interface (200 users)\n reduce(\n (acc: AssociationInterface[], val: ListAssociationsResponseInterface): AssociationInterface[] => [\n ...acc,\n ...(val?.associations || []),\n ],\n [] as AssociationInterface[],\n ),\n );\n }),\n );\n const contacts$: Observable = combineLatest([namespace$, associations$]).pipe(\n switchMap(([namespace, response]) => {\n if (!response?.length) {\n return of({\n crmObjects: [],\n });\n }\n\n const contactIds: string[] = response.map((associationResponse) => {\n return associationResponse?.fromId || '';\n });\n\n if (contactIds?.length === 0) {\n return of({\n crmObjects: [],\n });\n }\n\n return this.contactService.getMultiObject({\n namespace: namespace,\n crmObjectIds: contactIds,\n } as GetMultiCrmObjectRequestInterface);\n }),\n );\n\n return combineLatest([associations$, contacts$]).pipe(\n map(([associations, contacts]) => {\n if (!contacts?.crmObjects?.length) {\n return [];\n }\n\n return associations?.map((association) => {\n const contact = contacts?.crmObjects?.find((contact) => {\n return contact?.crmObjectId === association.fromId;\n });\n const tags = association.tags?.map((tag) => {\n return tag.tagValue;\n });\n return {\n associationId: association.associationId,\n associationType: association.associationType,\n tags: tags,\n associatedObject: contact,\n } as Association;\n });\n }),\n shareReplay({ bufferSize: 1, refCount: false }),\n );\n }\n\n getChildCompanyAssociationsForCompany$(companyID: string): Observable {\n const namespace$ = this.config.namespace$;\n\n const associations$ = namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 5,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'to_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: companyID,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Company-Company',\n },\n ],\n },\n {\n fieldId: 'tags',\n operator: FilterOperator.FILTER_OPERATOR_IS_ANY,\n values: [\n {\n string: 'Parent',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n );\n\n const companies$ = this.getCompaniesWithAssociations$(namespace$, associations$, 'from');\n return this.joinAssociationsWithObjects$(associations$, companies$, 'from');\n }\n\n getParentCompanyAssociationsForCompany$(companyID: string): Observable {\n const namespace$ = this.config.namespace$;\n\n const associations$ = namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 1,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'from_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: companyID,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Company-Company',\n },\n ],\n },\n {\n fieldId: 'tags',\n operator: FilterOperator.FILTER_OPERATOR_IS_ANY,\n values: [\n {\n string: 'Parent',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n );\n\n const companies$ = this.getCompaniesWithAssociations$(namespace$, associations$, 'to');\n return this.joinAssociationsWithObjects$(associations$, companies$, 'to');\n }\n\n private getCompaniesWithAssociations$(\n namespace$: Observable,\n associations$: Observable,\n direction: associationDirection,\n ): Observable {\n return combineLatest([namespace$, associations$]).pipe(\n switchMap(([namespace, response]) => {\n if (!response?.associations?.length) {\n return of({\n crmObjects: [],\n });\n }\n\n const ids = response.associations.map((association) => {\n if (direction === 'from') {\n return association.fromId;\n }\n return association.toId;\n });\n return this.companyService.getMultiObject({\n namespace: namespace,\n crmObjectIds: ids,\n } as GetMultiCrmObjectRequestInterface);\n }),\n );\n }\n\n private joinAssociationsWithObjects$(\n associations$: Observable,\n objects$: Observable,\n direction?: associationDirection,\n ) {\n return combineLatest([associations$, objects$]).pipe(\n map(([associations, objects]) => {\n if (!objects?.crmObjects?.length) {\n return [];\n }\n return associations.associations.map((association) => {\n const contact = objects?.crmObjects?.find((contact) => {\n if (direction === 'from') {\n return contact?.crmObjectId === association.fromId;\n }\n return contact?.crmObjectId === association.toId;\n });\n const tags = association.tags?.map((tag) => {\n return tag.tagValue;\n });\n return {\n associationId: association.associationId,\n associationType: association.associationType,\n tags: tags,\n associatedObject: contact,\n } as Association;\n });\n }),\n );\n }\n\n getCachedContactAssociationsForCompany$(companyId: string): Observable {\n let cachedContacts = this.companyContactCacheService.get(companyId);\n if (!cachedContacts) {\n const associatedContacts = this.getRemainingContactAssociationsForCompanies$(companyId);\n this.companyContactCacheService.set(companyId, associatedContacts);\n cachedContacts = associatedContacts;\n }\n return cachedContacts;\n }\n\n getContactAssociationsForCompany$(companyId: string) {\n const namespace$ = this.config.namespace$;\n\n const associations$ = namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociation({\n namespace: namespace,\n pagingOptions: {\n pageSize: 5,\n },\n filtersV2: {\n operator: FilterGroupOperator.FILTER_GROUP_OPERATOR_AND,\n filters: [\n {\n fieldId: 'to_id',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: companyId,\n },\n ],\n },\n {\n fieldId: 'association_type',\n operator: FilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: 'Contact-Company',\n },\n ],\n },\n ],\n },\n } as ListAssociationsRequestInterface);\n }),\n );\n\n const contacts$ = this.getContactsWithAssociations$(namespace$, associations$, 'from');\n\n return this.joinAssociationsWithObjects$(associations$, contacts$, 'from');\n }\n\n private getContactsWithAssociations$(\n namespace$: Observable,\n associations$: Observable,\n direction: associationDirection,\n ): Observable {\n return combineLatest([namespace$, associations$]).pipe(\n switchMap(([namespace, response]) => {\n if (!response?.associations?.length) {\n return of({\n crmObjects: [],\n });\n }\n\n const contactIds = response.associations.map((association) => {\n if (direction === 'from') {\n return association.fromId;\n }\n return association.toId;\n });\n return this.contactService.getMultiObject({\n namespace: namespace,\n crmObjectIds: contactIds,\n } as GetMultiCrmObjectRequestInterface);\n }),\n );\n }\n removeAssociation(id: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n return this.crmAssociationApiService.deleteAssociation({\n associationId: id,\n namespace: namespace,\n } as DeleteAssociationRequestInterface);\n }),\n map(() => {\n return true;\n }),\n take(1),\n );\n }\n\n createContactCompanyAssociation$(\n associationType: string,\n primarySelection?: string | null,\n tagMap?: Map | null,\n ): Observable<{ respCount: CreateAssocResponse; copyCrmObjectsUpdated: Association[] }> {\n const primaryAssociation = new Map();\n const associationTagValues = new Map();\n\n const savedData$ = this.copyCrmObjects.objects.map((row) => {\n const association = {\n associationType: associationType,\n fromId: this.crmObjectIdToAssociate,\n toId: row.id,\n tags: [] as { tagValue: string }[],\n };\n\n if (row.id === primarySelection) {\n association.tags.push({\n tagValue: 'Primary',\n });\n primaryAssociation.set(row.id, true);\n }\n\n if (tagMap) {\n const tags = tagMap?.get(row.id);\n if (tags) {\n tags.forEach((tag) => {\n association.tags.push({\n tagValue: tag,\n });\n });\n }\n }\n\n associationTagValues.set(\n row.id,\n association.tags.map((tag) => tag.tagValue),\n );\n\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) => {\n return this.crmAssociationApiService.createAssociation({ namespace, association });\n }),\n catchError((error) => {\n console.error(error);\n return of(null);\n }),\n );\n });\n\n const callEndpoint = zip(...savedData$);\n return callEndpoint.pipe(\n take(1),\n map((data) => {\n let errorOccurred = false;\n const checkError = data.map((item) => {\n if (item === null) {\n errorOccurred = true;\n return null;\n }\n return item;\n });\n const filteredData = data.filter((item) => item !== null);\n const filteredCopy = this.copyCrmObjects.crmObjects.filter((_, index) => checkError[index] !== null);\n const respCount = {\n createdCount: String(filteredData.length),\n totalCount: String(data.length),\n error: errorOccurred,\n } as CreateAssocResponse;\n const copyCrmObjectsUpdated = filteredCopy.map((obj, index) => {\n return {\n ...obj,\n associationId: filteredData[index]?.associationId ?? '',\n tags: associationTagValues.get(obj.crmObjectId ?? '') || [],\n } as Association;\n });\n\n return { respCount, copyCrmObjectsUpdated };\n }),\n );\n }\n\n createAssociation$(\n associationType: string,\n tags: string[],\n fallbackToNoTags: boolean,\n direction: associationDirection = 'from',\n ): Observable<{\n respCount: CreateAssocResponse;\n copyCrmObjectsUpdated: Association[];\n }> {\n const savedData$ = this.copyCrmObjects.objects.map((row) => {\n const associationTags: TagInterface[] = [];\n for (const tag of tags) {\n associationTags.push({ tagValue: tag } as TagInterface);\n }\n const association = {\n associationType: associationType,\n fromId: row.id,\n toId: this.crmObjectIdToAssociate,\n tags: associationTags,\n };\n if (direction === 'to') {\n association.fromId = this.crmObjectIdToAssociate;\n association.toId = row.id;\n }\n\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) => {\n // Try creating the association with the provided namespace and association, and retry once if there's an error\n return this.crmAssociationApiService.createAssociation({ namespace, association }).pipe(\n catchError(() => {\n if (!fallbackToNoTags) {\n // If fallbackToNoTags is false, return null as nill and handeled in the next steps\n return of(null);\n }\n association.tags = [];\n return this.crmAssociationApiService.createAssociation({ namespace, association }).pipe(\n catchError(() => {\n // If there's another error during the second attempt, return null as nill and handeled in the next steps\n return of(null);\n }),\n );\n }),\n );\n }),\n );\n });\n\n const callEndpoint = zip(...savedData$);\n return callEndpoint.pipe(\n take(1),\n map((data) => {\n let errorOccurred = false;\n const checkError = data.map((item) => {\n if (item === null) {\n errorOccurred = true;\n return null;\n }\n return item;\n });\n const filteredData = data.filter((item) => item !== null);\n const filteredCopy = this.copyCrmObjects.crmObjects.filter((_, index) => checkError[index] !== null);\n const respCount = {\n createdCount: String(filteredData.length),\n totalCount: String(data.length),\n error: errorOccurred,\n } as CreateAssocResponse;\n const copyCrmObjectsUpdated = filteredCopy.map((obj, index) => {\n return {\n ...obj,\n associationId: filteredData[index]?.associationId ?? '',\n } as Association;\n });\n\n return { respCount, copyCrmObjectsUpdated };\n }),\n map((copyCrmObjectsUpdated) => {\n return copyCrmObjectsUpdated;\n }),\n );\n }\n\n listAssociationFieldOptions(\n associationType: string,\n fieldId: string,\n pageSize: number,\n searchTerm: string,\n ): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) => {\n return this.crmAssociationApiService.listAssociationFieldOptions({\n namespace,\n associationType,\n fieldId,\n pageSize,\n searchTerm,\n });\n }),\n map((response) => {\n return response.options ?? [];\n }),\n );\n }\n\n updateAssociationTags(id: string, tags: string[]): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) => {\n return this.crmAssociationApiService.updateAssociation({\n namespace,\n associationId: id,\n tags: tags.map((t) => ({ tagValue: t })),\n });\n }),\n map(() => true),\n );\n }\n\n getAssociation(id: string): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) => {\n return this.crmAssociationApiService.getMultiAssociation({\n namespace,\n associationIds: [id],\n });\n }),\n map((response) => response?.associations?.length > 0 && response?.associations[0]),\n );\n }\n}\n","import { BreakpointObserver } from '@angular/cdk/layout';\nimport { Inject, Injectable, WritableSignal, signal } from '@angular/core';\nimport { GalaxyColumnDef } from '@vendasta/galaxy/table';\nimport { Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, take } from 'rxjs/operators';\nimport { BREAKPOINT_WIDTH } from '../../../constants';\nimport { CrmInjectionToken, CrmDependencies, ObjectType } from '../../../tokens-and-interfaces';\n\ninterface TableState {\n localStorageKey: string[];\n}\n\n@Injectable()\nexport class CrmTableStateService {\n MOBILE_BREAKPOINT = `(max-width: ${BREAKPOINT_WIDTH.MOBILE})`;\n isMobile$: Observable = this.breakpointObserver.observe([this.MOBILE_BREAKPOINT]).pipe(\n map((result) => result.matches),\n distinctUntilChanged(),\n );\n tableState: WritableSignal = signal({\n localStorageKey: [],\n });\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly breakpointObserver: BreakpointObserver,\n ) {}\n\n initializeLocalStorageColumns(columns: GalaxyColumnDef[]): Observable {\n return of(false).pipe(\n map((isMobile) => {\n if (isMobile) {\n return columns;\n }\n let lcColumns: GalaxyColumnDef[] = [];\n for (const i in this.tableState().localStorageKey) {\n const ls = localStorage.getItem(this.tableState().localStorageKey[i]);\n if (!ls) {\n continue;\n }\n lcColumns = JSON.parse(ls);\n break;\n }\n columns.forEach((column) => {\n const localStorageColumnIndex = lcColumns?.findIndex((c) => c.id === column.id);\n if (localStorageColumnIndex < 0) {\n lcColumns.push(column);\n } else {\n const localStorageColumn = lcColumns[localStorageColumnIndex];\n lcColumns[localStorageColumnIndex] = {\n ...column,\n _position: localStorageColumn._position,\n hidden: localStorageColumn.hidden,\n };\n }\n });\n const lcColumnsCleaned = lcColumns.filter((c) => columns.find((column) => column.id === c.id));\n const sortedColumns = this.sortColumns(lcColumnsCleaned);\n\n localStorage.setItem(this.tableState().localStorageKey[0], JSON.stringify(sortedColumns));\n return sortedColumns;\n }),\n );\n }\n\n private sortColumns(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const topColumns = this.sortColumnsByPosition(columns.filter((column) => column.pinned && !column.stickyEnd));\n const bottomColumns = this.sortColumnsByPosition(columns.filter((column) => column.pinned && column.stickyEnd));\n const nonPinnedColumns = this.sortColumnsByPosition(columns.filter((column) => !column.pinned));\n\n const sortedColumns = [...topColumns, ...nonPinnedColumns, ...bottomColumns];\n this.updateColumnsPosition(sortedColumns);\n return sortedColumns;\n }\n\n private updateColumnsPosition(columns: GalaxyColumnDef[]): void {\n columns.forEach((column, index) => (column._position = index));\n }\n\n private sortColumnsByPosition(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return columns.sort((a, b) => (a._position ?? Number.MAX_SAFE_INTEGER) - (b._position ?? Number.MAX_SAFE_INTEGER));\n }\n\n public setLocalStorageColumns(columns: GalaxyColumnDef[]): void {\n this.isMobile$.pipe(take(1)).subscribe((isMobile) => {\n if (!columns?.length || isMobile) {\n return;\n }\n localStorage.setItem(this.tableState().localStorageKey[0], JSON.stringify(columns));\n });\n }\n\n setLocalStorageKey(objectType: ObjectType): void {\n const localStorageKey: string[] = [];\n const appName = this.config.appID;\n if (appName) {\n localStorageKey.push(`crm-${appName}-${objectType}-table-state-v2`);\n localStorage.removeItem(`crm-${appName}-${objectType}-table-state`);\n }\n localStorageKey.push(`crm-${objectType}-table-state-v2`);\n localStorage.removeItem(`crm-${objectType}-table-state`);\n this.tableState.set({\n localStorageKey: localStorageKey,\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CRMFilterOverride, TableCustomCell } from '../../tokens-and-interfaces';\nimport { CrmObjectInterface, FieldSchemaInterface, SortByInterface } from '@vendasta/crm';\nimport { Observable } from 'rxjs';\nimport { GalaxyColumnDef, Row, CellData, CustomCell } from '@vendasta/galaxy/table';\nimport { GalaxyFilterDefinitionInterface } from '@vendasta/galaxy/filter/chips';\nimport { CrmFieldService, StandardIds } from '../crm-services/field.service';\n\nexport type CustomRowStyle = (row: Row) => RowStyle;\n\nexport interface RowStyle {\n color?: string;\n 'text-decoration'?: string;\n}\n\nexport interface ColumnDataInterface {\n [columnId: string]: CellData;\n}\n\nexport interface TableCustomizationServiceInterface {\n defaultSortingOptions?: SortByInterface[];\n\n customizeColumns(columns: GalaxyColumnDef[], isMobile: boolean): GalaxyColumnDef[];\n\n customizeRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void;\n\n getRowFullName(crmObject: CrmObjectInterface): string;\n\n customizeFilters(filters: GalaxyFilterDefinitionInterface[]): Observable;\n\n getAssociationInfo(crmObject: CrmObjectInterface): string;\n}\n\n@Injectable()\n// TODO: transform/split part of this into overall customization service if\n// ends up having to be used everywhere\nexport abstract class TableCustomizationService implements TableCustomizationServiceInterface {\n constructor(protected readonly crmFieldService: CrmFieldService) {}\n\n private addCustomCell(\n tableCustomCell: TableCustomCell,\n crmObject: CrmObjectInterface,\n columnData: ColumnDataInterface,\n ): void {\n const cellValue = tableCustomCell.fieldIds.map((fieldId) => {\n return this.crmFieldService.getFieldValueFromCrmObject(crmObject, fieldId);\n });\n\n columnData[tableCustomCell.columnDefinition.id] = {\n cellType: 'custom',\n value: cellValue,\n component: tableCustomCell.customCellComponent,\n } as CustomCell;\n }\n\n protected addCustomCells(\n tableCustomCells: TableCustomCell[],\n crmObject: CrmObjectInterface,\n columnData: ColumnDataInterface,\n ): void {\n for (const tableCustomCell of tableCustomCells) {\n this.addCustomCell(tableCustomCell, crmObject, columnData);\n }\n }\n\n protected addCustomColumns(customColumns: GalaxyColumnDef[], columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const joinedColumns = [\n // default custom columns as hidden true\n ...columns,\n ...customColumns.map((customColumn) => ({ ...customColumn, hidden: true })),\n ];\n const dedupedColumns = joinedColumns.filter(\n (column, index, self) => self.findIndex((c) => c.id === column.id) === index,\n );\n\n return dedupedColumns;\n }\n\n protected overrideCustomFilters(\n filters: GalaxyFilterDefinitionInterface[],\n overrides: CRMFilterOverride[],\n ): GalaxyFilterDefinitionInterface[] {\n for (const override of overrides) {\n const findFieldIDIndex = filters.findIndex((f) => f.fieldId === override.fieldId);\n if (findFieldIDIndex >= 0 && filters[findFieldIDIndex]) {\n filters[findFieldIDIndex].fieldName = override.title;\n }\n }\n return filters;\n }\n\n abstract customizeColumns(columns: GalaxyColumnDef[], isMobile: boolean): GalaxyColumnDef[];\n\n abstract customizeRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void;\n\n abstract getRowFullName(crmObject: CrmObjectInterface): string;\n\n abstract customizeFilters(filters: GalaxyFilterDefinitionInterface[]): Observable;\n\n abstract getAssociationInfo(crmObject: CrmObjectInterface): string;\n}\n\n@Injectable()\nexport abstract class ActivityTableCustomizationService extends TableCustomizationService {\n getRowFullName(crmObject: CrmObjectInterface): string {\n const name = this.crmFieldService.getFieldId(StandardIds.ActivityName);\n const nameData = crmObject.fields?.find((f) => f.fieldId === name);\n return nameData?.stringValue || '';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAssociationInfo(crmObject: CrmObjectInterface): string {\n return '';\n }\n}\n","import { DestroyRef, Inject, Injectable } from '@angular/core';\nimport { CrmObjectService } from '../../shared-services';\nimport { CrmObjectInterface } from '@vendasta/crm';\nimport { map, BehaviorSubject, Observable, debounceTime, switchMap, tap, shareReplay, filter } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable()\nexport class CompanyBatchGetterService {\n constructor(\n @Inject(DestroyRef) private destroyRef: DestroyRef,\n private readonly crmObjectService: CrmObjectService,\n ) {\n this.newCompanyId$$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((companyId) => {\n if (!companyId) {\n return;\n }\n const batchedCompanyIds = [...this.batchCompanyIds$$.value];\n if (!batchedCompanyIds.includes(companyId)) {\n batchedCompanyIds.push(companyId);\n this.batchCompanyIds$$.next(batchedCompanyIds);\n }\n });\n this.lastBatch$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private newCompanyId$$ = new BehaviorSubject('');\n private batchCompanyIds$$ = new BehaviorSubject([]);\n private lastBatch$ = this.batchCompanyIds$$.pipe(\n filter((batchCompanyIds) => batchCompanyIds.length > 0),\n debounceTime(1),\n map((batchCompanyIds) => [...new Set(batchCompanyIds)]),\n switchMap((batchCompanyIds) => this.crmObjectService.getMultiObject('Company', batchCompanyIds)),\n map((response) => response.crmObjects),\n tap(() => {\n this.batchCompanyIds$$.next([]);\n }),\n shareReplay(1),\n );\n\n getCompany(companyId: string): Observable {\n this.newCompanyId$$.next(companyId);\n return this.lastBatch$.pipe(map((companies) => companies.find((company) => company?.crmObjectId === companyId)));\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { CommonModule } from '@angular/common';\nimport { BlankValueComponent, CustomCellComponent } from '@vendasta/galaxy/table';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { CrmFieldService, StandardIds } from '../../shared-services';\nimport { CrmInjectionToken, CrmDependencies } from '../../tokens-and-interfaces';\nimport { PAGE_ROUTES } from '../../constants';\nimport { CompanyBatchGetterService } from './company-batch-getter.service';\n\nconst NO_VALUE_FOR_COMPANY_NAME = '';\ninterface ParentCompanyNameData {\n displayValue: string;\n link: string;\n}\n\n@Component({\n template: `\n \n \n \n \n \n \n \n \n \n
\n
\n \n {{ displayName }}\n \n \n \n \n `,\n standalone: true,\n styleUrls: ['./shared.scss'],\n imports: [RouterLink, CommonModule, BlankValueComponent],\n})\nexport class ParentCompanyNameComponent extends CustomCellComponent {\n NO_VALUE_FOR_COMPANY_NAME = NO_VALUE_FOR_COMPANY_NAME;\n private companyId$$ = new BehaviorSubject('');\n set value(newValue: string) {\n this.companyId$$.next(newValue);\n }\n\n displayValue$ = this.companyId$$.pipe(\n switchMap((parentCompanyID) => {\n if (!parentCompanyID) {\n return of(null);\n }\n return this.companyBatchGetterService.getCompany(parentCompanyID);\n }),\n map((parentCompany) => {\n if (!parentCompany) {\n return null;\n }\n return this.crmFieldService.getFieldValueFromCrmObject(parentCompany, StandardIds.CompanyName);\n }),\n map((companyNameFieldValue) => companyNameFieldValue?.stringValue ?? this.NO_VALUE_FOR_COMPANY_NAME),\n );\n link$ = this.config.viewProfileFlag$.pipe(\n take(1),\n switchMap((featureFlag) => {\n if (featureFlag) {\n return this.config.routePrefix$;\n } else {\n return of('');\n }\n }),\n map((routePrefix) => {\n if (!routePrefix || !this.companyId$$.getValue()) {\n return '';\n }\n const parentCompanyProfileViewRoute = `${PAGE_ROUTES.COMPANY.ROOT}/${PAGE_ROUTES.COMPANY.SUBROUTES.PROFILE}`;\n return `${routePrefix}/${parentCompanyProfileViewRoute}`.replace(':crmObjectId', this.companyId$$.getValue());\n }),\n );\n componentData$: Observable = combineLatest([this.displayValue$, this.link$]).pipe(\n map(([displayValue, link]) => ({ displayValue, link })),\n );\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly crmFieldService: CrmFieldService,\n private readonly companyBatchGetterService: CompanyBatchGetterService,\n ) {\n super();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CrmDependencies, CrmInjectionToken } from '../tokens-and-interfaces';\nimport { ScoringApiService } from '@vendasta/crm';\nimport { Observable, shareReplay } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class ScoreService {\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private scoringApiService: ScoringApiService,\n ) {}\n\n private crmObjectId = '';\n setObjectId(objectId: string): void {\n this.crmObjectId = objectId;\n }\n\n getScoreForProfile$(fieldId: string): Observable {\n return this.getScore$(this.crmObjectId, fieldId);\n }\n\n getScoreForTableRow$(companyId: string, fieldId: string): Observable {\n return this.getScore$(companyId, fieldId);\n }\n\n private getScore$(companyId: string, fieldId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n return this.scoringApiService.getScore({\n namespace: namespace,\n scoringIdentifier: {\n crmObjectId: companyId,\n crmObjectType: 'Company',\n label: fieldId,\n },\n });\n }),\n map((response) => response?.score ?? null),\n shareReplay(1),\n );\n }\n}\n","import { Component, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BlankValueComponent, CustomCellComponent } from '@vendasta/galaxy/table';\nimport { FieldValueInterface } from '@vendasta/crm';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs/operators';\nimport { StandardIds, SystemFieldIds } from '../../../shared-services';\nimport { of } from 'rxjs';\nimport { ScoreService } from '../../../shared-services/score.service';\n\nconst NO_VALUE_FOR_SCORE = '';\n\n@Component({\n templateUrl: './score.component.html',\n standalone: true,\n styleUrls: ['../shared.scss'],\n imports: [CommonModule, BlankValueComponent],\n providers: [ScoreService],\n})\nexport class LeadScoreCellComponent extends CustomCellComponent {\n NO_VALUE_FOR_SCORE = NO_VALUE_FOR_SCORE;\n private fieldValues = signal([]);\n protected score: WritableSignal' | null> = signal(null);\n\n set value(newValues: FieldValueInterface[]) {\n this.fieldValues.set(newValues);\n }\n\n constructor(private readonly scoreService: ScoreService) {\n super();\n toObservable(this.fieldValues)\n .pipe(\n switchMap((fieldValues) => {\n const companyId = fieldValues.find(\n (fieldValue) => fieldValue?.fieldId === SystemFieldIds.CompanyID,\n )?.stringValue;\n const isScoreSet: boolean =\n fieldValues.find((fieldValue) => fieldValue?.fieldId === StandardIds.CompanyLeadScore)?.floatValue !==\n undefined;\n if (!companyId || !isScoreSet) {\n return of(null);\n }\n return this.scoreService.getScoreForTableRow$(companyId, StandardIds.CompanyLeadScore);\n }),\n takeUntilDestroyed(),\n )\n .subscribe((result) => {\n if (!result) {\n this.score.set(NO_VALUE_FOR_SCORE);\n return;\n }\n\n this.score.set(result);\n });\n }\n}\n","@if (this.score(); as score) {\n @if (score !== NO_VALUE_FOR_SCORE) {\n {{ score }}\n } @else {\n \n }\n} @else {\n
\n}\n","import { inject, Injectable } from '@angular/core';\nimport { PermissionsApiService, GetPermissionsRequestInterface } from '@vendasta/platform-users';\nimport { CrmInjectionToken } from '../tokens-and-interfaces';\nimport { combineLatest, switchMap, of, map, shareReplay, Observable } from 'rxjs';\nimport { FeatureFlagsApiService } from '@vendasta/partner';\nimport { IAMService, UserIdentifier } from '@vendasta/iamv2';\nimport { catchError } from 'rxjs/operators';\nimport { User } from '@vendasta/iamv2/lib/user/user';\n\nconst PartnerCenterClientAppID = 'partner-center-client';\nconst ShellClientAppID = 'shell-client';\nconst AppsRestrictedByMarkets = [PartnerCenterClientAppID, ShellClientAppID];\n\n@Injectable()\nexport class RestrictedGroupService {\n private readonly config = inject(CrmInjectionToken);\n private readonly permissionsApiService = inject(PermissionsApiService);\n private readonly featureFlagService = inject(FeatureFlagsApiService);\n private readonly iamService = inject(IAMService);\n\n private featureEnabled$ = this.config.namespace$.pipe(\n switchMap((namespace: string) => {\n const isNotSupported = !AppsRestrictedByMarkets.includes(this.config.appID || '');\n if (isNotSupported) {\n return of({\n hasAccess: [true],\n });\n }\n\n return this.featureFlagService.batchGetStatus({\n featureIds: ['crm_market_restriction'],\n partnerId: namespace || '',\n });\n }),\n map((response) => {\n return response?.hasAccess.length > 0 && response?.hasAccess[0];\n }),\n );\n private currentUser$ = this.config.currentUserId$.pipe(\n switchMap((userId) => {\n const uniqueUserIdentifiers = [new UserIdentifier({ userId: userId })];\n\n return this.iamService.getMultiUsers(uniqueUserIdentifiers);\n }),\n map((response) => response && response[0]),\n catchError(() => {\n return of(null);\n }),\n );\n private currentGroupId$ = combineLatest([\n this.config.currentUserId$,\n this.currentUser$,\n this.config.namespace$,\n this.featureEnabled$,\n ]).pipe(\n switchMap(([userId, user, namespace, featureEnabled]: [string, User | null, string, boolean]) => {\n const roles = user?.roles;\n const hasDeveloperRole = 'developer' in roles;\n const isSuperAdmin = roles['partner']?.attributes?.attributes['is_super_admin']?.boolAttribute === true;\n const isNotSupported = !AppsRestrictedByMarkets.includes(this.config.appID || '');\n if (!featureEnabled || isNotSupported || hasDeveloperRole || isSuperAdmin) {\n return of('');\n }\n\n return this.permissionsApiService.getPermissions({\n partnerId: namespace,\n userId: userId,\n } as GetPermissionsRequestInterface);\n }),\n map((response) => {\n if (typeof response === 'string') {\n return '';\n }\n return response?.permissions?.restrictedToMarketId ?? '';\n }),\n shareReplay(1),\n );\n\n getCurrentGroupId(): Observable {\n return this.currentGroupId$;\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ColumnDataInterface, TableCustomizationService } from './_abstract-table-customization.service';\nimport { firstValueFrom, Observable, of, combineLatest } from 'rxjs';\nimport { CrmObjectInterface, FieldSchemaInterface } from '@vendasta/crm';\nimport { CompanyCustomColumns, CrmFieldService, StandardIds, SystemFieldIds } from '../crm-services/field.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { CrmDependencies, CrmInjectionToken } from '../../tokens-and-interfaces';\nimport { map, take } from 'rxjs/operators';\nimport { PAGE_ROUTES } from '../../constants';\nimport { CustomCell, GalaxyColumnDef } from '@vendasta/galaxy/table';\nimport {\n GalaxyFilterDefinitionInterface,\n GalaxyFilterInterface,\n GalaxyFilterOperator,\n} from '@vendasta/galaxy/filter/chips';\nimport { ParentCompanyNameComponent } from '../../shared-components/custom-table-cells/parent-company-name.component';\nimport { LeadScoreCellComponent } from '../../shared-components/custom-table-cells/score/score.component';\nimport { RestrictedGroupService } from '../restricted-group.service';\n\nconst LeadScoreColumnCell = {\n fieldIds: [StandardIds.CompanyLeadScore, SystemFieldIds.CompanyID],\n columnDefinition: {\n id: StandardIds.CompanyLeadScore,\n },\n customCellComponent: LeadScoreCellComponent,\n};\n\n@Injectable()\nexport class CompanyTableCustomizationService extends TableCustomizationService {\n private profileLink$: Observable;\n\n public static getRowFullAddress(crmObject: CrmObjectInterface, crmFieldService: CrmFieldService): string {\n const addressLineOne = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressLine1);\n const addressLineTwo = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressLine2);\n const city = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressCity);\n const state = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressState);\n const postalCode = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressPostalCode);\n const country = crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressCountry);\n\n const addressLineOneData = crmObject.fields?.find((f) => f.fieldId === addressLineOne);\n const addressLineTwoData = crmObject.fields?.find((f) => f.fieldId === addressLineTwo);\n const cityData = crmObject.fields?.find((f) => f.fieldId === city);\n const stateData = crmObject.fields?.find((f) => f.fieldId === state);\n const postalCodeData = crmObject.fields?.find((f) => f.fieldId === postalCode);\n const countryData = crmObject.fields?.find((f) => f.fieldId === country);\n\n const fullAddress = [\n addressLineOneData?.stringValue,\n addressLineTwoData?.stringValue,\n cityData?.stringValue,\n stateData?.stringValue,\n countryData?.stringValue,\n postalCodeData?.stringValue,\n ];\n\n return fullAddress.filter((value) => value !== undefined).join(', ');\n }\n\n constructor(\n protected override readonly crmFieldService: CrmFieldService,\n private readonly translate: TranslateService,\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly restrictedGroupService: RestrictedGroupService,\n ) {\n super(crmFieldService);\n this.profileLink$ = this.config.routePrefix$.pipe(\n map((prefix) => {\n const viewRoute = `${PAGE_ROUTES.COMPANY.ROOT}/${PAGE_ROUTES.COMPANY.SUBROUTES.PROFILE}`;\n return prefix ? `${prefix}/${viewRoute}` : '';\n }),\n );\n }\n\n private hideIDColumns(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnIdentifiersToHide = [\n SystemFieldIds.CompanyExternalID,\n SystemFieldIds.CompanyID,\n StandardIds.CompanyParentCompanyID,\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressLine1),\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressLine2),\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressCity),\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressState),\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressPostalCode),\n this.crmFieldService.getFieldId(StandardIds.CompanyPrimaryAddressCountry),\n this.crmFieldService.getFieldId(StandardIds.CompanyWebsite),\n ];\n\n for (const identifier of columnIdentifiersToHide) {\n const index = columns.findIndex((c) => c.id === identifier);\n if (index >= 0) {\n columns[index].hidden = true;\n }\n }\n\n for (const nameCol of columns.filter((c) => c.id === StandardIds.CompanyName)) {\n nameCol.sticky = true;\n }\n\n return columns;\n }\n\n customizeColumnsMobile(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnIdentifiersToShow = new Map([\n [this.crmFieldService.getFieldId(StandardIds.CompanyName), true],\n [this.crmFieldService.getFieldId(StandardIds.CompanyWebsite), true],\n ]);\n\n columns.forEach((column) => {\n column.hidden = !columnIdentifiersToShow.get(column.id);\n });\n return [...columns];\n }\n\n private addCompanyProfileLink(crmObject: CrmObjectInterface, columnData: ColumnDataInterface): void {\n const companyNameField = this.crmFieldService.getFieldId(StandardIds.CompanyName);\n this.profileLink$.pipe(take(1)).subscribe((profileLink) => {\n profileLink = profileLink.replace(':crmObjectId', crmObject.crmObjectId || '');\n columnData[companyNameField] = {\n cellType: 'text',\n value: this.getRowFullName(crmObject),\n link: profileLink,\n };\n });\n }\n\n customizeRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void {\n this.customizeNextTaskDueDateCellData(columnData);\n this.addCompanyProfileLink(crmObject, columnData);\n this.addPrimaryCompanyNameRowData(crmObject, schemaMap, columnData);\n this.addFullAddressColumnData(crmObject, schemaMap, columnData);\n this.addCustomCells(this.config.company?.tableCustomCells || [], crmObject, columnData);\n }\n\n private customizeNextTaskDueDateCellData(columnData: ColumnDataInterface): void {\n const cell = columnData[this.crmFieldService.getFieldId(StandardIds.CompanyNextTaskDueDate)];\n if (cell) {\n cell.cellType = 'timestamp';\n }\n }\n\n private addFullAddressColumnData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void {\n columnData[CompanyCustomColumns.FullAddress] = {\n cellType: 'text',\n value: this.getRowFullAddress(crmObject),\n };\n }\n\n customizeColumns(columns: GalaxyColumnDef[], isMobile: boolean): GalaxyColumnDef[] {\n let customizedColumns = this.hideIDColumns(columns);\n customizedColumns = this.addFullAddressColumn(customizedColumns);\n customizedColumns = this.addParentCompanyNameColumn(customizedColumns);\n const customCells = this.config.company?.tableCustomCells || [];\n customCells.push(LeadScoreColumnCell);\n customizedColumns = this.addCustomColumns(\n customCells.map((c) => c.columnDefinition),\n customizedColumns,\n );\n if (isMobile) {\n customizedColumns = this.customizeColumnsMobile(customizedColumns);\n }\n return [...customizedColumns];\n }\n\n getRowFullName(crmObject: CrmObjectInterface): string {\n const name = this.crmFieldService.getFieldId(StandardIds.CompanyName);\n const nameData = crmObject.fields?.find((f) => f.fieldId === name);\n return nameData?.stringValue || '';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n getAssociationInfo(crmObject: CrmObjectInterface): string {\n return '';\n }\n\n getRowFullAddress(crmObject: CrmObjectInterface): string {\n return CompanyTableCustomizationService.getRowFullAddress(crmObject, this.crmFieldService);\n }\n\n private addFullAddressColumn(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return [\n ...columns,\n {\n id: CompanyCustomColumns.FullAddress,\n title: this.translate.instant('LIST_OBJECTS_TABLE.CUSTOM_COLUMNS.FULL_ADDRESS'),\n sortable: false,\n },\n ];\n }\n\n private addParentCompanyNameColumn(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return [\n {\n id: CompanyCustomColumns.ParentCompanyName,\n title: 'Parent company name',\n hidden: true,\n },\n ...columns,\n ];\n }\n\n private async addPrimaryCompanyNameRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): Promise {\n let parentCompanyID = '';\n const parentCompanyIDFieldValue = this.crmFieldService.getFieldValueFromCrmObject(\n crmObject,\n StandardIds.CompanyParentCompanyID,\n );\n if (parentCompanyIDFieldValue?.stringValue) {\n parentCompanyID = parentCompanyIDFieldValue.stringValue;\n }\n columnData[CompanyCustomColumns.ParentCompanyName] = {\n cellType: 'custom',\n value: parentCompanyID,\n component: ParentCompanyNameComponent,\n } as CustomCell;\n }\n\n private makeGroupFilterRestricted(\n restrictedToGroupId: string,\n filters: GalaxyFilterDefinitionInterface[],\n ): GalaxyFilterDefinitionInterface[] {\n const companyNameIdIndex = filters.findIndex((f) => f.fieldId === StandardIds.CompanyName);\n if (companyNameIdIndex > -1) {\n filters[companyNameIdIndex].preset = true;\n }\n if (restrictedToGroupId) {\n const groupIDIndex = filters.findIndex((f) => f.fieldId === SystemFieldIds.CompanyGroupID);\n if (groupIDIndex > -1) {\n filters[groupIDIndex].preset = true;\n filters[groupIDIndex].lockedValue = true;\n }\n }\n return filters;\n }\n\n customizeFilters(filters: GalaxyFilterDefinitionInterface[]): Observable {\n const overrides$ = this.config.company?.filterInputOverrides$ ?? of([]);\n const appliedOverrides$ = overrides$.pipe(map((overrides) => this.overrideCustomFilters(filters, overrides)));\n return combineLatest([this.restrictedGroupService.getCurrentGroupId(), appliedOverrides$]).pipe(\n map(([restrictedMarketId, filters]: [string, GalaxyFilterDefinitionInterface[]]) =>\n this.makeGroupFilterRestricted(restrictedMarketId, filters),\n ),\n );\n }\n\n async getInitialFilters(): Promise {\n return firstValueFrom(this.restrictedGroupService.getCurrentGroupId()).then((selectedGroupId) => {\n const filters: GalaxyFilterInterface[] = [\n {\n fieldId: StandardIds.CompanyName,\n filterId: 'filterCompanyByName',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [],\n },\n ];\n if (selectedGroupId) {\n filters.push({\n fieldId: SystemFieldIds.CompanyGroupID,\n filterId: 'filterCompanyByRestrictedGroupID',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: selectedGroupId,\n },\n ],\n });\n }\n return filters;\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BlankValueComponent, CustomCellComponent } from '@vendasta/galaxy/table';\nimport { BehaviorSubject, Observable, combineLatest, of } from 'rxjs';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { CrmFieldService, StandardIds } from '../../shared-services';\nimport { PAGE_ROUTES } from '../../constants';\nimport { CrmInjectionToken, CrmDependencies } from '../../tokens-and-interfaces';\nimport { CompanyBatchGetterService } from './company-batch-getter.service';\n\nconst NO_VALUE_FOR_COMPANY_NAME = '';\ninterface PrimaryCompanyNameData {\n displayValue: string;\n link: string;\n}\n\n@Component({\n template: `\n \n \n \n \n \n \n \n \n \n
\n
\n \n {{ displayName }}\n \n \n \n \n `,\n standalone: true,\n styleUrls: ['./shared.scss'],\n imports: [RouterLink, CommonModule, BlankValueComponent],\n})\nexport class PrimaryCompanyNameComponent extends CustomCellComponent {\n NO_VALUE_FOR_COMPANY_NAME = NO_VALUE_FOR_COMPANY_NAME;\n private companyId$$ = new BehaviorSubject('');\n set value(newValue: string) {\n this.companyId$$.next(newValue);\n }\n\n displayValue$ = this.companyId$$.pipe(\n switchMap((contactPrimaryCompanyID) => {\n if (!contactPrimaryCompanyID) {\n return of(null);\n }\n return this.companyBatchGetterService.getCompany(contactPrimaryCompanyID);\n }),\n map((company) => {\n if (!company) {\n return null;\n }\n return this.crmFieldService.getFieldValueFromCrmObject(company, StandardIds.CompanyName);\n }),\n map((companyNameFieldValue) => companyNameFieldValue?.stringValue ?? this.NO_VALUE_FOR_COMPANY_NAME),\n );\n link$ = this.config.viewProfileFlag$.pipe(\n take(1),\n switchMap((featureFlag) => {\n if (featureFlag) {\n return this.config.routePrefix$;\n } else {\n return of('');\n }\n }),\n map((routePrefix) => {\n if (!routePrefix || !this.companyId$$.getValue()) {\n return '';\n }\n const primaryCompanyProfileViewRoute = `${PAGE_ROUTES.COMPANY.ROOT}/${PAGE_ROUTES.COMPANY.SUBROUTES.PROFILE}`;\n return `${routePrefix}/${primaryCompanyProfileViewRoute}`.replace(':crmObjectId', this.companyId$$.getValue());\n }),\n );\n componentData$: Observable = combineLatest([this.displayValue$, this.link$]).pipe(\n map(([displayValue, link]) => ({ displayValue, link })),\n );\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly crmFieldService: CrmFieldService,\n private readonly companyBatchGetterService: CompanyBatchGetterService,\n ) {\n super();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { ColumnDataInterface, TableCustomizationService } from './_abstract-table-customization.service';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, of } from 'rxjs';\nimport { CrmDependencies, CrmInjectionToken } from '../../tokens-and-interfaces';\nimport {\n ContactCustomColumns,\n CrmFieldService,\n StandardExternalIds,\n StandardIds,\n SystemFieldIds,\n} from '../crm-services/field.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { map, switchMap, take } from 'rxjs/operators';\nimport { PAGE_ROUTES } from '../../constants';\nimport { CrmObjectInterface, FieldSchemaInterface } from '@vendasta/crm';\nimport { PrimaryCompanyNameComponent } from '../../shared-components/custom-table-cells/primary-company-name.component';\nimport { format, ParsedNumber, parseNumber } from 'libphonenumber-js';\nimport { GalaxyColumnDef, CustomCell } from '@vendasta/galaxy/table';\nimport {\n GalaxyFilterDefinitionInterface,\n GalaxyFilterInterface,\n GalaxyFilterOperator,\n} from '@vendasta/galaxy/filter/chips';\nimport { RestrictedGroupService } from '../restricted-group.service';\n\n@Injectable()\nexport class ContactTableCustomizationService extends TableCustomizationService {\n private contactLinkBuild$$ = new BehaviorSubject('');\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n protected override readonly crmFieldService: CrmFieldService,\n private readonly translate: TranslateService,\n private readonly restrictedGroupService: RestrictedGroupService,\n ) {\n super(crmFieldService);\n\n this.config.viewProfileFlag$\n .pipe(\n take(1),\n switchMap((featureFlag) => {\n if (featureFlag) {\n return this.config.routePrefix$;\n } else {\n return of('');\n }\n }),\n )\n .subscribe((routePrefix) => {\n if (!routePrefix) {\n return;\n }\n const contactProfileViewRoute = `${PAGE_ROUTES.CONTACT.ROOT}/${PAGE_ROUTES.CONTACT.SUBROUTES.PROFILE}`;\n if (routePrefix) {\n this.contactLinkBuild$$.next(`${routePrefix}/${contactProfileViewRoute}`);\n }\n });\n }\n\n private hideIDColumns(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnIdentifiersToHide = [\n this.crmFieldService.getFieldId(StandardExternalIds.FirstName),\n this.crmFieldService.getFieldId(StandardExternalIds.LastName),\n SystemFieldIds.ContactExternalID,\n SystemFieldIds.ContactID,\n StandardIds.ContactPrimaryCompanyID,\n ContactCustomColumns.FullAddress,\n ];\n for (const identifier of columnIdentifiersToHide) {\n const index = columns.findIndex((c) => c.id === identifier);\n if (index >= 0) {\n columns[index].hidden = true;\n }\n }\n return columns;\n }\n\n private addPrimaryCompanyNameColumn(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return [\n {\n id: ContactCustomColumns.PrimaryCompanyName,\n title: this.translate.instant('CONTACT.LIST_OBJECTS_TABLE.CUSTOM_COLUMNS.PRIMARY_COMPANY_NAME'),\n hidden: true,\n },\n ...columns,\n ];\n }\n\n private async addPrimaryCompanyNameRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): Promise {\n let contactPrimaryCompanyID = '';\n const contactPrimaryCompanyIDFieldValue = this.crmFieldService.getFieldValueFromCrmObject(\n crmObject,\n StandardIds.ContactPrimaryCompanyID,\n );\n if (contactPrimaryCompanyIDFieldValue?.stringValue) {\n contactPrimaryCompanyID = contactPrimaryCompanyIDFieldValue.stringValue;\n }\n\n columnData[ContactCustomColumns.PrimaryCompanyName] = {\n cellType: 'custom',\n value: contactPrimaryCompanyID,\n component: PrimaryCompanyNameComponent,\n } as CustomCell;\n }\n\n private addFullNameColumn(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return [\n {\n id: ContactCustomColumns.FullName,\n title: this.translate.instant('CONTACT.LIST_OBJECTS_TABLE.CUSTOM_COLUMNS.FULL_NAME'),\n sticky: true,\n sortable: false,\n },\n ...columns,\n ];\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 addFullNameRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void {\n columnData[ContactCustomColumns.FullName] = {\n cellType: 'text',\n value: this.getRowFullName(crmObject),\n link: this.contactLinkBuild$$.value.replace(':crmObjectId', crmObject.crmObjectId || ''),\n };\n }\n\n getRowFullName(crmObject: CrmObjectInterface): string {\n const firstName = this.crmFieldService.getFieldId(StandardExternalIds.FirstName);\n const lastName = this.crmFieldService.getFieldId(StandardExternalIds.LastName);\n const email = this.crmFieldService.getFieldId(StandardExternalIds.Email);\n const phone = this.crmFieldService.getFieldId(StandardExternalIds.PhoneNumber);\n\n const firstNameData = crmObject.fields?.find((f) => f.fieldId === firstName);\n const lastNameData = crmObject.fields?.find((f) => f.fieldId === lastName);\n const emailData = crmObject.fields?.find((f) => f.fieldId === email);\n const phoneData = crmObject.fields?.find((f) => f.fieldId === phone);\n\n if (firstNameData?.stringValue || lastNameData?.stringValue) {\n return `${firstNameData?.stringValue ?? ''} ${lastNameData?.stringValue ?? ''}`.trim();\n } else {\n if (emailData) {\n return emailData.stringValue || '';\n } else {\n return this.formatPhoneNumber(phoneData?.stringValue || '') || '';\n }\n }\n }\n\n getAssociationInfo(crmObject: CrmObjectInterface): string {\n const email = this.crmFieldService.getFieldId(StandardExternalIds.Email);\n const emailData = crmObject.fields?.find((f) => f.fieldId === email);\n return emailData?.stringValue || '';\n }\n\n private addFullAddressColumnData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void {\n columnData[ContactCustomColumns.FullAddress] = {\n cellType: 'text',\n value: this.getRowFullAddress(crmObject),\n };\n }\n\n customizeRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ): void {\n this.customizeNextTaskDueDateCellData(columnData);\n this.addFullNameRowData(crmObject, schemaMap, columnData);\n this.addPrimaryCompanyNameRowData(crmObject, schemaMap, columnData);\n this.addFullAddressColumnData(crmObject, schemaMap, columnData);\n this.addCustomCells(this.config.contact?.tableCustomCells || [], crmObject, columnData);\n }\n\n private customizeNextTaskDueDateCellData(columnData: ColumnDataInterface): void {\n const cell = columnData[this.crmFieldService.getFieldId(StandardIds.ContactNextTaskDueDate)];\n if (cell) {\n cell.cellType = 'timestamp';\n }\n }\n\n customizeColumns(columns: GalaxyColumnDef[], isMobile: boolean): GalaxyColumnDef[] {\n let customizedColumns = this.hideIDColumns(columns);\n customizedColumns = this.addPrimaryCompanyNameColumn(customizedColumns);\n customizedColumns = this.addFullNameColumn(customizedColumns);\n customizedColumns = this.addFullAddressColumn(customizedColumns);\n\n const customCells = this.config.contact?.tableCustomCells || [];\n customizedColumns = this.addCustomColumns(\n customCells.map((c) => c.columnDefinition),\n customizedColumns,\n );\n if (isMobile) {\n customizedColumns = this.customizeColumnsMobile(customizedColumns);\n }\n return [...customizedColumns];\n }\n\n customizeColumnsMobile(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnIdentifiersToShow = new Map([\n [this.crmFieldService.getFieldId(StandardExternalIds.Email), true],\n [ContactCustomColumns.FullName, true],\n ]);\n\n columns.forEach((column) => {\n column.hidden = !columnIdentifiersToShow.get(column.id);\n });\n return [...columns];\n }\n\n getRowFullAddress(crmObject: CrmObjectInterface): string {\n const addressLineOne = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressLine1);\n const addressLineTwo = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressLine2);\n const city = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressCity);\n const state = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressState);\n const postalCode = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressPostalCode);\n const country = this.crmFieldService.getFieldId(StandardIds.ContactPrimaryAddressCountry);\n\n const addressLineOneData = crmObject.fields?.find((f) => f.fieldId === addressLineOne);\n const addressLineTwoData = crmObject.fields?.find((f) => f.fieldId === addressLineTwo);\n const cityData = crmObject.fields?.find((f) => f.fieldId === city);\n const stateData = crmObject.fields?.find((f) => f.fieldId === state);\n const postalCodeData = crmObject.fields?.find((f) => f.fieldId === postalCode);\n const countryData = crmObject.fields?.find((f) => f.fieldId === country);\n\n const fullAddress = [\n addressLineOneData?.stringValue,\n addressLineTwoData?.stringValue,\n cityData?.stringValue,\n stateData?.stringValue,\n countryData?.stringValue,\n postalCodeData?.stringValue,\n ];\n\n return fullAddress.filter((value) => value !== undefined).join(', ');\n }\n\n private addFullAddressColumn(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n return [\n {\n id: ContactCustomColumns.FullAddress,\n title: this.translate.instant('LIST_OBJECTS_TABLE.CUSTOM_COLUMNS.FULL_ADDRESS'),\n hidden: true,\n sortable: false,\n },\n ...columns,\n ];\n }\n\n private makeGroupFilterRestricted(\n restrictedToGroupId: string,\n filters: GalaxyFilterDefinitionInterface[],\n ): GalaxyFilterDefinitionInterface[] {\n const emailFieldIdIndex = filters.findIndex(\n (f) => f.fieldId === this.crmFieldService.getFieldId(StandardExternalIds.Email),\n );\n if (emailFieldIdIndex > -1) {\n filters[emailFieldIdIndex].preset = true;\n }\n if (restrictedToGroupId) {\n const groupIDIndex = filters.findIndex((f) => f.fieldId === SystemFieldIds.ContactGroupID);\n if (groupIDIndex > -1) {\n filters[groupIDIndex].preset = true;\n filters[groupIDIndex].lockedValue = true;\n }\n }\n return filters;\n }\n\n customizeFilters(filters: GalaxyFilterDefinitionInterface[]): Observable {\n const overrides$ = this.config.contact?.filterInputOverrides$ ?? of([]);\n const appliedOverrides$ = overrides$.pipe(map((overrides) => this.overrideCustomFilters(filters, overrides)));\n return combineLatest([this.restrictedGroupService.getCurrentGroupId(), appliedOverrides$]).pipe(\n map(([restrictedMarketId, filters]: [string, GalaxyFilterDefinitionInterface[]]) =>\n this.makeGroupFilterRestricted(restrictedMarketId, filters),\n ),\n );\n }\n\n async getInitialFilters(): Promise {\n return firstValueFrom(this.restrictedGroupService.getCurrentGroupId()).then((selectedGroupId) => {\n const emailFieldId = this.crmFieldService.getFieldId(StandardExternalIds.Email);\n const filters: GalaxyFilterInterface[] = [\n {\n fieldId: emailFieldId,\n filterId: 'filterContactByEmail',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [],\n },\n ];\n if (selectedGroupId) {\n filters.push({\n fieldId: SystemFieldIds.ContactGroupID,\n filterId: 'filterContactByRestrictedGroupID',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: selectedGroupId,\n },\n ],\n });\n }\n return filters;\n });\n }\n}\n","import * as i0 from '@angular/core';\nimport { Injectable } from '@angular/core';\nimport * as i1 from '@angular/common/http';\nimport { HttpHeaders } from '@angular/common/http';\nimport { map } from 'rxjs/operators';\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar MappingType = /*#__PURE__*/function (MappingType) {\n MappingType[MappingType[\"MAPPING_TYPE_UNSPECIFIED\"] = 0] = \"MAPPING_TYPE_UNSPECIFIED\";\n MappingType[MappingType[\"MAPPING_TYPE_LOOKUP_CUSTOM_FIELD\"] = 1] = \"MAPPING_TYPE_LOOKUP_CUSTOM_FIELD\";\n MappingType[MappingType[\"MAPPING_TYPE_CUSTOM_FIELD\"] = 2] = \"MAPPING_TYPE_CUSTOM_FIELD\";\n MappingType[MappingType[\"MAPPING_TYPE_SYSTEM_FIELD\"] = 3] = \"MAPPING_TYPE_SYSTEM_FIELD\";\n return MappingType;\n}(MappingType || {});\nvar MergeStrategyType = /*#__PURE__*/function (MergeStrategyType) {\n MergeStrategyType[MergeStrategyType[\"MERGE_STRATEGY_UNSPECIFIED\"] = 0] = \"MERGE_STRATEGY_UNSPECIFIED\";\n MergeStrategyType[MergeStrategyType[\"MERGE_STRATEGY_ALWAYS_OVERWRITE\"] = 1] = \"MERGE_STRATEGY_ALWAYS_OVERWRITE\";\n MergeStrategyType[MergeStrategyType[\"MERGE_STRATEGY_OVERWRITE_IF_EMPTY\"] = 2] = \"MERGE_STRATEGY_OVERWRITE_IF_EMPTY\";\n MergeStrategyType[MergeStrategyType[\"MERGE_STRATEGY_OVERWRITE_IF_NEWER\"] = 3] = \"MERGE_STRATEGY_OVERWRITE_IF_NEWER\";\n MergeStrategyType[MergeStrategyType[\"MERGE_STRATEGY_COMBINE\"] = 4] = \"MERGE_STRATEGY_COMBINE\";\n return MergeStrategyType;\n}(MergeStrategyType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar WorkflowStatus = /*#__PURE__*/function (WorkflowStatus) {\n WorkflowStatus[WorkflowStatus[\"WORKFLOW_STATUS_INVALID\"] = 0] = \"WORKFLOW_STATUS_INVALID\";\n WorkflowStatus[WorkflowStatus[\"WORKFLOW_STATUS_IN_PROGRESS\"] = 1] = \"WORKFLOW_STATUS_IN_PROGRESS\";\n WorkflowStatus[WorkflowStatus[\"WORKFLOW_STATUS_SUCCEEDED\"] = 2] = \"WORKFLOW_STATUS_SUCCEEDED\";\n WorkflowStatus[WorkflowStatus[\"WORKFLOW_STATUS_FAILED\"] = 3] = \"WORKFLOW_STATUS_FAILED\";\n return WorkflowStatus;\n}(WorkflowStatus || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar DateDefault = /*#__PURE__*/function (DateDefault) {\n DateDefault[DateDefault[\"DATE_DEFAULT_INVALID\"] = 0] = \"DATE_DEFAULT_INVALID\";\n DateDefault[DateDefault[\"DATE_DEFAULT_TODAY\"] = 1] = \"DATE_DEFAULT_TODAY\";\n DateDefault[DateDefault[\"DATE_DEFAULT_YESTERDAY\"] = 2] = \"DATE_DEFAULT_YESTERDAY\";\n DateDefault[DateDefault[\"DATE_DEFAULT_TOMORROW\"] = 3] = \"DATE_DEFAULT_TOMORROW\";\n DateDefault[DateDefault[\"DATE_DEFAULT_THIS_WEEK\"] = 4] = \"DATE_DEFAULT_THIS_WEEK\";\n DateDefault[DateDefault[\"DATE_DEFAULT_LAST_WEEK\"] = 5] = \"DATE_DEFAULT_LAST_WEEK\";\n DateDefault[DateDefault[\"DATE_DEFAULT_NEXT_WEEK\"] = 6] = \"DATE_DEFAULT_NEXT_WEEK\";\n DateDefault[DateDefault[\"DATE_DEFAULT_THIS_MONTH\"] = 7] = \"DATE_DEFAULT_THIS_MONTH\";\n DateDefault[DateDefault[\"DATE_DEFAULT_LAST_MONTH\"] = 8] = \"DATE_DEFAULT_LAST_MONTH\";\n DateDefault[DateDefault[\"DATE_DEFAULT_NEXT_MONTH\"] = 9] = \"DATE_DEFAULT_NEXT_MONTH\";\n DateDefault[DateDefault[\"DATE_DEFAULT_THIS_QUARTER\"] = 10] = \"DATE_DEFAULT_THIS_QUARTER\";\n DateDefault[DateDefault[\"DATE_DEFAULT_LAST_QUARTER\"] = 11] = \"DATE_DEFAULT_LAST_QUARTER\";\n DateDefault[DateDefault[\"DATE_DEFAULT_NEXT_QUARTER\"] = 12] = \"DATE_DEFAULT_NEXT_QUARTER\";\n DateDefault[DateDefault[\"DATE_DEFAULT_THIS_YEAR\"] = 13] = \"DATE_DEFAULT_THIS_YEAR\";\n DateDefault[DateDefault[\"DATE_DEFAULT_LAST_YEAR\"] = 14] = \"DATE_DEFAULT_LAST_YEAR\";\n DateDefault[DateDefault[\"DATE_DEFAULT_NEXT_YEAR\"] = 15] = \"DATE_DEFAULT_NEXT_YEAR\";\n return DateDefault;\n}(DateDefault || {});\nvar FilterGroupOperator = /*#__PURE__*/function (FilterGroupOperator) {\n FilterGroupOperator[FilterGroupOperator[\"FILTER_GROUP_OPERATOR_INVALID\"] = 0] = \"FILTER_GROUP_OPERATOR_INVALID\";\n FilterGroupOperator[FilterGroupOperator[\"FILTER_GROUP_OPERATOR_AND\"] = 1] = \"FILTER_GROUP_OPERATOR_AND\";\n FilterGroupOperator[FilterGroupOperator[\"FILTER_GROUP_OPERATOR_OR\"] = 2] = \"FILTER_GROUP_OPERATOR_OR\";\n return FilterGroupOperator;\n}(FilterGroupOperator || {});\nvar FilterOperator = /*#__PURE__*/function (FilterOperator) {\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_INVALID\"] = 0] = \"FILTER_OPERATOR_INVALID\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_EMPTY\"] = 1] = \"FILTER_OPERATOR_IS_EMPTY\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT_EMPTY\"] = 2] = \"FILTER_OPERATOR_IS_NOT_EMPTY\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS\"] = 3] = \"FILTER_OPERATOR_IS\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT\"] = 4] = \"FILTER_OPERATOR_IS_NOT\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_ANY\"] = 5] = \"FILTER_OPERATOR_IS_ANY\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT_ANY\"] = 6] = \"FILTER_OPERATOR_IS_NOT_ANY\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_ALL\"] = 7] = \"FILTER_OPERATOR_IS_ALL\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT_ALL\"] = 8] = \"FILTER_OPERATOR_IS_NOT_ALL\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_CONTAINS\"] = 9] = \"FILTER_OPERATOR_CONTAINS\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_DOES_NOT_CONTAIN\"] = 10] = \"FILTER_OPERATOR_DOES_NOT_CONTAIN\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_EQUAL_TO\"] = 11] = \"FILTER_OPERATOR_IS_EQUAL_TO\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT_EQUAL_TO\"] = 12] = \"FILTER_OPERATOR_IS_NOT_EQUAL_TO\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_GREATER_THAN\"] = 13] = \"FILTER_OPERATOR_IS_GREATER_THAN\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_GREATER_THAN_OR_EQUAL_TO\"] = 14] = \"FILTER_OPERATOR_IS_GREATER_THAN_OR_EQUAL_TO\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_LESS_THAN\"] = 15] = \"FILTER_OPERATOR_IS_LESS_THAN\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_LESS_THAN_OR_EQUAL_TO\"] = 16] = \"FILTER_OPERATOR_IS_LESS_THAN_OR_EQUAL_TO\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_BEFORE\"] = 17] = \"FILTER_OPERATOR_IS_BEFORE\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_BEFORE_OR_ON\"] = 18] = \"FILTER_OPERATOR_IS_BEFORE_OR_ON\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_AFTER\"] = 19] = \"FILTER_OPERATOR_IS_AFTER\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_AFTER_OR_ON\"] = 20] = \"FILTER_OPERATOR_IS_AFTER_OR_ON\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_BETWEEN\"] = 21] = \"FILTER_OPERATOR_IS_BETWEEN\";\n FilterOperator[FilterOperator[\"FILTER_OPERATOR_IS_NOT_BETWEEN\"] = 22] = \"FILTER_OPERATOR_IS_NOT_BETWEEN\";\n return FilterOperator;\n}(FilterOperator || {});\nvar FilterType = /*#__PURE__*/function (FilterType) {\n FilterType[FilterType[\"FILTER_TYPE_INVALID\"] = 0] = \"FILTER_TYPE_INVALID\";\n FilterType[FilterType[\"FILTER_TYPE_STRING\"] = 1] = \"FILTER_TYPE_STRING\";\n FilterType[FilterType[\"FILTER_TYPE_INTEGER\"] = 2] = \"FILTER_TYPE_INTEGER\";\n FilterType[FilterType[\"FILTER_TYPE_DATE\"] = 3] = \"FILTER_TYPE_DATE\";\n FilterType[FilterType[\"FILTER_TYPE_FLOAT\"] = 4] = \"FILTER_TYPE_FLOAT\";\n FilterType[FilterType[\"FILTER_TYPE_BOOLEAN\"] = 5] = \"FILTER_TYPE_BOOLEAN\";\n FilterType[FilterType[\"FILTER_TYPE_TAG\"] = 6] = \"FILTER_TYPE_TAG\";\n return FilterType;\n}(FilterType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar FieldType = /*#__PURE__*/function (FieldType) {\n FieldType[FieldType[\"FIELD_TYPE_INVALID\"] = 0] = \"FIELD_TYPE_INVALID\";\n FieldType[FieldType[\"FIELD_TYPE_STRING\"] = 1] = \"FIELD_TYPE_STRING\";\n FieldType[FieldType[\"FIELD_TYPE_INTEGER\"] = 2] = \"FIELD_TYPE_INTEGER\";\n FieldType[FieldType[\"FIELD_TYPE_DATE\"] = 3] = \"FIELD_TYPE_DATE\";\n FieldType[FieldType[\"FIELD_TYPE_DROPDOWN\"] = 4] = \"FIELD_TYPE_DROPDOWN\";\n FieldType[FieldType[\"FIELD_TYPE_CURRENCY\"] = 5] = \"FIELD_TYPE_CURRENCY\";\n FieldType[FieldType[\"FIELD_TYPE_EMAIL\"] = 6] = \"FIELD_TYPE_EMAIL\";\n FieldType[FieldType[\"FIELD_TYPE_PHONE\"] = 7] = \"FIELD_TYPE_PHONE\";\n FieldType[FieldType[\"FIELD_TYPE_BOOLEAN\"] = 8] = \"FIELD_TYPE_BOOLEAN\";\n FieldType[FieldType[\"FIELD_TYPE_TAG\"] = 9] = \"FIELD_TYPE_TAG\";\n FieldType[FieldType[\"FIELD_TYPE_DATETIME\"] = 10] = \"FIELD_TYPE_DATETIME\";\n FieldType[FieldType[\"FIELD_TYPE_STRING_LIST\"] = 11] = \"FIELD_TYPE_STRING_LIST\";\n FieldType[FieldType[\"FIELD_TYPE_GEOPOINT\"] = 12] = \"FIELD_TYPE_GEOPOINT\";\n FieldType[FieldType[\"FIELD_TYPE_FLOAT\"] = 13] = \"FIELD_TYPE_FLOAT\";\n return FieldType;\n}(FieldType || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar ValidateCrmObjectResponseFieldUniqueness = /*#__PURE__*/function (ValidateCrmObjectResponseFieldUniqueness) {\n ValidateCrmObjectResponseFieldUniqueness[ValidateCrmObjectResponseFieldUniqueness[\"FIELD_UNIQUENESS_INVALID\"] = 0] = \"FIELD_UNIQUENESS_INVALID\";\n ValidateCrmObjectResponseFieldUniqueness[ValidateCrmObjectResponseFieldUniqueness[\"FIELD_UNIQUENESS_NONE\"] = 1] = \"FIELD_UNIQUENESS_NONE\";\n ValidateCrmObjectResponseFieldUniqueness[ValidateCrmObjectResponseFieldUniqueness[\"FIELD_UNIQUENESS_WARNING\"] = 2] = \"FIELD_UNIQUENESS_WARNING\";\n ValidateCrmObjectResponseFieldUniqueness[ValidateCrmObjectResponseFieldUniqueness[\"FIELD_UNIQUENESS_ENFORCED\"] = 3] = \"FIELD_UNIQUENESS_ENFORCED\";\n return ValidateCrmObjectResponseFieldUniqueness;\n}(ValidateCrmObjectResponseFieldUniqueness || {});\nvar SortDirection = /*#__PURE__*/function (SortDirection) {\n SortDirection[SortDirection[\"SORT_DIRECTION_INVALID\"] = 0] = \"SORT_DIRECTION_INVALID\";\n SortDirection[SortDirection[\"SORT_DIRECTION_ASCENDING\"] = 1] = \"SORT_DIRECTION_ASCENDING\";\n SortDirection[SortDirection[\"SORT_DIRECTION_DESCENDING\"] = 2] = \"SORT_DIRECTION_DESCENDING\";\n return SortDirection;\n}(SortDirection || {});\nvar ValidateCrmObjectResponseValidationErrorSeverity = /*#__PURE__*/function (ValidateCrmObjectResponseValidationErrorSeverity) {\n ValidateCrmObjectResponseValidationErrorSeverity[ValidateCrmObjectResponseValidationErrorSeverity[\"VALIDATION_ERROR_SEVERITY_UNKNOWN\"] = 0] = \"VALIDATION_ERROR_SEVERITY_UNKNOWN\";\n ValidateCrmObjectResponseValidationErrorSeverity[ValidateCrmObjectResponseValidationErrorSeverity[\"VALIDATION_ERROR_SEVERITY_INVALID\"] = 1] = \"VALIDATION_ERROR_SEVERITY_INVALID\";\n ValidateCrmObjectResponseValidationErrorSeverity[ValidateCrmObjectResponseValidationErrorSeverity[\"VALIDATION_ERROR_SEVERITY_WARNING\"] = 2] = \"VALIDATION_ERROR_SEVERITY_WARNING\";\n return ValidateCrmObjectResponseValidationErrorSeverity;\n}(ValidateCrmObjectResponseValidationErrorSeverity || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar AddContactAsIamUserForCompanyStatus = /*#__PURE__*/function (AddContactAsIamUserForCompanyStatus) {\n AddContactAsIamUserForCompanyStatus[AddContactAsIamUserForCompanyStatus[\"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_INVALID\"] = 0] = \"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_INVALID\";\n AddContactAsIamUserForCompanyStatus[AddContactAsIamUserForCompanyStatus[\"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_IN_PROGRESS\"] = 1] = \"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_IN_PROGRESS\";\n AddContactAsIamUserForCompanyStatus[AddContactAsIamUserForCompanyStatus[\"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_SUCCEEDED\"] = 2] = \"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_SUCCEEDED\";\n AddContactAsIamUserForCompanyStatus[AddContactAsIamUserForCompanyStatus[\"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_FAILED\"] = 3] = \"ADD_CONTACT_AS_IAM_USER_FOR_COMPANY_STATUS_FAILED\";\n return AddContactAsIamUserForCompanyStatus;\n}(AddContactAsIamUserForCompanyStatus || {});\nvar CreateAccountGroupForCompanyStatus = /*#__PURE__*/function (CreateAccountGroupForCompanyStatus) {\n CreateAccountGroupForCompanyStatus[CreateAccountGroupForCompanyStatus[\"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_UNSPECIFIED\"] = 0] = \"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_UNSPECIFIED\";\n CreateAccountGroupForCompanyStatus[CreateAccountGroupForCompanyStatus[\"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_IN_PROGRESS\"] = 1] = \"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_IN_PROGRESS\";\n CreateAccountGroupForCompanyStatus[CreateAccountGroupForCompanyStatus[\"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_SUCCEEDED\"] = 2] = \"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_SUCCEEDED\";\n CreateAccountGroupForCompanyStatus[CreateAccountGroupForCompanyStatus[\"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_FAILED\"] = 3] = \"CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_FAILED\";\n return CreateAccountGroupForCompanyStatus;\n}(CreateAccountGroupForCompanyStatus || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums.\n// *********************************\nvar NullValue = /*#__PURE__*/function (NullValue) {\n NullValue[NullValue[\"NULL_VALUE\"] = 0] = \"NULL_VALUE\";\n return NullValue;\n}(NullValue || {});\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Enums Index.\n// *********************************\n\nfunction enumStringToValue$9(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass FieldMask {\n static fromProto(proto) {\n let m = new FieldMask();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.paths !== 'undefined') {\n toReturn['paths'] = this.paths;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$8(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CreateIntegrationRequest {\n static fromProto(proto) {\n let m = new CreateIntegrationRequest();\n m = Object.assign(m, proto);\n if (proto.integration) {\n m.integration = Integration.fromProto(proto.integration);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integration !== 'undefined' && this.integration !== null) {\n toReturn['integration'] = 'toApiJson' in this.integration ? this.integration.toApiJson() : this.integration;\n }\n return toReturn;\n }\n}\nclass CreateIntegrationResponse {\n static fromProto(proto) {\n let m = new CreateIntegrationResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n return toReturn;\n }\n}\nclass MergeStrategyMergeConfigDateOverwriteConfig {\n static fromProto(proto) {\n let m = new MergeStrategyMergeConfigDateOverwriteConfig();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.dateCriteriaFieldId !== 'undefined') {\n toReturn['dateCriteriaFieldId'] = this.dateCriteriaFieldId;\n }\n return toReturn;\n }\n}\nclass DeleteIntegrationRequest {\n static fromProto(proto) {\n let m = new DeleteIntegrationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n return toReturn;\n }\n}\nclass FieldMapping {\n static fromProto(proto) {\n let m = new FieldMapping();\n m = Object.assign(m, proto);\n if (proto.type) {\n m.type = enumStringToValue$8(MappingType, proto.type);\n }\n if (proto.mergeStrategy) {\n m.mergeStrategy = MergeStrategy.fromProto(proto.mergeStrategy);\n }\n if (proto.nestedIntegration) {\n m.nestedIntegration = NestedIntegration.fromProto(proto.nestedIntegration);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.type !== 'undefined') {\n toReturn['type'] = this.type;\n }\n if (typeof this.jsonPath !== 'undefined') {\n toReturn['jsonPath'] = this.jsonPath;\n }\n if (typeof this.mergeStrategy !== 'undefined' && this.mergeStrategy !== null) {\n toReturn['mergeStrategy'] = 'toApiJson' in this.mergeStrategy ? this.mergeStrategy.toApiJson() : this.mergeStrategy;\n }\n if (typeof this.nestedIntegration !== 'undefined' && this.nestedIntegration !== null) {\n toReturn['nestedIntegration'] = 'toApiJson' in this.nestedIntegration ? this.nestedIntegration.toApiJson() : this.nestedIntegration;\n }\n return toReturn;\n }\n}\nclass GetMultiIntegrationRequest {\n static fromProto(proto) {\n let m = new GetMultiIntegrationRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrationIds !== 'undefined') {\n toReturn['integrationIds'] = this.integrationIds;\n }\n return toReturn;\n }\n}\nclass GetMultiIntegrationResponse {\n static fromProto(proto) {\n let m = new GetMultiIntegrationResponse();\n m = Object.assign(m, proto);\n if (proto.integrations) {\n m.integrations = proto.integrations.map(Integration.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrations !== 'undefined' && this.integrations !== null) {\n toReturn['integrations'] = 'toApiJson' in this.integrations ? this.integrations.toApiJson() : this.integrations;\n }\n return toReturn;\n }\n}\nclass Integration {\n static fromProto(proto) {\n let m = new Integration();\n m = Object.assign(m, proto);\n if (proto.fieldMappings) {\n m.fieldMappings = proto.fieldMappings.map(FieldMapping.fromProto);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n if (proto.deleted) {\n m.deleted = new Date(proto.deleted);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n if (typeof this.objectType !== 'undefined') {\n toReturn['objectType'] = this.objectType;\n }\n if (typeof this.objectSubtype !== 'undefined') {\n toReturn['objectSubtype'] = this.objectSubtype;\n }\n if (typeof this.lookupMappingIds !== 'undefined') {\n toReturn['lookupMappingIds'] = this.lookupMappingIds;\n }\n if (typeof this.fieldMappings !== 'undefined' && this.fieldMappings !== null) {\n toReturn['fieldMappings'] = 'toApiJson' in this.fieldMappings ? this.fieldMappings.toApiJson() : this.fieldMappings;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n if (typeof this.deleted !== 'undefined' && this.deleted !== null) {\n toReturn['deleted'] = 'toApiJson' in this.deleted ? this.deleted.toApiJson() : this.deleted;\n }\n return toReturn;\n }\n}\nclass MergeStrategyMergeConfig {\n static fromProto(proto) {\n let m = new MergeStrategyMergeConfig();\n m = Object.assign(m, proto);\n if (proto.dateOverwriteConfig) {\n m.dateOverwriteConfig = MergeStrategyMergeConfigDateOverwriteConfig.fromProto(proto.dateOverwriteConfig);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.dateOverwriteConfig !== 'undefined' && this.dateOverwriteConfig !== null) {\n toReturn['dateOverwriteConfig'] = 'toApiJson' in this.dateOverwriteConfig ? this.dateOverwriteConfig.toApiJson() : this.dateOverwriteConfig;\n }\n return toReturn;\n }\n}\nclass MergeStrategy {\n static fromProto(proto) {\n let m = new MergeStrategy();\n m = Object.assign(m, proto);\n if (proto.type) {\n m.type = enumStringToValue$8(MergeStrategyType, proto.type);\n }\n if (proto.config) {\n m.config = MergeStrategyMergeConfig.fromProto(proto.config);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.type !== 'undefined') {\n toReturn['type'] = this.type;\n }\n if (typeof this.config !== 'undefined' && this.config !== null) {\n toReturn['config'] = 'toApiJson' in this.config ? this.config.toApiJson() : this.config;\n }\n return toReturn;\n }\n}\nclass NestedIntegration {\n static fromProto(proto) {\n let m = new NestedIntegration();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n return toReturn;\n }\n}\nclass UpdateIntegrationRequest {\n static fromProto(proto) {\n let m = new UpdateIntegrationRequest();\n m = Object.assign(m, proto);\n if (proto.integration) {\n m.integration = Integration.fromProto(proto.integration);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.integration !== 'undefined' && this.integration !== null) {\n toReturn['integration'] = 'toApiJson' in this.integration ? this.integration.toApiJson() : this.integration;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$7(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass PagedRequestOptions {\n static fromProto(proto) {\n let m = new PagedRequestOptions();\n m = Object.assign(m, proto);\n if (proto.pageSize) {\n m.pageSize = parseInt(proto.pageSize, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.cursor !== 'undefined') {\n toReturn['cursor'] = this.cursor;\n }\n if (typeof this.pageSize !== 'undefined') {\n toReturn['pageSize'] = this.pageSize;\n }\n return toReturn;\n }\n}\nclass PagedResponseMetadata {\n static fromProto(proto) {\n let m = new PagedResponseMetadata();\n m = Object.assign(m, proto);\n if (proto.totalResults) {\n m.totalResults = parseInt(proto.totalResults, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.nextCursor !== 'undefined') {\n toReturn['nextCursor'] = this.nextCursor;\n }\n if (typeof this.hasMore !== 'undefined') {\n toReturn['hasMore'] = this.hasMore;\n }\n if (typeof this.totalResults !== 'undefined') {\n toReturn['totalResults'] = this.totalResults;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$6(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Filter {\n static fromProto(proto) {\n let m = new Filter();\n m = Object.assign(m, proto);\n if (proto.operator) {\n m.operator = enumStringToValue$6(FilterOperator, proto.operator);\n }\n if (proto.values) {\n m.values = proto.values.map(FilterValue.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.operator !== 'undefined') {\n toReturn['operator'] = this.operator;\n }\n if (typeof this.values !== 'undefined' && this.values !== null) {\n toReturn['values'] = 'toApiJson' in this.values ? this.values.toApiJson() : this.values;\n }\n if (typeof this.floatTolerance !== 'undefined') {\n toReturn['floatTolerance'] = this.floatTolerance;\n }\n return toReturn;\n }\n}\nclass FilterGroup {\n static fromProto(proto) {\n let m = new FilterGroup();\n m = Object.assign(m, proto);\n if (proto.operator) {\n m.operator = enumStringToValue$6(FilterGroupOperator, proto.operator);\n }\n if (proto.filters) {\n m.filters = proto.filters.map(Filter.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.operator !== 'undefined') {\n toReturn['operator'] = this.operator;\n }\n if (typeof this.filters !== 'undefined' && this.filters !== null) {\n toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;\n }\n return toReturn;\n }\n}\nclass FilterValue {\n static fromProto(proto) {\n let m = new FilterValue();\n m = Object.assign(m, proto);\n if (proto.integer) {\n m.integer = parseInt(proto.integer, 10);\n }\n if (proto.date) {\n m.date = new Date(proto.date);\n }\n if (proto.dateDefault) {\n m.dateDefault = enumStringToValue$6(DateDefault, proto.dateDefault);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.boolean !== 'undefined') {\n toReturn['boolean'] = this.boolean;\n }\n if (typeof this.integer !== 'undefined') {\n toReturn['integer'] = this.integer;\n }\n if (typeof this.float !== 'undefined') {\n toReturn['float'] = this.float;\n }\n if (typeof this.string !== 'undefined') {\n toReturn['string'] = this.string;\n }\n if (typeof this.date !== 'undefined' && this.date !== null) {\n toReturn['date'] = 'toApiJson' in this.date ? this.date.toApiJson() : this.date;\n }\n if (typeof this.dateDefault !== 'undefined') {\n toReturn['dateDefault'] = this.dateDefault;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$5(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass ArchiveFieldSchemaRequest {\n static fromProto(proto) {\n let m = new ArchiveFieldSchemaRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n return toReturn;\n }\n}\nclass CreateFieldSchemaRequest {\n static fromProto(proto) {\n let m = new CreateFieldSchemaRequest();\n m = Object.assign(m, proto);\n if (proto.fieldSchema) {\n m.fieldSchema = FieldSchema.fromProto(proto.fieldSchema);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.fieldSchema !== 'undefined' && this.fieldSchema !== null) {\n toReturn['fieldSchema'] = 'toApiJson' in this.fieldSchema ? this.fieldSchema.toApiJson() : this.fieldSchema;\n }\n return toReturn;\n }\n}\nclass CreateFieldSchemaResponse {\n static fromProto(proto) {\n let m = new CreateFieldSchemaResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n return toReturn;\n }\n}\nclass DropdownOption {\n static fromProto(proto) {\n let m = new DropdownOption();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.label !== 'undefined') {\n toReturn['label'] = this.label;\n }\n if (typeof this.value !== 'undefined') {\n toReturn['value'] = this.value;\n }\n return toReturn;\n }\n}\nclass FieldSchema {\n static fromProto(proto) {\n let m = new FieldSchema();\n m = Object.assign(m, proto);\n if (proto.fieldType) {\n m.fieldType = enumStringToValue$5(FieldType, proto.fieldType);\n }\n if (proto.dropdownOptions) {\n m.dropdownOptions = proto.dropdownOptions.map(DropdownOption.fromProto);\n }\n if (proto.archived) {\n m.archived = new Date(proto.archived);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.externalId !== 'undefined') {\n toReturn['externalId'] = this.externalId;\n }\n if (typeof this.fieldType !== 'undefined') {\n toReturn['fieldType'] = this.fieldType;\n }\n if (typeof this.fieldName !== 'undefined') {\n toReturn['fieldName'] = this.fieldName;\n }\n if (typeof this.fieldDescription !== 'undefined') {\n toReturn['fieldDescription'] = this.fieldDescription;\n }\n if (typeof this.dropdownOptions !== 'undefined' && this.dropdownOptions !== null) {\n toReturn['dropdownOptions'] = 'toApiJson' in this.dropdownOptions ? this.dropdownOptions.toApiJson() : this.dropdownOptions;\n }\n if (typeof this.currencyCode !== 'undefined') {\n toReturn['currencyCode'] = this.currencyCode;\n }\n if (typeof this.archived !== 'undefined' && this.archived !== null) {\n toReturn['archived'] = 'toApiJson' in this.archived ? this.archived.toApiJson() : this.archived;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n if (typeof this.readonly !== 'undefined') {\n toReturn['readonly'] = this.readonly;\n }\n return toReturn;\n }\n}\nclass ListFieldSchemaRequestFilters {\n static fromProto(proto) {\n let m = new ListFieldSchemaRequestFilters();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.onlyArchived !== 'undefined') {\n toReturn['onlyArchived'] = this.onlyArchived;\n }\n return toReturn;\n }\n}\nclass GetMultiFieldSchemaRequest {\n static fromProto(proto) {\n let m = new GetMultiFieldSchemaRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n return toReturn;\n }\n}\nclass GetMultiFieldSchemaResponse {\n static fromProto(proto) {\n let m = new GetMultiFieldSchemaResponse();\n m = Object.assign(m, proto);\n if (proto.fieldSchemas) {\n m.fieldSchemas = proto.fieldSchemas.map(FieldSchema.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldSchemas !== 'undefined' && this.fieldSchemas !== null) {\n toReturn['fieldSchemas'] = 'toApiJson' in this.fieldSchemas ? this.fieldSchemas.toApiJson() : this.fieldSchemas;\n }\n return toReturn;\n }\n}\nclass ListFieldSchemaRequest {\n static fromProto(proto) {\n let m = new ListFieldSchemaRequest();\n m = Object.assign(m, proto);\n if (proto.pagingOptions) {\n m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);\n }\n if (proto.filters) {\n m.filters = ListFieldSchemaRequestFilters.fromProto(proto.filters);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {\n toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;\n }\n if (typeof this.filters !== 'undefined' && this.filters !== null) {\n toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;\n }\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n return toReturn;\n }\n}\nclass ListFieldSchemaResponse {\n static fromProto(proto) {\n let m = new ListFieldSchemaResponse();\n m = Object.assign(m, proto);\n if (proto.fieldSchemas) {\n m.fieldSchemas = proto.fieldSchemas.map(FieldSchema.fromProto);\n }\n if (proto.pagingMetadata) {\n m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldSchemas !== 'undefined' && this.fieldSchemas !== null) {\n toReturn['fieldSchemas'] = 'toApiJson' in this.fieldSchemas ? this.fieldSchemas.toApiJson() : this.fieldSchemas;\n }\n if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {\n toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;\n }\n return toReturn;\n }\n}\nclass UnarchiveFieldSchemaRequest {\n static fromProto(proto) {\n let m = new UnarchiveFieldSchemaRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n return toReturn;\n }\n}\nclass UpdateFieldSchemaRequest {\n static fromProto(proto) {\n let m = new UpdateFieldSchemaRequest();\n m = Object.assign(m, proto);\n if (proto.fieldSchema) {\n m.fieldSchema = FieldSchema.fromProto(proto.fieldSchema);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.fieldSchema !== 'undefined' && this.fieldSchema !== null) {\n toReturn['fieldSchema'] = 'toApiJson' in this.fieldSchema ? this.fieldSchema.toApiJson() : this.fieldSchema;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$4(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass CreateCrmObjectRequest {\n static fromProto(proto) {\n let m = new CreateCrmObjectRequest();\n m = Object.assign(m, proto);\n if (proto.crmObject) {\n m.crmObject = CrmObject.fromProto(proto.crmObject);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObject !== 'undefined' && this.crmObject !== null) {\n toReturn['crmObject'] = 'toApiJson' in this.crmObject ? this.crmObject.toApiJson() : this.crmObject;\n }\n return toReturn;\n }\n}\nclass CreateCrmObjectResponse {\n static fromProto(proto) {\n let m = new CreateCrmObjectResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n return toReturn;\n }\n}\nclass CrmObject {\n static fromProto(proto) {\n let m = new CrmObject();\n m = Object.assign(m, proto);\n if (proto.fields) {\n m.fields = proto.fields.map(FieldValue.fromProto);\n }\n if (proto.created) {\n m.created = new Date(proto.created);\n }\n if (proto.updated) {\n m.updated = new Date(proto.updated);\n }\n if (proto.deleted) {\n m.deleted = new Date(proto.deleted);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n if (typeof this.externalId !== 'undefined') {\n toReturn['externalId'] = this.externalId;\n }\n if (typeof this.ownerId !== 'undefined') {\n toReturn['ownerId'] = this.ownerId;\n }\n if (typeof this.fields !== 'undefined' && this.fields !== null) {\n toReturn['fields'] = 'toApiJson' in this.fields ? this.fields.toApiJson() : this.fields;\n }\n if (typeof this.created !== 'undefined' && this.created !== null) {\n toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;\n }\n if (typeof this.updated !== 'undefined' && this.updated !== null) {\n toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;\n }\n if (typeof this.deleted !== 'undefined' && this.deleted !== null) {\n toReturn['deleted'] = 'toApiJson' in this.deleted ? this.deleted.toApiJson() : this.deleted;\n }\n if (typeof this.groupId !== 'undefined') {\n toReturn['groupId'] = this.groupId;\n }\n return toReturn;\n }\n}\nclass CrmObjectSearch {\n static fromProto(proto) {\n let m = new CrmObjectSearch();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n return toReturn;\n }\n}\nclass DeleteCrmObjectRequest {\n static fromProto(proto) {\n let m = new DeleteCrmObjectRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n return toReturn;\n }\n}\nclass FieldValue {\n static fromProto(proto) {\n let m = new FieldValue();\n m = Object.assign(m, proto);\n if (proto.nullValue) {\n m.nullValue = enumStringToValue$4(NullValue, proto.nullValue);\n }\n if (proto.integerValue) {\n m.integerValue = parseInt(proto.integerValue, 10);\n }\n if (proto.dateValue) {\n m.dateValue = new Date(proto.dateValue);\n }\n if (proto.stringValues) {\n m.stringValues = StringList.fromProto(proto.stringValues);\n }\n if (proto.geopointValue) {\n m.geopointValue = Geopoint.fromProto(proto.geopointValue);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.externalId !== 'undefined') {\n toReturn['externalId'] = this.externalId;\n }\n if (typeof this.nullValue !== 'undefined') {\n toReturn['nullValue'] = this.nullValue;\n }\n if (typeof this.integerValue !== 'undefined') {\n toReturn['integerValue'] = this.integerValue;\n }\n if (typeof this.stringValue !== 'undefined') {\n toReturn['stringValue'] = this.stringValue;\n }\n if (typeof this.dateValue !== 'undefined' && this.dateValue !== null) {\n toReturn['dateValue'] = 'toApiJson' in this.dateValue ? this.dateValue.toApiJson() : this.dateValue;\n }\n if (typeof this.booleanValue !== 'undefined') {\n toReturn['booleanValue'] = this.booleanValue;\n }\n if (typeof this.stringValues !== 'undefined' && this.stringValues !== null) {\n toReturn['stringValues'] = 'toApiJson' in this.stringValues ? this.stringValues.toApiJson() : this.stringValues;\n }\n if (typeof this.geopointValue !== 'undefined' && this.geopointValue !== null) {\n toReturn['geopointValue'] = 'toApiJson' in this.geopointValue ? this.geopointValue.toApiJson() : this.geopointValue;\n }\n if (typeof this.floatValue !== 'undefined') {\n toReturn['floatValue'] = this.floatValue;\n }\n return toReturn;\n }\n}\nclass Geopoint {\n static fromProto(proto) {\n let m = new Geopoint();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.lat !== 'undefined') {\n toReturn['lat'] = this.lat;\n }\n if (typeof this.lon !== 'undefined') {\n toReturn['lon'] = this.lon;\n }\n return toReturn;\n }\n}\nclass GetMultiCrmObjectRequest {\n static fromProto(proto) {\n let m = new GetMultiCrmObjectRequest();\n m = Object.assign(m, proto);\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectIds !== 'undefined') {\n toReturn['crmObjectIds'] = this.crmObjectIds;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass GetMultiCrmObjectResponse {\n static fromProto(proto) {\n let m = new GetMultiCrmObjectResponse();\n m = Object.assign(m, proto);\n if (proto.crmObjects) {\n m.crmObjects = proto.crmObjects.map(CrmObject.fromProto);\n }\n if (proto.fieldSchemas) {\n m.fieldSchemas = proto.fieldSchemas.map(FieldSchema.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjects !== 'undefined' && this.crmObjects !== null) {\n toReturn['crmObjects'] = 'toApiJson' in this.crmObjects ? this.crmObjects.toApiJson() : this.crmObjects;\n }\n if (typeof this.fieldSchemas !== 'undefined' && this.fieldSchemas !== null) {\n toReturn['fieldSchemas'] = 'toApiJson' in this.fieldSchemas ? this.fieldSchemas.toApiJson() : this.fieldSchemas;\n }\n return toReturn;\n }\n}\nclass ListCrmObjectsRequest {\n static fromProto(proto) {\n let m = new ListCrmObjectsRequest();\n m = Object.assign(m, proto);\n if (proto.pagingOptions) {\n m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);\n }\n if (proto.search) {\n m.search = CrmObjectSearch.fromProto(proto.search);\n }\n if (proto.sortBy) {\n m.sortBy = proto.sortBy.map(SortBy.fromProto);\n }\n if (proto.filtersV2) {\n m.filtersV2 = FilterGroup.fromProto(proto.filtersV2);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {\n toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;\n }\n if (typeof this.search !== 'undefined' && this.search !== null) {\n toReturn['search'] = 'toApiJson' in this.search ? this.search.toApiJson() : this.search;\n }\n if (typeof this.sortBy !== 'undefined' && this.sortBy !== null) {\n toReturn['sortBy'] = 'toApiJson' in this.sortBy ? this.sortBy.toApiJson() : this.sortBy;\n }\n if (typeof this.filtersV2 !== 'undefined' && this.filtersV2 !== null) {\n toReturn['filtersV2'] = 'toApiJson' in this.filtersV2 ? this.filtersV2.toApiJson() : this.filtersV2;\n }\n return toReturn;\n }\n}\nclass ListCrmObjectsResponse {\n static fromProto(proto) {\n let m = new ListCrmObjectsResponse();\n m = Object.assign(m, proto);\n if (proto.crmObjects) {\n m.crmObjects = proto.crmObjects.map(CrmObject.fromProto);\n }\n if (proto.pagingMetadata) {\n m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjects !== 'undefined' && this.crmObjects !== null) {\n toReturn['crmObjects'] = 'toApiJson' in this.crmObjects ? this.crmObjects.toApiJson() : this.crmObjects;\n }\n if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {\n toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;\n }\n return toReturn;\n }\n}\nclass ListFieldOptionsRequest {\n static fromProto(proto) {\n let m = new ListFieldOptionsRequest();\n m = Object.assign(m, proto);\n if (proto.pageSize) {\n m.pageSize = parseInt(proto.pageSize, 10);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.pageSize !== 'undefined') {\n toReturn['pageSize'] = this.pageSize;\n }\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n return toReturn;\n }\n}\nclass ListFieldOptionsResponse {\n static fromProto(proto) {\n let m = new ListFieldOptionsResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.options !== 'undefined') {\n toReturn['options'] = this.options;\n }\n return toReturn;\n }\n}\nclass SortBy {\n static fromProto(proto) {\n let m = new SortBy();\n m = Object.assign(m, proto);\n if (proto.sortDirection) {\n m.sortDirection = enumStringToValue$4(SortDirection, proto.sortDirection);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.sortDirection !== 'undefined') {\n toReturn['sortDirection'] = this.sortDirection;\n }\n return toReturn;\n }\n}\nclass StartBulkCompanyCreateRequest {\n static fromProto(proto) {\n let m = new StartBulkCompanyCreateRequest();\n m = Object.assign(m, proto);\n if (proto.crmObjects) {\n m.crmObjects = proto.crmObjects.map(CrmObject.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n if (typeof this.crmObjects !== 'undefined' && this.crmObjects !== null) {\n toReturn['crmObjects'] = 'toApiJson' in this.crmObjects ? this.crmObjects.toApiJson() : this.crmObjects;\n }\n return toReturn;\n }\n}\nclass StartBulkCompanyCreateResponse {\n static fromProto(proto) {\n let m = new StartBulkCompanyCreateResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.filterTag !== 'undefined') {\n toReturn['filterTag'] = this.filterTag;\n }\n return toReturn;\n }\n}\nclass StringList {\n static fromProto(proto) {\n let m = new StringList();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.values !== 'undefined') {\n toReturn['values'] = this.values;\n }\n return toReturn;\n }\n}\nclass ValidateCrmObjectResponseUniquenessCheck {\n static fromProto(proto) {\n let m = new ValidateCrmObjectResponseUniquenessCheck();\n m = Object.assign(m, proto);\n if (proto.uniqueness) {\n m.uniqueness = enumStringToValue$4(ValidateCrmObjectResponseFieldUniqueness, proto.uniqueness);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.fieldId !== 'undefined') {\n toReturn['fieldId'] = this.fieldId;\n }\n if (typeof this.existingCrmObjectIds !== 'undefined') {\n toReturn['existingCrmObjectIds'] = this.existingCrmObjectIds;\n }\n if (typeof this.uniqueness !== 'undefined') {\n toReturn['uniqueness'] = this.uniqueness;\n }\n return toReturn;\n }\n}\nclass UpdateCrmObjectRequest {\n static fromProto(proto) {\n let m = new UpdateCrmObjectRequest();\n m = Object.assign(m, proto);\n if (proto.crmObject) {\n m.crmObject = CrmObject.fromProto(proto.crmObject);\n }\n if (proto.fieldMask) {\n m.fieldMask = FieldMask.fromProto(proto.fieldMask);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObject !== 'undefined' && this.crmObject !== null) {\n toReturn['crmObject'] = 'toApiJson' in this.crmObject ? this.crmObject.toApiJson() : this.crmObject;\n }\n if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {\n toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;\n }\n return toReturn;\n }\n}\nclass ValidateCrmObjectRequest {\n static fromProto(proto) {\n let m = new ValidateCrmObjectRequest();\n m = Object.assign(m, proto);\n if (proto.crmObject) {\n m.crmObject = CrmObject.fromProto(proto.crmObject);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObject !== 'undefined' && this.crmObject !== null) {\n toReturn['crmObject'] = 'toApiJson' in this.crmObject ? this.crmObject.toApiJson() : this.crmObject;\n }\n return toReturn;\n }\n}\nclass ValidateCrmObjectResponse {\n static fromProto(proto) {\n let m = new ValidateCrmObjectResponse();\n m = Object.assign(m, proto);\n if (proto.errors) {\n m.errors = proto.errors.map(ValidateCrmObjectResponseValidationError.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.errors !== 'undefined' && this.errors !== null) {\n toReturn['errors'] = 'toApiJson' in this.errors ? this.errors.toApiJson() : this.errors;\n }\n return toReturn;\n }\n}\nclass ValidateCrmObjectResponseValidationError {\n static fromProto(proto) {\n let m = new ValidateCrmObjectResponseValidationError();\n m = Object.assign(m, proto);\n if (proto.severity) {\n m.severity = enumStringToValue$4(ValidateCrmObjectResponseValidationErrorSeverity, proto.severity);\n }\n if (proto.details) {\n m.details = ValidateCrmObjectResponseValidationErrorDetails.fromProto(proto.details);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.ruleId !== 'undefined') {\n toReturn['ruleId'] = this.ruleId;\n }\n if (typeof this.message !== 'undefined') {\n toReturn['message'] = this.message;\n }\n if (typeof this.severity !== 'undefined') {\n toReturn['severity'] = this.severity;\n }\n if (typeof this.details !== 'undefined' && this.details !== null) {\n toReturn['details'] = 'toApiJson' in this.details ? this.details.toApiJson() : this.details;\n }\n return toReturn;\n }\n}\nclass ValidateCrmObjectResponseValidationErrorDetails {\n static fromProto(proto) {\n let m = new ValidateCrmObjectResponseValidationErrorDetails();\n m = Object.assign(m, proto);\n if (proto.uniquenessCheck) {\n m.uniquenessCheck = ValidateCrmObjectResponseUniquenessCheck.fromProto(proto.uniquenessCheck);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.uniquenessCheck !== 'undefined' && this.uniquenessCheck !== null) {\n toReturn['uniquenessCheck'] = 'toApiJson' in this.uniquenessCheck ? this.uniquenessCheck.toApiJson() : this.uniquenessCheck;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$3(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass DeleteObjectRequest {\n static fromProto(proto) {\n let m = new DeleteObjectRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n if (typeof this.jsonData !== 'undefined') {\n toReturn['jsonData'] = this.jsonData;\n }\n return toReturn;\n }\n}\nclass ImportFromJSONRequest {\n static fromProto(proto) {\n let m = new ImportFromJSONRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.crmObjectType !== 'undefined') {\n toReturn['crmObjectType'] = this.crmObjectType;\n }\n if (typeof this.crmObjectSubtype !== 'undefined') {\n toReturn['crmObjectSubtype'] = this.crmObjectSubtype;\n }\n if (typeof this.existingRecordChecks !== 'undefined') {\n toReturn['existingRecordChecks'] = this.existingRecordChecks;\n }\n if (typeof this.fieldData !== 'undefined') {\n toReturn['fieldData'] = this.fieldData;\n }\n if (typeof this.readMask !== 'undefined') {\n toReturn['readMask'] = this.readMask;\n }\n return toReturn;\n }\n}\nclass ImportFromJSONResponse {\n static fromProto(proto) {\n let m = new ImportFromJSONResponse();\n m = Object.assign(m, proto);\n if (proto.fields) {\n m.fields = proto.fields.map(FieldValue.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n if (typeof this.fields !== 'undefined' && this.fields !== null) {\n toReturn['fields'] = 'toApiJson' in this.fields ? this.fields.toApiJson() : this.fields;\n }\n return toReturn;\n }\n}\nclass UpsertObjectResponseMultiIngestionResponse {\n static fromProto(proto) {\n let m = new UpsertObjectResponseMultiIngestionResponse();\n m = Object.assign(m, proto);\n if (proto.workflowStatus) {\n m.workflowStatus = enumStringToValue$3(WorkflowStatus, proto.workflowStatus);\n }\n if (proto.result) {\n m.result = UpsertObjectResponseMultiIngestionResult.fromProto(proto.result);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.workflowStatus !== 'undefined') {\n toReturn['workflowStatus'] = this.workflowStatus;\n }\n if (typeof this.result !== 'undefined' && this.result !== null) {\n toReturn['result'] = 'toApiJson' in this.result ? this.result.toApiJson() : this.result;\n }\n if (typeof this.workflowId !== 'undefined') {\n toReturn['workflowId'] = this.workflowId;\n }\n return toReturn;\n }\n}\nclass UpsertObjectResponseMultiIngestionResult {\n static fromProto(proto) {\n let m = new UpsertObjectResponseMultiIngestionResult();\n m = Object.assign(m, proto);\n if (proto.nestedObjects) {\n m.nestedObjects = proto.nestedObjects.map(UpsertObjectResponseNestedObject.fromProto);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n if (typeof this.nestedObjects !== 'undefined' && this.nestedObjects !== null) {\n toReturn['nestedObjects'] = 'toApiJson' in this.nestedObjects ? this.nestedObjects.toApiJson() : this.nestedObjects;\n }\n return toReturn;\n }\n}\nclass UpsertObjectResponseNestedObject {\n static fromProto(proto) {\n let m = new UpsertObjectResponseNestedObject();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n if (typeof this.objectType !== 'undefined') {\n toReturn['objectType'] = this.objectType;\n }\n return toReturn;\n }\n}\nclass UpsertObjectRequest {\n static fromProto(proto) {\n let m = new UpsertObjectRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.integrationId !== 'undefined') {\n toReturn['integrationId'] = this.integrationId;\n }\n if (typeof this.jsonData !== 'undefined') {\n toReturn['jsonData'] = this.jsonData;\n }\n return toReturn;\n }\n}\nclass UpsertObjectResponse {\n static fromProto(proto) {\n let m = new UpsertObjectResponse();\n m = Object.assign(m, proto);\n if (proto.multiIngestionResponse) {\n m.multiIngestionResponse = UpsertObjectResponseMultiIngestionResponse.fromProto(proto.multiIngestionResponse);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.crmObjectId !== 'undefined') {\n toReturn['crmObjectId'] = this.crmObjectId;\n }\n if (typeof this.multiIngestionResponse !== 'undefined' && this.multiIngestionResponse !== null) {\n toReturn['multiIngestionResponse'] = 'toApiJson' in this.multiIngestionResponse ? this.multiIngestionResponse.toApiJson() : this.multiIngestionResponse;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$2(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass AddContactAsIamUserForCompanyRequest {\n static fromProto(proto) {\n let m = new AddContactAsIamUserForCompanyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.contactId !== 'undefined') {\n toReturn['contactId'] = this.contactId;\n }\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n return toReturn;\n }\n}\nclass AddContactAsIamUserForCompanyStatusResponse {\n static fromProto(proto) {\n let m = new AddContactAsIamUserForCompanyStatusResponse();\n m = Object.assign(m, proto);\n if (proto.status) {\n m.status = enumStringToValue$2(AddContactAsIamUserForCompanyStatus, proto.status);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n return toReturn;\n }\n}\nclass CreateAccountGroupForCompanyRequest {\n static fromProto(proto) {\n let m = new CreateAccountGroupForCompanyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n return toReturn;\n }\n}\nclass GetAccountGroupForCompanyRequest {\n static fromProto(proto) {\n let m = new GetAccountGroupForCompanyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n return toReturn;\n }\n}\nclass GetAccountGroupForCompanyResponse {\n static fromProto(proto) {\n let m = new GetAccountGroupForCompanyResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass GetCreateAccountGroupForCompanyStatusRequest {\n static fromProto(proto) {\n let m = new GetCreateAccountGroupForCompanyStatusRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n return toReturn;\n }\n}\nclass GetCreateAccountGroupForCompanyStatusResponse {\n static fromProto(proto) {\n let m = new GetCreateAccountGroupForCompanyStatusResponse();\n m = Object.assign(m, proto);\n if (proto.status) {\n m.status = enumStringToValue$2(CreateAccountGroupForCompanyStatus, proto.status);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.status !== 'undefined') {\n toReturn['status'] = this.status;\n }\n if (typeof this.accountGroupId !== 'undefined') {\n toReturn['accountGroupId'] = this.accountGroupId;\n }\n return toReturn;\n }\n}\nclass IsContactIamUserForCompanyRequest {\n static fromProto(proto) {\n let m = new IsContactIamUserForCompanyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.contactId !== 'undefined') {\n toReturn['contactId'] = this.contactId;\n }\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n return toReturn;\n }\n}\nclass IsContactIamUserForCompanyResponse {\n static fromProto(proto) {\n let m = new IsContactIamUserForCompanyResponse();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.isIamUser !== 'undefined') {\n toReturn['isIamUser'] = this.isIamUser;\n }\n return toReturn;\n }\n}\nclass RemoveContactAsIamUserForCompanyRequest {\n static fromProto(proto) {\n let m = new RemoveContactAsIamUserForCompanyRequest();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.contactId !== 'undefined') {\n toReturn['contactId'] = this.contactId;\n }\n if (typeof this.companyId !== 'undefined') {\n toReturn['companyId'] = this.companyId;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue$1(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass Access {\n static fromProto(proto) {\n let m = new Access();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.scope !== 'undefined') {\n toReturn['scope'] = this.scope;\n }\n if (typeof this.public !== 'undefined') {\n toReturn['public'] = this.public;\n }\n return toReturn;\n }\n}\nfunction enumStringToValue(enumRef, value) {\n if (typeof value === 'number') {\n return value;\n }\n return enumRef[value];\n}\nclass StartManualAutomationsRequestStartAutomationCriteria {\n static fromProto(proto) {\n let m = new StartManualAutomationsRequestStartAutomationCriteria();\n m = Object.assign(m, proto);\n if (proto.filters) {\n m.filters = FilterGroup.fromProto(proto.filters);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.namespace !== 'undefined') {\n toReturn['namespace'] = this.namespace;\n }\n if (typeof this.objectType !== 'undefined') {\n toReturn['objectType'] = this.objectType;\n }\n if (typeof this.searchTerm !== 'undefined') {\n toReturn['searchTerm'] = this.searchTerm;\n }\n if (typeof this.filters !== 'undefined' && this.filters !== null) {\n toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;\n }\n return toReturn;\n }\n}\nclass StartManualAutomationsRequestStartAutomationPayload {\n static fromProto(proto) {\n let m = new StartManualAutomationsRequestStartAutomationPayload();\n m = Object.assign(m, proto);\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.data !== 'undefined') {\n toReturn['data'] = this.data;\n }\n return toReturn;\n }\n}\nclass StartManualAutomationsRequest {\n static fromProto(proto) {\n let m = new StartManualAutomationsRequest();\n m = Object.assign(m, proto);\n if (proto.payload) {\n m.payload = StartManualAutomationsRequestStartAutomationPayload.fromProto(proto.payload);\n }\n if (proto.criteria) {\n m.criteria = StartManualAutomationsRequestStartAutomationCriteria.fromProto(proto.criteria);\n }\n return m;\n }\n constructor(kwargs) {\n if (!kwargs) {\n return;\n }\n Object.assign(this, kwargs);\n }\n toApiJson() {\n const toReturn = {};\n if (typeof this.automationId !== 'undefined') {\n toReturn['automationId'] = this.automationId;\n }\n if (typeof this.payload !== 'undefined' && this.payload !== null) {\n toReturn['payload'] = 'toApiJson' in this.payload ? this.payload.toApiJson() : this.payload;\n }\n if (typeof this.criteria !== 'undefined' && this.criteria !== null) {\n toReturn['criteria'] = 'toApiJson' in this.criteria ? this.criteria.toApiJson() : this.criteria;\n }\n return toReturn;\n }\n}\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Objects Index.\n// *********************************\n\nconst environment = (window ? window['environment'] : 'prod') ?? 'prod';\nconst hostMap = {\n 'local': 'crm-integrations-api.vendasta-local.com',\n 'test': '',\n 'demo': 'crm-integrations-demo.apigateway.co',\n 'prod': 'crm-integrations-prod.apigateway.co',\n 'production': 'crm-integrations-prod.apigateway.co'\n};\nlet HostService = /*#__PURE__*/(() => {\n class HostService {\n get host() {\n return hostMap[environment.toLowerCase()];\n }\n get hostWithScheme() {\n return 'https://' + this.host;\n }\n }\n HostService.ɵfac = function HostService_Factory(t) {\n return new (t || HostService)();\n };\n HostService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: HostService,\n factory: HostService.ɵfac,\n providedIn: 'root'\n });\n return HostService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet CrmAutomationApiService = /*#__PURE__*/(() => {\n class CrmAutomationApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n startManualAutomations(r) {\n const request = r.toApiJson ? r : new StartManualAutomationsRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.CrmAutomationService/StartManualAutomations\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n CrmAutomationApiService.ɵfac = function CrmAutomationApiService_Factory(t) {\n return new (t || CrmAutomationApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n CrmAutomationApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: CrmAutomationApiService,\n factory: CrmAutomationApiService.ɵfac,\n providedIn: 'root'\n });\n return CrmAutomationApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet DataIngestionApiService = /*#__PURE__*/(() => {\n class DataIngestionApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n upsertObject(r) {\n const request = r.toApiJson ? r : new UpsertObjectRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.DataIngestionService/UpsertObject\", request.toApiJson(), this.apiOptions()).pipe(map(resp => UpsertObjectResponse.fromProto(resp)));\n }\n deleteObject(r) {\n const request = r.toApiJson ? r : new DeleteObjectRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.DataIngestionService/DeleteObject\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n importFromJson(r) {\n const request = r.toApiJson ? r : new ImportFromJSONRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.DataIngestionService/ImportFromJSON\", request.toApiJson(), this.apiOptions()).pipe(map(resp => ImportFromJSONResponse.fromProto(resp)));\n }\n }\n DataIngestionApiService.ɵfac = function DataIngestionApiService_Factory(t) {\n return new (t || DataIngestionApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n DataIngestionApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: DataIngestionApiService,\n factory: DataIngestionApiService.ɵfac,\n providedIn: 'root'\n });\n return DataIngestionApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet IntegrationApiService = /*#__PURE__*/(() => {\n class IntegrationApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n createIntegration(r) {\n const request = r.toApiJson ? r : new CreateIntegrationRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.IntegrationService/CreateIntegration\", request.toApiJson(), this.apiOptions()).pipe(map(resp => CreateIntegrationResponse.fromProto(resp)));\n }\n updateIntegration(r) {\n const request = r.toApiJson ? r : new UpdateIntegrationRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.IntegrationService/UpdateIntegration\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n deleteIntegration(r) {\n const request = r.toApiJson ? r : new DeleteIntegrationRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.IntegrationService/DeleteIntegration\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getMultiIntegration(r) {\n const request = r.toApiJson ? r : new GetMultiIntegrationRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.IntegrationService/GetMultiIntegration\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetMultiIntegrationResponse.fromProto(resp)));\n }\n }\n IntegrationApiService.ɵfac = function IntegrationApiService_Factory(t) {\n return new (t || IntegrationApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n IntegrationApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: IntegrationApiService,\n factory: IntegrationApiService.ɵfac,\n providedIn: 'root'\n });\n return IntegrationApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// API Service.\n// *********************************\nlet PlatformApiService = /*#__PURE__*/(() => {\n class PlatformApiService {\n constructor(http, hostService) {\n this.http = http;\n this.hostService = hostService;\n this._host = this.hostService.hostWithScheme;\n }\n apiOptions() {\n return {\n headers: new HttpHeaders({\n 'Content-Type': 'application/json'\n }),\n withCredentials: true\n };\n }\n createAccountGroupForCompany(r) {\n const request = r.toApiJson ? r : new CreateAccountGroupForCompanyRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/CreateAccountGroupForCompany\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n getCreateAccountGroupForCompanyStatus(r) {\n const request = r.toApiJson ? r : new GetCreateAccountGroupForCompanyStatusRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/GetCreateAccountGroupForCompanyStatus\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetCreateAccountGroupForCompanyStatusResponse.fromProto(resp)));\n }\n getAccountGroupForCompany(r) {\n const request = r.toApiJson ? r : new GetAccountGroupForCompanyRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/GetAccountGroupForCompany\", request.toApiJson(), this.apiOptions()).pipe(map(resp => GetAccountGroupForCompanyResponse.fromProto(resp)));\n }\n addContactAsIamUserForCompany(r) {\n const request = r.toApiJson ? r : new AddContactAsIamUserForCompanyRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/AddContactAsIamUserForCompany\", request.toApiJson(), this.apiOptions()).pipe(map(resp => AddContactAsIamUserForCompanyStatusResponse.fromProto(resp)));\n }\n isContactIamUserForCompany(r) {\n const request = r.toApiJson ? r : new IsContactIamUserForCompanyRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/IsContactIamUserForCompany\", request.toApiJson(), this.apiOptions()).pipe(map(resp => IsContactIamUserForCompanyResponse.fromProto(resp)));\n }\n removeContactAsIamUserForCompany(r) {\n const request = r.toApiJson ? r : new RemoveContactAsIamUserForCompanyRequest(r);\n return this.http.post(this._host + \"/crm_integrations.v1.PlatformService/RemoveContactAsIamUserForCompany\", request.toApiJson(), {\n ...this.apiOptions(),\n observe: 'response'\n });\n }\n }\n PlatformApiService.ɵfac = function PlatformApiService_Factory(t) {\n return new (t || PlatformApiService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(HostService));\n };\n PlatformApiService.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: PlatformApiService,\n factory: PlatformApiService.ɵfac,\n providedIn: 'root'\n });\n return PlatformApiService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n// *********************************\n// Code generated by sdkgen\n// DO NOT EDIT!.\n//\n// Index.\n// *********************************\n\n// MANUALLY CREATED FILE\n// Don't delete this by mistake when you update the SDK with mscli!\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { Access, AddContactAsIamUserForCompanyRequest, AddContactAsIamUserForCompanyStatus, AddContactAsIamUserForCompanyStatusResponse, ArchiveFieldSchemaRequest, CreateAccountGroupForCompanyRequest, CreateAccountGroupForCompanyStatus, CreateCrmObjectRequest, CreateCrmObjectResponse, CreateFieldSchemaRequest, CreateFieldSchemaResponse, CreateIntegrationRequest, CreateIntegrationResponse, CrmAutomationApiService, CrmObject, CrmObjectSearch, DataIngestionApiService, DateDefault, DeleteCrmObjectRequest, DeleteIntegrationRequest, DeleteObjectRequest, DropdownOption, FieldMapping, FieldMask, FieldSchema, FieldType, FieldValue, Filter, FilterGroup, FilterGroupOperator, FilterOperator, FilterType, FilterValue, Geopoint, GetAccountGroupForCompanyRequest, GetAccountGroupForCompanyResponse, GetCreateAccountGroupForCompanyStatusRequest, GetCreateAccountGroupForCompanyStatusResponse, GetMultiCrmObjectRequest, GetMultiCrmObjectResponse, GetMultiFieldSchemaRequest, GetMultiFieldSchemaResponse, GetMultiIntegrationRequest, GetMultiIntegrationResponse, HostService, ImportFromJSONRequest, ImportFromJSONResponse, Integration, IntegrationApiService, IsContactIamUserForCompanyRequest, IsContactIamUserForCompanyResponse, ListCrmObjectsRequest, ListCrmObjectsResponse, ListFieldOptionsRequest, ListFieldOptionsResponse, ListFieldSchemaRequest, ListFieldSchemaRequestFilters, ListFieldSchemaResponse, MappingType, MergeStrategy, MergeStrategyMergeConfig, MergeStrategyMergeConfigDateOverwriteConfig, MergeStrategyType, NestedIntegration, NullValue, PagedRequestOptions, PagedResponseMetadata, PlatformApiService, RemoveContactAsIamUserForCompanyRequest, SortBy, SortDirection, StartBulkCompanyCreateRequest, StartBulkCompanyCreateResponse, StartManualAutomationsRequest, StartManualAutomationsRequestStartAutomationCriteria, StartManualAutomationsRequestStartAutomationPayload, StringList, UnarchiveFieldSchemaRequest, UpdateCrmObjectRequest, UpdateFieldSchemaRequest, UpdateIntegrationRequest, UpsertObjectRequest, UpsertObjectResponse, UpsertObjectResponseMultiIngestionResponse, UpsertObjectResponseMultiIngestionResult, UpsertObjectResponseNestedObject, ValidateCrmObjectRequest, ValidateCrmObjectResponse, ValidateCrmObjectResponseFieldUniqueness, ValidateCrmObjectResponseUniquenessCheck, ValidateCrmObjectResponseValidationError, ValidateCrmObjectResponseValidationErrorDetails, ValidateCrmObjectResponseValidationErrorSeverity, WorkflowStatus };\n","import {\n AddContactAsIamUserForCompanyRequest,\n AddContactAsIamUserForCompanyStatus,\n CreateAccountGroupForCompanyRequest,\n CreateAccountGroupForCompanyStatus,\n GetCreateAccountGroupForCompanyStatusRequest,\n PlatformApiService,\n RemoveContactAsIamUserForCompanyRequest,\n} from '@vendasta/crm-integrations';\nimport { Inject, Injectable } from '@angular/core';\nimport { CrmDependencies, CrmInjectionToken } from '../tokens-and-interfaces';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap, take } from 'rxjs/operators';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { IsContactIamUserForCompanyRequest } from '@vendasta/crm-integrations';\n\nexport interface CompanyAccountGroupStatus {\n status: CreateAccountGroupForCompanyStatus;\n accountGroupId: string;\n}\n\n@Injectable()\nexport class CrmPlatformApiService {\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private platformAPIService: PlatformApiService,\n ) {}\n\n createAccountGroupForCompany(companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n companyId: companyId,\n } as CreateAccountGroupForCompanyRequest;\n return this.platformAPIService.createAccountGroupForCompany(request);\n }),\n map((response) => response.ok),\n take(1),\n );\n }\n\n getCreateAccountGroupForCompanyStatus(companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n companyId: companyId,\n } as GetCreateAccountGroupForCompanyStatusRequest;\n return this.platformAPIService.getCreateAccountGroupForCompanyStatus(request);\n }),\n map((response) => {\n return { status: response.status, accountGroupId: response.accountGroupId };\n }),\n take(1),\n );\n }\n\n getAccountGroupForCompany(companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n companyId: companyId,\n } as GetCreateAccountGroupForCompanyStatusRequest;\n return this.platformAPIService.getAccountGroupForCompany(request);\n }),\n map((response) => response.accountGroupId),\n take(1),\n );\n }\n\n addContactAsIamUserForCompany(contactId: string, companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n contactId: contactId,\n companyId: companyId,\n } as AddContactAsIamUserForCompanyRequest;\n return this.platformAPIService.addContactAsIamUserForCompany(request);\n }),\n catchError((error) => {\n return of(error);\n }),\n map((response) => {\n if (response instanceof HttpErrorResponse) {\n return null;\n }\n return response.status;\n }),\n take(1),\n );\n }\n\n removeContactAsIamUserForCompany(contactId: string, companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n contactId: contactId,\n companyId: companyId,\n } as RemoveContactAsIamUserForCompanyRequest;\n return this.platformAPIService.removeContactAsIamUserForCompany(request);\n }),\n map((response) => response.ok),\n take(1),\n );\n }\n\n isContactIamUserForCompany(contactId: string, companyId: string): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n const request = {\n namespace: namespace,\n contactId: contactId,\n companyId: companyId,\n } as IsContactIamUserForCompanyRequest;\n return this.platformAPIService.isContactIamUserForCompany(request);\n }),\n map((response) => {\n return !!response.isIamUser;\n }),\n take(1),\n );\n }\n}\n","import { Inject, Injectable, signal } from '@angular/core';\nimport { EMPTY, Observable, retry, take } from 'rxjs';\nimport { CrmInjectionToken, CrmDependencies, ProfileCard } from '../tokens-and-interfaces';\nimport { SNACKBAR_DURATION } from '../constants';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CreateAccountGroupForCompanyStatus } from '@vendasta/crm-integrations';\nimport { CompanyAccountGroupStatus } from './platform-api.service';\nimport { CrmPlatformApiService } from './platform-api.service';\n\n@Injectable()\nexport class CompanyProfileCardsPanelService {\n public readonly companyProfileCards$: Observable;\n public loadingAccountGroup = signal(false);\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private platformAPIService: CrmPlatformApiService,\n private snackbarService: SnackbarService,\n ) {\n this.companyProfileCards$ = this.config.company?.profileCards$ ?? EMPTY;\n }\n\n justInTimeAccountGroupCreation(companyId: string, afterCreatedCallback: (accountGroupId: string) => void): void {\n this.loadingAccountGroup.set(true);\n this.createAccountGroupForCompany(companyId)\n .pipe(take(1))\n .subscribe({\n next: (accountGroupId) => {\n if (accountGroupId.length > 0) {\n afterCreatedCallback(accountGroupId);\n }\n this.loadingAccountGroup.set(false);\n },\n error: () => {\n this.snackbarService.openErrorSnack('ASSOCIATIONS.COMPANY.ERROR', {\n duration: SNACKBAR_DURATION,\n });\n this.loadingAccountGroup.set(false);\n },\n });\n }\n\n //todo: make private function.\n createAccountGroupForCompany(companyId: string): Observable {\n return this.platformAPIService.createAccountGroupForCompany(companyId).pipe(\n switchMap(() => this.waitForAccountGroupUpdate(companyId)),\n map((accountStatus) => {\n if (\n accountStatus.status === CreateAccountGroupForCompanyStatus.CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_SUCCEEDED\n ) {\n return accountStatus.accountGroupId;\n } else {\n throw new Error('Failed to create account group for company');\n }\n }),\n );\n }\n\n private waitForAccountGroupUpdate(companyId: string): Observable {\n return this.platformAPIService.getCreateAccountGroupForCompanyStatus(companyId).pipe(\n map((accountStatus) => {\n if (\n accountStatus.status === CreateAccountGroupForCompanyStatus.CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_SUCCEEDED\n ) {\n // success. Stop retrying.\n return { status: accountStatus.status, accountGroupId: accountStatus.accountGroupId };\n } else if (\n accountStatus.status === CreateAccountGroupForCompanyStatus.CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_FAILED\n ) {\n // failure. Stop retrying.\n return { status: accountStatus.status, accountGroupId: '' };\n }\n // throw error to poll again\n throw false;\n }),\n retry({ delay: 1000 }),\n );\n }\n}\n","import { Component, DestroyRef, EventEmitter, Input, Output, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CrmAssociationService } from '../../../shared-services/crm-services/crm-object-service/crm-association.service';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { GalaxyTagsModule } from '@vendasta/galaxy/tags';\nimport { catchError, debounceTime, map, Observable, of, switchMap, tap } from 'rxjs';\nimport { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { GalaxyFormFieldModule } from '@vendasta/galaxy/form-field';\nimport { DEFAULT_TAG_SEARCH_SIZE, RESERVED_TAGS, SEARCH_DEBOUNCE_MS } from '../../../constants';\n\n@Component({\n selector: 'crm-edit-association-tags',\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n MatDialogModule,\n MatButtonModule,\n GalaxyTagsModule,\n ReactiveFormsModule,\n GalaxyFormFieldModule,\n ],\n templateUrl: './edit-association-tags.component.html',\n styleUrls: ['./edit-association-tags.component.scss'],\n})\nexport class EditAssociationTagsComponent {\n @Input() set tags(tags: string[]) {\n this.tagsControl.setValue(tags);\n }\n @Input({ required: true }) associationType: string;\n @Output() tagsChanged = new EventEmitter();\n\n tagsControl = new FormControl([]);\n\n searchTextChanged = signal('');\n filteredTags$ = toObservable(this.searchTextChanged).pipe(\n takeUntilDestroyed(this.destroyRef),\n debounceTime(SEARCH_DEBOUNCE_MS),\n switchMap((searchText) => this.listTags(searchText)),\n catchError(() => {\n return of([]);\n }),\n map((tags) => {\n return tags.filter((tag) => !RESERVED_TAGS.includes(tag?.toLowerCase()));\n }),\n );\n\n constructor(private readonly destroyRef: DestroyRef, private readonly crmAssociationService: CrmAssociationService) {\n this.tagsControl.valueChanges\n .pipe(\n takeUntilDestroyed(),\n tap((tags) => this.tagsChanged.emit(tags)),\n )\n .subscribe();\n }\n\n private listTags(value: string): Observable {\n return this.crmAssociationService.listAssociationFieldOptions(\n this.associationType,\n 'tags',\n DEFAULT_TAG_SEARCH_SIZE,\n value,\n );\n }\n}\n","\n {{ 'ASSOCIATIONS.MODAL.TITLE_TAGS' | translate }}\n {{ 'ASSOCIATIONS.MODAL.DESCRIPTION_TAGS' | translate }}\n \n\n","import { Component, Inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { CrmAssociationService } from '../../../shared-services/crm-services/crm-object-service/crm-association.service';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EditAssociationTagsComponent } from '../edit-association-tags/edit-association-tags.component';\nimport { map, switchMap } from 'rxjs';\nimport { PRIMARY_TAG, RESERVED_TAGS, SNACKBAR_DURATION } from '../../../constants';\n\nexport interface EditAssociationData {\n associationId: string;\n associationName: string;\n}\n\n@Component({\n selector: 'crm-edit-association-dialog',\n standalone: true,\n imports: [CommonModule, TranslateModule, MatDialogModule, MatButtonModule, EditAssociationTagsComponent],\n templateUrl: './edit-association-dialog.component.html',\n styleUrls: ['./edit-association-dialog.component.scss'],\n})\nexport class EditAssociationDialogComponent {\n private initialAssociation$ = this.crmAssociationService.getAssociation(this.data.associationId);\n private isPrimary$ = this.initialAssociation$.pipe(\n map((association) => (association?.tags ?? []).map((tag) => tag?.tagValue ?? '').filter((tag) => tag)),\n map((tags) => tags.includes(PRIMARY_TAG)),\n );\n initialTags$ = this.initialAssociation$.pipe(\n map((association) => (association?.tags ?? []).map((tag) => tag?.tagValue ?? '').filter((tag) => tag)),\n map((tags) => tags.filter((t) => !RESERVED_TAGS.includes(t.toLowerCase()))),\n );\n associationType$ = this.initialAssociation$.pipe(map((association) => association?.associationType ?? ''));\n tagsToSave: string[] = [];\n\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: EditAssociationData,\n private readonly crmAssociationService: CrmAssociationService,\n private readonly snackService: SnackbarService,\n ) {}\n\n save(): void {\n this.isPrimary$\n .pipe(\n switchMap((isPrimary) => {\n let tagsToSave = [...this.tagsToSave];\n if (isPrimary) {\n tagsToSave = [PRIMARY_TAG, ...tagsToSave];\n }\n return this.crmAssociationService.updateAssociationTags(this.data.associationId, tagsToSave);\n }),\n )\n .subscribe({\n next: () => {\n this.snackService.openSuccessSnack('ASSOCIATIONS.EDIT_ASSOCIATION_DIALOG.SUCCESS', {\n duration: SNACKBAR_DURATION,\n });\n this.dialogRef.close(true);\n },\n error: () => {\n this.snackService.openErrorSnack('ASSOCIATIONS.EDIT_ASSOCIATION_DIALOG.ERROR', {\n duration: SNACKBAR_DURATION,\n });\n },\n });\n }\n\n cancel(): void {\n this.dialogRef?.close();\n }\n\n tagsChanged(tags: string[]): void {\n this.tagsToSave = (tags || []).slice();\n }\n}\n","

\n {{ 'ASSOCIATIONS.EDIT_ASSOCIATION_DIALOG.TITLE' | translate }}\n

\n\n

{{ data.associationName }}

\n \n \n \n
\n\n \n \n\n","import { Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport {\n EditAssociationData,\n EditAssociationDialogComponent,\n} from '../shared-components/association-panel-components/edit-association-dialog/edit-association-dialog.component';\nimport { Association, CrmAssociationService } from './crm-services/crm-object-service/crm-association.service';\nimport { CrmObjectService } from './crm-services/crm-object-service/crm-object.service';\nimport { Observable, switchMap, of, map, combineLatest, shareReplay } from 'rxjs';\nimport { CardData } from '../tokens-and-interfaces';\n\nexport function combineAssociationsWithChanges(associations: Association[], changes: Association[]): Association[] {\n const combinedData = [...associations];\n for (const updatedAssociation of changes) {\n const updatedAssociationIndex = combinedData.findIndex((a) => a.associationId === updatedAssociation.associationId);\n if (updatedAssociationIndex > -1) {\n combinedData[updatedAssociationIndex] = updatedAssociation;\n }\n }\n return [...combinedData];\n}\n\n@Injectable()\nexport class DefaultAssociationActionsService {\n constructor(\n private readonly dialog: MatDialog,\n private readonly associationService: CrmAssociationService,\n private readonly objectService: CrmObjectService,\n ) {}\n\n reloadAssociations(cardData: CardData): Observable {\n const association$ = this.associationService.getAssociation(cardData.associationId ?? '').pipe(shareReplay(1));\n const crmObject$ = association$.pipe(\n switchMap((association) => {\n switch (cardData.type) {\n case 'business':\n return this.objectService.getMultiObject('Company', [association.toId]);\n case 'user':\n return this.objectService.getMultiObject('Contact', [association.fromId]);\n default:\n return of({ crmObjects: [] });\n }\n }),\n map((response) => response?.crmObjects?.length > 0 && response.crmObjects[0]),\n );\n\n return combineLatest([association$, crmObject$]).pipe(\n map(([association, crmObject]) => ({\n associationId: association.associationId,\n associationType: association.associationType,\n tags: (association?.tags || []).map((tag) => tag.tagValue),\n associatedObject: crmObject,\n })),\n );\n }\n\n editTagsAction(cardData: CardData): Observable {\n let associationName = '';\n if (cardData.type === 'business') {\n associationName = cardData.businessName ?? '';\n } else if (cardData.type === 'user') {\n associationName = cardData.userName ?? '';\n }\n const dialogRef = this.dialog.open(EditAssociationDialogComponent, {\n data: {\n associationId: cardData.associationId,\n associationName: associationName,\n } as EditAssociationData,\n width: '500px',\n });\n return dialogRef.afterClosed().pipe(\n switchMap((success) => {\n if (success) {\n // associations have to be reloaded because list endpoint does not\n // immediately return the tags\n return this.reloadAssociations(cardData);\n }\n return of(null);\n }),\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CrmObjectInterface } from '@vendasta/crm';\nimport { BehaviorSubject } from 'rxjs';\nimport { ObjectType } from '../tokens-and-interfaces';\nimport { SystemFieldIds } from '../shared-services/crm-services/field.service';\n\n@Injectable()\nexport class PreviewObjectService {\n private previewCrmObject$$: BehaviorSubject =\n new BehaviorSubject(null);\n\n private createDatesForPreview(previewObject: CrmObjectInterface, objectType: ObjectType): void {\n let objectCreatedFieldId: string;\n let objectUpdatedFieldId: string;\n switch (objectType) {\n case 'Contact':\n objectCreatedFieldId = SystemFieldIds.ContactCreated;\n objectUpdatedFieldId = SystemFieldIds.ContactUpdated;\n break;\n case 'Company':\n objectCreatedFieldId = SystemFieldIds.CompanyCreated;\n objectUpdatedFieldId = SystemFieldIds.CompanyUpdated;\n break;\n }\n\n // guarantee preview object will show proper dates for updated/created columns\n const createdDateIndex = previewObject.fields?.findIndex((f) => f.fieldId === objectCreatedFieldId) || -1;\n const updatedDateIndex = previewObject.fields?.findIndex((f) => f.fieldId === objectUpdatedFieldId) || -1;\n if (\n createdDateIndex !== -1 &&\n !!previewObject?.fields &&\n previewObject?.fields[createdDateIndex]?.dateValue === null\n ) {\n previewObject.fields[createdDateIndex].dateValue = new Date();\n } else if (createdDateIndex === -1 && !!previewObject?.fields) {\n previewObject.fields.push({\n fieldId: SystemFieldIds.ContactCreated,\n externalId: SystemFieldIds.ContactCreated,\n dateValue: new Date(),\n });\n }\n if (\n updatedDateIndex !== -1 &&\n !!previewObject?.fields &&\n previewObject?.fields[updatedDateIndex]?.dateValue === null\n ) {\n previewObject.fields[updatedDateIndex].dateValue = new Date();\n } else if (updatedDateIndex === -1 && !!previewObject?.fields) {\n previewObject.fields.push({\n fieldId: SystemFieldIds.ContactUpdated,\n externalId: SystemFieldIds.ContactUpdated,\n dateValue: new Date(),\n });\n }\n }\n\n setPreviewCrmObject(previewObject: CrmObjectInterface | null, objectType: ObjectType): void {\n if (previewObject === null) {\n this.previewCrmObject$$.next(null);\n return;\n }\n this.createDatesForPreview(previewObject, objectType);\n\n // do a deep copy of the object, only adding the ID if necessary\n const deepCopyObject: CrmObjectInterface = JSON.parse(JSON.stringify(previewObject));\n this.previewCrmObject$$.next(deepCopyObject);\n }\n\n clearPreview(): void {\n this.previewCrmObject$$.next(null);\n }\n\n withPreview(crmObjects: CrmObjectInterface[]): CrmObjectInterface[] {\n const crmObjectsCopy = [...crmObjects];\n this.applyCrmObjectPreview(crmObjectsCopy);\n return crmObjectsCopy;\n }\n\n private applyCrmObjectPreview(crmObjects: CrmObjectInterface[]): void {\n const previewCrmObject = this.previewCrmObject$$.getValue();\n if (previewCrmObject === null) {\n return;\n }\n\n // don't display the preview and (stale / already returned) value at the same time\n const existsAlreadyAtIndex = crmObjects.findIndex((obj) => obj.crmObjectId === previewCrmObject.crmObjectId);\n if (existsAlreadyAtIndex !== -1) {\n crmObjects.splice(existsAlreadyAtIndex, 1);\n }\n\n // show the preview at the top of the table\n crmObjects.unshift(previewCrmObject);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { Properties } from 'posthog-js';\nimport { ObjectType } from '../tokens-and-interfaces';\n\n@Injectable()\nexport class CRMTrackingService {\n private eventName = 'crm';\n\n constructor(private readonly trackingService: ProductAnalyticsService) {}\n\n trackEvent(objectType: ObjectType, action: string, properties?: Properties): void {\n this.trackingService.trackEvent(\n this.eventName,\n `${this.eventName}-${objectType?.toLowerCase()}`,\n action,\n 0,\n properties,\n );\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { WhitelabelService } from '@galaxy/partner';\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\nimport { CrmDependencies, CrmInjectionToken } from '../tokens-and-interfaces';\n\n@Injectable()\nexport class BrandingService {\n constructor(\n private readonly whiteLabelService: WhitelabelService,\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n ) {}\n\n getBusinessAppName(): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n return this.whiteLabelService.getBranding(namespace);\n }),\n map((branding) => branding?.apps['VBC']?.name),\n catchError((err) => {\n console.error(err);\n return of('');\n }),\n );\n }\n}\n","import { TemplatePortal, ComponentPortal, DomPortal } from '@angular/cdk/portal';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\nexport type Portal = TemplatePortal | ComponentPortal | DomPortal;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidePanelContentService {\n private activePortal$$ = new ReplaySubject(1);\n\n setContent(content: Portal) {\n this.activePortal$$.next(content);\n }\n\n getContent(): Observable {\n return this.activePortal$$.asObservable();\n }\n\n clearContent(): void {\n this.activePortal$$.next(null);\n }\n}\n","import { BehaviorSubject, catchError, Observable, of } from 'rxjs';\nimport { CrmObjectInterface, ListCrmObjectsRequestInterface, ListCrmObjectsResponseInterface } from '@vendasta/crm';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CrmInjectionToken, CrmDependencies } from '../tokens-and-interfaces';\nimport { CrmObjectService } from './crm-services/crm-object-service/crm-object.service';\nimport { CrmFieldService, StandardIds } from './crm-services/field.service';\nimport { Inject, Injectable } from '@angular/core';\n\nexport interface CompanyDisplayName extends CrmObjectInterface {\n displayName: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CompanyFiltersService {\n searchTerm$$: BehaviorSubject = new BehaviorSubject('');\n\n constructor(\n private crmObjectService: CrmObjectService,\n private crmFieldService: CrmFieldService,\n @Inject(CrmInjectionToken) private readonly crmConfig: CrmDependencies,\n ) {}\n\n private listObjects(\n namespace: string,\n cursor: string,\n pageSize: number,\n search: string,\n ): Observable {\n const request: ListCrmObjectsRequestInterface = {\n namespace: namespace,\n pagingOptions: {\n cursor: cursor,\n pageSize: pageSize,\n },\n search: {\n searchTerm: search,\n },\n };\n return this.crmObjectService.listObjects('Company', request);\n }\n\n listReadableCompanies(searchTerm: string): Observable {\n return this.crmConfig.namespace$.pipe(\n switchMap((namespace) => this.listObjects(namespace, '', 10, searchTerm)),\n map((response) => this.getReadableParentCompanies(response.crmObjects || [])),\n catchError((error) => {\n console.error(error);\n return of([]);\n }),\n );\n }\n\n getReadableParentCompanies = (parentCompanies: CrmObjectInterface[]): CompanyDisplayName[] =>\n parentCompanies.map(\n (company) =>\n ({\n ...company,\n displayName: this.crmFieldService.getFieldValueFromCrmObject(company, StandardIds.CompanyName)?.stringValue,\n } as CompanyDisplayName),\n );\n\n getMultiCompany(companyIds: string[]): Observable {\n return this.crmObjectService.getMultiObject('Company', companyIds).pipe(\n map((response) => {\n if (!response || response?.crmObjects?.length === 0 || !response?.crmObjects?.[0].crmObjectId) {\n return {} as CompanyDisplayName[];\n }\n let crmObj: CrmObjectInterface[] = [];\n for (const crmObject of response.crmObjects) {\n crmObj = [...crmObj, crmObject];\n }\n return this.getReadableParentCompanies(crmObj);\n }),\n );\n }\n}\n","import { User } from '@vendasta/iamv2';\nimport { UserWithDisplayName } from './tokens-and-interfaces';\nimport { GalaxyDateDefault, GalaxyFilterInterface, GalaxyFilterOperator } from '@vendasta/galaxy/filter/chips';\nimport {\n FilterGroupInterface,\n FilterValueInterface,\n} from '@vendasta/crm/lib/_internal/interfaces/galaxy-filters.interface';\nimport { DateDefault, FilterGroupOperator, FilterInterface, FilterOperator } from '@vendasta/crm';\n\nexport function userFilterFn(user: UserWithDisplayName, searchTerm: string): boolean {\n searchTerm = searchTerm?.toLowerCase();\n const includesFullName = user.displayName.toLowerCase().includes(searchTerm);\n const includesFirstName = user.firstName.toLowerCase().includes(searchTerm);\n const includesLastName = user.lastName.toLowerCase().includes(searchTerm);\n const includesUserId = user.userId.toLowerCase().includes(searchTerm);\n const includesEmail = user.email.toLowerCase().includes(searchTerm);\n return includesFullName || includesFirstName || includesLastName || includesUserId || includesEmail;\n}\n\nexport function convertToReadableUsers(users: User[]): UserWithDisplayName[] {\n return users.map(\n (user) =>\n ({\n ...user,\n displayName: `${user?.firstName ?? ''} ${user?.lastName ?? ''}`.trim() ?? user?.userId,\n }) as UserWithDisplayName,\n );\n}\n\nexport function convertGalaxyFilters(filters: GalaxyFilterInterface[] | undefined): FilterGroupInterface | undefined {\n if (!filters) {\n return undefined;\n }\n const filterGroup = {} as FilterGroupInterface;\n filterGroup.operator = FilterGroupOperator.FILTER_GROUP_OPERATOR_AND;\n filterGroup.filters = [];\n filters.forEach((inputFilter) => {\n if (!inputFilter.fieldId || !inputFilter.operator) {\n return;\n }\n const filterOperator: FilterOperator = inputFilter.operator\n ? FilterOperator[GalaxyFilterOperator[inputFilter.operator]]\n : undefined;\n const filterGroupFilter: FilterInterface = {\n fieldId: inputFilter.fieldId,\n operator: filterOperator,\n values: [],\n floatTolerance: inputFilter.floatTolerance,\n };\n filterGroupFilter.values = inputFilter.values?.map((v) => {\n const dateDefault: DateDefault = v.dateDefault ? DateDefault[GalaxyDateDefault[v.dateDefault]] : undefined;\n return {\n boolean: v.boolean,\n integer: v.integer,\n string: v.string,\n date: v.date,\n dateDefault: dateDefault,\n float: v.float,\n } as FilterValueInterface;\n });\n filterGroup.filters?.push(filterGroupFilter);\n });\n return filterGroup;\n}\n","import { IAMService, User, UserIdentifier } from '@vendasta/iamv2';\nimport { Inject, Injectable } from '@angular/core';\nimport { combineLatest, map, Observable, of, ReplaySubject } from 'rxjs';\nimport { CrmObjectService, SystemFieldIds } from './crm-services';\nimport { CrmDependencies, CrmInjectionToken, UserWithDisplayName } from '../tokens-and-interfaces';\nimport { convertToReadableUsers } from '../utils';\nimport { catchError, filter, shareReplay, switchMap } from 'rxjs/operators';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable()\nexport class ActivityAssigneeService {\n private readonly allUsers$$: ReplaySubject = new ReplaySubject(1);\n public readonly allUsers$ = this.allUsers$$.asObservable();\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n @Inject(IAMService) private readonly iamService: IAMService,\n private readonly crmObjectService: CrmObjectService,\n ) {\n this.config.namespace$\n .pipe(\n filter((id) => !!id),\n takeUntilDestroyed(),\n switchMap((namespace) =>\n this.crmObjectService.listFieldOptions('Activity', {\n namespace: namespace,\n fieldId: SystemFieldIds.ActivityOwnerID,\n pageSize: 100,\n }),\n ),\n map((resp) => resp.options ?? []),\n map((userIds) => userIds.map((userId) => new UserIdentifier({ userId }))),\n switchMap((userIds) => this.iamService.getMultiUsers(userIds)),\n map((users) => convertToReadableUsers(users)),\n catchError((error) => {\n console.error(error);\n return of([]);\n }),\n )\n .subscribe((users) => this.allUsers$$.next(users));\n }\n\n getMultiUsers(userIds: string[]): Observable {\n const cachedUser$ = this.allUsers$.pipe(\n map((users) => {\n const userHashMap = new Map();\n userIds.forEach((userId) =>\n userHashMap.set(\n userId,\n users.find((u) => u.userId === userId),\n ),\n );\n return userHashMap;\n }),\n shareReplay(1),\n );\n\n const fetchedMissingUsers$ = cachedUser$.pipe(\n map((cachedUsers) => userIds.filter((userId) => cachedUsers.get(userId) === undefined)),\n switchMap((idsToGet) => {\n if (idsToGet.length === 0) {\n return of([] as User[]);\n }\n return this.iamService.getMultiUsers(idsToGet.map((userId) => new UserIdentifier({ userId })));\n }),\n catchError((error) => {\n console.error(error);\n return of([] as User[]);\n }),\n map((users) => convertToReadableUsers(users)),\n );\n\n return combineLatest([cachedUser$, fetchedMissingUsers$]).pipe(\n map(([cachedUsers, fetchedUsers]) => {\n fetchedUsers.forEach((user) => cachedUsers.set(user.userId, user));\n return [...cachedUsers.values()].filter(Boolean) as UserWithDisplayName[];\n }),\n );\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BlankValueComponent, CustomCellComponent } from '@vendasta/galaxy/table';\nimport { ActivityInterface, FieldMaskInterface, FieldValueInterface } from '@vendasta/crm';\nimport { GalaxyPipesModule } from '@vendasta/galaxy/pipes';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { firstValueFrom } from 'rxjs';\nimport { SnackbarService } from '@vendasta/galaxy/snackbar-service';\nimport { ActivityService } from '../../../shared-services/crm-services/activity.service';\nimport { ActivityTaskStatus } from '../../../tokens-and-interfaces';\nimport { MatButtonModule } from '@angular/material/button';\nimport { ProductAnalyticsService } from '@vendasta/product-analytics';\nimport { StandardIds, SystemFieldIds } from '../../../shared-services';\n\n@Component({\n template: `\n \n `,\n standalone: true,\n styleUrls: ['./task-status.component.scss'],\n imports: [CommonModule, BlankValueComponent, GalaxyPipesModule, TranslateModule, MatIconModule, MatButtonModule],\n})\nexport class TaskStatusCellComponent extends CustomCellComponent {\n protected taskOpen = false;\n private activityId = '';\n private readonly activitySubtype = 'Task';\n private readonly analyticsService = inject(ProductAnalyticsService);\n set value(newValues: (FieldValueInterface | null)[]) {\n const statusField = newValues.filter(Boolean).find((field) => field?.fieldId === StandardIds.ActivityTaskStatus);\n this.taskOpen = statusField?.stringValue === ActivityTaskStatus.Open;\n const idField = newValues.filter(Boolean).find((field) => field?.fieldId === SystemFieldIds.ActivityID);\n this.activityId = idField?.stringValue || '';\n }\n updateTaskCompletionStatus() {\n const newStatus = this.taskOpen ? ActivityTaskStatus.Completed : ActivityTaskStatus.Open;\n const activity: ActivityInterface = {\n crmObjectId: this.activityId,\n crmObjectSubtype: this.activitySubtype,\n fields: [{ fieldId: StandardIds.ActivityTaskStatus, stringValue: newStatus }],\n };\n const mask: FieldMaskInterface = {\n paths: [StandardIds.ActivityTaskStatus],\n };\n try {\n firstValueFrom(this.activityService.updateActivity(activity, mask)).then(() => {\n this.snack.openSuccessSnack('TASK.STATUS_UPDATE.SUCCESS');\n this.taskOpen = !this.taskOpen;\n });\n } catch {\n this.snack.openErrorSnack('TASK.STATUS_UPDATE.ERROR');\n }\n\n this.analyticsService.trackEvent('task-table-update-status', 'sales-tasks', 'click', 1, {\n status: newStatus,\n });\n }\n\n constructor(private readonly activityService: ActivityService, private readonly snack: SnackbarService) {\n super();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CrmObjectInterface, FieldSchemaInterface, SortByInterface, SortDirection } from '@vendasta/crm';\nimport {\n GalaxyFilterDefinitionInterface,\n GalaxyFilterInterface,\n GalaxyFilterOperator,\n} from '@vendasta/galaxy/filter/chips';\nimport { GalaxyColumnDef } from '@vendasta/galaxy/table';\nimport { Observable, ReplaySubject, combineLatest, firstValueFrom, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ActivityTaskStatus } from '../../tokens-and-interfaces';\nimport { TaskStatusCellComponent } from '../../shared-components/custom-table-cells/task-status/task-status.component';\nimport { CrmInjectionToken, CrmDependencies } from '../../tokens-and-interfaces';\nimport { ActivityTableCustomizationService, ColumnDataInterface } from './_abstract-table-customization.service';\nimport { CrmFieldService, StandardIds, SystemFieldIds, TaskCustomColumns } from '../crm-services/field.service';\n\nconst StatusColumnCell = {\n fieldIds: [StandardIds.ActivityTaskStatus, SystemFieldIds.ActivityID],\n columnDefinition: {\n id: StandardIds.ActivityTaskStatus,\n },\n customCellComponent: TaskStatusCellComponent,\n};\n@Injectable()\nexport class TaskTableCustomizationService extends ActivityTableCustomizationService {\n ownerFilter$$: ReplaySubject = new ReplaySubject(1);\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n protected override readonly crmFieldService: CrmFieldService,\n ) {\n super(crmFieldService);\n }\n\n defaultSortingOptions: SortByInterface[] = [\n {\n fieldId: this.crmFieldService.getFieldId(StandardIds.ActivityTaskDueDate),\n sortDirection: SortDirection.SORT_DIRECTION_ASCENDING,\n },\n ];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n customizeColumns(columns: GalaxyColumnDef[], isMobile: boolean): GalaxyColumnDef[] {\n columns = this.excludeNonTaskColumns(columns);\n const customCells = this.config.task?.tableCustomCells || [];\n customCells.push(StatusColumnCell);\n columns = this.addCustomColumns(\n customCells.map((c) => c.columnDefinition),\n columns,\n );\n columns = this.showBaseColumns(columns);\n columns = this.sortColumns(columns);\n return [...columns];\n }\n\n customizeFilters(filters: GalaxyFilterDefinitionInterface[]): Observable {\n filters = this.excludeNonTaskFilters(filters);\n this.captureInitialFilters(filters);\n const overrides$ = this.config.task?.filterInputOverrides$ ?? of([]);\n return overrides$.pipe(map((overrides) => this.overrideCustomFilters(filters, overrides)));\n }\n\n private captureInitialFilters(filters: GalaxyFilterDefinitionInterface[]) {\n const ownerFilterDefinition = filters.find(\n (f) => f.fieldId === this.crmFieldService.getFieldId(SystemFieldIds.ActivityOwnerID),\n );\n if (ownerFilterDefinition) {\n this.ownerFilter$$.next(ownerFilterDefinition);\n }\n }\n\n async getInitialFilters(): Promise {\n return firstValueFrom(combineLatest([this.ownerFilter$$, this.config.currentUserId$])).then(\n ([filterDefinition, userId]) => {\n return [\n {\n fieldId: filterDefinition.fieldId,\n filterId: 'filterTasksByUser',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: userId,\n },\n ],\n },\n {\n fieldId: this.crmFieldService.getFieldId(StandardIds.ActivityTaskStatus),\n filterId: 'filterTasksByOpenStatus',\n operator: GalaxyFilterOperator.FILTER_OPERATOR_IS,\n values: [\n {\n string: ActivityTaskStatus.Open,\n },\n ],\n },\n ];\n },\n );\n }\n\n customizeRowData(\n crmObject: CrmObjectInterface,\n schemaMap: { [schemaId: string]: FieldSchemaInterface },\n columnData: ColumnDataInterface,\n ) {\n this.customizeDueDateCellData(columnData);\n this.addCustomCells(this.config.task?.tableCustomCells || [], crmObject, columnData);\n }\n\n private customizeDueDateCellData(columnData: ColumnDataInterface): void {\n const cell = columnData[this.crmFieldService.getFieldId(StandardIds.ActivityTaskDueDate)];\n if (cell) {\n cell.cellType = 'timestamp';\n }\n }\n\n private excludeNonTaskColumns(columns: GalaxyColumnDef[]) {\n return columns.filter((c) => this.getTaskFieldIds().includes(c.id));\n }\n\n private excludeNonTaskFilters(filters: GalaxyFilterDefinitionInterface[]) {\n return filters.filter((f) => f.fieldId && this.getTaskFieldIds().includes(f.fieldId));\n }\n\n private getTaskFieldIds(): string[] {\n return [\n this.crmFieldService.getFieldId(SystemFieldIds.ActivityOwnerID),\n this.crmFieldService.getFieldId(SystemFieldIds.ActivityID),\n this.crmFieldService.getFieldId(StandardIds.ActivityName),\n this.crmFieldService.getFieldId(StandardIds.ActivityTaskDueDate),\n this.crmFieldService.getFieldId(StandardIds.ActivityTaskPriority),\n this.crmFieldService.getFieldId(StandardIds.ActivityTaskStatus),\n this.crmFieldService.getFieldId(StandardIds.ActivityTaskType),\n this.crmFieldService.getFieldId(SystemFieldIds.ActivityCreated),\n this.crmFieldService.getFieldId(SystemFieldIds.ActivityUpdated),\n ];\n }\n\n private showBaseColumns(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnsToHide = [\n SystemFieldIds.ActivityID,\n SystemFieldIds.ActivityOwnerID,\n SystemFieldIds.ActivityCreated,\n SystemFieldIds.ActivityUpdated,\n StandardIds.ActivityTaskPriority,\n ];\n\n const columnsToUnHide = [TaskCustomColumns.AssignedTo];\n\n for (const column of columns) {\n if (columnsToHide.includes(column.id)) {\n column.hidden = true;\n } else if (columnsToUnHide.includes(column.id)) {\n column.hidden = false;\n }\n }\n\n return columns;\n }\n\n private sortColumns(columns: GalaxyColumnDef[]): GalaxyColumnDef[] {\n const columnOrder = [\n StandardIds.ActivityTaskStatus,\n StandardIds.ActivityName,\n StandardIds.ActivityTaskType,\n StandardIds.ActivityTaskDueDate,\n TaskCustomColumns.AssignedTo,\n ];\n\n return columns.sort((a, b) => {\n const order = columnOrder;\n const aIndex = order.indexOf(a.id);\n const bIndex = order.indexOf(b.id);\n return (aIndex === -1 ? Infinity : aIndex) - (bIndex === -1 ? Infinity : bIndex);\n });\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, firstValueFrom, Observable, of } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { CrmObjectService } from './crm-object-service/crm-object.service';\nimport {\n GalaxyFilterDefinitionInterface,\n GalaxyFilterType,\n GalaxyFilterOperator,\n GalaxyFilterInterface,\n} from '@vendasta/galaxy/filter/chips';\nimport { TaskTableCustomizationService } from '../table-customization/task-table-customization.service';\nimport { ContactTableCustomizationService } from '../table-customization/contact-table-customization.service';\nimport { CompanyTableCustomizationService } from '../table-customization/company-table-customization.service';\nimport { CrmInjectionToken, ActivityType, CrmDependencies, ObjectType } from '../../tokens-and-interfaces';\nimport { FilterOperator, FilterType } from '@vendasta/crm';\n\n// right now filters are sorted manually in the backend, the page size needs to cover the amount of system + standard + extensions + custom filters (up to 100)\nconst FILTER_PAGE_SIZE = 200;\n\nfunction convertToGalaxyFilterType(type: FilterType): GalaxyFilterType {\n return GalaxyFilterType[FilterType[type]];\n}\nfunction convertToGalaxyFilterOperator(operator: FilterOperator): GalaxyFilterOperator {\n return GalaxyFilterOperator[FilterOperator[operator]];\n}\nfunction convertToGalaxyFilterOperators(operators: FilterOperator[]): GalaxyFilterOperator[] {\n return operators.map((o) => convertToGalaxyFilterOperator(o));\n}\n\n@Injectable()\nexport class CrmFiltersService {\n private initialFilters$$ = new BehaviorSubject([]);\n initialFilters$ = this.initialFilters$$.asObservable();\n\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly crmObjectService: CrmObjectService,\n private readonly contactTableCustomization: ContactTableCustomizationService,\n private readonly companyTableCustomization: CompanyTableCustomizationService,\n private readonly taskTableCustomization: TaskTableCustomizationService,\n ) {}\n\n private customizeFilters(\n filters: GalaxyFilterDefinitionInterface[],\n objectType: ObjectType,\n activityType?: ActivityType,\n ): Observable {\n switch (objectType) {\n case 'Contact':\n return this.contactTableCustomization.customizeFilters(filters);\n case 'Company':\n return this.companyTableCustomization.customizeFilters(filters);\n case 'Activity':\n switch (activityType) {\n case 'Task':\n return this.taskTableCustomization.customizeFilters(filters);\n default:\n return of(filters);\n }\n default:\n return of(filters);\n }\n }\n\n listObjectFilters$(\n searchTerm: string,\n objectType: ObjectType,\n activityType?: ActivityType,\n ): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) => {\n return this.crmObjectService.listObjectsFilters(objectType, {\n namespace: namespace,\n paging: {\n pageSize: FILTER_PAGE_SIZE,\n },\n searchTerm: searchTerm,\n });\n }),\n map((resp) => {\n if (!resp.filters) {\n return [] as GalaxyFilterDefinitionInterface[];\n }\n return resp.filters.map((filterDef) => ({\n fieldId: filterDef.fieldId,\n type: convertToGalaxyFilterType(filterDef.typeV2 || FilterType.FILTER_TYPE_INVALID),\n hasFilterOptions: filterDef.hasFilterOptions,\n supportedOperators: convertToGalaxyFilterOperators(filterDef.supportedOperatorsV2 || []),\n fieldName: filterDef.fieldName,\n }));\n }),\n switchMap((filters) => this.customizeFilters(filters, objectType, activityType)),\n );\n }\n\n async getInitialAppliedFilters$(\n objectType: ObjectType,\n activityType?: ActivityType,\n useUrlFilters?: boolean,\n ): Promise {\n if (objectType === 'Activity' && activityType === 'Task') {\n const urlFilters = firstValueFrom(this.initialFilters$);\n return urlFilters.then((filters) => {\n if (filters?.length > 0 && useUrlFilters) return filters;\n return this.taskTableCustomization.getInitialFilters();\n });\n }\n if (objectType === 'Contact') {\n const urlFilters = await firstValueFrom(this.initialFilters$);\n const initialContactFilters = await this.contactTableCustomization.getInitialFilters();\n if (urlFilters?.length > 0 && useUrlFilters) {\n const joinedFilters = [...urlFilters, ...initialContactFilters];\n return joinedFilters.filter((filter, index) => {\n return index === joinedFilters.findIndex((f) => filter.filterId === f.filterId);\n });\n }\n return initialContactFilters;\n }\n if (objectType === 'Company') {\n const urlFilters = await firstValueFrom(this.initialFilters$);\n const initialCompanyFilters = await this.companyTableCustomization.getInitialFilters();\n if (urlFilters?.length > 0 && useUrlFilters) {\n const joinedFilters = [...urlFilters, ...initialCompanyFilters];\n return joinedFilters.filter((filter, index) => {\n return index === joinedFilters.findIndex((f) => filter.filterId === f.filterId);\n });\n }\n return initialCompanyFilters;\n }\n return firstValueFrom(this.initialFilters$);\n }\n\n setInitialFilters(filters: GalaxyFilterInterface[]) {\n this.initialFilters$$.next(filters);\n }\n}\n","import {\n GalaxyFilterChipDependencies,\n GalaxyFilterDefinitionInterface,\n GalaxyFilterInputOverride,\n GalaxyFilterInterface,\n} from '@vendasta/galaxy/filter/chips';\nimport { FieldType, FieldValueInterface as SdkFieldValueInterface } from '@vendasta/crm';\nimport { Observable, of } from 'rxjs';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport { CustomCellComponent, GalaxyColumnDef, Row } from '@vendasta/galaxy/table';\nimport { inject, InjectionToken, Type, ViewContainerRef } from '@angular/core';\nimport { Properties } from 'posthog-js';\nimport { CardDataType } from '@vendasta/galaxy/contact-info-card';\nimport { CrmFieldOptionsService } from './shared-services/crm-services/crm-field-options.service';\nimport { CrmFiltersService } from './shared-services/crm-services/crm-filters.service';\nimport { CRMTrackingService } from './shared-services/page-analytics.service';\nimport { FieldValidation } from './shared-components/model-driven-form/field-validation';\nimport { User } from '@vendasta/iamv2';\nexport { FieldType } from '@vendasta/crm';\n\nexport interface ProfileCard {\n component: any;\n}\n\nexport interface CRMSelectAllOptions {\n filters?: GalaxyFilterInterface[];\n search?: string;\n useSelectAll?: boolean;\n totalObjects?: number;\n}\n\nexport interface UserWithDisplayName extends User {\n displayName: string;\n}\n\nexport type MultiRowActionFunc = (rows: Row[]) => void;\nexport type SelectAllActionFunc = (rows: Row[], selectOptions?: CRMSelectAllOptions) => void;\nexport type SingleRowActionFunc = (row: Row) => void;\nexport type ObjectType = 'Contact' | 'Company' | 'Activity';\nexport const ObjectTypes: ObjectType[] = ['Contact', 'Company', 'Activity'];\n// Extra object types that can be associated with an activity\nexport type ObjectAssociationType = 'Opportunity' | 'User';\nexport type RowVisibilityFunc = (row: Row, type: ObjectType) => boolean;\n\nexport interface MultiRowAction {\n label: string;\n callback: MultiRowActionFunc;\n}\nexport interface SelectAllAction {\n label: string;\n callback: SelectAllActionFunc;\n selectAllVisible?: boolean;\n}\n\nexport interface SingleRowAction {\n label: string;\n callback: SingleRowActionFunc;\n visible?: RowVisibilityFunc;\n}\n\nexport interface CRMRowObject {\n objectId: string;\n objectType: ObjectType;\n}\n\nexport interface TableCustomCell {\n fieldIds: string[];\n customCellComponent: Type;\n columnDefinition: GalaxyColumnDef;\n}\n\nexport interface CRMFilterOverride extends GalaxyFilterInputOverride {\n title: string;\n}\n\nexport interface ActionButton {\n component: any;\n}\n\nexport type RequiresField = T & { [P in K]-?: T[P] };\nexport type FieldValueInterface = RequiresField;\n\nexport abstract class FormInputComponent {\n readOnly = false;\n inlineEdit$: Observable = of(false);\n objectType: ObjectType = 'Contact';\n\n abstract set control(control: UntypedFormControl);\n abstract get control(): UntypedFormControl;\n\n abstract set fieldId(fieldId: string);\n\n abstract set label(label: string);\n\n abstract get hasModification(): boolean;\n\n abstract get value(): FieldValueInterface;\n}\n\nexport interface FormCustomInput {\n fieldId: string;\n component: Type;\n}\n\nexport interface FormDefaultInputValue {\n fieldId: string;\n value: any;\n}\n\nexport interface SimplifiedUser {\n userId: string;\n firstName: string;\n lastName: string;\n displayName: string;\n}\n\nexport interface UserService {\n searchUsers?(searchTerm?: string): Observable;\n\n getMultiUsers(userIds: string[]): Observable;\n}\n\nexport interface AccessService {\n canViewAllCampaigns$?: Observable;\n canModifyAutomations$?: Observable;\n hasAdminPermission$?: Observable;\n canAccessSales$?: Observable;\n canAccessOrders$?: Observable;\n canAccessAutomations$?: Observable;\n}\n\nexport const CRM_ACCESS_SERVICE_TOKEN = new InjectionToken('Service for the crm for user access checks');\n\nexport interface SimplifiedOpportunity {\n opportunityId: string;\n name: string;\n}\n\nexport interface OpportunityService {\n searchOpportunities(searchTerm: string): Observable;\n\n getMultiOpportunity(opportunityIds: string[]): Observable;\n\n setAccountGroupId(accountGroupId: string): void;\n}\n\n// Dependencies related to specific object types\ninterface CrmObjectDependencies {\n multiRowTableActions$?: Observable;\n singleRowTableActions$?: Observable;\n selectAllTableActions$?: Observable;\n profileCards$?: Observable;\n actionButtons$?: Observable;\n baseColumnIds?: string[];\n filterInputOverrides$?: Observable;\n tableCustomCells?: TableCustomCell[];\n formCustomInputs?: FormCustomInput[];\n formDefaultOnCreateInputValues$?: Observable;\n showRightHandProfilePanel$?: Observable; // default to show right hand profile panel\n}\n\nexport interface CrmDependencies {\n appID?: string;\n // the prefix for the route, e.g. /crm. necessary to avoid using relative routing with CRM lib subrouter\n routePrefix$: Observable;\n\n // A namespace is an instance of the CRM\n // e.g. VUNI for a partner managing their contacts in Partner Center,\n // or AG-12345 for an SMB managing their contacts in Business Center.\n // (This distinction gets weirder in the future when we start merging these Centers,\n // but just roll with it for now.)\n namespace$: Observable;\n\n // When the CRM is used in Business Center, the namespace is the account group id.\n // This will give you the parent namespace, which is the partner id.\n parentNamespace$: Observable;\n\n // Actions that can be taken either on a single row or a selection of rows from the CRM table.\n // Actions are defined by the app instantiating the CRM and will be different from app to app.\n // eg. RM could define an action to send a review request to a set of selected contacts. RM supplies all the\n // config for the action and the CRM table invokes the provided function when it is clicked.\n multiRowTableActions$?: Observable;\n singleRowTableActions$?: Observable;\n selectAllActions$?: Observable;\n\n // featureFlags$\n viewProfileFlag$: Observable;\n viewProspectorFlag$?: Observable;\n\n // the unified user id of the current user\n currentUserId$: Observable;\n\n // dependencies by object type\n company?: CrmObjectDependencies;\n contact?: CrmObjectDependencies;\n task?: CrmObjectDependencies;\n\n showBackToAccountsButton?: boolean;\n\n // dependencies for namespace specific shared-services\n services?: {\n userService?: UserService;\n opportunityService?: OpportunityService;\n accessService?: AccessService;\n };\n\n openAccountGroupConversation?: (accountGroupId: string) => void | Promise;\n openContactConversation?: (contactId: string) => void | Promise;\n\n // Helps determine whether a partner has access to a feature\n hasAccessToFeature$?: (feature: string) => Observable;\n openRestrictedDialog?: (featureId: string) => void;\n\n // Client specific actions to shared components\n customActions?: {\n // navigates to the fulfillment projects page for a given company\n navigateToFulfillmentProjects?: (row: CRMRowObject) => void;\n openOpportunitiesDetails?: (opportunityId: string, accountGroupId: string) => void;\n };\n}\n\nexport const CrmInjectionToken = new InjectionToken('dependencies for the crm');\n\nexport interface CompanyProfileCardData {\n company_id: string;\n account_group_id?: string;\n name?: string;\n group_id?: string;\n}\n\nexport const COMPANY_PROFILE_CARD_DATA_TOKEN = new InjectionToken('company-profile-card-data');\n\nexport interface PageAnalyticsDependencies {\n trackEvent(action: string, properties?: Properties): void;\n}\n\nexport const PageAnalyticsInjectionToken = new InjectionToken(\n 'dependencies for page analytics',\n);\nexport type ActivityType = 'Note' | 'Email' | 'Call' | 'Meeting' | 'Task' | 'Communication';\nexport type CommunicationSubType = 'SMS' | 'LinkedIn' | 'Inbox';\nexport type RecordChangeType = 'CREATED' | 'IMPORTANT_FIELD_UPDATED';\n\nexport interface CardData extends CardDataType {\n tags?: string[];\n hideAvatar?: boolean;\n accountGroupCompanyName?: string;\n accountGroupCompanyId?: string;\n associationId?: string;\n}\n\nexport function tableFiltersInjectionTokenGenerator(\n objectType: ObjectType,\n activityType?: ActivityType,\n): () => GalaxyFilterChipDependencies {\n if (!objectType) {\n console.error('objectType is required for tableFiltersInjectionTokenGenerator');\n return () => ({}) as GalaxyFilterChipDependencies;\n }\n\n return () => {\n const crmFieldOptionsService = inject(CrmFieldOptionsService);\n const crmFiltersService = inject(CrmFiltersService);\n const crmConfigDependencies = inject(CrmInjectionToken);\n const deps: GalaxyFilterChipDependencies = {\n listObjectFilters(searchTerm: string): Observable {\n return crmFiltersService.listObjectFilters$(searchTerm, objectType, activityType);\n },\n getFieldOptions(fieldId: string, search: string): Observable {\n return crmFieldOptionsService.getFieldOptions(fieldId, search, objectType);\n },\n getFilterInputOverrides(): Observable {\n switch (objectType) {\n case 'Contact':\n return crmConfigDependencies.contact?.filterInputOverrides$ ?? of([] as GalaxyFilterInputOverride[]);\n case 'Company':\n return crmConfigDependencies.company?.filterInputOverrides$ ?? of([] as GalaxyFilterInputOverride[]);\n case 'Activity':\n switch (activityType) {\n case 'Task':\n return crmConfigDependencies.task?.filterInputOverrides$ ?? of([] as GalaxyFilterInputOverride[]);\n default:\n return of([] as GalaxyFilterInputOverride[]);\n }\n default:\n return of([] as GalaxyFilterInputOverride[]);\n }\n },\n getInitialAppliedFilters(): Promise {\n return crmFiltersService.getInitialAppliedFilters$(objectType, activityType, true);\n },\n };\n return deps;\n };\n}\n\nexport function pageAnalyticsInjectionTokenGenerator(objectType: ObjectType): () => PageAnalyticsDependencies {\n return () => {\n const crmTrackingService = inject(CRMTrackingService);\n const deps: PageAnalyticsDependencies = {\n trackEvent(action: string, properties?: Properties): void {\n crmTrackingService.trackEvent(objectType, action, properties);\n },\n };\n return deps;\n };\n}\n\nexport interface DropdownOptionInterface {\n label?: string;\n value?: string;\n}\n\nexport interface FieldSchemaInterface {\n fieldId: string;\n fieldType: FieldType;\n fieldName: string;\n fieldDescription: string;\n dropdownOptions: DropdownOptionInterface[];\n currencyCode: string;\n value: any;\n readOnly: boolean;\n hasDefaultValue?: boolean;\n}\n\nexport interface FieldInterface {\n fieldId: string;\n name: string;\n value: any;\n description: string;\n\n // Gets the field value for the backend\n fieldValue(): FieldValueInterface;\n\n // Checks if the field received a update\n hasModification(): boolean;\n}\n\nexport interface FieldGroupInterface {\n description?: string;\n fieldIds: string[];\n}\n\nexport const ActivityTaskStatus = {\n Open: 'Open',\n Completed: 'Completed',\n};\n\nexport interface FieldOptionsDependencies {\n getFieldOptions(fieldId: string, search: string): Observable;\n}\n\nexport const FieldOptionsInjectionToken = new InjectionToken(\n 'dependencies for getting field options in the model-driven form',\n);\n\nexport enum LoadingStatus {\n LOADING = 1,\n OK = 2,\n EMPTY = 3,\n ERROR = 4,\n}\n\nexport enum SavingStatus {\n NOT_SAVING = 1,\n SAVING = 2,\n OK = 3,\n ERROR = 4,\n}\n\nexport enum NullValue {\n NULL_VALUE = 0,\n}\n\nexport interface RenderableFieldInterface extends FieldInterface {\n formControl: AbstractControl;\n validation: FieldValidation;\n objectType: ObjectType;\n readOnly: boolean;\n\n // Chooses the correct component to display information\n render(viewContainerRef: ViewContainerRef): void;\n\n setValidation(validation: FieldValidation): void;\n}\n\nexport interface RenderableFieldGroupInterface {\n description?: string;\n fields: RenderableFieldInterface[];\n editableFieldCount: number;\n}\n\nexport interface FieldConfigInterface {\n fieldSchemas?: FieldSchemaInterface[];\n fieldGroups?: FieldGroupInterface[];\n}\n\nexport function modelDrivenFormFieldOptionsInjectionTokenGenerator(\n objectType: ObjectType,\n): () => FieldOptionsDependencies {\n return () => {\n const crmFieldOptionsService = inject(CrmFieldOptionsService);\n const deps: FieldOptionsDependencies = {\n getFieldOptions(fieldId: string, search: string): Observable {\n return crmFieldOptionsService.getFieldOptions(fieldId, search, objectType);\n },\n };\n return deps;\n };\n}\n\nexport interface ContactProfileCardData {\n id?: string;\n name?: string;\n}\n\nexport const CONTACT_PROFILE_CARD_DATA_TOKEN = new InjectionToken('contact-profile-card-data');\n\nexport interface ActionButtonData {\n account_group_id?: string;\n}\n\nexport const PROFILE_ACTION_BUTTON_DATA_TOKEN = new InjectionToken('action-button');\n\nexport const PrimaryAccountGroupIDForCrmObject = new InjectionToken>(\n 'primary account group ID for crm object in a given context',\n);\n","import { HttpResponse } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n CreateCrmObjectRequestInterface,\n CreateCrmObjectResponseInterface,\n CrmObjectInterface,\n DeleteCrmObjectRequestInterface,\n GetMultiCrmObjectRequestInterface,\n GetMultiCrmObjectResponseInterface,\n ListActivitiesResponseInterface,\n ListCrmObjectsRequestInterface,\n ListCrmObjectsResponseInterface,\n ListFieldOptionsRequestInterface,\n ListFieldOptionsResponseInterface,\n ListFiltersRequestInterface,\n ListFiltersResponseInterface,\n SortDirection,\n UpdateCrmObjectRequestInterface,\n ValidateCrmObjectRequestInterface,\n ValidateCrmObjectResponseInterface,\n} from '@vendasta/crm';\nimport { map, Observable, switchMap, take } from 'rxjs';\nimport { AbstractCrmObjectService } from './_abstract.service';\nimport { ContactService } from './_contact.service';\nimport { CompanyService } from './_company.service';\nimport { GalaxyFilterInterface } from '@vendasta/galaxy/filter/chips';\nimport { FilterGroupInterface } from '@vendasta/crm/lib/_internal/interfaces/galaxy-filters.interface';\nimport { ActivityObjectService } from './_activity_object.service';\nimport { SortByInterface } from '@vendasta/crm/lib/_internal/interfaces/crm-objects.interface';\nimport { MatSort } from '@angular/material/sort';\nimport { CrmInjectionToken, CrmDependencies, ObjectType } from '../../../tokens-and-interfaces';\nimport { convertGalaxyFilters } from '../../../utils';\n\n@Injectable()\nexport class CrmObjectService {\n private handledObjectTypes: ObjectType[] = ['Company', 'Contact', 'Activity'];\n constructor(\n @Inject(CrmInjectionToken) private readonly config: CrmDependencies,\n private readonly contactService: ContactService,\n private readonly companyService: CompanyService,\n private readonly activityService: ActivityObjectService,\n ) {}\n\n createCrmObject(objectType: ObjectType, crmObject: CrmObjectInterface): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace: string) => {\n const request: CreateCrmObjectRequestInterface = {\n namespace: namespace,\n crmObject: crmObject,\n };\n return this.selectService(objectType).createCrmObject(request);\n }),\n take(1),\n );\n }\n\n deleteCrmObject(objectType: ObjectType, objectId: string): Observable> {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace: string) => {\n const request: DeleteCrmObjectRequestInterface = {\n namespace: namespace,\n crmObjectId: objectId,\n };\n return this.selectService(objectType).deleteCrmObject(request);\n }),\n take(1),\n );\n }\n\n validateCrmObject(\n objectType: ObjectType,\n crmObject: CrmObjectInterface,\n ): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace: string) => {\n const request: ValidateCrmObjectRequestInterface = {\n namespace: namespace,\n crmObject: crmObject,\n };\n return this.selectService(objectType).validateCrmObject(request);\n }),\n take(1),\n );\n }\n\n updateCrmObject(objectType: ObjectType, crmObject: CrmObjectInterface): Observable> {\n const paths: string[] = [];\n crmObject.fields?.forEach((field) => {\n paths.push(`fields.${field.fieldId}`);\n });\n\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace: string) => {\n const request: UpdateCrmObjectRequestInterface = {\n namespace: namespace,\n crmObject: crmObject,\n fieldMask: {\n paths: paths,\n },\n };\n return this.selectService(objectType).updateCrmObject(request);\n }),\n take(1),\n );\n }\n\n convertSortBy(sorting: MatSort[] | undefined): SortByInterface[] | undefined {\n if (!sorting) {\n return undefined;\n }\n const sortBy: SortByInterface[] = [];\n\n for (const sort of sorting) {\n if (sort.direction === '') {\n return;\n }\n if (sort.direction === 'asc') {\n sortBy.push({\n fieldId: sort.active,\n sortDirection: SortDirection.SORT_DIRECTION_ASCENDING,\n });\n }\n if (sort.direction === 'desc') {\n sortBy.push({\n fieldId: sort.active,\n sortDirection: SortDirection.SORT_DIRECTION_DESCENDING,\n });\n }\n }\n return sortBy;\n }\n\n convertFilters(filters: GalaxyFilterInterface[] | undefined): FilterGroupInterface | undefined {\n return convertGalaxyFilters(filters);\n }\n\n listObjects(\n objectType: ObjectType,\n request: ListCrmObjectsRequestInterface,\n ): Observable {\n return this.config.namespace$.pipe(\n switchMap((namespace) =>\n this.selectService(objectType)\n .listObjects({ ...request, namespace: namespace })\n .pipe(\n take(1),\n map((response) => {\n if (objectType === 'Activity') {\n response.crmObjects = (response as ListActivitiesResponseInterface).activities;\n }\n return response;\n }),\n ),\n ),\n );\n }\n\n listObjectsFilters(\n objectType: ObjectType,\n request: ListFiltersRequestInterface,\n ): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) =>\n this.selectService(objectType)\n .listObjectsFilters({ ...request, namespace: namespace })\n .pipe(take(1)),\n ),\n );\n }\n\n getMultiObject(objectType: ObjectType, crmObjectIds: string[]): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace: string) => {\n const request: GetMultiCrmObjectRequestInterface = {\n namespace: namespace,\n crmObjectIds: crmObjectIds,\n };\n return this.selectService(objectType).getMultiObject(request);\n }),\n take(1),\n );\n }\n\n listFieldOptions(\n objectType: ObjectType,\n request: ListFieldOptionsRequestInterface,\n ): Observable {\n return this.config.namespace$.pipe(\n take(1),\n switchMap((namespace) =>\n this.selectService(objectType).listFieldOptions({\n ...request,\n namespace: namespace,\n }),\n ),\n take(1),\n );\n }\n\n private selectService(objectType: ObjectType): AbstractCrmObjectService {\n if (!this.handledObjectTypes.includes(objectType)) {\n console.error('Object Type unhandled. The CRM Object Service will be undefined');\n }\n\n switch (objectType) {\n case 'Contact':\n return this.contactService;\n case 'Company':\n return this.companyService;\n case 'Activity':\n return this.activityService;\n }\n }\n}\n"],"mappings":"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","names":["ContactService","constructor","service","createCrmObject","request","createContact","deleteCrmObject","deleteContact","validateCrmObject","validateContact","updateCrmObject","updateContact","listObjects","listContacts","listObjectsFilters","listContactsFilters","getMultiObject","getMultiContact","listFieldOptions","listContactFieldOptions","ɵɵinject","CRMApiService","factory","ɵfac","providedIn","_ContactService","CompanyService","constructor","service","createCrmObject","request","createCompany","deleteCrmObject","deleteCompany","validateCrmObject","validateCompany","updateCrmObject","updateCompany","listObjects","listCompanies","listObjectsFilters","listCompaniesFilters","getMultiObject","getMultiCompany","listFieldOptions","listCompanyFieldOptions","startBulkCreate","startBulkCompanyCreate","ɵɵinject","CRMCompanyApiService","factory","ɵfac","providedIn","_CompanyService","ActivityObjectService","constructor","activityApiService","createCrmObject","request","createActivity","deleteCrmObject","deleteActivity","getMultiObject","getMultiActivity","pipe","map","response","crmObjects","activities","listFieldOptions","listActivityFieldOptions","listObjects","listActivities","listObjectsFilters","listActivityFilters","updateCrmObject","updateActivity","namespace","activity","crmObject","fieldMask","validateCrmObject","validateActivity","ɵɵinject","CRMActivityApiService","factory","ɵfac","providedIn","_ActivityObjectService","CrmFieldOptionsService","constructor","objectService","getFieldOptions","fieldId","search","objectType","listFieldOptions","pageSize","searchTerm","pipe","map","response","options","ɵɵinject","CrmObjectService","factory","ɵfac","_CrmFieldOptionsService","ActivityService","constructor","config","activityService","listActivities","request","namespace$","pipe","switchMap","namespace","__spreadProps","__spreadValues","take","createActivity","activity","map","response","crmObjectId","getMultiActivities","crmObjectIds","getMultiActivity","activities","updateActivity","fieldMask","paths","length","Error","ɵɵinject","CrmInjectionToken","CRMActivityApiService","factory","ɵfac","_ActivityService","MAX_SERVER_PAGE_SIZE","CrmFormService","constructor","config","crmObjectService","crmFieldSchemaApiService","crmFieldLayoutApiService","translationService","translateByObjectTypeService","handleValidationErrors","objectType","validationResponse","invalidSeverityErrors","errors","filter","e","severity","ErrorSeverity","VALIDATION_ERROR_SEVERITY_INVALID","length","firstError","firstErrorSchema","fieldSchemaMap","get","details","uniquenessCheck","fieldId","message","Error","getTranslationByObjectType","label","fieldName","toLowerCase","listAllObjectFields$","of","fieldSchemas","pagingMetadata","nextCursor","hasMore","pipe","expand","resp","listObjectFieldsNextPage$","cursor","pageSize","EMPTY","reduce","acc","val","paging","namespace$","take","switchMap","namespace","listFieldSchema","crmObjectType","pagingOptions","listAllObjectFieldGroups$","listObjectFieldGroupsNextPage$","fieldGroups","listFieldGroups","crmFieldGroupToFormFieldGroup","crmFieldGroup","description","fieldIds","listAllObjectFormFieldGroups$","map","crmFieldGroups","crmFieldSchemasToFormFieldSchemas","crmFieldSchemas","crmFieldSchema","fieldType","FieldType","FIELD_TYPE_INVALID","fieldDescription","dropdownOptions","currencyCode","value","readOnly","readonly","listAllFormFields$","shareReplay","bufferSize","refCount","getCrmFieldValueToFormValue","crmFieldValue","FIELD_TYPE_INTEGER","FIELD_TYPE_CURRENCY","integerValue","FIELD_TYPE_STRING","FIELD_TYPE_DROPDOWN","FIELD_TYPE_EMAIL","FIELD_TYPE_PHONE","stringValue","FIELD_TYPE_BOOLEAN","booleanValue","FIELD_TYPE_TAG","FIELD_TYPE_STRING_LIST","stringValues","values","FIELD_TYPE_DATETIME","FIELD_TYPE_DATE","dateValue","FIELD_TYPE_FLOAT","floatValue","compareStringList","currentValue","modifiedValue","currentValues","modifiedValues","sortedCurrentValues","sort","sortedModifiedValues","index","entries","isFieldValueEmpty","isModifiedFieldValue","getTime","initializeFormFieldSchemaWithCrmObject","fieldSchema","crmObject","fields","crmObjectFieldValue","find","crmObjectField","listAllFormFieldsInitializedWithCrmObject$","crmObjectId","forkJoin","getMultiObject","getMultiResponse","crmObjects","instant","forEach","field","validateCrmObject$","validationErrors$","validateCrmObject","response","fieldSchemaMap$","schemas","schemaMap","Map","schema","set","validationErrors","validateAndCreateCrmObject$","hasModification","fieldValue","fieldValues","validationResponse$","setSystemFields","createCrmObject","contactOwnerID","SystemFieldIds","ContactOwnerID","ownerId","contactGroupID","ContactGroupID","groupId","companyOwnerID","CompanyOwnerID","companyGroupID","CompanyGroupID","validateAndUpdateCrmObject$","modifiedFieldValues","updateCrmObject","validateAndUpdateCrmObjectField$","fieldSchema$","getMultiFieldSchema","currentCrmObject$","validationValues$","combineLatest","currentObject","currentObjectFields","currentValueIndex","findIndex","validationValues","ɵɵinject","CrmInjectionToken","CrmObjectService","CRMFieldSchemaApiService","CRMFieldLayoutApiService","TranslateService","TranslateByObjectTypeService","factory","ɵfac","_CrmFormService","CompanyContactCacheService","constructor","cache","Map","ttlCache","set","key","data","ttl","Date","now","get","clear","delete","factory","ɵfac","providedIn","_CompanyContactCacheService","CrmAssociationService","constructor","config","companyService","contactService","crmAssociationApiService","modal","companyContactCacheService","crmObjectIdToAssociate","copyCrmObjects","crmObjects","objects","setCopyCrmObjects","setCrmObjectIdToAssociate","getRemainingCompanyAssociationsForContacts$","contactId","namespace$","associations$","pipe","switchMap","namespace","of","associations","pagingMetadata","hasMore","nextCursor","expand","resp","listAssociation","pagingOptions","pageSize","cursor","filtersV2","operator","FilterGroupOperator","FILTER_GROUP_OPERATOR_AND","filters","fieldId","FilterOperator","FILTER_OPERATOR_IS","values","string","EMPTY","reduce","acc","val","companies$","combineLatest","response","length","companyIds","map","associationResponse","toId","getMultiObject","crmObjectIds","companies","association","company","find","crmObjectId","tags","tag","tagValue","associationId","associationType","associatedObject","getCompanyAssociationsForContact$","getCompaniesWithAssociations$","joinAssociationsWithObjects$","getCompanyAssociationObjectIdsForContact$","asc","getRemainingContactAssociationsForCompanies$","companyId","take","contacts$","contactIds","fromId","contacts","contact","shareReplay","bufferSize","refCount","getChildCompanyAssociationsForCompany$","companyID","FILTER_OPERATOR_IS_ANY","getParentCompanyAssociationsForCompany$","direction","ids","objects$","getCachedContactAssociationsForCompany$","cachedContacts","get","associatedContacts","set","getContactAssociationsForCompany$","getContactsWithAssociations$","removeAssociation","id","deleteAssociation","createContactCompanyAssociation$","primarySelection","tagMap","primaryAssociation","Map","associationTagValues","savedData$","row","push","forEach","createAssociation","catchError","error","console","zip","data","errorOccurred","checkError","item","filteredData","filter","filteredCopy","_","index","respCount","createdCount","String","totalCount","copyCrmObjectsUpdated","obj","__spreadProps","__spreadValues","createAssociation$","fallbackToNoTags","associationTags","listAssociationFieldOptions","searchTerm","options","updateAssociationTags","updateAssociation","t","getAssociation","getMultiAssociation","associationIds","ɵɵinject","CrmInjectionToken","CompanyService","ContactService","CRMAssociationApiService","MatDialog","CompanyContactCacheService","factory","ɵfac","_CrmAssociationService","CrmTableStateService","constructor","config","breakpointObserver","MOBILE_BREAKPOINT","isMobile$","observe","pipe","map","result","matches","distinctUntilChanged","tableState","signal","localStorageKey","initializeLocalStorageColumns","columns","of","isMobile","lcColumns","i","ls","localStorage","getItem","JSON","parse","forEach","column","localStorageColumnIndex","findIndex","c","id","push","localStorageColumn","__spreadProps","__spreadValues","_position","hidden","lcColumnsCleaned","filter","find","sortedColumns","sortColumns","setItem","stringify","topColumns","sortColumnsByPosition","pinned","stickyEnd","bottomColumns","nonPinnedColumns","updateColumnsPosition","index","sort","a","b","Number","MAX_SAFE_INTEGER","setLocalStorageColumns","take","subscribe","length","setLocalStorageKey","objectType","appName","appID","removeItem","set","ɵɵinject","CrmInjectionToken","BreakpointObserver","factory","ɵfac","_CrmTableStateService","TableCustomizationService","constructor","crmFieldService","addCustomCell","tableCustomCell","crmObject","columnData","cellValue","fieldIds","map","fieldId","getFieldValueFromCrmObject","columnDefinition","id","cellType","value","component","customCellComponent","addCustomCells","tableCustomCells","addCustomColumns","customColumns","columns","customColumn","__spreadProps","__spreadValues","hidden","filter","column","index","self","findIndex","c","overrideCustomFilters","filters","overrides","override","findFieldIDIndex","f","fieldName","title","ɵɵinject","CrmFieldService","factory","ɵfac","_TableCustomizationService","ActivityTableCustomizationService","getRowFullName","name","getFieldId","StandardIds","ActivityName","fields","find","stringValue","getAssociationInfo","t","_ActivityTableCustomizationService","CompanyBatchGetterService","constructor","destroyRef","crmObjectService","newCompanyId$$","BehaviorSubject","batchCompanyIds$$","lastBatch$","pipe","filter","batchCompanyIds","length","debounceTime","map","Set","switchMap","getMultiObject","response","crmObjects","tap","next","shareReplay","takeUntilDestroyed","subscribe","companyId","batchedCompanyIds","value","includes","push","getCompany","companies","find","company","crmObjectId","ɵɵinject","DestroyRef","CrmObjectService","factory","ɵfac","_CompanyBatchGetterService","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","ɵɵproperty","link_r1","ɵɵadvance","displayNameTemplate_r3","ɵɵpureFunction1","_c0","data_r2","displayValue","ɵɵelement","ɵɵelementContainerStart","ɵɵtemplate","ParentCompanyNameComponent_ng_container_0_a_1_Template","ParentCompanyNameComponent_ng_container_0_ng_template_2_Template","ɵɵtemplateRefExtractor","link","div_r4","ɵɵtext","ɵɵtextInterpolate","displayName_r5","ParentCompanyNameComponent_ng_template_4_ng_container_0_Template","ctx_r5","NO_VALUE_FOR_COMPANY_NAME","blank_r7","ParentCompanyNameComponent","CustomCellComponent","value","newValue","companyId$$","next","constructor","config","crmFieldService","companyBatchGetterService","BehaviorSubject","displayValue$","pipe","switchMap","parentCompanyID","getCompany","of","map","parentCompany","getFieldValueFromCrmObject","StandardIds","CompanyName","companyNameFieldValue","stringValue","link$","viewProfileFlag$","take","featureFlag","routePrefix$","routePrefix","getValue","parentCompanyProfileViewRoute","PAGE_ROUTES","COMPANY","ROOT","SUBROUTES","PROFILE","replace","componentData$","combineLatest","ɵɵdirectiveInject","CrmInjectionToken","CrmFieldService","CompanyBatchGetterService","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ParentCompanyNameComponent_ng_container_0_Template","ParentCompanyNameComponent_ng_template_2_Template","ParentCompanyNameComponent_ng_template_4_Template","ParentCompanyNameComponent_ng_template_6_Template","ɵɵpipeBind1","loading_r8","RouterLink","CommonModule","NgIf","NgTemplateOutlet","AsyncPipe","BlankValueComponent","styles","_ParentCompanyNameComponent","ScoreService","constructor","config","scoringApiService","crmObjectId","setObjectId","objectId","getScoreForProfile$","fieldId","getScore$","getScoreForTableRow$","companyId","namespace$","pipe","switchMap","namespace","getScore","scoringIdentifier","crmObjectType","label","map","response","score","shareReplay","ɵɵinject","CrmInjectionToken","ScoringApiService","factory","ɵfac","_ScoreService","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","score_r1","ɵɵelement","ɵɵtemplate","LeadScoreCellComponent_Conditional_0_Conditional_0_Template","LeadScoreCellComponent_Conditional_0_Conditional_1_Template","ɵɵconditional","ctx","ctx_r1","NO_VALUE_FOR_SCORE","LeadScoreCellComponent","CustomCellComponent","value","newValues","fieldValues","set","constructor","scoreService","signal","score","toObservable","pipe","switchMap","companyId","find","fieldValue","fieldId","SystemFieldIds","CompanyID","stringValue","isScoreSet","StandardIds","CompanyLeadScore","floatValue","undefined","of","getScoreForTableRow$","takeUntilDestroyed","subscribe","result","ɵɵdirectiveInject","ScoreService","selectors","standalone","features","ɵɵProvidersFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","LeadScoreCellComponent_Conditional_0_Template","LeadScoreCellComponent_Conditional_1_Template","tmp_0_0","CommonModule","BlankValueComponent","styles","_LeadScoreCellComponent","PartnerCenterClientAppID","ShellClientAppID","AppsRestrictedByMarkets","RestrictedGroupService","constructor","config","inject","CrmInjectionToken","permissionsApiService","PermissionsApiService","featureFlagService","FeatureFlagsApiService","iamService","IAMService","featureEnabled$","namespace$","pipe","switchMap","namespace","includes","appID","batchGetStatus","featureIds","partnerId","of","hasAccess","map","response","length","currentUser$","currentUserId$","userId","uniqueUserIdentifiers","UserIdentifier","getMultiUsers","catchError","currentGroupId$","combineLatest","user","featureEnabled","roles","hasDeveloperRole","isSuperAdmin","attributes","boolAttribute","isNotSupported","getPermissions","permissions","restrictedToMarketId","shareReplay","getCurrentGroupId","factory","ɵfac","_RestrictedGroupService","LeadScoreColumnCell","fieldIds","StandardIds","CompanyLeadScore","SystemFieldIds","CompanyID","columnDefinition","id","customCellComponent","LeadScoreCellComponent","CompanyTableCustomizationService","TableCustomizationService","getRowFullAddress","crmObject","crmFieldService","addressLineOne","getFieldId","CompanyPrimaryAddressLine1","addressLineTwo","CompanyPrimaryAddressLine2","city","CompanyPrimaryAddressCity","state","CompanyPrimaryAddressState","postalCode","CompanyPrimaryAddressPostalCode","country","CompanyPrimaryAddressCountry","addressLineOneData","fields","find","f","fieldId","addressLineTwoData","cityData","stateData","postalCodeData","countryData","stringValue","filter","value","undefined","join","constructor","translate","config","restrictedGroupService","profileLink$","routePrefix$","pipe","map","prefix","viewRoute","PAGE_ROUTES","COMPANY","ROOT","SUBROUTES","PROFILE","hideIDColumns","columns","columnIdentifiersToHide","CompanyExternalID","CompanyParentCompanyID","CompanyWebsite","identifier","index","findIndex","c","hidden","nameCol","CompanyName","sticky","customizeColumnsMobile","columnIdentifiersToShow","Map","forEach","column","get","addCompanyProfileLink","columnData","companyNameField","take","subscribe","profileLink","replace","crmObjectId","cellType","getRowFullName","link","customizeRowData","schemaMap","customizeNextTaskDueDateCellData","addPrimaryCompanyNameRowData","addFullAddressColumnData","addCustomCells","company","tableCustomCells","cell","CompanyNextTaskDueDate","CompanyCustomColumns","FullAddress","customizeColumns","isMobile","customizedColumns","addFullAddressColumn","addParentCompanyNameColumn","customCells","push","addCustomColumns","name","getAssociationInfo","title","instant","sortable","ParentCompanyName","__async","parentCompanyID","parentCompanyIDFieldValue","getFieldValueFromCrmObject","component","ParentCompanyNameComponent","makeGroupFilterRestricted","restrictedToGroupId","filters","companyNameIdIndex","preset","groupIDIndex","CompanyGroupID","lockedValue","customizeFilters","appliedOverrides$","filterInputOverrides$","of","overrides","overrideCustomFilters","combineLatest","getCurrentGroupId","restrictedMarketId","getInitialFilters","firstValueFrom","then","selectedGroupId","filterId","operator","GalaxyFilterOperator","FILTER_OPERATOR_IS","values","string","ɵɵinject","CrmFieldService","TranslateService","CrmInjectionToken","RestrictedGroupService","factory","ɵfac","_CompanyTableCustomizationService","ɵɵelementStart","ɵɵelementContainer","ɵɵelementEnd","ɵɵproperty","link_r1","ɵɵadvance","displayNameTemplate_r3","ɵɵpureFunction1","_c0","data_r2","displayValue","ɵɵelement","ɵɵelementContainerStart","ɵɵtemplate","PrimaryCompanyNameComponent_ng_container_0_a_1_Template","PrimaryCompanyNameComponent_ng_container_0_ng_template_2_Template","ɵɵtemplateRefExtractor","link","div_r4","ɵɵtext","ɵɵtextInterpolate","displayName_r5","PrimaryCompanyNameComponent_ng_template_4_ng_container_0_Template","ctx_r5","NO_VALUE_FOR_COMPANY_NAME","blank_r7","PrimaryCompanyNameComponent","CustomCellComponent","value","newValue","companyId$$","next","constructor","config","crmFieldService","companyBatchGetterService","BehaviorSubject","displayValue$","pipe","switchMap","contactPrimaryCompanyID","getCompany","of","map","company","getFieldValueFromCrmObject","StandardIds","CompanyName","companyNameFieldValue","stringValue","link$","viewProfileFlag$","take","featureFlag","routePrefix$","routePrefix","getValue","primaryCompanyProfileViewRoute","PAGE_ROUTES","COMPANY","ROOT","SUBROUTES","PROFILE","replace","componentData$","combineLatest","ɵɵdirectiveInject","CrmInjectionToken","CrmFieldService","CompanyBatchGetterService","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","PrimaryCompanyNameComponent_ng_container_0_Template","PrimaryCompanyNameComponent_ng_template_2_Template","PrimaryCompanyNameComponent_ng_template_4_Template","PrimaryCompanyNameComponent_ng_template_6_Template","ɵɵpipeBind1","loading_r8","RouterLink","CommonModule","NgIf","NgTemplateOutlet","AsyncPipe","BlankValueComponent","styles","_PrimaryCompanyNameComponent","ContactTableCustomizationService","TableCustomizationService","constructor","config","crmFieldService","translate","restrictedGroupService","contactLinkBuild$$","BehaviorSubject","viewProfileFlag$","pipe","take","switchMap","featureFlag","routePrefix$","of","subscribe","routePrefix","contactProfileViewRoute","PAGE_ROUTES","CONTACT","ROOT","SUBROUTES","PROFILE","next","hideIDColumns","columns","columnIdentifiersToHide","getFieldId","StandardExternalIds","FirstName","LastName","SystemFieldIds","ContactExternalID","ContactID","StandardIds","ContactPrimaryCompanyID","ContactCustomColumns","FullAddress","identifier","index","findIndex","c","id","hidden","addPrimaryCompanyNameColumn","PrimaryCompanyName","title","instant","addPrimaryCompanyNameRowData","crmObject","schemaMap","columnData","__async","contactPrimaryCompanyID","contactPrimaryCompanyIDFieldValue","getFieldValueFromCrmObject","stringValue","cellType","value","component","PrimaryCompanyNameComponent","addFullNameColumn","FullName","sticky","sortable","formatPhoneNumber","phoneNumber","parsedNumber","parseNumber","defaultCountry","Object","keys","length","format","addFullNameRowData","getRowFullName","link","replace","crmObjectId","firstName","lastName","email","Email","phone","PhoneNumber","firstNameData","fields","find","f","fieldId","lastNameData","emailData","phoneData","trim","getAssociationInfo","addFullAddressColumnData","getRowFullAddress","customizeRowData","customizeNextTaskDueDateCellData","addCustomCells","contact","tableCustomCells","cell","ContactNextTaskDueDate","customizeColumns","isMobile","customizedColumns","addFullAddressColumn","customCells","addCustomColumns","map","columnDefinition","customizeColumnsMobile","columnIdentifiersToShow","Map","forEach","column","get","addressLineOne","ContactPrimaryAddressLine1","addressLineTwo","ContactPrimaryAddressLine2","city","ContactPrimaryAddressCity","state","ContactPrimaryAddressState","postalCode","ContactPrimaryAddressPostalCode","country","ContactPrimaryAddressCountry","addressLineOneData","addressLineTwoData","cityData","stateData","postalCodeData","countryData","filter","undefined","join","makeGroupFilterRestricted","restrictedToGroupId","filters","emailFieldIdIndex","preset","groupIDIndex","ContactGroupID","lockedValue","customizeFilters","appliedOverrides$","filterInputOverrides$","overrides","overrideCustomFilters","combineLatest","getCurrentGroupId","restrictedMarketId","getInitialFilters","firstValueFrom","then","selectedGroupId","filterId","operator","GalaxyFilterOperator","FILTER_OPERATOR_IS","values","push","string","ɵɵinject","CrmInjectionToken","CrmFieldService","TranslateService","RestrictedGroupService","factory","ɵfac","_ContactTableCustomizationService","DateDefault","FilterGroupOperator","FilterOperator","AddContactAsIamUserForCompanyStatus","CreateAccountGroupForCompanyStatus","enumStringToValue$6","enumRef","value","Filter","_Filter","proto","m","FilterOperator","FilterValue","kwargs","toReturn","FilterGroup","_FilterGroup","FilterGroupOperator","_FilterValue","DateDefault","enumStringToValue$2","enumRef","value","AddContactAsIamUserForCompanyRequest","_AddContactAsIamUserForCompanyRequest","proto","m","kwargs","toReturn","AddContactAsIamUserForCompanyStatusResponse","_AddContactAsIamUserForCompanyStatusResponse","AddContactAsIamUserForCompanyStatus","CreateAccountGroupForCompanyRequest","_CreateAccountGroupForCompanyRequest","GetAccountGroupForCompanyRequest","_GetAccountGroupForCompanyRequest","GetAccountGroupForCompanyResponse","_GetAccountGroupForCompanyResponse","GetCreateAccountGroupForCompanyStatusRequest","_GetCreateAccountGroupForCompanyStatusRequest","GetCreateAccountGroupForCompanyStatusResponse","_GetCreateAccountGroupForCompanyStatusResponse","CreateAccountGroupForCompanyStatus","IsContactIamUserForCompanyRequest","_IsContactIamUserForCompanyRequest","IsContactIamUserForCompanyResponse","_IsContactIamUserForCompanyResponse","RemoveContactAsIamUserForCompanyRequest","_RemoveContactAsIamUserForCompanyRequest","StartManualAutomationsRequestStartAutomationCriteria","_StartManualAutomationsRequestStartAutomationCriteria","proto","m","FilterGroup","kwargs","toReturn","StartManualAutomationsRequestStartAutomationPayload","_StartManualAutomationsRequestStartAutomationPayload","StartManualAutomationsRequest","_StartManualAutomationsRequest","environment","hostMap","HostService","t","ɵɵdefineInjectable","CrmAutomationApiService","http","hostService","HttpHeaders","r","request","__spreadProps","__spreadValues","ɵɵinject","HttpClient","PlatformApiService","http","hostService","HttpHeaders","r","request","CreateAccountGroupForCompanyRequest","__spreadProps","__spreadValues","GetCreateAccountGroupForCompanyStatusRequest","map","resp","GetCreateAccountGroupForCompanyStatusResponse","GetAccountGroupForCompanyRequest","GetAccountGroupForCompanyResponse","AddContactAsIamUserForCompanyRequest","AddContactAsIamUserForCompanyStatusResponse","IsContactIamUserForCompanyRequest","IsContactIamUserForCompanyResponse","RemoveContactAsIamUserForCompanyRequest","t","ɵɵinject","HttpClient","HostService","ɵɵdefineInjectable","CrmPlatformApiService","constructor","config","platformAPIService","createAccountGroupForCompany","companyId","namespace$","pipe","switchMap","namespace","request","map","response","ok","take","getCreateAccountGroupForCompanyStatus","status","accountGroupId","getAccountGroupForCompany","addContactAsIamUserForCompany","contactId","catchError","error","of","HttpErrorResponse","removeContactAsIamUserForCompany","isContactIamUserForCompany","isIamUser","ɵɵinject","CrmInjectionToken","PlatformApiService","factory","ɵfac","_CrmPlatformApiService","CompanyProfileCardsPanelService","constructor","config","platformAPIService","snackbarService","loadingAccountGroup","signal","companyProfileCards$","company","profileCards$","EMPTY","justInTimeAccountGroupCreation","companyId","afterCreatedCallback","set","createAccountGroupForCompany","pipe","take","subscribe","next","accountGroupId","length","error","openErrorSnack","duration","SNACKBAR_DURATION","switchMap","waitForAccountGroupUpdate","map","accountStatus","status","CreateAccountGroupForCompanyStatus","CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_SUCCEEDED","Error","getCreateAccountGroupForCompanyStatus","CREATE_ACCOUNT_GROUP_FOR_COMPANY_STATUS_FAILED","retry","delay","ɵɵinject","CrmInjectionToken","CrmPlatformApiService","SnackbarService","factory","ɵfac","_CompanyProfileCardsPanelService","EditAssociationTagsComponent","tags","tagsControl","setValue","constructor","destroyRef","crmAssociationService","tagsChanged","EventEmitter","FormControl","searchTextChanged","signal","filteredTags$","toObservable","pipe","takeUntilDestroyed","debounceTime","SEARCH_DEBOUNCE_MS","switchMap","searchText","listTags","catchError","of","map","filter","tag","RESERVED_TAGS","includes","toLowerCase","valueChanges","tap","emit","subscribe","value","listAssociationFieldOptions","associationType","DEFAULT_TAG_SEARCH_SIZE","ɵɵdirectiveInject","DestroyRef","CrmAssociationService","selectors","inputs","outputs","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵlistener","$event","set","ɵɵadvance","ɵɵtextInterpolate","ɵɵpipeBind1","ɵɵproperty","tmp_2_0","undefined","ɵɵpureFunction0","_c0","CommonModule","AsyncPipe","TranslateModule","TranslatePipe","MatDialogModule","MatButtonModule","GalaxyTagsModule","TagsComponent","ReactiveFormsModule","NgControlStatus","FormControlDirective","GalaxyFormFieldModule","FormFieldComponent","LabelDirective","ExtendedDirective","styles","_EditAssociationTagsComponent","ɵɵelementContainerStart","ɵɵelementStart","ɵɵlistener","$event","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","tagsChanged","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","ɵɵpipeBind1","initialTags$","associationType_r3","EditAssociationDialogComponent","constructor","dialogRef","data","crmAssociationService","snackService","initialAssociation$","getAssociation","associationId","isPrimary$","pipe","map","association","tags","tag","tagValue","filter","includes","PRIMARY_TAG","t","RESERVED_TAGS","toLowerCase","associationType$","associationType","tagsToSave","save","switchMap","isPrimary","updateAssociationTags","subscribe","next","openSuccessSnack","duration","SNACKBAR_DURATION","close","error","openErrorSnack","cancel","slice","ɵɵdirectiveInject","MatDialogRef","MAT_DIALOG_DATA","CrmAssociationService","SnackbarService","selectors","standalone","features","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵtext","ɵɵtemplate","EditAssociationDialogComponent_ng_container_6_Template","ɵɵtextInterpolate1","ɵɵtextInterpolate","associationName","CommonModule","NgIf","AsyncPipe","TranslateModule","TranslatePipe","MatDialogModule","MatDialogTitle","MatDialogActions","MatDialogContent","MatButtonModule","MatButton","EditAssociationTagsComponent","styles","_EditAssociationDialogComponent","combineAssociationsWithChanges","associations","changes","combinedData","updatedAssociation","updatedAssociationIndex","findIndex","a","associationId","DefaultAssociationActionsService","constructor","dialog","associationService","objectService","reloadAssociations","cardData","association$","getAssociation","pipe","shareReplay","crmObject$","switchMap","association","type","getMultiObject","toId","fromId","of","crmObjects","map","response","length","combineLatest","crmObject","associationType","tags","tag","tagValue","associatedObject","editTagsAction","associationName","businessName","userName","open","EditAssociationDialogComponent","data","width","afterClosed","success","ɵɵinject","MatDialog","CrmAssociationService","CrmObjectService","factory","ɵfac","_DefaultAssociationActionsService","PreviewObjectService","constructor","previewCrmObject$$","BehaviorSubject","createDatesForPreview","previewObject","objectType","objectCreatedFieldId","objectUpdatedFieldId","SystemFieldIds","ContactCreated","ContactUpdated","CompanyCreated","CompanyUpdated","createdDateIndex","fields","findIndex","f","fieldId","updatedDateIndex","dateValue","Date","push","externalId","setPreviewCrmObject","next","deepCopyObject","JSON","parse","stringify","clearPreview","withPreview","crmObjects","crmObjectsCopy","applyCrmObjectPreview","previewCrmObject","getValue","existsAlreadyAtIndex","obj","crmObjectId","splice","unshift","factory","ɵfac","_PreviewObjectService","CRMTrackingService","constructor","trackingService","eventName","trackEvent","objectType","action","properties","toLowerCase","ɵɵinject","ProductAnalyticsService","factory","ɵfac","_CRMTrackingService","BrandingService","constructor","whiteLabelService","config","getBusinessAppName","namespace$","pipe","switchMap","namespace","getBranding","map","branding","apps","name","catchError","err","console","error","of","ɵɵinject","WhitelabelService","CrmInjectionToken","factory","ɵfac","_BrandingService","SidePanelContentService","constructor","activePortal$$","ReplaySubject","setContent","content","next","getContent","asObservable","clearContent","factory","ɵfac","providedIn","_SidePanelContentService","CompanyFiltersService","constructor","crmObjectService","crmFieldService","crmConfig","searchTerm$$","BehaviorSubject","getReadableParentCompanies","parentCompanies","map","company","__spreadProps","__spreadValues","displayName","getFieldValueFromCrmObject","StandardIds","CompanyName","stringValue","listObjects","namespace","cursor","pageSize","search","request","pagingOptions","searchTerm","listReadableCompanies","namespace$","pipe","switchMap","response","crmObjects","catchError","error","console","of","getMultiCompany","companyIds","getMultiObject","length","crmObjectId","crmObj","crmObject","ɵɵinject","CrmObjectService","CrmFieldService","CrmInjectionToken","factory","ɵfac","providedIn","_CompanyFiltersService","userFilterFn","user","searchTerm","toLowerCase","includesFullName","displayName","includes","includesFirstName","firstName","includesLastName","lastName","includesUserId","userId","includesEmail","email","convertToReadableUsers","users","map","__spreadProps","__spreadValues","trim","convertGalaxyFilters","filters","filterGroup","operator","FilterGroupOperator","FILTER_GROUP_OPERATOR_AND","forEach","inputFilter","fieldId","filterOperator","FilterOperator","GalaxyFilterOperator","undefined","filterGroupFilter","values","floatTolerance","v","dateDefault","DateDefault","GalaxyDateDefault","boolean","integer","string","date","float","push","ActivityAssigneeService","constructor","config","iamService","crmObjectService","allUsers$$","ReplaySubject","allUsers$","asObservable","namespace$","pipe","filter","id","takeUntilDestroyed","switchMap","namespace","listFieldOptions","fieldId","SystemFieldIds","ActivityOwnerID","pageSize","map","resp","options","userIds","userId","UserIdentifier","getMultiUsers","users","convertToReadableUsers","catchError","error","console","of","subscribe","next","cachedUser$","userHashMap","Map","forEach","set","find","u","shareReplay","fetchedMissingUsers$","cachedUsers","get","undefined","idsToGet","length","combineLatest","fetchedUsers","user","values","Boolean","ɵɵinject","CrmInjectionToken","IAMService","CrmObjectService","factory","ɵfac","_ActivityAssigneeService","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","TaskStatusCellComponent","CustomCellComponent","value","newValues","statusField","filter","Boolean","find","field","fieldId","StandardIds","ActivityTaskStatus","taskOpen","stringValue","Open","idField","SystemFieldIds","ActivityID","activityId","updateTaskCompletionStatus","newStatus","Completed","activity","crmObjectId","crmObjectSubtype","activitySubtype","fields","mask","paths","firstValueFrom","activityService","updateActivity","then","snack","openSuccessSnack","openErrorSnack","analyticsService","trackEvent","status","constructor","inject","ProductAnalyticsService","ɵɵdirectiveInject","ActivityService","SnackbarService","selectors","standalone","features","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","decls","vars","consts","template","rf","ctx","ɵɵlistener","i0","ɵɵrestoreView","_r1","ɵɵresetView","ɵɵtemplate","TaskStatusCellComponent_mat_icon_1_Template","TaskStatusCellComponent_ng_template_2_Template","ɵɵtemplateRefExtractor","ɵɵadvance","ɵɵproperty","taskComplete_r2","CommonModule","NgIf","GalaxyPipesModule","TranslateModule","MatIconModule","MatIcon","MatButtonModule","MatIconButton","styles","_TaskStatusCellComponent","StatusColumnCell","fieldIds","StandardIds","ActivityTaskStatus","SystemFieldIds","ActivityID","columnDefinition","id","customCellComponent","TaskStatusCellComponent","TaskTableCustomizationService","ActivityTableCustomizationService","constructor","config","crmFieldService","ownerFilter$$","ReplaySubject","defaultSortingOptions","fieldId","getFieldId","ActivityTaskDueDate","sortDirection","SortDirection","SORT_DIRECTION_ASCENDING","customizeColumns","columns","isMobile","excludeNonTaskColumns","customCells","task","tableCustomCells","push","addCustomColumns","map","c","showBaseColumns","sortColumns","customizeFilters","filters","excludeNonTaskFilters","captureInitialFilters","filterInputOverrides$","of","pipe","overrides","overrideCustomFilters","ownerFilterDefinition","find","f","ActivityOwnerID","next","getInitialFilters","__async","firstValueFrom","combineLatest","currentUserId$","then","filterDefinition","userId","filterId","operator","GalaxyFilterOperator","FILTER_OPERATOR_IS","values","string","Open","customizeRowData","crmObject","schemaMap","columnData","customizeDueDateCellData","addCustomCells","cell","cellType","filter","getTaskFieldIds","includes","ActivityName","ActivityTaskPriority","ActivityTaskType","ActivityCreated","ActivityUpdated","columnsToHide","columnsToUnHide","TaskCustomColumns","AssignedTo","column","hidden","columnOrder","sort","a","b","order","aIndex","indexOf","bIndex","Infinity","ɵɵinject","CrmInjectionToken","CrmFieldService","factory","ɵfac","_TaskTableCustomizationService","FILTER_PAGE_SIZE","convertToGalaxyFilterType","type","GalaxyFilterType","FilterType","convertToGalaxyFilterOperator","operator","GalaxyFilterOperator","FilterOperator","convertToGalaxyFilterOperators","operators","map","o","CrmFiltersService","constructor","config","crmObjectService","contactTableCustomization","companyTableCustomization","taskTableCustomization","initialFilters$$","BehaviorSubject","initialFilters$","asObservable","customizeFilters","filters","objectType","activityType","of","listObjectFilters$","searchTerm","namespace$","pipe","switchMap","namespace","listObjectsFilters","paging","pageSize","resp","filterDef","fieldId","typeV2","FILTER_TYPE_INVALID","hasFilterOptions","supportedOperators","supportedOperatorsV2","fieldName","getInitialAppliedFilters$","useUrlFilters","__async","firstValueFrom","then","length","getInitialFilters","urlFilters","initialContactFilters","joinedFilters","filter","index","findIndex","f","filterId","initialCompanyFilters","setInitialFilters","next","ɵɵinject","CrmInjectionToken","CrmObjectService","ContactTableCustomizationService","CompanyTableCustomizationService","TaskTableCustomizationService","factory","ɵfac","_CrmFiltersService","ObjectTypes","FormInputComponent","constructor","readOnly","inlineEdit$","of","objectType","CRM_ACCESS_SERVICE_TOKEN","InjectionToken","CrmInjectionToken","COMPANY_PROFILE_CARD_DATA_TOKEN","PageAnalyticsInjectionToken","tableFiltersInjectionTokenGenerator","activityType","crmFieldOptionsService","inject","CrmFieldOptionsService","crmFiltersService","CrmFiltersService","crmConfigDependencies","listObjectFilters","searchTerm","listObjectFilters$","getFieldOptions","fieldId","search","getFilterInputOverrides","contact","filterInputOverrides$","company","task","getInitialAppliedFilters","getInitialAppliedFilters$","console","error","pageAnalyticsInjectionTokenGenerator","crmTrackingService","CRMTrackingService","trackEvent","action","properties","ActivityTaskStatus","Open","Completed","FieldOptionsInjectionToken","LoadingStatus","SavingStatus","modelDrivenFormFieldOptionsInjectionTokenGenerator","objectType","crmFieldOptionsService","inject","CrmFieldOptionsService","getFieldOptions","fieldId","search","CONTACT_PROFILE_CARD_DATA_TOKEN","InjectionToken","PROFILE_ACTION_BUTTON_DATA_TOKEN","PrimaryAccountGroupIDForCrmObject","CrmObjectService","constructor","config","contactService","companyService","activityService","handledObjectTypes","createCrmObject","objectType","crmObject","namespace$","pipe","take","switchMap","namespace","request","selectService","deleteCrmObject","objectId","crmObjectId","validateCrmObject","updateCrmObject","paths","fields","forEach","field","push","fieldId","fieldMask","convertSortBy","sorting","sortBy","sort","direction","active","sortDirection","SortDirection","SORT_DIRECTION_ASCENDING","SORT_DIRECTION_DESCENDING","convertFilters","filters","convertGalaxyFilters","listObjects","__spreadProps","__spreadValues","map","response","crmObjects","activities","listObjectsFilters","getMultiObject","crmObjectIds","listFieldOptions","includes","console","error","ɵɵinject","CrmInjectionToken","ContactService","CompanyService","ActivityObjectService","factory","ɵfac","_CrmObjectService"],"x_google_ignoreList":[19]}