@alfresco/adf-content-services
Version:
Alfresco ADF content services
103 lines • 16.4 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* 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 { Injectable } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { AlfrescoApiService } from '../services/alfresco-api.service';
import { NewVersionUploaderDialogComponent } from './new-version-uploader.dialog';
import { VersionsApi } from '@alfresco/js-api';
import { Observable } from 'rxjs';
import { OverlayContainer } from '@angular/cdk/overlay';
import * as i0 from "@angular/core";
import * as i1 from "../services/alfresco-api.service";
import * as i2 from "@angular/material/dialog";
import * as i3 from "@angular/cdk/overlay";
export class NewVersionUploaderService {
get versionsApi() {
this._versionsApi = this._versionsApi ?? new VersionsApi(this.apiService.getInstance());
return this._versionsApi;
}
constructor(apiService, dialog, overlayContainer) {
this.apiService = apiService;
this.dialog = dialog;
this.overlayContainer = overlayContainer;
}
/**
* Open a dialog NewVersionUploaderDialogComponent to display:
* - a side by side comparison between the current target node (type, name, icon) and the new file that should update it's version
* - the new version's minor/major changes and the optional comment of a node and the ability to upload a new file version
* - if data.showVersionsOnly is set to true, displays the version history of a node, with the ability to restore, delete and view version of the current node
*
* @param data data to pass to MatDialog
* @param config allow to override default MatDialogConfig
* @param selectorAutoFocusedOnClose element's selector which should be autofocused after closing modal
* @returns an Observable represents the triggered dialog action or an error in case of an error condition
*/
openUploadNewVersionDialog(data, config, selectorAutoFocusedOnClose) {
const { file, node, showVersionsOnly } = data;
const allowDownload = data.allowDownload ?? true;
const showComments = data.showComments ?? true;
return new Observable((observer) => {
this.versionsApi.listVersionHistory(node.id).then((versionPaging) => {
const dialogRef = this.dialog.open(NewVersionUploaderDialogComponent, {
data: {
file,
node,
currentVersion: versionPaging.list.entries[0].entry,
showComments,
allowDownload,
showVersionsOnly,
allowViewVersions: data.allowViewVersions ?? true,
allowVersionDelete: data.allowVersionDelete ?? true,
showActions: data.showActions ?? true
},
panelClass: this.composePanelClass(showVersionsOnly),
width: '630px',
...(config && Object.keys(config).length > 0 && config)
});
dialogRef.componentInstance.dialogAction.asObservable().subscribe((newVersionUploaderData) => {
observer.next(newVersionUploaderData);
});
dialogRef.componentInstance.uploadError.asObservable().subscribe((error) => {
observer.error(error);
});
dialogRef.afterClosed().subscribe(() => {
this.overlayContainer.getContainerElement().setAttribute('role', 'region');
NewVersionUploaderService.focusOnClose(selectorAutoFocusedOnClose);
});
this.overlayContainer.getContainerElement().setAttribute('role', 'main');
});
});
}
composePanelClass(showVersionsOnly) {
const dialogCssClass = 'adf-new-version-uploader-dialog';
return [dialogCssClass, `${dialogCssClass}-${showVersionsOnly ? 'list' : 'upload'}`];
}
static focusOnClose(selectorAutoFocusedOnClose) {
if (selectorAutoFocusedOnClose) {
document.querySelector(selectorAutoFocusedOnClose)?.focus();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NewVersionUploaderService, deps: [{ token: i1.AlfrescoApiService }, { token: i2.MatDialog }, { token: i3.OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NewVersionUploaderService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NewVersionUploaderService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.AlfrescoApiService }, { type: i2.MatDialog }, { type: i3.OverlayContainer }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LXZlcnNpb24tdXBsb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvbmV3LXZlcnNpb24tdXBsb2FkZXIvbmV3LXZlcnNpb24tdXBsb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sMEJBQTBCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBS3hELE1BQU0sT0FBTyx5QkFBeUI7SUFFbEMsSUFBSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQW9CLFVBQThCLEVBQVUsTUFBaUIsRUFBVSxnQkFBa0M7UUFBckcsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUFHLENBQUM7SUFFN0g7Ozs7Ozs7Ozs7T0FVRztJQUNILDBCQUEwQixDQUN0QixJQUFrQyxFQUNs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QUF5QjtrSEFBekIseUJBQXlCLGNBRnRCLE1BQU07OzJGQUVULHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9uZXctdmVyc2lvbi11cGxvYWRlci5kaWFsb2cnO1xuaW1wb3J0IHsgVmVyc2lvbnNBcGkgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE5ld1ZlcnNpb25VcGxvYWRlckRhdGEsIE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0RhdGEgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVybGF5Q29udGFpbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgX3ZlcnNpb25zQXBpOiBWZXJzaW9uc0FwaTtcbiAgICBnZXQgdmVyc2lvbnNBcGkoKTogVmVyc2lvbnNBcGkge1xuICAgICAgICB0aGlzLl92ZXJzaW9uc0FwaSA9IHRoaXMuX3ZlcnNpb25zQXBpID8/IG5ldyBWZXJzaW9uc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uc0FwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyKSB7fVxuXG4gICAgLyoqXG4gICAgICogT3BlbiBhIGRpYWxvZyBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dDb21wb25lbnQgdG8gZGlzcGxheTpcbiAgICAgKiAtIGEgc2lkZSBieSBzaWRlIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgY3VycmVudCB0YXJnZXQgbm9kZSAodHlwZSwgbmFtZSwgaWNvbikgYW5kIHRoZSBuZXcgZmlsZSB0aGF0IHNob3VsZCB1cGRhdGUgaXQncyB2ZXJzaW9uXG4gICAgICogLSB0aGUgbmV3IHZlcnNpb24ncyBtaW5vci9tYWpvciBjaGFuZ2VzIGFuZCB0aGUgb3B0aW9uYWwgY29tbWVudCBvZiBhIG5vZGUgYW5kIHRoZSBhYmlsaXR5IHRvIHVwbG9hZCBhIG5ldyBmaWxlIHZlcnNpb25cbiAgICAgKiAtIGlmIGRhdGEuc2hvd1ZlcnNpb25zT25seSBpcyBzZXQgdG8gdHJ1ZSwgZGlzcGxheXMgdGhlIHZlcnNpb24gaGlzdG9yeSBvZiBhIG5vZGUsIHdpdGggdGhlIGFiaWxpdHkgdG8gcmVzdG9yZSwgZGVsZXRlIGFuZCB2aWV3IHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEgZGF0YSB0byBwYXNzIHRvIE1hdERpYWxvZ1xuICAgICAqIEBwYXJhbSBjb25maWcgYWxsb3cgdG8gb3ZlcnJpZGUgZGVmYXVsdCBNYXREaWFsb2dDb25maWdcbiAgICAgKiBAcGFyYW0gc2VsZWN0b3JBdXRvRm9jdXNlZE9uQ2xvc2UgZWxlbWVudCdzIHNlbGVjdG9yIHdoaWNoIHNob3VsZCBiZSBhdXRvZm9jdXNlZCBhZnRlciBjbG9zaW5nIG1vZGFsXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSByZXByZXNlbnRzIHRoZSB0cmlnZ2VyZWQgZGlhbG9nIGFjdGlvbiBvciBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIGVycm9yIGNvbmRpdGlvblxuICAgICAqL1xuICAgIG9wZW5VcGxvYWROZXdWZXJzaW9uRGlhbG9nKFxuICAgICAgICBkYXRhOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhLFxuICAgICAgICBjb25maWc/OiBNYXREaWFsb2dDb25maWcsXG4gICAgICAgIHNlbGVjdG9yQXV0b0ZvY3VzZWRPbkNsb3NlPzogc3RyaW5nXG4gICAgKTogT2JzZXJ2YWJsZTxOZXdWZXJzaW9uVXBsb2FkZXJEYXRhPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSwgbm9kZSwgc2hvd1ZlcnNpb25zT25seSB9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgYWxsb3dEb3dubG9hZCA9IGRhdGEuYWxsb3dEb3dubG9hZCA/PyB0cnVlO1xuICAgICAgICBjb25zdCBzaG93Q29tbWVudHMgPSBkYXRhLnNob3dDb21tZW50cyA/PyB0cnVlO1xuXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbnNBcGkubGlzdFZlcnNpb25IaXN0b3J5KG5vZGUuaWQpLnRoZW4oKHZlcnNpb25QYWdpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuPE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0NvbXBvbmVudCwgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YT4oXG4gICAgICAgICAgICAgICAgICAgIE5ld1ZlcnNpb25VcGxvYWRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbjogdmVyc2lvblBhZ2luZy5saXN0LmVudHJpZXNbMF0uZW50cnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RG93bmxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1ZlcnNpb25zT25seSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ZpZXdWZXJzaW9uczogZGF0YS5hbGxvd1ZpZXdWZXJzaW9ucyA/PyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93VmVyc2lvbkRlbGV0ZTogZGF0YS5hbGxvd1ZlcnNpb25EZWxldGUgPz8gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QWN0aW9uczogZGF0YS5zaG93QWN0aW9ucyA/PyB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5jb21wb3NlUGFuZWxDbGFzcyhzaG93VmVyc2lvbnNPbmx5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnNjMwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGNvbmZpZyAmJiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA+IDAgJiYgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZGlhbG9nQWN0aW9uLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgobmV3VmVyc2lvblVwbG9hZGVyRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ld1ZlcnNpb25VcGxvYWRlckRhdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS51cGxvYWRFcnJvci5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgncm9sZScsICdyZWdpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZS5mb2N1c09uQ2xvc2Uoc2VsZWN0b3JBdXRvRm9jdXNlZE9uQ2xvc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ21haW4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBvc2VQYW5lbENsYXNzKHNob3dWZXJzaW9uc09ubHk6IGJvb2xlYW4pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0Nzc0NsYXNzID0gJ2FkZi1uZXctdmVyc2lvbi11cGxvYWRlci1kaWFsb2cnO1xuICAgICAgICByZXR1cm4gW2RpYWxvZ0Nzc0NsYXNzLCBgJHtkaWFsb2dDc3NDbGFzc30tJHtzaG93VmVyc2lvbnNPbmx5ID8gJ2xpc3QnIDogJ3VwbG9hZCd9YF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9jdXNPbkNsb3NlKHNlbGVjdG9yQXV0b0ZvY3VzZWRPbkNsb3NlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdG9yQXV0b0ZvY3VzZWRPbkNsb3NlKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihzZWxlY3RvckF1dG9Gb2N1c2VkT25DbG9zZSk/LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=