Skip to content
Source
Sign inSign up

copyThreadReference.ts

34 lines1.1 KB

1import type { ThreadReferenceCopyTarget } from "@t3tools/client-runtime/thread-reference";
2import {
3 COMPOSER_CONTEXT_CLIPBOARD_MIME,
4 encodeComposerContextFragment,
5} from "@t3tools/shared/composerContextClipboard";
6​
7import { stackedThreadToast, toastManager } from "../components/ui/toast";
8import { writeTextToClipboard } from "../hooks/useCopyToClipboard";
9​
10export async function copyThreadReference(target: ThreadReferenceCopyTarget): Promise<void> {
11 const fragment = target.fragment ? encodeComposerContextFragment(target.fragment) : null;
12 try {
13 const didCopy = await writeTextToClipboard(
14 target.value,
15 target.clipboardTarget,
16 fragment ? { [COMPOSER_CONTEXT_CLIPBOARD_MIME]: fragment } : undefined,
17 );
18 if (!didCopy) return;
19 toastManager.add({
20 type: "success",
21 title: target.successTitle,
22 description: target.description,
23 });
24 } catch (error) {
25 console.error(error);
26 toastManager.add(
27 stackedThreadToast({
28 type: "error",
29 title: target.failureTitle,
30 description: error instanceof Error ? error.message : "An error occurred.",
31 }),
32 );
33 }