import React, { useState } from 'react' import { type SelectionPosition } from '../../types' import { LinkModal } from '../LinkModal' import { LinkPopover } from '../LinkPopover' export type LinkEditorAttrs = { href: string | null _metadata: Record | null } export type LinkEditorProps = { removeMark: () => void updateAttrs: ({ href }: LinkEditorAttrs) => void attrs: LinkEditorAttrs selectionPosition: SelectionPosition focusEditor: () => void } export const LinkEditor = ({ attrs, removeMark, updateAttrs, selectionPosition, focusEditor, }: LinkEditorProps): JSX.Element => { const [isPopoverOpen, setIsPopoverOpen] = useState(attrs.href != null) const [modalOpen, setModalOpen] = useState(attrs._metadata?.added === true) const [href, setHref] = useState(attrs.href ?? undefined) return ( <> {isPopoverOpen && ( { removeMark() focusEditor() }} onEdit={() => { setIsPopoverOpen(false) setModalOpen(true) }} /> )} { setHref(submittedHref) updateAttrs({ href: submittedHref, _metadata: null }) setModalOpen(false) }} onDismiss={() => { setModalOpen(false) if (href) { setIsPopoverOpen(true) } else { removeMark() } }} /> ) } LinkEditor.displayName = 'LinkEditor'