Skip to main content
Glama

Storyden

by Southclaws
Mozilla Public License 2.0
229
useCollectionMenu.ts1.78 kB
"use client"; import { useCopyToClipboard } from "@uidotdev/usehooks"; import { useRouter } from "next/navigation"; import { Account, Collection } from "src/api/openapi-schema"; import { handle } from "@/api/client"; import { useSession } from "@/auth"; import { useConfirmation } from "@/components/site/useConfirmation"; import { useCollectionMutations } from "@/lib/collection/mutation"; import { canDeleteCollection, canEditCollection, } from "@/lib/collection/permissions"; import { useFeedMutations } from "@/lib/feed/mutation"; import { useShare } from "@/utils/client"; export type Props = { session?: Account; collection: Collection; }; export function useCollectionMenu({ session, collection }: Props) { const router = useRouter(); const account = useSession(); const [, copyToClipboard] = useCopyToClipboard(); const { deleteCollection, revalidate } = useCollectionMutations(session); const isSharingEnabled = useShare(); const isEditingEnabled = canEditCollection(collection, account); const isDeletingEnabled = canDeleteCollection(collection, account); const permalink = `/c/${collection.slug}`; async function handleCopyLink() { copyToClipboard(permalink); } async function handleShare() { await navigator.share({ title: `A collection by ${collection.owner.name}`, url: permalink, text: collection.description, }); } async function handleDelete() { await handle( async () => { await deleteCollection(collection.id); }, { cleanup: async () => await revalidate(), }, ); } return { isSharingEnabled, isEditingEnabled, isDeletingEnabled, handlers: { handleCopyLink, handleShare, handleDelete, }, }; }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Southclaws/storyden'

If you have feedback or need assistance with the MCP directory API, please join our Discord server