import { Form, Input, SubmitButton } from '../components/form' import { useRouter } from 'next/router' import * as Yup from 'yup' import { gql, useLazyQuery, useMutation } from '@apollo/client' import { ensureProtocol } from '../lib/url' import ActionTooltip from '../components/action-tooltip' import Countdown from './countdown' import AdvPostForm, { AdvPostInitial, AdvPostSchema } from './adv-post-form' import { ITEM_FIELDS } from '../fragments/items' import Item from './item' import AccordianItem from './accordian-item' export const LinkSchema = Yup.object({ title: Yup.string().required('required').trim(), url: Yup.string().test({ name: 'url', test: (value) => { try { value = ensureProtocol(value) const valid = new URL(value) return Boolean(valid) } catch { return false } }, message: 'invalid url' }).required('required'), ...AdvPostSchema }) export function LinkForm ({ item, editThreshold }) { const router = useRouter() const [getPageTitle, { data }] = useLazyQuery(gql` query PageTitle($url: String!) { pageTitle(url: $url) }`, { fetchPolicy: 'network-only' }) const [getDupes, { data: dupesData }] = useLazyQuery(gql` ${ITEM_FIELDS} query Dupes($url: String!) { dupes(url: $url) { ...ItemFields } }`, { fetchPolicy: 'network-only' }) const [createLink] = useMutation( gql` mutation createLink($title: String!, $url: String!, $boost: Int) { createLink(title: $title, url: $url, boost: $boost) { id } }` ) const [updateLink] = useMutation( gql` mutation updateLink($id: ID!, $title: String!, $url: String!) { updateLink(id: $id, title: $title, url: $url) { id title url } }`, { update (cache, { data: { updateLink } }) { cache.modify({ id: `Item:${item.id}`, fields: { title () { return updateLink.title }, url () { return updateLink.url } } }) } } ) return (
) }