UNPKG

@alfresco/adf-content-services

Version:
103 lines 16.4 kB
/*! * @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=