"use client"; import { BookOpen, Check, Globe, Languages, List, MessageSquare, Minimize2, PenLine, Search, } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import { DEFAULT_ACTIONS } from "./actions"; const ICONS: Record = { check: , minimize: , languages: , "pen-line": , "book-open": , list: , search: , globe: , }; export default function QuickAskPage() { const [clipboardText, setClipboardText] = useState(""); const [searchQuery, setSearchQuery] = useState(""); useEffect(() => { window.electronAPI?.getQuickAskText().then((text) => { if (text) setClipboardText(text); }); }, []); const navigateToChat = (prompt: string, mode: string) => { sessionStorage.setItem("quickAskMode", mode); sessionStorage.setItem("quickAskAutoSubmit", "true"); const encoded = encodeURIComponent(prompt); window.location.href = `/dashboard?quickAskPrompt=${encoded}`; }; const navigateWithInitialText = () => { if (!clipboardText) return; sessionStorage.setItem("quickAskMode", "explore"); sessionStorage.setItem("quickAskAutoSubmit", "false"); sessionStorage.setItem("quickAskInitialText", clipboardText); window.location.href = `/dashboard?quickAskPrompt=${encodeURIComponent(clipboardText)}`; }; const handleAction = (actionId: string) => { const action = DEFAULT_ACTIONS.find((a) => a.id === actionId); if (!action || !clipboardText) return; const prompt = action.prompt.replace("{selection}", clipboardText); navigateToChat(prompt, action.mode); }; const transformActions = DEFAULT_ACTIONS.filter((a) => a.group === "transform"); const exploreActions = DEFAULT_ACTIONS.filter((a) => a.group === "explore"); const filteredTransform = useMemo( () => transformActions.filter((a) => a.name.toLowerCase().includes(searchQuery.toLowerCase())), [searchQuery] ); const filteredExplore = useMemo( () => exploreActions.filter((a) => a.name.toLowerCase().includes(searchQuery.toLowerCase())), [searchQuery] ); if (!clipboardText) { return (
Loading...
); } return (
setSearchQuery(e.target.value)} className="flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground" />
{filteredTransform.length > 0 && ( <>
Transform
{filteredTransform.map((action) => ( ))}
)} {filteredExplore.length > 0 && ( <>
Explore
{filteredExplore.map((action) => ( ))}
)}
My Actions
Custom actions coming soon
); }