import { cookieJarsAtom, patchModel } from '@yaakapp-internal/models'; import { useAtomValue } from 'jotai'; import { memo, useMemo } from 'react'; import { useActiveCookieJar } from '../hooks/useActiveCookieJar'; import { useCreateCookieJar } from '../hooks/useCreateCookieJar'; import { deleteModelWithConfirm } from '../lib/deleteModelWithConfirm'; import { showDialog } from '../lib/dialog'; import { showPrompt } from '../lib/prompt'; import { setWorkspaceSearchParams } from '../lib/setWorkspaceSearchParams'; import { CookieDialog } from './CookieDialog'; import { Dropdown, type DropdownItem } from './core/Dropdown'; import { Icon } from './core/Icon'; import { IconButton } from './core/IconButton'; import { InlineCode } from './core/InlineCode'; export const CookieDropdown = memo(function CookieDropdown() { const activeCookieJar = useActiveCookieJar(); const createCookieJar = useCreateCookieJar(); const cookieJars = useAtomValue(cookieJarsAtom); const items = useMemo((): DropdownItem[] => { return [ ...(cookieJars ?? []).map((j) => ({ key: j.id, label: j.name, leftSlot: , onSelect: () => { setWorkspaceSearchParams({ cookie_jar_id: j.id }); }, })), ...(((cookieJars ?? []).length > 0 && activeCookieJar != null ? [ { type: 'separator', label: activeCookieJar.name }, { key: 'manage', label: 'Manage Cookies', leftSlot: , onSelect: () => { if (activeCookieJar == null) return; showDialog({ id: 'cookies', title: 'Manage Cookies', size: 'full', render: () => , }); }, }, { key: 'rename', label: 'Rename', leftSlot: , onSelect: async () => { const name = await showPrompt({ id: 'rename-cookie-jar', title: 'Rename Cookie Jar', description: ( <> Enter a new name for {activeCookieJar?.name} ), label: 'Name', confirmText: 'Save', placeholder: 'New name', defaultValue: activeCookieJar?.name, }); if (name == null) return; await patchModel(activeCookieJar, { name }); }, }, ...(((cookieJars ?? []).length > 1 // Never delete the last one ? [ { label: 'Delete', leftSlot: , color: 'danger', onSelect: async () => { await deleteModelWithConfirm(activeCookieJar); }, }, ] : []) as DropdownItem[]), ] : []) as DropdownItem[]), { type: 'separator' }, { key: 'create-cookie-jar', label: 'New Cookie Jar', leftSlot: , onSelect: () => createCookieJar.mutate(), }, ]; }, [activeCookieJar, cookieJars, createCookieJar]); return ( ); });