Files
mutiny-web/src/utils/useCopy.ts
2023-07-28 14:47:58 -05:00

30 lines
1010 B
TypeScript

// Thanks you https://soorria.com/snippets/use-copy-solidjs
import type { Accessor } from "solid-js";
import { createSignal } from "solid-js";
import { Clipboard } from "@capacitor/clipboard";
import { Capacitor } from "@capacitor/core";
export type UseCopyProps = {
copiedTimeout?: number;
};
type CopyFn = (text: string) => Promise<void>;
export const useCopy = ({ copiedTimeout = 2000 }: UseCopyProps = {}): [
copy: CopyFn,
copied: Accessor<boolean>
] => {
const [copied, setCopied] = createSignal(false);
let timeout: ReturnType<typeof setTimeout> | undefined;
const copy: CopyFn = async (text) => {
if (Capacitor.isNativePlatform()) {
await Clipboard.write({
string: text
});
} else {
await navigator.clipboard.writeText(text);
}
setCopied(true);
if (timeout) clearTimeout(timeout);
timeout = setTimeout(() => setCopied(false), copiedTimeout);
};
return [copy, copied];
};