From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Sun, 7 Apr 2024 19:32:43 +0200
Subject: Adding upstream version 1:115.7.0.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 .../components/ASRouterAdmin/CopyButton.jsx        | 31 ++++++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 browser/components/newtab/content-src/components/ASRouterAdmin/CopyButton.jsx

(limited to 'browser/components/newtab/content-src/components/ASRouterAdmin/CopyButton.jsx')

diff --git a/browser/components/newtab/content-src/components/ASRouterAdmin/CopyButton.jsx b/browser/components/newtab/content-src/components/ASRouterAdmin/CopyButton.jsx
new file mode 100644
index 0000000000..07ce12d7bf
--- /dev/null
+++ b/browser/components/newtab/content-src/components/ASRouterAdmin/CopyButton.jsx
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import React, { useState, useRef, useCallback } from "react";
+
+export const CopyButton = ({
+  className,
+  label,
+  copiedLabel,
+  inputSelector,
+  transformer,
+  ...props
+}) => {
+  const [copied, setCopied] = useState(false);
+  const timeout = useRef(null);
+  const onClick = useCallback(() => {
+    let text = document.querySelector(inputSelector).value;
+    if (transformer) text = transformer(text);
+    navigator.clipboard.writeText(text);
+
+    clearTimeout(timeout.current);
+    setCopied(true);
+    timeout.current = setTimeout(() => setCopied(false), 1500);
+  }, [inputSelector, transformer]);
+  return (
+    <button className={className} onClick={e => onClick()} {...props}>
+      {(copied && copiedLabel) || label}
+    </button>
+  );
+};
-- 
cgit v1.2.3

