Files
print-calculator/frontend/src/app/shared/directives/copy-on-click.directive.ts
Joe Küng 767b65008b
All checks were successful
PR Checks / prettier-autofix (pull_request) Successful in 18s
PR Checks / security-sast (pull_request) Successful in 33s
PR Checks / test-backend (pull_request) Successful in 27s
PR Checks / test-frontend (pull_request) Successful in 1m8s
feat(back-end and front-end) email for request
2026-03-04 12:15:23 +01:00

46 lines
1.1 KiB
TypeScript

import { Directive, HostBinding, HostListener, Input } from '@angular/core';
@Directive({
selector: '[appCopyOnClick]',
standalone: true,
})
export class CopyOnClickDirective {
@Input('appCopyOnClick') value: string | null | undefined;
@HostBinding('style.cursor') readonly cursor = 'pointer';
@HostListener('click', ['$event'])
onClick(event: MouseEvent): void {
const text = (this.value ?? '').trim();
if (!text) {
return;
}
event.stopPropagation();
void this.copy(text);
}
private async copy(text: string): Promise<void> {
if (navigator.clipboard?.writeText) {
try {
await navigator.clipboard.writeText(text);
return;
} catch {
// Fallback below for browsers/environments that block clipboard API.
}
}
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
try {
document.execCommand('copy');
} finally {
document.body.removeChild(textarea);
}
}
}