1import * as Dialog from "../../components/ui/Dialog";
2import { buildNewThreadLink, type LinkedPrompt } from "@t3tools/shared/promptLinks";
3
4import { tryCopyTextWithHaptic } from "../../lib/copyTextWithHaptic";
5import {
6 getComposerDraftSnapshot,
7 setComposerDraftText,
8 waitForComposerDraftsLoaded,
9} from "../../state/use-composer-drafts";
10import { linkedThreadDraftAction } from "./prompt-link-model";
11
12export function showPromptLinkNotice(notice: string): void {
13 Dialog.alert("Prompt from a link", notice);
14}
15
16export async function applyLinkedPromptToThreadDraft(
17 draftKey: string,
18 prompt: LinkedPrompt,
19 notice: string,
20): Promise<void> {
21 try {
22 await waitForComposerDraftsLoaded();
23 } catch {
24 Dialog.alert("Could not open link", "Drafts could not be loaded, so the prompt was not added.");
25 return;
26 }
27 const action = linkedThreadDraftAction(getComposerDraftSnapshot(draftKey).text, prompt.text);
28 if (action !== "ask") {
29 if (action === "fill") setComposerDraftText(draftKey, prompt.text);
30 showPromptLinkNotice(notice);
31 return;
32 }
33 Dialog.alert("Linked prompt ready. Replace draft?", notice, [
34 { text: "Keep mine", style: "cancel" },
35 { text: "Replace", onPress: () => setComposerDraftText(draftKey, prompt.text) },
36 ]);
37}
38
39export async function copyPromptLink(prompt: string): Promise<void> {
40 if (!(await tryCopyTextWithHaptic(buildNewThreadLink({ prompt }), { target: "prompt link" }))) {
41 Dialog.alert("Could not copy", "Try again.");
42 }
43}