mirror of
https://github.com/aljazceru/mutiny-web.git
synced 2025-12-28 11:24:28 +01:00
30 lines
1010 B
TypeScript
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];
|
|
};
|