@@ -1,9 +1,9 @@
1−import React, { useCallback, useEffect, useRef, useState } from 'react';
1+import React from 'react';
2−import { LinkButton } from 'indigo-react';
3import cn from 'classnames';
2import cn from 'classnames';
4−import copy from 'copy-to-clipboard';
3+import { LinkButton } from 'indigo-react';
5+import useCopiable from 'lib/useCopiable';
6−const COPY_DELAY = 2 * 1000; // ms
7const renderDefaultCopyText = didCopy => (didCopy ? 'Copied!' : 'Copy');
7const renderDefaultCopyText = didCopy => (didCopy ? 'Copied!' : 'Copy');
9export default function CopyButton({
9export default function CopyButton({
@@ -13,20 +13,7 @@ export default function CopyButton({
13 className,
13 className,
16− const [didCopy, setDidCopy] = useState(false);
16+ const [doCopy, didCopy] = useCopiable(text);
18− // what we really want here is a useDebouncedCallback from use-debounced
19− // but that's a relatively large dep for a single simple usage so ¯\_(ツ)_/¯
20− const listener = useRef(); // <NodeJS.Listener>
21− useEffect(() => () => clearTimeout(listener.current), []);
23− const doCopy = useCallback(() => {
27− clearTimeout(listener.current);
28− listener.current = setTimeout(() => setDidCopy(false), COPY_DELAY);