feat: replace api usage for ContentCustomApi

This commit is contained in:
Michal Dobkiewicz
2022-05-24 08:40:23 +02:00
parent f8b8251e02
commit c3b3822910
17 changed files with 167 additions and 135 deletions

View File

@@ -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<PropertyGroupContainer> {
const groupFetchStreams = groupNames

View File

@@ -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.

View File

@@ -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<string>();
constructor(private alfrescoApi: AlfrescoApiService,
constructor(
private apiClientsService: ApiClientsService,
private alfrescoApi: AlfrescoApiService,
private contentService: ContentService,
private contentVersionService: ContentVersionService,
private dialog: MatDialog) {
}
private dialog: MatDialog
) { }
ngOnChanges() {
this.loadVersionHistory();

View File

@@ -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';
/**
* <adf-webscript-get [scriptPath]="string"
@@ -45,10 +44,8 @@ import { WebscriptApi } from '@alfresco/js-api';
})
export class WebscriptComponent implements OnChanges {
_webscriptApi: WebscriptApi;
get webscriptApi(): WebscriptApi {
this._webscriptApi = this._webscriptApi ?? new WebscriptApi(this.apiService.getInstance());
return this._webscriptApi;
get webscriptApi() {
return this.apiClientsService.get('ContentCustomClient.webscript');
}
/** (required) Path to the webscript (as defined by webscript). */
@@ -87,9 +84,10 @@ export class WebscriptComponent implements OnChanges {
data: any = undefined;
showError: boolean = false;
constructor(private apiService: AlfrescoApiService,
private logService: LogService) {
}
constructor(
private apiClientsService: ApiClientsService,
private logService: LogService
) { }
ngOnChanges() {
if (this.showData) {

View File

@@ -17,6 +17,7 @@
import { NgModule } from '@angular/core';
import { ActivitiClientModule } from './activiti/activiti-client.module';
import { ContentCustomClientModule } from './content-custom/content-custom-client.module';
import { DiscoveryClientModule } from './discovery/discovery-client.module';
import { SearchClientModule } from './search/search-client.module';
@@ -24,7 +25,8 @@ import { SearchClientModule } from './search/search-client.module';
imports: [
ActivitiClientModule,
DiscoveryClientModule,
SearchClientModule
SearchClientModule,
ContentCustomClientModule
]
})
export class AlfrescoJsClientsModule { }

View File

@@ -0,0 +1,44 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ClassesApi, ContentApi, CustomModelApi, UploadApi, WebscriptApi } from '@alfresco/js-api';
import { NgModule } from '@angular/core';
import { ApiClientsService } from '../../api-clients.service';
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Api {
interface ApiRegistry {
['ContentCustomClient.webscript']: WebscriptApi;
['ContentCustomClient.upload']: UploadApi;
['ContentCustomClient.classes']: ClassesApi;
['ContentCustomClient.content']: ContentApi;
['ContentCustomClient.custom-model']: CustomModelApi;
}
}
}
@NgModule()
export class ContentCustomClientModule {
constructor(private apiClientsService: ApiClientsService) {
this.apiClientsService.register('ContentCustomClient.webscript', WebscriptApi);
this.apiClientsService.register('ContentCustomClient.upload', UploadApi);
this.apiClientsService.register('ContentCustomClient.classes', ClassesApi);
this.apiClientsService.register('ContentCustomClient.content', ContentApi);
this.apiClientsService.register('ContentCustomClient.custom-model', CustomModelApi);
}
}

View File

@@ -17,10 +17,10 @@
import { Directive, Input, HostListener } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { AlfrescoApiService } from '../services/alfresco-api.service';
import { DownloadZipDialogComponent } from '../dialogs/download-zip/download-zip.dialog';
import { ContentApi, NodeEntry, VersionEntry } from '@alfresco/js-api';
import { NodeEntry, VersionEntry } from '@alfresco/js-api';
import { DownloadService } from '../services/download.service';
import { ApiClientsService } from '../api/api-clients.service';
/**
* Directive selectors without adf- prefix will be deprecated on 3.0.0
@@ -31,10 +31,8 @@ import { DownloadService } from '../services/download.service';
})
export class NodeDownloadDirective {
_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');
}
/** Nodes to download. */
@@ -51,10 +49,10 @@ export class NodeDownloadDirective {
}
constructor(
private apiService: AlfrescoApiService,
private apiClientsService: ApiClientsService,
private downloadService: DownloadService,
private dialog: MatDialog) {
}
private dialog: MatDialog
) { }
/**
* Downloads multiple selected nodes.

View File

@@ -16,12 +16,11 @@
*/
import { LogService } from '../../services/log.service';
import { AlfrescoApiService } from '../../services/alfresco-api.service';
import { Injectable } from '@angular/core';
import { Observable, from } from 'rxjs';
import { FormModel } from '../components/widgets/core/form.model';
import { map, catchError } from 'rxjs/operators';
import { CustomModelApi } from '@alfresco/js-api';
import { ApiClientsService } from '../../api/api-clients.service';
@Injectable({
providedIn: 'root'
@@ -32,15 +31,11 @@ export class EcmModelService {
public static MODEL_NAME: string = 'activitiFormsModel';
public static TYPE_MODEL: string = 'cm:folder';
_customModelApi: CustomModelApi;
get customModelApi(): CustomModelApi {
this._customModelApi = this._customModelApi ?? new CustomModelApi(this.apiService.getInstance());
return this._customModelApi;
get customModelApi() {
return this.apiClientsService.get('ContentCustomClient.custom-model');
}
constructor(private apiService: AlfrescoApiService,
private logService: LogService) {
}
constructor(private apiClientsService: ApiClientsService, private logService: LogService) { }
public createEcmTypeForActivitiForm(formName: string, form: FormModel): Observable<any> {
return new Observable((observer) => {

View File

@@ -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<MinimalNode> = new Subject<MinimalNode>();
folderEdit: Subject<MinimalNode> = new Subject<MinimalNode>();
_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,
constructor(
public authService: AuthenticationService,
public apiService: AlfrescoApiService,
private logService: LogService,
private sanitizer: DomSanitizer,
private downloadService: DownloadService,
private thumbnailService: ThumbnailService) {
}
private thumbnailService: ThumbnailService,
private apiClientsService: ApiClientsService
) { }
/**
* @deprecated in 3.2.0, use DownloadService instead.

View File

@@ -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) {
}
/**

View File

@@ -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]);

View File

@@ -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) {

View File

@@ -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,13 +298,12 @@ 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,
constructor(
private apiService: AlfrescoApiService,
private viewUtilService: ViewUtilService,
private logService: LogService,
private extensionService: AppExtensionService,
@@ -311,7 +311,9 @@ export class ViewerComponent implements OnChanges, OnInit, OnDestroy {
private uploadService: UploadService,
private el: ElementRef,
public dialog: MatDialog,
private cdr: ChangeDetectorRef) {
private cdr: ChangeDetectorRef,
private apiClientsService: ApiClientsService
) {
viewUtilService.maxRetries = this.maxRetries;
}

View File

@@ -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'
@@ -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,
constructor(
private apiService: AlfrescoApiService,
private logService: LogService,
private translateService: TranslationService) {
}
private translateService: TranslationService,
private apiClientsService: ApiClientsService) { }
/**
* This method takes a url to trigger the print dialog against, and the type of artifact that it

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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<string> {
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)))
);
}