UNPKG

@alfresco/adf-content-services

Version:
288 lines 73.2 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 { Component, Inject, ViewChild, ViewEncapsulation } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms'; import { ContentService } from '../common/services/content.service'; import { SharedLinksApiService } from './services/shared-links-api.service'; import { ClipboardDirective, ConfirmDialogComponent } from '@alfresco/adf-core'; import { RenditionService } from '../common/services/rendition.service'; import { add, endOfDay, format, isBefore } from 'date-fns'; import { CommonModule } from '@angular/common'; import { TranslateModule } from '@ngx-translate/core'; import { MatIconModule } from '@angular/material/icon'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatInputModule } from '@angular/material/input'; import { MatButtonModule } from '@angular/material/button'; import * as i0 from "@angular/core"; import * as i1 from "./services/shared-links-api.service"; import * as i2 from "@angular/material/dialog"; import * as i3 from "../common/services/content.service"; import * as i4 from "../common/services/rendition.service"; import * as i5 from "@angular/common"; import * as i6 from "@ngx-translate/core"; import * as i7 from "@angular/material/icon"; import * as i8 from "@angular/forms"; import * as i9 from "@angular/material/slide-toggle"; import * as i10 from "@angular/material/form-field"; import * as i11 from "@angular/material/datepicker"; import * as i12 from "@angular/material/input"; import * as i13 from "@angular/material/button"; export class ShareDialogComponent { constructor(sharedLinksApiService, dialogRef, dialog, contentService, renditionService, data) { this.sharedLinksApiService = sharedLinksApiService; this.dialogRef = dialogRef; this.dialog = dialog; this.contentService = contentService; this.renditionService = renditionService; this.data = data; this.minDateValidator = (control) => isBefore(endOfDay(new Date(control.value)), this.minDate) ? { invalidDate: true } : null; this.minDate = add(new Date(), { days: 1 }); this.isFileShared = false; this.isDisabled = false; this.isLinkWithExpiryDate = false; this.form = new FormGroup({ sharedUrl: new FormControl(''), time: new FormControl({ value: null, disabled: true }, [Validators.required, this.minDateValidator]) }); } ngOnInit() { if (this.data.node?.entry) { this.fileName = this.data.node.entry.name; this.baseShareUrl = this.data.baseShareUrl; const properties = this.data.node.entry.properties; if (!properties?.['qshare:sharedId']) { this.createSharedLinks(this.data.node.entry.id); } else { this.sharedId = properties['qshare:sharedId']; this.isFileShared = true; const expiryDate = this.updateForm(); this.isExpiryDateToggleChecked = this.isLinkWithExpiryDate = !!expiryDate; this.isLinkWithExpiryDate ? this.time.enable() : this.time.disable(); } } } onTimeChanged() { if (this.time.valid) { this.updateNode(this.time.value); } } get time() { return this.form.controls['time']; } onSlideShareChange(event) { if (event.checked) { this.createSharedLinks(this.data.node.entry.id); } else { this.openConfirmationDialog(); } } get canUpdate() { const { entry } = this.data.node; if (entry?.allowableOperations) { return this.contentService.hasAllowableOperations(entry, 'update'); } return true; } onToggleExpirationDate(slideToggle) { if (slideToggle.checked) { this.time.enable(); this.isExpiryDateToggleChecked = true; } else { this.time.disable(); this.time.setValue(null); this.deleteSharedLink(this.sharedId, true); } } onDatePickerClosed() { this.onTimeChanged(); if (!this.time.value) { this.slideToggleExpirationDate.checked = false; } } preventIncorrectCharacters(e) { const regex = /[^\d/.-]/; return e.key.length === 1 ? !regex.test(e.key) : true; } openConfirmationDialog() { this.isFileShared = false; this.dialog .open(ConfirmDialogComponent, { data: { title: 'SHARE.CONFIRMATION.DIALOG-TITLE', message: 'SHARE.CONFIRMATION.MESSAGE', yesLabel: 'SHARE.CONFIRMATION.REMOVE', noLabel: 'SHARE.CONFIRMATION.CANCEL' }, minWidth: '250px', closeOnNavigation: true }) .beforeClosed() .subscribe((deleteSharedLink) => { if (deleteSharedLink) { this.deleteSharedLink(this.sharedId); } else { this.isFileShared = true; } }); } createSharedLinks(nodeId, sharedLinkWithExpirySettings) { this.isDisabled = true; this.sharedLinksApiService.createSharedLinks(nodeId, sharedLinkWithExpirySettings).subscribe((sharedLink) => { if (sharedLink.entry) { this.sharedId = sharedLink.entry.id; if (this.data.node.entry.properties) { this.data.node.entry.properties['qshare:sharedId'] = this.sharedId; } else { this.data.node.entry.properties = { 'qshare:sharedId': this.sharedId }; } this.isDisabled = false; this.isFileShared = true; // eslint-disable-next-line this.renditionService.getNodeRendition(this.data.node.entry.id); this.updateForm(); } }, () => { this.isDisabled = false; this.isFileShared = false; }); } deleteSharedLink(sharedId, dialogOpenFlag) { this.isDisabled = true; this.sharedLinksApiService.deleteSharedLink(sharedId).subscribe((response) => { if (response instanceof Error) { this.isDisabled = false; this.isFileShared = true; this.handleError(response); } else { if (this.data.node.entry.properties) { this.data.node.entry.properties['qshare:sharedId'] = null; this.data.node.entry.properties['qshare:expiryDate'] = null; } if (dialogOpenFlag) { this.createSharedLinks(this.data.node.entry.id); this.isExpiryDateToggleChecked = false; this.isLinkWithExpiryDate = false; } else { this.dialogRef.close(false); } } }); } handleError(error) { let message = 'SHARE.UNSHARE_ERROR'; let statusCode = 0; try { statusCode = JSON.parse(error.message).error.statusCode; } catch { /* empty */ } if (statusCode === 403) { message = 'SHARE.UNSHARE_PERMISSION_ERROR'; } this.sharedLinksApiService.error.next({ statusCode, message }); } updateForm() { const { entry } = this.data.node; let expiryDate = null; if (entry?.properties) { expiryDate = entry.properties['qshare:expiryDate']; } this.form.setValue({ sharedUrl: `${this.baseShareUrl}${this.sharedId}`, time: expiryDate ? new Date(expiryDate) : null }, { emitEvent: false }); return expiryDate; } updateNode(date) { let expiryDate; if (date) { expiryDate = format(endOfDay(new Date(date)), `yyyy-MM-dd'T'HH:mm:ss.SSSxx`); } else { expiryDate = null; } if (this.sharedId && expiryDate) { this.isDisabled = true; this.sharedLinksApiService.deleteSharedLink(this.sharedId).subscribe((response) => { if (response instanceof Error) { this.isDisabled = false; this.isFileShared = true; this.handleError(response); } else { this.sharedLinkWithExpirySettings(expiryDate); this.isLinkWithExpiryDate = true; this.updateEntryExpiryDate(date); } }); } } sharedLinkWithExpirySettings(expiryDate) { const nodeObject = { nodeId: this.data.node.entry.id, expiresAt: expiryDate }; this.createSharedLinks(this.data.node.entry.id, nodeObject); } updateEntryExpiryDate(date) { const { properties } = this.data.node.entry; if (properties) { properties['qshare:expiryDate'] = date ? new Date(date) : null; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ShareDialogComponent, deps: [{ token: i1.SharedLinksApiService }, { token: i2.MatDialogRef }, { token: i2.MatDialog }, { token: i3.ContentService }, { token: i4.RenditionService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ShareDialogComponent, isStandalone: true, selector: "adf-share-dialog", host: { classAttribute: "adf-share-dialog" }, viewQueries: [{ propertyName: "slideToggleExpirationDate", first: true, predicate: ["slideToggleExpirationDate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"adf-share-link__dialog-content\">\n <div class=\"adf-share-link__dialog-container\">\n <div class=\"adf-share-link--header adf-share-link--row\">\n <div\n data-automation-id=\"adf-share-dialog-title\"\n class=\"adf-share-link__title adf-share-link__label adf-share-link__heading\"\n role=\"heading\"\n aria-level=\"1\">\n {{ 'SHARE.DIALOG-TITLE' | translate }} {{ fileName }}\n </div>\n <mat-icon mat-dialog-close class=\"adf-share-link__close adf-share-link__icon\">close</mat-icon>\n </div>\n <mat-dialog-content class=\"adf-share-link--dialog-content\">\n <hr class=\"adf-share-link__separation-line\" />\n <form [formGroup]=\"form\" class=\"adf-share-link__form\">\n <div class=\"adf-share-link--row adf-share-link--row-sharable\">\n <mat-icon class=\"adf-share-link__icon\">timer</mat-icon>\n <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.LINK-EXPIRY-DATE' | translate }}\n </div>\n <mat-slide-toggle\n #slideToggleExpirationDate\n [disabled]=\"!canUpdate\"\n color=\"primary\"\n data-automation-id=\"adf-expire-toggle\"\n aria-label=\"{{ 'SHARE.EXPIRES' | translate }}\"\n [checked]=\"!!time.value\"\n (change)=\"onToggleExpirationDate($event)\" />\n </div>\n <div\n [style.display]=\"isExpiryDateToggleChecked ? 'block' : 'none'\"\n data-automation-id=\"adf-slide-toggle-checked\"\n class=\"adf-share-link__date-time-container\">\n <mat-form-field class=\"adf-full-width\" subscriptSizing=\"dynamic\" data-automation-id=\"adf-content-share-expiration-field\">\n <mat-label>{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}</mat-label>\n <mat-datepicker-toggle\n [disabled]=\"time.disabled\"\n [for]=\"datePicker\"\n matSuffix\n class=\"adf-share-link__icon adf-share-link__calender-icon\" />\n <mat-datepicker\n #datePicker\n (closed)=\"onDatePickerClosed()\" />\n <input\n class=\"adf-share-link__input\"\n #datePickerInput\n matInput\n [attr.aria-label]=\"'SHARE.EXPIRATION-LABEL' | translate\"\n [min]=\"minDate\"\n formControlName=\"time\"\n (keydown)=\"preventIncorrectCharacters($event)\"\n (blur)=\"onTimeChanged()\"\n (keydown.enter)=\"datePickerInput.blur()\"\n [matDatepicker]=\"datePicker\"/>\n <mat-error *ngIf=\"time.errors?.['invalidDate'] && (time.dirty || time.touched)\"\n data-automation-id=\"adf-share-link-input-warning\">{{ 'SHARE.INVALID_DATE_ERROR' | translate }}</mat-error>\n </mat-form-field>\n </div>\n <p class=\"adf-share-link__info adf-share-link__para\">{{ 'SHARE.SHARE-LINK' | translate }}</p>\n <div class=\"adf-share-link--row adf-share-link--sharable-container\">\n <mat-slide-toggle\n color=\"primary\"\n data-automation-id=\"adf-share-toggle\"\n class=\"adf-share-link--row__slide-toggle\"\n aria-label=\"{{ 'SHARE.TITLE' | translate }}\"\n [checked]=\"isFileShared\"\n [disabled]=\"!canUpdate || isDisabled\"\n (change)=\"onSlideShareChange($event)\" />\n <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.SHARABLE-LINK-CREATED' | translate }}\n </div>\n </div>\n <mat-form-field\n subscriptSizing=\"dynamic\"\n floatLabel=\"always\"\n class=\"adf-full-width adf-share-link__form--field\"\n data-automation-id=\"adf-content-share-public-link-field\"\n [ngClass]=\"isLinkWithExpiryDate? 'adf-share-link__border-color' : ''\">\n <input\n #sharedLinkInput\n data-automation-id=\"adf-share-link\"\n class=\"adf-share-link__input\"\n matInput\n placeholder=\"{{ 'SHARE.PUBLIC-LINK' | translate }}\"\n [attr.aria-label]=\"'SHARE.PUBLIC-LINK' | translate\"\n formControlName=\"sharedUrl\"\n readonly=\"readonly\">\n <mat-icon\n class=\"adf-input-action adf-share-link__icon adf-share-link__copy-icon\"\n role=\"button\"\n matSuffix\n [clipboard-notification]=\"'SHARE.CLIPBOARD-MESSAGE' | translate\"\n [adf-clipboard]\n [attr.aria-label]=\"'SHARE.COPY_BUTTON_LABEL' | translate\"\n [target]=\"sharedLinkInput\"\n tabindex=\"0\">\n content_copy\n </mat-icon>\n </mat-form-field>\n <p class=\"adf-share-link__warn adf-share-link__para\" *ngIf=\"isLinkWithExpiryDate\">\n {{ 'SHARE.LINK-WITH-EXPIRY-SETTINGS' | translate }}\n </p>\n <div class=\"adf-share-link--row\">\n <mat-icon class=\"adf-share-link__icon\">public</mat-icon>\n <p\n class=\"adf-share-link__info adf-sharable-link adf-share-link__public-content adf-share-link__para\">\n {{ 'SHARE.PUBLIC-CONTENT' | translate }}\n </p>\n </div>\n </form>\n <hr class=\"adf-share-link__separation-line\" />\n </mat-dialog-content>\n <div class=\"adf-share-link__actions\" mat-dialog-actions>\n <button data-automation-id=\"adf-share-dialog-close\" mat-button color=\"primary\" mat-dialog-close>\n {{ 'SHARE.CLOSE' | translate }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".adf-share-link-dialog .adf-share-link .mat-mdc-form-field-flex{height:48px}.adf-share-link-dialog .adf-share-link__dialog-content{display:flex;flex-direction:column}.adf-share-link-dialog .adf-share-link__dialog-container{background-color:var(--theme-card-background-color);border-radius:16px}.adf-share-link-dialog .adf-share-link__label,.adf-share-link-dialog .adf-share-link__title,.adf-share-link-dialog .adf-share-link__info{letter-spacing:-.4px;line-height:2;font-weight:400;font-style:normal;font-stretch:normal;font-size:var(--theme-body-1-font-size);color:var(--adf-theme-foreground-text-color-087)}.adf-share-link-dialog .adf-share-link__label{flex:1 1 auto}.adf-share-link-dialog .adf-share-link__form{padding-top:8px}.adf-share-link-dialog .adf-share-link__form .mat-mdc-form-field-infix:has(.adf-share-link__input){border-top:.9375em solid transparent;border-bottom:.9375em solid transparent;height:16px}.adf-share-link-dialog .adf-share-link__form--field{padding-bottom:16px}.adf-share-link-dialog .adf-share-link__public-content{color:var(--adf-theme-foreground-text-color-054);font-size:var(--theme-caption-font-size)}.adf-share-link-dialog .adf-share-link__warn{color:var(--theme-warn-color-a700);font-size:var(--theme-caption-font-size)}.adf-share-link-dialog .adf-share-link--row{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:8px 0}.adf-share-link-dialog .adf-share-link--row-sharable,.adf-share-link-dialog .adf-share-link--sharable-container{margin-bottom:0}.adf-share-link-dialog .adf-share-link--header{padding:16px 24px 0}.adf-share-link-dialog .adf-share-link--dialog-content{padding-top:0;padding-bottom:0}.adf-share-link-dialog .adf-share-link__input{color:var(--adf-theme-foreground-text-color-087)}.adf-share-link-dialog .adf-share-link__separation-line{border:1px solid var(--theme-grey-background-color);margin:8px -24px}.adf-share-link-dialog .adf-share-link__close{cursor:pointer;margin-left:12px}.adf-share-link-dialog .adf-share-link__icon{color:var(--adf-theme-foreground-icon-color-054);padding-bottom:0;padding-right:0}.adf-share-link-dialog .adf-share-link__para{margin-top:8px;margin-bottom:8px}.adf-share-link-dialog .adf-share-link__heading{font-weight:700;font-size:var(--theme-subheading-2-font-size)}.adf-share-link-dialog .adf-share-link__copy-icon{padding-top:18px;font-size:22px}.adf-share-link-dialog .adf-share-link__calender-icon{top:12px;position:relative;right:-6px}.adf-share-link-dialog .adf-share-link__calender-icon svg{height:18px;width:18px}.adf-share-link-dialog .adf-share-link__date-time-container{padding-bottom:20px}.adf-share-link-dialog .adf-share-link__border-color{border:1px solid var(--theme-warn-color-a700)}.adf-share-link-dialog .adf-input-action{cursor:pointer}.adf-share-link-dialog .adf-full-width{width:100%;border-radius:6px;margin-top:-6px}.adf-share-link-dialog .adf-sharable-link{margin-top:2px;margin-left:8px}.adf-share-link-dialog .adf-share-link__actions{justify-content:flex-end;padding:8px 24px 32px 0;margin:8px 0 0}.adf-share-link-dialog .adf-share-link__actions>button{color:var(--adf-theme-foreground-base-color);background-color:var(--theme-grey-text-background-color);margin-right:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i8.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: ClipboardDirective, selector: "[adf-clipboard]", inputs: ["adf-clipboard", "target", "clipboard-notification"], exportAs: ["adfClipboard"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ShareDialogComponent, decorators: [{ type: Component, args: [{ selector: 'adf-share-dialog', standalone: true, imports: [ CommonModule, TranslateModule, MatIconModule, MatDialogModule, ReactiveFormsModule, MatSlideToggleModule, MatFormFieldModule, MatDatepickerModule, MatInputModule, MatButtonModule, ClipboardDirective ], host: { class: 'adf-share-dialog' }, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-share-link__dialog-content\">\n <div class=\"adf-share-link__dialog-container\">\n <div class=\"adf-share-link--header adf-share-link--row\">\n <div\n data-automation-id=\"adf-share-dialog-title\"\n class=\"adf-share-link__title adf-share-link__label adf-share-link__heading\"\n role=\"heading\"\n aria-level=\"1\">\n {{ 'SHARE.DIALOG-TITLE' | translate }} {{ fileName }}\n </div>\n <mat-icon mat-dialog-close class=\"adf-share-link__close adf-share-link__icon\">close</mat-icon>\n </div>\n <mat-dialog-content class=\"adf-share-link--dialog-content\">\n <hr class=\"adf-share-link__separation-line\" />\n <form [formGroup]=\"form\" class=\"adf-share-link__form\">\n <div class=\"adf-share-link--row adf-share-link--row-sharable\">\n <mat-icon class=\"adf-share-link__icon\">timer</mat-icon>\n <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.LINK-EXPIRY-DATE' | translate }}\n </div>\n <mat-slide-toggle\n #slideToggleExpirationDate\n [disabled]=\"!canUpdate\"\n color=\"primary\"\n data-automation-id=\"adf-expire-toggle\"\n aria-label=\"{{ 'SHARE.EXPIRES' | translate }}\"\n [checked]=\"!!time.value\"\n (change)=\"onToggleExpirationDate($event)\" />\n </div>\n <div\n [style.display]=\"isExpiryDateToggleChecked ? 'block' : 'none'\"\n data-automation-id=\"adf-slide-toggle-checked\"\n class=\"adf-share-link__date-time-container\">\n <mat-form-field class=\"adf-full-width\" subscriptSizing=\"dynamic\" data-automation-id=\"adf-content-share-expiration-field\">\n <mat-label>{{ 'SHARE.EXPIRATION-PLACEHOLDER' | translate }}</mat-label>\n <mat-datepicker-toggle\n [disabled]=\"time.disabled\"\n [for]=\"datePicker\"\n matSuffix\n class=\"adf-share-link__icon adf-share-link__calender-icon\" />\n <mat-datepicker\n #datePicker\n (closed)=\"onDatePickerClosed()\" />\n <input\n class=\"adf-share-link__input\"\n #datePickerInput\n matInput\n [attr.aria-label]=\"'SHARE.EXPIRATION-LABEL' | translate\"\n [min]=\"minDate\"\n formControlName=\"time\"\n (keydown)=\"preventIncorrectCharacters($event)\"\n (blur)=\"onTimeChanged()\"\n (keydown.enter)=\"datePickerInput.blur()\"\n [matDatepicker]=\"datePicker\"/>\n <mat-error *ngIf=\"time.errors?.['invalidDate'] && (time.dirty || time.touched)\"\n data-automation-id=\"adf-share-link-input-warning\">{{ 'SHARE.INVALID_DATE_ERROR' | translate }}</mat-error>\n </mat-form-field>\n </div>\n <p class=\"adf-share-link__info adf-share-link__para\">{{ 'SHARE.SHARE-LINK' | translate }}</p>\n <div class=\"adf-share-link--row adf-share-link--sharable-container\">\n <mat-slide-toggle\n color=\"primary\"\n data-automation-id=\"adf-share-toggle\"\n class=\"adf-share-link--row__slide-toggle\"\n aria-label=\"{{ 'SHARE.TITLE' | translate }}\"\n [checked]=\"isFileShared\"\n [disabled]=\"!canUpdate || isDisabled\"\n (change)=\"onSlideShareChange($event)\" />\n <div class=\"adf-share-link__label adf-sharable-link\">{{ 'SHARE.SHARABLE-LINK-CREATED' | translate }}\n </div>\n </div>\n <mat-form-field\n subscriptSizing=\"dynamic\"\n floatLabel=\"always\"\n class=\"adf-full-width adf-share-link__form--field\"\n data-automation-id=\"adf-content-share-public-link-field\"\n [ngClass]=\"isLinkWithExpiryDate? 'adf-share-link__border-color' : ''\">\n <input\n #sharedLinkInput\n data-automation-id=\"adf-share-link\"\n class=\"adf-share-link__input\"\n matInput\n placeholder=\"{{ 'SHARE.PUBLIC-LINK' | translate }}\"\n [attr.aria-label]=\"'SHARE.PUBLIC-LINK' | translate\"\n formControlName=\"sharedUrl\"\n readonly=\"readonly\">\n <mat-icon\n class=\"adf-input-action adf-share-link__icon adf-share-link__copy-icon\"\n role=\"button\"\n matSuffix\n [clipboard-notification]=\"'SHARE.CLIPBOARD-MESSAGE' | translate\"\n [adf-clipboard]\n [attr.aria-label]=\"'SHARE.COPY_BUTTON_LABEL' | translate\"\n [target]=\"sharedLinkInput\"\n tabindex=\"0\">\n content_copy\n </mat-icon>\n </mat-form-field>\n <p class=\"adf-share-link__warn adf-share-link__para\" *ngIf=\"isLinkWithExpiryDate\">\n {{ 'SHARE.LINK-WITH-EXPIRY-SETTINGS' | translate }}\n </p>\n <div class=\"adf-share-link--row\">\n <mat-icon class=\"adf-share-link__icon\">public</mat-icon>\n <p\n class=\"adf-share-link__info adf-sharable-link adf-share-link__public-content adf-share-link__para\">\n {{ 'SHARE.PUBLIC-CONTENT' | translate }}\n </p>\n </div>\n </form>\n <hr class=\"adf-share-link__separation-line\" />\n </mat-dialog-content>\n <div class=\"adf-share-link__actions\" mat-dialog-actions>\n <button data-automation-id=\"adf-share-dialog-close\" mat-button color=\"primary\" mat-dialog-close>\n {{ 'SHARE.CLOSE' | translate }}\n </button>\n </div>\n </div>\n</div>\n", styles: [".adf-share-link-dialog .adf-share-link .mat-mdc-form-field-flex{height:48px}.adf-share-link-dialog .adf-share-link__dialog-content{display:flex;flex-direction:column}.adf-share-link-dialog .adf-share-link__dialog-container{background-color:var(--theme-card-background-color);border-radius:16px}.adf-share-link-dialog .adf-share-link__label,.adf-share-link-dialog .adf-share-link__title,.adf-share-link-dialog .adf-share-link__info{letter-spacing:-.4px;line-height:2;font-weight:400;font-style:normal;font-stretch:normal;font-size:var(--theme-body-1-font-size);color:var(--adf-theme-foreground-text-color-087)}.adf-share-link-dialog .adf-share-link__label{flex:1 1 auto}.adf-share-link-dialog .adf-share-link__form{padding-top:8px}.adf-share-link-dialog .adf-share-link__form .mat-mdc-form-field-infix:has(.adf-share-link__input){border-top:.9375em solid transparent;border-bottom:.9375em solid transparent;height:16px}.adf-share-link-dialog .adf-share-link__form--field{padding-bottom:16px}.adf-share-link-dialog .adf-share-link__public-content{color:var(--adf-theme-foreground-text-color-054);font-size:var(--theme-caption-font-size)}.adf-share-link-dialog .adf-share-link__warn{color:var(--theme-warn-color-a700);font-size:var(--theme-caption-font-size)}.adf-share-link-dialog .adf-share-link--row{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:8px 0}.adf-share-link-dialog .adf-share-link--row-sharable,.adf-share-link-dialog .adf-share-link--sharable-container{margin-bottom:0}.adf-share-link-dialog .adf-share-link--header{padding:16px 24px 0}.adf-share-link-dialog .adf-share-link--dialog-content{padding-top:0;padding-bottom:0}.adf-share-link-dialog .adf-share-link__input{color:var(--adf-theme-foreground-text-color-087)}.adf-share-link-dialog .adf-share-link__separation-line{border:1px solid var(--theme-grey-background-color);margin:8px -24px}.adf-share-link-dialog .adf-share-link__close{cursor:pointer;margin-left:12px}.adf-share-link-dialog .adf-share-link__icon{color:var(--adf-theme-foreground-icon-color-054);padding-bottom:0;padding-right:0}.adf-share-link-dialog .adf-share-link__para{margin-top:8px;margin-bottom:8px}.adf-share-link-dialog .adf-share-link__heading{font-weight:700;font-size:var(--theme-subheading-2-font-size)}.adf-share-link-dialog .adf-share-link__copy-icon{padding-top:18px;font-size:22px}.adf-share-link-dialog .adf-share-link__calender-icon{top:12px;position:relative;right:-6px}.adf-share-link-dialog .adf-share-link__calender-icon svg{height:18px;width:18px}.adf-share-link-dialog .adf-share-link__date-time-container{padding-bottom:20px}.adf-share-link-dialog .adf-share-link__border-color{border:1px solid var(--theme-warn-color-a700)}.adf-share-link-dialog .adf-input-action{cursor:pointer}.adf-share-link-dialog .adf-full-width{width:100%;border-radius:6px;margin-top:-6px}.adf-share-link-dialog .adf-sharable-link{margin-top:2px;margin-left:8px}.adf-share-link-dialog .adf-share-link__actions{justify-content:flex-end;padding:8px 24px 32px 0;margin:8px 0 0}.adf-share-link-dialog .adf-share-link__actions>button{color:var(--adf-theme-foreground-base-color);background-color:var(--theme-grey-text-background-color);margin-right:12px}\n"] }] }], ctorParameters: () => [{ type: i1.SharedLinksApiService }, { type: i2.MatDialogRef }, { type: i2.MatDialog }, { type: i3.ContentService }, { type: i4.RenditionService }, { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA] }] }], propDecorators: { slideToggleExpirationDate: [{ type: ViewChild, args: ['slideToggleExpirationDate', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNoYXJlLmRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNoYXJlL2NvbnRlbnQtbm9kZS1zaGFyZS5kaWFsb2cudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2NvbnRlbnQtbm9kZS1zaGFyZS9jb250ZW50LW5vZGUtc2hhcmUuZGlhbG9nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRyxPQUFPLEVBQXdCLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9B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LE1BQU07MkJBQUMsZUFBZTt5Q0FQM0IseUJBQXlCO3NCQUR4QixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREa