import { commands } from "@/commands.gen"; import { cn } from "@/commons"; import { Spinner } from "@/components"; import { Plus, X } from "@phosphor-icons/react"; import * as ScrollArea from "@radix-ui/react-scroll-area"; import { createLazyFileRoute } from "@tanstack/react-router"; import { getCurrentWindow } from "@tauri-apps/api/window"; import { message } from "@tauri-apps/plugin-dialog"; import { useState, useTransition } from "react"; const TOPICS = [ { title: "Popular hashtags", content: [ "#nostr", "#introductions", "#grownostr", "#zap", "#meme", "#asknostr", "#bitcoin", ], }, ]; export const Route = createLazyFileRoute("/$id/set-interest")({ component: Screen, }); function Screen() { const [title, setTitle] = useState(""); const [hashtag, setHashtag] = useState(""); const [hashtags, setHashtags] = useState([]); const [isPending, startTransition] = useTransition(); const { id } = Route.useParams(); const { queryClient } = Route.useRouteContext(); const toggleHashtag = (tag: string) => { setHashtags((prev) => prev.includes(tag) ? prev.filter((i) => i !== tag) : [...prev, tag], ); }; const addHashtag = () => { if (!hashtag.startsWith("#")) return; if (hashtags.includes(hashtag)) return; setHashtags((prev) => [...prev, hashtag]); setHashtag(""); }; const submit = () => { startTransition(async () => { const signer = await commands.hasSigner(id); if (signer.status === "ok") { if (!signer.data) { const res = await commands.setSigner(id); if (res.status === "error") { await message(res.error, { kind: "error" }); return; } } } else { await message(signer.error, { kind: "error" }); return; } const content = hashtags.map((tag) => tag.toLowerCase().replace(" ", "-").replace("#", ""), ); const res = await commands.setInterest(title, null, null, content); if (res.status === "ok") { const window = getCurrentWindow(); // Invalidate cache await queryClient.invalidateQueries({ queryKey: ["interests", id], }); // Create column in the main window await window.emitTo("main", "columns", { type: "add", column: { label: res.data, name: title, account: id, url: `/columns/interests/${res.data}`, }, }); // Close current popup await window.close(); } else { await message(res.error, { kind: "error" }); return; } }); }; return (
setTitle(e.target.value)} placeholder="anime, sport, art,..." className="h-full px-3 text-sm bg-transparent border-none placeholder:text-neutral-600 focus:border-neutral-500 focus:ring-0 dark:placeholder:text-neutral-400" />
Added
setHashtag(e.target.value)} onKeyDown={(event) => { if (event.key === "Enter") addHashtag(); }} className="w-full px-3 text-sm border-none rounded-lg h-9 bg-neutral-100 dark:bg-neutral-900 placeholder:text-neutral-600 focus:border-neutral-500 focus:ring-0 dark:placeholder:text-neutral-400" />
{hashtags.length ? ( hashtags.map((item: string) => ( )) ) : (
Please add some hashtag.
)}
{TOPICS.map((topic) => (
{topic.title}
{topic.content.map((item) => ( ))}
))}
); }