import { IconButton, Modal, ModalBody, ModalCloseButton, ModalContent, ModalOverlay, Popover, PopoverArrow, PopoverBody, PopoverCloseButton, PopoverContent, PopoverTrigger, } from '@chakra-ui/react'; import { forwardRef } from 'react'; import { useFormContext } from 'react-hook-form'; import { Else, If, Then } from 'react-if'; import { ResolvedTarget } from '~/components'; import { DynamicIcon } from '~/elements'; import { useFormState, useMobile } from '~/hooks'; import type { IconButtonProps } from '@chakra-ui/react'; type SubmitButtonProps = Omit; interface ResponsiveSubmitButtonProps { isOpen: boolean; onClose(): void; children: React.ReactNode; } const _SubmitIcon: React.ForwardRefRenderFunction< HTMLButtonElement, Omit > = (props: Omit, ref) => { const { isLoading, ...rest } = props; return ( } title="Submit Query" variant="solid" colorScheme="brand" isLoading={isLoading} aria-label="Submit Query" {...rest} /> ); }; const SubmitIcon = forwardRef>(_SubmitIcon); /** * Mobile Submit Button */ const MSubmitButton = (props: ResponsiveSubmitButtonProps): JSX.Element => { const { children, isOpen, onClose } = props; return ( <> {children} {isOpen && } ); }; /** * Desktop Submit Button */ const DSubmitButton = (props: ResponsiveSubmitButtonProps): JSX.Element => { const { children, isOpen, onClose } = props; return ( {children} {isOpen && } ); }; export const SubmitButton = (props: SubmitButtonProps): JSX.Element => { const isMobile = useMobile(); const loading = useFormState(s => s.loading); const { resolvedIsOpen, resolvedClose, reset: resetForm, } = useFormState(({ resolvedIsOpen, resolvedClose, reset }) => ({ resolvedIsOpen, resolvedClose, reset, })); const { reset } = useFormContext(); async function handleClose() { reset(); resetForm(); resolvedClose(); } return ( ); };