@progress/kendo-angular-spreadsheet
Version:
A Spreadsheet Component for Angular
98 lines (97 loc) • 5.01 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { Directive } from '@angular/core';
import { take } from 'rxjs/operators';
import { isPresent } from '@progress/kendo-angular-common';
import { DialogService } from '@progress/kendo-angular-dialog';
import { ToolBarButtonComponent } from '@progress/kendo-angular-toolbar';
import { SpreadsheetLocalizationService } from '../../localization/spreadsheet-localization.service';
import { SpreadsheetService } from '../../common/spreadsheet.service';
import { SpreadsheetToolsService } from '../tools.service';
import { SpreadsheetCommandButton } from '../shared/spreadsheet-command-button';
import { InsertLinkDialogComponent } from './insert-link-dialog.component';
import * as i0 from "@angular/core";
import * as i1 from "@progress/kendo-angular-toolbar";
import * as i2 from "../../localization/spreadsheet-localization.service";
import * as i3 from "../../common/spreadsheet.service";
import * as i4 from "../tools.service";
import * as i5 from "@progress/kendo-angular-dialog";
/**
* @hidden
*/
export class SpreadsheetInsertLinkDirective extends SpreadsheetCommandButton {
dialogService;
currentRange;
constructor(button, localization, spreadsheetService, toolsService, dialogService) {
super('insertLink', button, localization, spreadsheetService, toolsService, {
command: 'HyperlinkCommand'
});
this.dialogService = dialogService;
this.subs.add(spreadsheetService.selectionChanged.subscribe(range => this.currentRange = range));
}
ngOnDestroy() {
this.subs.unsubscribe();
}
clickHandler() {
const sheet = this.spreadsheetService.spreadsheet.activeSheet();
if (sheet) {
this.openDialog();
}
}
/**
* @hidden
*/
openDialog() {
const hasLink = isPresent(this.currentRange?.link());
const dialogSettings = {
appendTo: this.spreadsheetService.dialogContainer,
title: this.localization.get(this.command),
content: InsertLinkDialogComponent,
actions: [{
text: this.localization.get('dialogInsert'),
themeColor: 'primary'
}, {
text: this.localization.get('dialogCancel')
},
'spacer', {
text: this.localization.get('dialogRemoveLink'),
themeColor: 'primary',
fillMode: 'clear',
cssClass: hasLink ? '' : 'k-disabled'
}],
actionsLayout: 'start',
width: 400,
autoFocusedElement: '.k-textbox > .k-input-inner'
};
const dialog = this.dialogService.open(dialogSettings);
const dialogInstance = dialog.dialog.instance;
const dialogContent = dialog.content.instance;
if (hasLink) {
dialogContent.setData({ link: this.currentRange?.link() });
}
dialogInstance.action.pipe(take(1)).subscribe((event) => {
if (event.text === this.localization.get('dialogCancel')) {
return;
}
let link = null;
if (event.text === this.localization.get('dialogInsert')) {
link = dialogContent.urlLink || null;
}
this.spreadsheetService.spreadsheet.executeCommand({
command: 'HyperlinkCommand',
options: { link }
});
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpreadsheetInsertLinkDirective, deps: [{ token: i1.ToolBarButtonComponent }, { token: i2.SpreadsheetLocalizationService }, { token: i3.SpreadsheetService }, { token: i4.SpreadsheetToolsService }, { token: i5.DialogService }], target: i0.ɵɵFactoryTarget.Directive });
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SpreadsheetInsertLinkDirective, isStandalone: true, selector: "kendo-toolbar-button[kendoSpreadsheetInsertLink]", usesInheritance: true, ngImport: i0 });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SpreadsheetInsertLinkDirective, decorators: [{
type: Directive,
args: [{
selector: 'kendo-toolbar-button[kendoSpreadsheetInsertLink]',
standalone: true
}]
}], ctorParameters: function () { return [{ type: i1.ToolBarButtonComponent }, { type: i2.SpreadsheetLocalizationService }, { type: i3.SpreadsheetService }, { type: i4.SpreadsheetToolsService }, { type: i5.DialogService }]; } });