-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSaveFile.tsx
More file actions
44 lines (35 loc) · 1.07 KB
/
SaveFile.tsx
File metadata and controls
44 lines (35 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
'use client';
import { ReactElement, useState } from 'react';
import styles from './save-file.module.scss';
type SaveFileProps = {
content: string;
};
const SaveFile = ({ content }: SaveFileProps): ReactElement => {
const [isCopied, setCopied] = useState(false);
const copyToClipboard = (): void => {
setCopied(true);
navigator.clipboard.writeText(content);
setTimeout(() => setCopied(false), 1000);
};
const download = (): void => {
const blob = new Blob([content], { type: 'text/x-shellscript' });
const elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = 'Taskfile';
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
};
return (
<div className={styles.container}>
<button type="button" className={styles.download} onClick={download} title="Download Taskfile" />
<button
type="button"
className={`${styles.copy} ${isCopied && styles.copied}`}
onClick={copyToClipboard}
title="Copy Taskfile content"
/>
</div>
);
};
export default SaveFile;