diff --git a/lib/content-services/src/lib/content-metadata/services/property-descriptors.service.ts b/lib/content-services/src/lib/content-metadata/services/property-descriptors.service.ts index 4efe8d501a..88eac296bc 100644 --- a/lib/content-services/src/lib/content-metadata/services/property-descriptors.service.ts +++ b/lib/content-services/src/lib/content-metadata/services/property-descriptors.service.ts @@ -16,25 +16,21 @@ */ import { Injectable } from '@angular/core'; -import { AlfrescoApiService } from '@alfresco/adf-core'; +import { ApiClientsService } from '@alfresco/adf-core'; import { Observable, defer, forkJoin } from 'rxjs'; import { PropertyGroup, PropertyGroupContainer } from '../interfaces/content-metadata.interfaces'; import { map } from 'rxjs/operators'; -import { ClassesApi } from '@alfresco/js-api'; @Injectable({ providedIn: 'root' }) export class PropertyDescriptorsService { - private _classesApi; - get classesApi(): ClassesApi { - this._classesApi = this._classesApi ?? new ClassesApi(this.alfrescoApiService.getInstance()); - return this._classesApi; + get classesApi() { + return this.apiClientsService.get('ContentCustomClient.classes'); } - constructor(private alfrescoApiService: AlfrescoApiService) { - } + constructor(private apiClientsService: ApiClientsService) { } load(groupNames: string[]): Observable { const groupFetchStreams = groupNames diff --git a/lib/content-services/src/lib/version-manager/content-version.service.ts b/lib/content-services/src/lib/version-manager/content-version.service.ts index 3847b580ea..51e19b9ffa 100644 --- a/lib/content-services/src/lib/version-manager/content-version.service.ts +++ b/lib/content-services/src/lib/version-manager/content-version.service.ts @@ -16,22 +16,17 @@ */ import { Injectable } from '@angular/core'; -import { AlfrescoApiService } from '@alfresco/adf-core'; -import { ContentApi } from '@alfresco/js-api'; +import { ApiClientsService } from '@alfresco/adf-core'; import { Observable, of } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class ContentVersionService { - private _contentApi: ContentApi; - get contentApi(): ContentApi { - if (!this._contentApi) { - this._contentApi = new ContentApi(this.alfrescoApi.getInstance()); - } - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } - constructor(private alfrescoApi: AlfrescoApiService) {} + constructor(private apiClientsService: ApiClientsService) { } /** * Get content URL for the given nodeId and specific version. diff --git a/lib/content-services/src/lib/version-manager/version-list.component.ts b/lib/content-services/src/lib/version-manager/version-list.component.ts index de45c52723..5a2f794030 100644 --- a/lib/content-services/src/lib/version-manager/version-list.component.ts +++ b/lib/content-services/src/lib/version-manager/version-list.component.ts @@ -15,9 +15,9 @@ * limitations under the License. */ -import { AlfrescoApiService, ContentService } from '@alfresco/adf-core'; +import { AlfrescoApiService, ApiClientsService, ContentService } from '@alfresco/adf-core'; import { Component, Input, OnChanges, ViewEncapsulation, EventEmitter, Output } from '@angular/core'; -import { VersionsApi, Node, VersionEntry, VersionPaging, NodesApi, NodeEntry, ContentApi } from '@alfresco/js-api'; +import { VersionsApi, Node, VersionEntry, VersionPaging, NodesApi, NodeEntry } from '@alfresco/js-api'; import { MatDialog } from '@angular/material/dialog'; import { ConfirmDialogComponent } from '../dialogs/confirm.dialog'; import { ContentVersionService } from './content-version.service'; @@ -31,10 +31,8 @@ import { ContentVersionService } from './content-version.service'; }) export class VersionListComponent implements OnChanges { - _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.alfrescoApi.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } _versionsApi: VersionsApi; @@ -84,11 +82,13 @@ export class VersionListComponent implements OnChanges { @Output() viewVersion = new EventEmitter(); - constructor(private alfrescoApi: AlfrescoApiService, - private contentService: ContentService, - private contentVersionService: ContentVersionService, - private dialog: MatDialog) { - } + constructor( + private apiClientsService: ApiClientsService, + private alfrescoApi: AlfrescoApiService, + private contentService: ContentService, + private contentVersionService: ContentVersionService, + private dialog: MatDialog + ) { } ngOnChanges() { this.loadVersionHistory(); diff --git a/lib/content-services/src/lib/webscript/webscript.component.ts b/lib/content-services/src/lib/webscript/webscript.component.ts index a58b43bab3..8fea573740 100644 --- a/lib/content-services/src/lib/webscript/webscript.component.ts +++ b/lib/content-services/src/lib/webscript/webscript.component.ts @@ -15,9 +15,8 @@ * limitations under the License. */ -import { ObjectDataTableAdapter, AlfrescoApiService, LogService } from '@alfresco/adf-core'; +import { ObjectDataTableAdapter, LogService, ApiClientsService } from '@alfresco/adf-core'; import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; -import { WebscriptApi } from '@alfresco/js-api'; /** * { return new Observable((observer) => { diff --git a/lib/core/services/content.service.ts b/lib/core/services/content.service.ts index 736d75a428..a937ff5fb7 100644 --- a/lib/core/services/content.service.ts +++ b/lib/core/services/content.service.ts @@ -17,7 +17,7 @@ import { Injectable } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; -import { ContentApi, MinimalNode, Node, NodeEntry, NodesApi } from '@alfresco/js-api'; +import { MinimalNode, Node, NodeEntry, NodesApi } from '@alfresco/js-api'; import { Observable, Subject, from, throwError } from 'rxjs'; import { FolderCreatedEvent } from '../events/folder-created.event'; import { AlfrescoApiService } from './alfresco-api.service'; @@ -28,6 +28,7 @@ import { PermissionsEnum } from '../models/permissions.enum'; import { AllowableOperationsEnum } from '../models/allowable-operations.enum'; import { DownloadService } from './download.service'; import { ThumbnailService } from './thumbnail.service'; +import { ApiClientsService } from '../api/api-clients.service'; @Injectable({ providedIn: 'root' @@ -38,10 +39,8 @@ export class ContentService { folderCreate: Subject = new Subject(); folderEdit: Subject = new Subject(); - _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } _nodesApi: NodesApi; @@ -50,13 +49,15 @@ export class ContentService { return this._nodesApi; } - constructor(public authService: AuthenticationService, - public apiService: AlfrescoApiService, - private logService: LogService, - private sanitizer: DomSanitizer, - private downloadService: DownloadService, - private thumbnailService: ThumbnailService) { - } + constructor( + public authService: AuthenticationService, + public apiService: AlfrescoApiService, + private logService: LogService, + private sanitizer: DomSanitizer, + private downloadService: DownloadService, + private thumbnailService: ThumbnailService, + private apiClientsService: ApiClientsService + ) { } /** * @deprecated in 3.2.0, use DownloadService instead. diff --git a/lib/core/services/renditions.service.ts b/lib/core/services/renditions.service.ts index d8db56334d..78a3303ee2 100644 --- a/lib/core/services/renditions.service.ts +++ b/lib/core/services/renditions.service.ts @@ -16,10 +16,11 @@ */ import { Injectable } from '@angular/core'; -import { RenditionEntry, RenditionPaging, RenditionsApi, ContentApi } from '@alfresco/js-api'; +import { RenditionEntry, RenditionPaging, RenditionsApi } from '@alfresco/js-api'; import { Observable, from, interval, empty } from 'rxjs'; import { AlfrescoApiService } from './alfresco-api.service'; import { concatMap, switchMap, takeWhile, map } from 'rxjs/operators'; +import { ApiClientsService } from '../api/api-clients.service'; @Injectable({ providedIn: 'root' @@ -32,13 +33,11 @@ export class RenditionsService { return this._renditionsApi; } - private _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } - constructor(private apiService: AlfrescoApiService) { + constructor(private apiService: AlfrescoApiService, private apiClientsService: ApiClientsService) { } /** diff --git a/lib/core/services/thumbnail.service.ts b/lib/core/services/thumbnail.service.ts index a5684c4bec..3cbf99bad3 100644 --- a/lib/core/services/thumbnail.service.ts +++ b/lib/core/services/thumbnail.service.ts @@ -20,7 +20,8 @@ import { Injectable } from '@angular/core'; import { MatIconRegistry } from '@angular/material/icon'; import { DomSanitizer } from '@angular/platform-browser'; import { AlfrescoApiService } from './alfresco-api.service'; -import { ContentApi, NodeEntry } from '@alfresco/js-api'; +import { NodeEntry } from '@alfresco/js-api'; +import { ApiClientsService } from '../api/api-clients.service'; const DEFAULT_ICON = './assets/images/ft_ic_miscellaneous.svg'; @@ -163,13 +164,16 @@ export class ThumbnailService { task: './assets/images/task.svg' }; - _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } - constructor(protected apiService: AlfrescoApiService, matIconRegistry: MatIconRegistry, sanitizer: DomSanitizer) { + constructor( + protected apiService: AlfrescoApiService, + matIconRegistry: MatIconRegistry, + sanitizer: DomSanitizer, + private apiClientsService: ApiClientsService + ) { Object.keys(this.mimeTypeIcons).forEach((key) => { const url = sanitizer.bypassSecurityTrustResourceUrl(this.mimeTypeIcons[key]); diff --git a/lib/core/services/upload.service.ts b/lib/core/services/upload.service.ts index 42cf2bc543..a03812e401 100644 --- a/lib/core/services/upload.service.ts +++ b/lib/core/services/upload.service.ts @@ -29,7 +29,8 @@ import { FileModel, FileUploadProgress, FileUploadStatus } from '../models/file. import { AlfrescoApiService } from './alfresco-api.service'; import { DiscoveryApiService } from './discovery-api.service'; import { filter } from 'rxjs/operators'; -import { NodesApi, UploadApi, VersionsApi } from '@alfresco/js-api'; +import { NodesApi, VersionsApi } from '@alfresco/js-api'; +import { ApiClientsService } from '../api/api-clients.service'; const MIN_CANCELLABLE_FILE_SIZE = 1000000; const MAX_CANCELLABLE_FILE_PERCENTAGE = 50; @@ -61,10 +62,8 @@ export class UploadService { private abortedFile: string; private isThumbnailGenerationEnabled: boolean; - private _uploadApi: UploadApi; - get uploadApi(): UploadApi { - this._uploadApi = this._uploadApi ?? new UploadApi(this.apiService.getInstance()); - return this._uploadApi; + get uploadApi() { + return this.apiClientsService.get('ContentCustomClient.upload'); } private _nodesApi: NodesApi; @@ -80,6 +79,7 @@ export class UploadService { } constructor( + protected apiClientsService: ApiClientsService, protected apiService: AlfrescoApiService, private appConfigService: AppConfigService, private discoveryApiService: DiscoveryApiService) { @@ -237,7 +237,7 @@ export class UploadService { if (file.id) { return this.nodesApi.updateNodeContent(file.id, file.file as any, opts); } else { - const nodeBody = { ... file.options }; + const nodeBody = { ...file.options }; delete nodeBody['versioningEnabled']; return this.uploadApi.uploadFile( diff --git a/lib/core/viewer/components/viewer.component.ts b/lib/core/viewer/components/viewer.component.ts index 0786c81116..ce7e108537 100644 --- a/lib/core/viewer/components/viewer.component.ts +++ b/lib/core/viewer/components/viewer.component.ts @@ -44,6 +44,7 @@ import { MatDialog } from '@angular/material/dialog'; import { ContentService } from '../../services/content.service'; import { UploadService } from '../../services/upload.service'; import { FileModel } from '../../models'; +import { ApiClientsService } from '../../api/api-clients.service'; @Component({ selector: 'adf-viewer', @@ -297,21 +298,22 @@ export class ViewerComponent implements OnChanges, OnInit, OnDestroy { return this._nodesApi; } - _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } - constructor(private apiService: AlfrescoApiService, - private viewUtilService: ViewUtilService, - private logService: LogService, - private extensionService: AppExtensionService, - private contentService: ContentService, - private uploadService: UploadService, - private el: ElementRef, - public dialog: MatDialog, - private cdr: ChangeDetectorRef) { + constructor( + private apiService: AlfrescoApiService, + private viewUtilService: ViewUtilService, + private logService: LogService, + private extensionService: AppExtensionService, + private contentService: ContentService, + private uploadService: UploadService, + private el: ElementRef, + public dialog: MatDialog, + private cdr: ChangeDetectorRef, + private apiClientsService: ApiClientsService + ) { viewUtilService.maxRetries = this.maxRetries; } @@ -322,8 +324,8 @@ export class ViewerComponent implements OnChanges, OnInit, OnDestroy { ngOnInit() { this.apiService.nodeUpdated.pipe( filter((node) => node && node.id === this.nodeId && - (node.name !== this.fileName || - this.getNodeVersionProperty(this.nodeEntry.entry) !== this.getNodeVersionProperty(node))), + (node.name !== this.fileName || + this.getNodeVersionProperty(this.nodeEntry.entry) !== this.getNodeVersionProperty(node))), takeUntil(this.onDestroy$) ).subscribe((node) => this.onNodeUpdated(node)); diff --git a/lib/core/viewer/services/view-util.service.ts b/lib/core/viewer/services/view-util.service.ts index a9de81cfc7..067885512f 100644 --- a/lib/core/viewer/services/view-util.service.ts +++ b/lib/core/viewer/services/view-util.service.ts @@ -16,12 +16,13 @@ */ import { Injectable } from '@angular/core'; -import { ContentApi, RenditionEntry, RenditionPaging, RenditionsApi, VersionsApi } from '@alfresco/js-api'; +import { RenditionEntry, RenditionPaging, RenditionsApi, VersionsApi } from '@alfresco/js-api'; import { AlfrescoApiService } from '../../services/alfresco-api.service'; import { LogService } from '../../services/log.service'; import { Subject } from 'rxjs'; import { Track } from '../models/viewer.model'; import { TranslationService } from '../../services/translation.service'; +import { ApiClientsService } from '../../api/api-clients.service'; @Injectable({ providedIn: 'root' @@ -33,7 +34,7 @@ export class ViewUtilService { * Content groups based on categorization of files that can be viewed in the web browser. This * implementation or grouping is tied to the definition the ng component: ViewerComponent */ - // tslint:disable-next-line:variable-name + // tslint:disable-next-line:variable-name static ContentGroup = { IMAGE: 'image', MEDIA: 'media', @@ -80,10 +81,8 @@ export class ViewUtilService { return this._renditionsApi; } - _contentApi: ContentApi; - get contentApi(): ContentApi { - this._contentApi = this._contentApi ?? new ContentApi(this.apiService.getInstance()); - return this._contentApi; + get contentApi() { + return this.apiClientsService.get('ContentCustomClient.content'); } _versionsApi: VersionsApi; @@ -92,10 +91,11 @@ export class ViewUtilService { return this._versionsApi; } - constructor(private apiService: AlfrescoApiService, - private logService: LogService, - private translateService: TranslationService) { - } + constructor( + private apiService: AlfrescoApiService, + private logService: LogService, + private translateService: TranslationService, + private apiClientsService: ApiClientsService) { } /** * This method takes a url to trigger the print dialog against, and the type of artifact that it diff --git a/lib/process-services-cloud/src/lib/form/services/form-cloud.service.ts b/lib/process-services-cloud/src/lib/form/services/form-cloud.service.ts index 1fff4639fd..f778ca0ed5 100644 --- a/lib/process-services-cloud/src/lib/form/services/form-cloud.service.ts +++ b/lib/process-services-cloud/src/lib/form/services/form-cloud.service.ts @@ -22,12 +22,13 @@ import { AppConfigService, FormOutcomeModel, FormModel, - FormFieldOption + FormFieldOption, + ApiClientsService } from '@alfresco/adf-core'; import { Observable, from, EMPTY } from 'rxjs'; import { expand, map, reduce, switchMap } from 'rxjs/operators'; import { TaskDetailsCloudModel } from '../../task/start-task/models/task-details-cloud.model'; -import { CompleteFormRepresentation, UploadApi } from '@alfresco/js-api'; +import { CompleteFormRepresentation } from '@alfresco/js-api'; import { TaskVariableCloud } from '../models/task-variable-cloud.model'; import { BaseCloudService } from '../../services/base-cloud.service'; import { FormContent } from '../../services/form-fields.interfaces'; @@ -38,15 +39,14 @@ import { FormCloudServiceInterface } from './form-cloud.service.interface'; }) export class FormCloudService extends BaseCloudService implements FormCloudServiceInterface { - private _uploadApi; - get uploadApi(): UploadApi { - this._uploadApi = this._uploadApi ?? new UploadApi(this.apiService.getInstance()); - return this._uploadApi; + get uploadApi() { + return this.apiClientsService.get('ContentCustomClient.upload'); } constructor( apiService: AlfrescoApiService, - appConfigService: AppConfigService + appConfigService: AppConfigService, + private apiClientsService: ApiClientsService ) { super(apiService, appConfigService); } diff --git a/lib/process-services-cloud/src/lib/form/services/process-cloud-content.service.ts b/lib/process-services-cloud/src/lib/form/services/process-cloud-content.service.ts index b931de71c9..e9c8979976 100644 --- a/lib/process-services-cloud/src/lib/form/services/process-cloud-content.service.ts +++ b/lib/process-services-cloud/src/lib/form/services/process-cloud-content.service.ts @@ -22,19 +22,18 @@ import { AlfrescoApiService, LogService, ContentService, - DownloadService + DownloadService, + ApiClientsService } from '@alfresco/adf-core'; -import { AuthenticationApi, Node, UploadApi } from '@alfresco/js-api'; +import { AuthenticationApi, Node } from '@alfresco/js-api'; @Injectable({ providedIn: 'root' }) export class ProcessCloudContentService { - private _uploadApi; - get uploadApi(): UploadApi { - this._uploadApi = this._uploadApi ?? new UploadApi(this.apiService.getInstance()); - return this._uploadApi; + get uploadApi() { + return this.apiClientsService.get('ContentCustomClient.upload'); } private _authenticationApi; @@ -44,6 +43,7 @@ export class ProcessCloudContentService { } constructor( + private apiClientsService: ApiClientsService, private apiService: AlfrescoApiService, private logService: LogService, public contentService: ContentService, diff --git a/lib/process-services/src/lib/content-widget/attach-file-widget-dialog.service.ts b/lib/process-services/src/lib/content-widget/attach-file-widget-dialog.service.ts index 3137492058..fe61e19b5f 100644 --- a/lib/process-services/src/lib/content-widget/attach-file-widget-dialog.service.ts +++ b/lib/process-services/src/lib/content-widget/attach-file-widget-dialog.service.ts @@ -17,10 +17,10 @@ import { MatDialog } from '@angular/material/dialog'; import { EventEmitter, Injectable, Output } from '@angular/core'; -import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core'; +import { AlfrescoApiService, ApiClientsService, TranslationService } from '@alfresco/adf-core'; import { Observable, of, Subject } from 'rxjs'; import { AttachFileWidgetDialogComponentData } from './attach-file-widget-dialog-component.interface'; -import { AlfrescoEndpointRepresentation, Node, ContentApi } from '@alfresco/js-api'; +import { AlfrescoEndpointRepresentation, Node } from '@alfresco/js-api'; import { AttachFileWidgetDialogComponent } from './attach-file-widget-dialog.component'; import { switchMap } from 'rxjs/operators'; @@ -35,9 +35,11 @@ export class AttachFileWidgetDialogService { private externalApis: { [key: string]: AlfrescoApiService } = {}; - constructor(private dialog: MatDialog, - private translation: TranslationService) { - } + constructor( + private dialog: MatDialog, + private translation: TranslationService, + private apiClientsService: ApiClientsService + ) { } /** * Opens a dialog to choose a file to upload. @@ -65,20 +67,16 @@ export class AttachFileWidgetDialogService { downloadURL(repository: AlfrescoEndpointRepresentation, sourceId: string): Observable { const { accountIdentifier } = this.constructPayload(repository); + const contentApi = this.apiClientsService.get('ContentCustomClient.content'); if (this.externalApis[accountIdentifier]?.getInstance()) { - const contentApi = new ContentApi(this.externalApis[accountIdentifier].getInstance()); - if (this.externalApis[accountIdentifier].getInstance().isLoggedIn()) { return of(contentApi.getContentUrl(sourceId)); } } return this.showExternalHostLoginDialog(repository).pipe( - switchMap(() => { - const contentApi = new ContentApi(this.externalApis[accountIdentifier].getInstance()); - return of(contentApi.getContentUrl(sourceId)); - }) + switchMap(() => of(contentApi.getContentUrl(sourceId))) ); }